Fragen Sie! - Seite 88

 
 

Danke Ralph, ich habe das versucht, aber dann gab es eine andere Liste von Fehlern - sagte, dass alle Variablen in der Include-Datei nicht definiert sind - aber sie sind

Ich werde es am Wochenende noch einmal versuchen, es frustriert mich im Moment ein wenig.

@faqcya - Ich vermute, Sie haben Recht, was das Einfügen in ein Skript angeht, aber ich weiß nicht, wie ich den Aufruf sonst handhaben soll, es sei denn, ich habe eine Shell EA, in die ich ihn einfügen kann.

Vielleicht werde ich einen Blick auf die Vorlagen werfen und sehen, ob ich es von dort aus aufrufen kann, oder noch besser, es in einen EA verwandeln, ich möchte es nur so haben, wie es ist, nicht um etwas anderes zu tun.

Vielen Dank für Ihre Hilfe,

Kevin

ralph.ronnquist:
@pgtips: Ändern Sie die zweite Zeile so, dass sie nur aus
#define MAGIC 20051120
besteht, d.h. kein Gleichheitszeichen und kein Komma.
 

Ich versuche, Programmieren zu lernen

Zunächst einmal habe ich den gesamten Kurs von Corder's Guru gelesen und fand ihn sehr interessant. Ich bin zu dem Schluss gekommen, dass der einzige vernünftige Weg, eine Strategie auszuprobieren, darin besteht, ein Programm zu schreiben, um sicherzugehen, dass sie völlig korrekt ist. Leider bin ich in dieser Hinsicht ein absoluter Neuling.

Ich habe versucht, ein einfaches Programm zu schreiben, und kann nicht einmal das zum Laufen bringen. Zumindest bekomme ich keine Fehler mehr, aber es nimmt keine Aufträge an. Ich bin hartnäckig und werde es weiter versuchen, aber ich wäre dankbar, wenn mir jemand helfen könnte, der meinen Fehler erkennt.

Alles, was ich im Moment versuche, ist, den niedrigsten Preis (CurrentLow) zu verfolgen und dann, wenn er um einen bestimmten Betrag (Ret1) zurückgeht, eine Verkaufsorder mit TP des Tiefpunkts zu platzieren.

Bitte lachen Sie nicht, aber das Folgende ist, was ich bis jetzt geschrieben habe:

//---- Eingabeparameter

extern double TP1=75.0;

extern double Ret1=75.0;

extern double SL1=150.0;

extern double Lots=0.1;

//+------------------------------------------------------------------+

//| Experten-Initialisierungsfunktion |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Experten-Deinitialisierungsfunktion |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

int ticket=0;

if(Balken<100)

{

Print("Balken weniger als 100");

return(0);

}

double CurrentLow,CurrentHigh;

if(Bid < CurrentLow)

{

CurrentLow = Bid;

if(Bid > CurrentHigh)

{

CurrentHigh = Bid;

if(CurrentHigh >= CurrentLow+(Punkt*Ret1))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point), "Albatross_v1",757575,0,Green);

return (0);

}

return (0);

}

return(0);

}

}

 
Putz:
Zunächst einmal habe ich den gesamten Kurs von Corder's Guru gelesen und fand ihn sehr interessant. Ich bin zu dem Schluss gekommen, dass der einzige vernünftige Weg, eine Strategie auszuprobieren, darin besteht, ein Programm zu schreiben, um sicherzustellen, dass sie völlig korrekt ist. Leider bin ich in diesem Bereich ein absoluter Neuling.

Ich habe versucht, ein einfaches Programm zu schreiben und kann nicht einmal das zum Laufen bringen. Zumindest bekomme ich keine Fehler mehr, aber es nimmt keine Aufträge an. Ich bin hartnäckig und werde es weiter versuchen, aber ich wäre dankbar, wenn mir jemand helfen könnte, der meinen Fehler erkennt.

Alles, was ich im Moment versuche, ist, den niedrigsten Kurs (CurrentLow) zu verfolgen und dann, wenn er um einen bestimmten Betrag zurückgeht (Ret1), eine Verkaufsorder mit TP des Tiefpunkts zu platzieren.

Bitte lachen Sie nicht, aber das Folgende ist, was ich bis jetzt geschrieben habe:

//---- Eingabeparameter

extern double TP1=75.0;

extern double Ret1=75.0;

extern double SL1=150.0;

extern double Lots=0.1;

//+------------------------------------------------------------------+

//| Experten-Initialisierungsfunktion |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Experten-Deinitialisierungsfunktion |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

int ticket=0;

if(Balken<100)

{

Print("Balken weniger als 100");

return(0);

}

double CurrentLow,CurrentHigh;

if(Bid < CurrentLow)

{

CurrentLow = Bid;

if(Bid > CurrentHigh)

{

CurrentHigh = Bid;

if(CurrentHigh >= CurrentLow+(Punkt*Ret1))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point), "Albatross_v1",757575,0,Green);

return (0);

}

return (0);

}

return(0);

}

}

Es scheint falsch zu sein, zu prüfen, ob Bid > CurrentHigh innerhalb der wahren Bedingung, dass Bid < CurrentLow ist; ich denke, man sollte unabhängige Tests wie diesen haben:

double CurrentLow,CurrentHigh;

int start()

{

if(Bid < CurrentLow) CurrentLow = Bid;

if(Bid > CurrentHigh) CurrentHigh = Bid;

if(Bid >= CurrentLow+(Point*Ret1))

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),"Albatross_v1",757575,0,Green);

return(0);

}

Nun drei Anmerkungen:

- Du musst CurrentHigh und CurrentLow global deklarieren, d.h. außerhalb einer Funktion (und start() ist eine Funktion), sonst werden diese Variablen bei jedem Aufruf der Funktion auf 0 initialisiert.

- Sie brauchen CurrentHigh nicht, da es nicht verwendet wird.

- Sie müssen eine Logik implementieren, um den Wert von CurrentLow zurückzusetzen/zu aktualisieren und wahrscheinlich die Eröffnung von Aufträgen bei jedem Tick über CurrentLow+(Point*Ret1)) zu begrenzen.

 

Hallo Michel,

vielen Dank für deine prompte Antwort und Hilfe.

Ich habe CurrentHigh gelöscht und verstehe jetzt viel besser. Ich habe auch CurrentLow am Anfang des Programms definiert, und jetzt platziert es tatsächlich Aufträge.

Ich habe auch eine zweite Order hinzugefügt, die auf einem größeren Retracement basiert, und das scheint zu funktionieren. Jetzt muss ich noch herausfinden, wie ich verhindern kann, dass bei jedem Tick eine neue Order erstellt wird, aber daran werde ich vorerst alleine arbeiten, da ich es auf diese Weise besser lernen werde.

Ich bin sicher, dass ich hier mit weiteren Fragen zurückkommen werde.

Nochmals vielen Dank.

Putz

 
Putz:
Hallo Michel,

Vielen Dank für Ihre prompte Antwort und Hilfe.

Ich habe CurrentHigh gelöscht und verstehe jetzt viel besser. Ich habe auch CurrentLow am Anfang des Programms definiert und jetzt platziert es tatsächlich Aufträge.

Ich habe auch eine zweite Order hinzugefügt, die auf einem größeren Retracement basiert, und das scheint zu funktionieren. Jetzt muss ich noch herausfinden, wie ich verhindern kann, dass bei jedem Tick eine neue Order erstellt wird, aber daran werde ich vorerst alleine arbeiten, da ich es auf diese Weise besser lernen werde.

Ich bin sicher, dass ich hier mit weiteren Fragen zurückkommen werde.

Nochmals vielen Dank.

Putz

Vergessen Sie nicht, CurrentLow mit einem großen Wert zu initialisieren (z.B. 1000); wenn es mit 0 initialisiert ist, werden Sie nie ein Bid < 0 haben.

 

Welche Programmiersprache soll ich lernen?

codersguru:
Hallo Leute,

Ich habe eine Menge privater Nachrichten erhalten, in denen ich um Hilfe bei einigen Code-Stücken gebeten werde.

Hier können Sie Ihre Fragen zu MQL4 stellen, und ich werde mein Bestes tun, um sie zu beantworten.

Lieber Codersguru,

Wenn ich lernen möchte, MQL4-Codes zu schreiben, welche Programmiersprache soll ich dann lernen? Visual Basic oder C++? Ich danke Ihnen für Ihre Antwort.

 

Mehr Hilfe bitte

Hallo,

Ich bin zurück und brauche mehr Hilfe. Ich habe gelesen und viele andere EAs angeschaut, um zu versuchen, es herauszufinden, aber ich kann es immer noch nicht richtig zum Laufen bringen.

Was ich versuche zu tun, ist zwei Aufträge zu platzieren.

1) Verkaufe 0,1 Lot, sobald der Preis um Ret1 (75 Pips) mit TP1 (75) und SL1 (150) zurückgeht

2) Verkaufen Sie 0,2 Lots, sobald der Preis um Ret2 (150 Pips) mit TP1 (75) und SL1 (75) zurückgegangen ist.

Langfristig möchte ich, dass ein Kaufauftrag wie oben auf der Grundlage der Trendrichtung erteilt wird. Ich habe noch nicht festgelegt, welchen Indikator ich verwenden werde, um den Trend zu bestimmen, aber ich werde irgendwann dazu kommen.

Das Folgende habe ich derzeit. Es scheint die erste Order richtig zu platzieren, aber die zweite wird nie ausgelöst. Jede Hilfe wird sehr geschätzt.

extern string Experte_Name = "Albatross v1";

extern int MagischeZahl = 757575;

extern int Slippage = 3.0;

//---- Eingabeparameter

extern double TP1=75.0;

extern double TP2=75.0;

extern double Ret1=75.0;

extern double Ret2=150.0;

extern double SL1=150,0;

extern double SL2=75,0;

extern double Lots=0.1;

double CurrentLow=1000;

//double CurrentHigh=0;

int OpenOrders=0,cnt=0;

//+------------------------------------------------------------------+

//| Benutzerdefinierte Indikator-Initialisierungsfunktion |

//+------------------------------------------------------------------+

//int init()

// {

//---- Indikatoren

//----

// return(0);

// }

//+------------------------------------------------------------------+

//| Benutzerdefinierte Indikator-Deinitialisierungsfunktion |

//+------------------------------------------------------------------+

// int deinit()

// {

//---- TODO: fügen Sie hier Ihren Code ein

//----

// return(0);

//+------------------------------------------------------------------+

//| Benutzerdefinierte Indikator-Iterationsfunktion |

//+------------------------------------------------------------------+

// int start()

// {

//---- TODO: fügen Sie hier Ihren Code ein

//----

// return(0);

// }

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| Experten-Initialisierungsfunktion |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Experten-Deinitialisierungsfunktion |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Prüfung der offenen Positionskontrollen |

//+------------------------------------------------------------------+

int CheckOpenTrades()

{

int cnt;

int NumTrades; // Anzahl der Kauf- und Verkaufstransaktionen für dieses Symbol

NumTrades = 0;

for(cnt=OrdersTotal()-1;cnt>=0;cnt--)

{

OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);

if ( OrderSymbol() != Symbol()) weiter;

if ( OrderMagicNumber() != MagicNumber) continue;

if(OrderType() == OP_BUY ) NumTrades++;

if(OrderType() == OP_SELL ) NumTrades++;

}

return (NumTrades);

}

//+------------------------------------------------------------------+

//| Experten-Startfunktion |

//+------------------------------------------------------------------+

int start()

{

int cnt, ticket, total;

double TP;

if(Bars<100)

{

Print("Balken weniger als 100");

return(0);

}

total = CheckOpenTrades();

if(gesamt < 1)

{

if(Bid < CurrentLow) CurrentLow = Bid;

if(Bid >= CurrentLow+(Point*Ret1))

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point), "Albatross_v1",MagicNumber,0,Green);

}

if(gesamt < 2)

{

if(Bid >= CurrentLow+(Point*Ret2))

OrderSend(Symbol(),OP_SELL,Lots*2,Bid+(Point*Ret2),3,Bid+(SL2*Point),Bid-(TP2*Point), "Albatross_v1",MagicNumber,0,Green);

return(0);

}

}

//+------------------------------------------------------------------+

 

Entschuldigen Sie, dass ich Sie mit dieser Frage belästige

Wie kann man ein Objekt erstellen, das mit einer Farbe gefüllt ist?

Dave

<<<

 

Hallo an alle, ich bin ein Programmierer und wurde für lange Zeit in C++ codieren, aber mein knowledege von FX und MQL4 ist sehr grundlegend. Ich gehe durch ein EA, dass jemand schrieb und versuchen, den Code zu verstehen...

Können Sie mir bitte in einfachem Englisch erklären, was der Parameter SHIFT in der iMA-Methode ist?

double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int Verschiebung)

Laut MT4-Hilfe ist dies der "Index des Wertes, der aus dem Indikatorpuffer entnommen wird (Verschiebung relativ zum aktuellen Balken um die angegebene Anzahl von Perioden)." - Was ist ein Indikatorpuffer???

er macht auch das folgende...

int RealTime = 0;

if( UseCompletedBars )

{

if(timeprev==Time[0]){return(0);} timeprev = Time[0];

RealTime = 1;

}

double MA11 = iMA(NULL,0,MA1Periods,0,MA1MethodSelected, MA1ArraySelected,0+RealTime);

double MA12 = iMA(NULL,0,MA1Periods,0,MA1MethodSelected, MA1ArraySelected,1+RealTime);

double MA21 = iMA(NULL,0,MA2Periods,0,MA2MethodSelected, MA2ArraySelected,0+RealTime);

double MA22 = iMA(NULL,0,MA2Periods,0,MA2MethodSelected, MA2ArraySelected,1+RealTime);

if( MA11 > MA21 && MA12 < MA22 ) { EnterLong = True; }

if( MA11 MA22 ) { EnterShort = True; }

was würde das zurückgeben? da ich die Verschiebung nicht kenne, denke ich, dass das der Grund ist, warum ich es nicht verstehen kann ...

Ihre Antwort wird sehr geschätzt werden.

Bitte helfen Sie.