Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43248
Benutzer: 7.220
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 9 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 444
Gesamt: 445
Team: 0
Team:  
Benutzer:  murkel
Freunde anzeigen

Empfehlungen

Like Tree31Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #131 (permalink)  
Alt 21.05.16
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Häh? Sorry, versteh ich Alles nicht. Noch dazu wo wie gesagt rechts Teile von Postings fehlen.
Angehängte Dateien
Dateityp: mq4 Valerius_CCI_Ichimoku_EA_Metatrader4.mq4 (5,6 KB, 38x aufgerufen)
  #132 (permalink)  
Alt 22.05.16
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Hallo.

Muss statt "CCIPeriod" im EA "InpCCIPeriod" eingetragen werden?

CCI Quellcode
Code:
//+------------------------------------------------------------------+
//|                                                          CCI.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Commodity Channel Index"
#property strict

#include <MovingAverages.mqh>

#property indicator_separate_window
#property indicator_buffers    1
#property indicator_color1     LightSeaGreen
#property indicator_level1    -100.0//im EA ein getragen
#property indicator_level2     100.0//im EA ein getragen
#property indicator_levelcolor clrSilver
#property indicator_levelstyle STYLE_DOT
//--- input parameter
input int InpCCIPeriod=14; // ?
//--- buffers
double ExtCCIBuffer[];
double ExtPriceBuffer[];
double ExtMovBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
// ???
int OnInit(void)
  {
   string short_name;
//--- 2 additional buffers are used for counting.
   IndicatorBuffers(3);
   SetIndexBuffer(1,ExtPriceBuffer);
   SetIndexBuffer(2,ExtMovBuffer);
//--- indicator line
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtCCIBuffer);
//--- check for input parameter
// ???
//-------------------------------------------------------------------------------------------------------------

   if(InpCCIPeriod<=1) // ?
     {
      Print("Wrong input parameter CCI Period=",InpCCIPeriod); // ?
      return(INIT_FAILED);
     }//im EA eingetragen
//-------------------------------------------------------------------------------------------------------------

//---
   SetIndexDrawBegin(0,InpCCIPeriod); // ?
//--- name for DataWindow and indicator subwindow label
   short_name="CCI("+IntegerToString(InpCCIPeriod)+")"; // ?
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//--- initialization done
   return(INIT_SUCCEEDED);
  }
//-------------------------------------------------------------------------------------------------------------

//+------------------------------------------------------------------+
//| Commodity Channel Index                                          |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int    i,k,pos;
   double dSum,dMul;
//---
   if(rates_total<=InpCCIPeriod || InpCCIPeriod<=1) // ?
      return(0);
//--- counting from 0 to rates_total
   ArraySetAsSeries(ExtCCIBuffer,false);
   ArraySetAsSeries(ExtPriceBuffer,false);
   ArraySetAsSeries(ExtMovBuffer,false);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
   ArraySetAsSeries(close,false);
//--- initial zero
   if(prev_calculated<1)
     {
      for(i=0; i<InpCCIPeriod; i++) // ?
        {
         ExtCCIBuffer[i]=0.0;
         ExtPriceBuffer[i]=(high[i]+low[i]+close[i])/3;
         ExtMovBuffer[i]=0.0;
        }
     }
//--- calculate position
   pos=prev_calculated-1;
   if(pos<InpCCIPeriod) // ?
      pos=InpCCIPeriod; // ?

//--- typical price and its moving average
   for(i=pos; i<rates_total; i++)
     {
      ExtPriceBuffer[i]=(high[i]+low[i]+close[i])/3;
      ExtMovBuffer[i]=SimpleMA(i,InpCCIPeriod,ExtPriceBuffer); // ? 
     }

//--- standard deviations and cci counting
   dMul=0.015/InpCCIPeriod; // ?
   pos=InpCCIPeriod-1; // ?
   if(pos<prev_calculated-1)
      pos=prev_calculated-2;
   i=pos;
   while(i<rates_total)
     {
      dSum=0.0;
      k=i+1-InpCCIPeriod; // ?
      while(k<=i)
        {
         dSum+=MathAbs(ExtPriceBuffer[k]-ExtMovBuffer[i]);
         k++;
        }
      dSum*=dMul;
      if(dSum==0.0)
         ExtCCIBuffer[i]=0.0;
      else
         ExtCCIBuffer[i]=(ExtPriceBuffer[i]-ExtMovBuffer[i])/dSum;
      i++;
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
CCI-ichimoku EA
Code:
#property copyright "Valerius_CCI_Ichimoku_EA_Metatrader4.mq4"
int MagicNumber = 541371052;
string Name = "Valerius_CCI_Ichimoku_EA_Metatrader4";
//-------------------------------------------------------------------------------------------------------------

//Globale Variablen
//Open Time
extern string Open_Orders_From = "07:00:00";
extern string Open_Orders_Till = "20:15:00";
extern int TimeFrame = 60;
extern string TimeFrames = "Current:0;M1:1; M5:5; M15:15; M30:30; H1:60; H4:240; D1:1440";
//-------------------------------------------------------------------------------------------------------------

//Close Time
extern string Close_all_Orders = "true=Yes/false=No";
extern bool Close_all_Orders_after_Time_O_Clock = true;
extern string Close_all_Orders_after = "20:40:00";
//-------------------------------------------------------------------------------------------------------------

//Sonstige GV
extern double Lots = 0.01;
extern int Slippage = 100000;
extern int Max_Spread = 40;
int Ticket, i;
double Spread, PointSet;
bool IsInvested, CloseTicket;
//-------------------------------------------------------------------------------------------------------------

//Ichimoku Kinko Hyu Globale Variablen
extern int TENKANSEN = 5;// Tenkan-sen
extern int KIJUNSEN = 20;// Kijun-sen
extern int SENKOUSPANB = 50;// Senkou Span B
//-------------------------------------------------------------------------------------------------------------

//CCI GV
extern int InpCCIPeriod = 14; // ?
extern double indicator_level1 = -100.0;
extern double indicator_level2 = 100.0;
input ENUM_APPLIED_PRICE CCI_Price = PRICE_WEIGHTED;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init(){
return(0);}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit(){
return(0);}
//+------------------------------------------------------------------+
//| expert star function                                            |
//+------------------------------------------------------------------+
int start(){
//-------------------------------------------------------------------------------------------------------------
{//Ichi
double TKS= iIchimoku(NULL,0,5,20,50,MODE_TENKANSEN,1);//5 rot
double KJS = iIchimoku(NULL,0,5,20,50,MODE_KIJUNSEN,1);//20 blau
double SKS_A = iIchimoku(NULL,0,5,20,50,MODE_SENKOUSPANA,1);//nicht einstellbar
double SKS_B = iIchimoku(NULL,0,5,20,50,MODE_SENKOUSPANB,1);//50
double CKS = iIchimoku(NULL,0,5,20,50,MODE_CHIKOUSPAN,1);//nicht einstellbar

//CCI
double CCI = iCCI(_Symbol,_Period, InpCCIPeriod, CCI_Price, 1);// ?
double IL1 = iCCI(_Symbol,_Period, indicator_level1, CCI_Price, 1);//-100
double IL2 = iCCI(_Symbol,_Period, indicator_level2, CCI_Price, 1);//+100
}
//-------------------------------------------------------------------------------------------------------------

if (Digits <= 3) PointSet = 0.01; else PointSet = 0.0001;
if (Digits <= 1) PointSet = 1;
Spread=Ask-Bid;
double S = Spread;
double MS = Max_Spread;
Lots = MathMax(MathMin(Lots, MarketInfo(Symbol(),MODE_MAXLOT)),MarketInfo(Symbol(),MODE_MINLOT));
//-------------------------------------------------------------------------------------------------------------

//Define Vars
if (TimeFrame==0) TimeFrame=NULL;

//Time
datetime TC = TimeCurrent();
datetime F = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + Open_Orders_From);
datetime T = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + Open_Orders_Till);

//Close all Order after
bool CAA = (Close_all_Orders_after_Time_O_Clock);
datetime CA = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + Close_all_Orders_after);
//-------------------------------------------------------------------------------------------------------------

//Kurs
double CP = iClose(Symbol(), TimeFrame, 1);
//-------------------------------------------------------------------------------------------------------------

//Check position
IsInvested = false;
for (i=OrdersTotal()-1; i>=0; i--){
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if((OrderType()==OP_SELL || OrderType()==OP_BUY) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) IsInvested=true;}}
//-------------------------------------------------------------------------------------------------------------

//Open Trade
if (!IsInvested){
if (TC>F && TC<T && S<=MS && CCI>IL2 && CP>TKS && TKS>KJS) OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, Name + " Buy(#" + MagicNumber + ")", MagicNumber, 0, Blue);
if (TC>F && TC<T && S<=MS && CCI<IL1 && CP<TKS && TKS<KJS) OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, Name + " Sell(#" + MagicNumber + ")", MagicNumber, 0, Red);}
//-------------------------------------------------------------------------------------------------------------

//Close Trade
if (IsInvested){
for (i=OrdersTotal()-1; i>=0; i--){
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){

if (OrderType()==OP_BUY && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()){
if((CP<TKS && TKS<KJS) || (CAA=true && TC>CA)) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, DarkBlue);}

if (OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()){
if((CP>TKS && TKS>KJS) || (CAA=true && TC>CA)) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, FireBrick);}}}}
return(0);}
Angehängte Dateien
Dateityp: mq4 Valerius_CCI_Ichimoku_EA_Metatrader4.mq4 (5,6 KB, 4x aufgerufen)
Dateityp: mq4 CCI.mq4 (4,5 KB, 0x aufgerufen)
  #133 (permalink)  
Alt 22.05.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 199
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

Das kommt darauf an wie du welche Variablen definierst.
Wenn Du den Wert des CCI über iCCI abfragst dann sollte die Variable so bezeichnet werden wie sie dann bei der Abfrage benannt wird.
Ansonsten gibts ne Fehlermeldung.

Übrigens kannst Du die fehlenden Teile des Posting mit scrollen des Balkens darunter sehen.

Was willst Du eigentlich mit dem Code vom CCI Indikator ? Den fragst Du doch auch nicht in Deinem EA ab. Die Abfrage über iCCI ist doch viel einfacher und schneller als den Indikator über direkt über iCustom einzubinden ?
  #134 (permalink)  
Alt 22.05.16
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Lassen sich nicht zur Seite scrollen.

Ich benutz kein iCustom.

Fehlermeldungen gibts keine, muss wohl alles richtig sein.

Sollte er die Posi schließen, wenn dieser 9er >< als der 26er ist, oder schon, wenn beide = sind?
  #135 (permalink)  
Alt 23.05.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 199
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

@MA_EA
Nur weil beim Compilieren kein Fehler auftritt muss die Programmlogik ja nicht richtig sein.
Warum hängst Du dann eigentlich den CCI Indikator an wenn Du den gar nicht brauchst. Dir ist glaube ich das Prinzip noch nicht ganz klar.
Noch mal langsam:
Du legst in Zeile 36-38 folgende Variablen fest:

extern int InpCCIPeriod = 14;
extern double indicator_level1 = -100.0;
extern double indicator_level2 = 100.0;

Dann bestimmst Du in Zeile 63-65 den CCI für drei verschiedene Perioden

double CCI = iCCI(_Symbol,_Period, InpCCIPeriod, CCI_Price, 1);// CCIPeriod?
double IL1 = iCCI(_Symbol,_Period, indicator_level1, CCI_Price, 1);//-100
double IL2 = iCCI(_Symbol,_Period, indicator_level2, CCI_Price, 1);//+100

CCI ergibt laut festgelegter Variablen den Wert für vergangene 14 Perioden

IL1 ergibt den Wert des CCI für -100 Perioden (Du schaust also theoretisch in die Zukunft

LL2 ergibt den Wert des CCI für vergangene 100 Perioden.

Was soll da jetzt vernünftiges an Ergebnis in den Programmzeilen 103 und 104 herauskommen.

CCI>IL2 wenn der CCI(14Perioden) größer ist als der CCI(100) Perioden
CCI<IL2 wenn der CCI(14Perioden) kleiner ist als der CCI(nächste 100 Perioden, die es vom Kursverlauf noch gar nicht gibt) - Spätestens hier wird ein Logikfehler auftreten.

Abgesehen davon müssen IL1 und IL2 vom Datentyp Integer sein wenn Du sie für Perioden einsetzt, double dürfte bei der Programmausführung auch nen Fehler geben.

Hoffe, du verstehst wenigstens ein bischen von dem, was ich Dir versucht habe zu erklären.
  #136 (permalink)  
Alt 23.05.16
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ralfbenker Beitrag anzeigen
IL1 ergibt den Wert des CCI für -100 Perioden (Du schaust also theoretisch in die Zukunft

LL2 ergibt den Wert des CCI für vergangene 100 Perioden.

Abgesehen davon müssen IL1 und IL2 vom Datentyp Integer sein wenn Du sie für Perioden einsetzt, double dürfte bei der Programmausführung auch nen Fehler geben.

Hoffe, du verstehst wenigstens ein bischen von dem, was ich Dir versucht habe zu erklären.
Sorry, aber Du verstehst nicht. +100 und -100 stehen nicht für
Perioden, sondern für die obere und untere Linie des CCI.
Wenn die vom CCI-MA gekreuzt werden, gibts ein Einstiegssignal
in entsprechende Richtung. Jedenfalls wenn der ichimoku das selbe sagt.

Scheint aber irgendwie eh Alles nicht so richtig profitabel zu sein.
  #137 (permalink)  
Alt 23.05.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 199
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

Irgendwie bist Du ein bischen beratungsresistend
Das hier ist lt mql-Referenz die Definition der Funktion iCCI:

double iCCI(
string symbol, // symbol
int timeframe, // timeframe
int period, // averaging period
int applied_price, // applied price
int shift // shift
);

Das heißt, der dritte Wert in der Klammer ist IMMER die zugrunde liegende Periode. Und in diese Zahl ist bei dir 100 oder -100.
Wie die Variablen heißen ist total egal.
Man kann das auch so beschreiben:
Ergebnis(CCI)=iCCI(Handelssymbol,Timeframe,Periode nzahl,Preis,Verschiebung in Bars)
  #138 (permalink)  
Alt 23.05.16
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Globale Einstellungen im EA:
Code:
extern int InpCCIPeriod = 14;
extern double indicator_level1 = -100.0;
extern double indicator_level2 = 100.0;
input ENUM_APPLIED_PRICE CCI_Price = PRICE_WEIGHTED;
Deklaration des CCI im EA
Code:
double CCI = iCCI(_Symbol,_Period, InpCCIPeriod, CCI_Price, 1);// ?
double IL1 = iCCI(_Symbol,_Period, indicator_level1, CCI_Price, 1);//-100
double IL2 = iCCI(_Symbol,_Period, indicator_level2, CCI_Price, 1);//+100
Globale Einstellungen des CCI Indikators
Code:
#property indicator_buffers    1
#property indicator_color1     LightSeaGreen
#property indicator_level1    -100.0
#property indicator_level2     100.0
#property indicator_levelcolor clrSilver
#property indicator_levelstyle STYLE_DOT
//--- input parameter
input int InpCCIPeriod=14;
Wenn das falsch ist, sag mir bitte, wies richtig geht.
  #139 (permalink)  
Alt 23.05.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

double CCI = iCCI(_Symbol,_Period, InpCCIPeriod, CCI_Price, 1);
Der Wert CCI müsste nun mit den Werten 100 und - 100 abgeglichen werden.

Die Werte 100 und - 100 dienen im Indikator als horizontale Linien und haben mit der Berechnung des CCI überhaupt nichts zu tun.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #140 (permalink)  
Alt 23.05.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 199
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

Die Werte IL1 und IL2 brauchst Du nicht weil da eh nur Fantasieergebnisse rauskommen. Wenn Du abfragen willst ob der CCI über 100 oder unter -100 liegt und Du diese Parameter vorher mit indikator_level1/indicator_level2 festlegst sieht die Abfrage neben den anderen Bedingungen in Zeile 103/104 so aus:

103 CCI>indicator_level2
104 CCI<indicator_level1

Ohne die anderen Bedingungen zu checken hab ich Dir den Code angehängt.
Die Klammern die zuviel waren hab ich auch entfernt.
Angehängte Dateien
Dateityp: mq4 Valerius_CCI_Ichimoku_EA_Metatrader4_1.1.mq4 (5,5 KB, 4x aufgerufen)
Thema geschlossen

Lesezeichen

Stichworte
ea, expert advisor, ichimoku kinko hyo, ichimoku kinko hyo ea, ichimoku kinko hyo expert advisor, mql4, programmierung, programmierung metatrader

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------