Ich habe das Gefühl, wir verlieren ein wenig die Kontrolle über den Code....
if ( SignalBULL62Executed) CheckForClose_BULL6(); // I don't know it is the right place to close
Nein, das ist mit Sicherheit nicht der richtige Ort.
int result;
if(Bid==Close[1]+3*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
Diese "Fehlerbehandlung" macht nichts besser. Prüfen Sie es noch einmal.
Sorry, aber gestern gab es Probleme mit dem Internet (mql4.com funktioniert nicht mehr). Ich war versuchen, etwas zu korrigieren und ... Zusammenbruch
//+------------------------------------------------------------------+//+------------------------------------------------------------------+#define MAGICMA1 2000// blue starategy#define MAGICMA2 2001// red strategy//+------------------------------------------------------------------+//| Check NEW BAR |//+------------------------------------------------------------------+bool New_Bar = false;
bool Fun_New_Bar() // bool
{
staticdatetime New_Time=0;
New_Bar=false;
if(New_Time!=Time[0])
{
New_Time=Time[0];
New_Bar=true;
}
}
//+------------------------------------------------------------------+//| Calculate open positions HOW MEANY OF THIS is open |//+------------------------------------------------------------------+//--- FOR BLUE---------------------------------------------------------int OpenOrders_BULL4(string symbol)
{
int buys=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1) // magic ma 1 ( is ==)
{
if(OrderType()==OP_BUY) buys++;
}
}
return(buys);
}
//--- FOR RED--------------------------------------------------------------int OpenOrders_BULL6(string symbol)
{
int buys=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA2) // magic ma 2 ( is ==)
{
if(OrderType()==OP_BUY) buys++;
}
}
return(buys);
}
//+------------------------------------------------------------------+//| Condition candle |//+------------------------------------------------------------------+bool BULL4()
{
if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
return(true);
}
bool BULL6()
{
if(Close[1]-Open[1]>=6*Point && Close[1]-Open[1]<=7*Point)
return(true);
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+//--------------------------- blue bull4 magicma1 void OpenBULL41()
{
int result;
if(Bid==Close[1]+3*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
return(true);
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
void OpenBULL42()
{
int result;
for(int i=1;i<=OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1) // magic ma 1 ( is ==)
{
if(Ask>OrderOpenPrice()+2*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
}
}
//--------------------------- red bull6 magicma2 void OpenBULL61()
{
int result;
if(Bid==Close[1]+3*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
void OpenBULL62()
{
int result;
if(Ask>OrderOpenPrice()+2*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.62,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
void OpenBULL63()
{
int result;
if(Ask>OrderOpenPrice()+2*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.63,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
//+------------------------------------------------------------------+//| Check for close order conditions |//+------------------------------------------------------------------+void CheckForClose_BULL4()
{
if(OrderOpenPrice()+4*Point< Ask)
for (int i = OrdersTotal()-1; i >= 0;i--) // add: -1
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MAGICMA1)
{
bool ticket = true;
if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Blue);
}
}
}
void CheckForClose_BULL6()
{
if(OrderOpenPrice()+8*Point< Ask)
for (int i = OrdersTotal()-1; i >= 0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MAGICMA2)
{
bool ticket = true;
if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Red);
}
}
}
//+------------------------------------------------------------------+//| flag |//+------------------------------------------------------------------+
Fun_New_Bar();
if (New_Bar==false);
bool SignalBULL41Executed=false;
bool SignalBULL42Executed=false;
bool SignalBULL61Executed=false;
bool SignalBULL62Executed=false;
bool SignalBULL63Executed=false;
if(Fun_New_Bar())
{
SignalBULL41Executed=true;
return(SignalBULL41Executed);
}
//+------------------------------------------------------------------+//| Start function |//+------------------------------------------------------------------+void start()
{
// ----------------bull4if(BULL4())
if(!SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)
{
OpenBULL41();//do open buy position
SignalBULL41Executed=true;
if ( SignalBULL41Executed) CheckForClose_BULL4(); // I don't know it is the right place to close
}
if(!SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)
{
OpenBULL42();//do open buy position
SignalBULL42Executed=true;
if ( SignalBULL42Executed) CheckForClose_BULL4(); // I don't know it is the right place to close
}
// ----------------bull6 if(BULL6())
if(!SignalBULL61Executed && OpenOrders_BULL6(Symbol())==0)
{
OpenBULL61();//do open buy position
SignalBULL61Executed=true;
if ( SignalBULL61Executed) CheckForClose_BULL6(); // I don't know it is the right place to close
}
if(!SignalBULL62Executed && OpenOrders_BULL6(Symbol())==1)
{
OpenBULL62();//do open buy position
SignalBULL62Executed=true;
if ( SignalBULL62Executed) CheckForClose_BULL6(); // I don't know it is the right place to close
}
if(!SignalBULL63Executed && OpenOrders_BULL6(Symbol())==2)
{
OpenBULL63();//do open buy position
SignalBULL42Executed=true;
if ( SignalBULL62Executed) CheckForClose_BULL6(); // I don't know it is the right place to close
}
}
//+------------------------------------------------------------------+
Es ist nicht einfach, Ihnen zu helfen. Warum versuchen Sie nicht, vorerst nur eine Strategie zu implementieren, aber mit einer richtigen, Open(), Close(), Count(), NewBar(), Signal()Funktion.
Der folgende Block befindet sich außerhalb der Startfunktion. Ich bin mir nicht sicher, ob dies erwünscht ist.
Fun_New_Bar();
if (New_Bar==false); // <-- ???bool SignalBULL41Executed=false; // <-- This could be correct, but I am not sure you know why and
bool SignalBULL42Executed=false; // its not more an accident that you initalize it here.
bool SignalBULL61Executed=false;
bool SignalBULL62Executed=false;
bool SignalBULL63Executed=false;
if(Fun_New_Bar()) // <-- Your Fun_New_Bar() function doesn't return anything,
{ // you set the global New_Bar variable with the function.
SignalBULL41Executed=true; // <-- You should set it to false on a new bar. return(SignalBULL41Executed); // <-- ???
}
Ja, kleine Schritte, damit die Fehler überschaubar sind... Möchten Sie etwas Bestimmtes aus der Codebase EA hervorheben?
Ich werde das nicht noch einmal sehen - ich werde Ihnen nicht mehr helfen, wenn Sie die Korrekturschritte, zu denen ich - oder jemand anderes - geraten hat, weiter ignorieren:
if( Bid==Close[1]+3*Point)
Schlupf ist 0? Sie werden wahrscheinlich einen Fehler bekommen, aber die festgelegte Fehlerbehandlung wird ihn abfangen :-)
Das ist nicht falsch, aber nicht ideal und führt im schlimmsten Fall nicht zu dem, was Sie in der Schleife wollen. Am besten, Sie fangen gar nicht erst an, Schleifen von 0 bis OrdersTotal zu verwenden. Lesen Sie dies: Schleifen und Schließen oder Löschen von Aufträgen
for(int i=0;i<OrdersTotal();i++)
Wie hoch ist der Spread Ihres Brokers und wie viele Ziffern haben Sie für das Symbol, das Sie handeln möchten? Ich bin mir nicht sicher, ob Sie Point richtig verwenden (Lesen Sie auf der ersten Seite Ihres Threads).
Ja, kleine Schritte, damit die Fehler überschaubar sind... Möchten Sie etwas Bestimmtes aus der Codebase EA hervorheben?
Ich denke, nein, nichts zu sehen, ich verstehe, was ich geschrieben habe.
Ich werde das nicht mehr sehen - ich werde Ihnen nicht mehr helfen, wenn Sie weiterhin die Korrekturschritte ignorieren, die ich - oder jemand anderes - Ihnen empfohlen hat:
Ja. Ich weiß, was tun NormalizeDouble, ich denke, dass ich verstehe ( wenn ich habe: euro/usd = 1.2390022129.....09.... Und wir brauchen: 1,29893 Ende! nicht unendlich ), aber ich kann diese nicht schreiben, könnte das sein?
if ( NormalizeDouble ( abc(),0 ) )
bool abc()
{
bool z,y,z;
x=Bid;
y=Close[1]
z=x-y+3*Punkt
return(z);
}
oder ?
If (NormalizeDouble ((Close[1]-Bid) +3*Point),0 ) ;
Schlupf ist 0? Sie werden wahrscheinlich einen Fehler erhalten, aber die feste Fehlerbehandlung wird ihn abfangen :-)
Ich kann ohne Probleme +1 haben result=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
Fehlerbehandlung, gut, wir sehen, was nach sein wird
Das ist nicht falsch, aber nicht ideal, und im schlimmsten Fall bewirkt es nicht das, was Sie innerhalb der Schleife wollen. Am besten, Sie fangen gar nicht erst an, Schleifen von 0 bis OrdersTotal zu verwenden. Lesen Sie dies: Schleifen und Schließen oder Löschen von Aufträgen
SEHR GUTER ARTIKEL, den ich unbedingt zu Beginn lesen sollte :)
Wie hoch ist der Spread Ihres Brokers und wie viele Ziffern haben Sie für das Symbol, das Sie handeln wollen? Ich bin mir nicht sicher, ob Sie Point richtig verwenden (Lesen Sie auf der ersten Seite Ihres Threads).
Ich erinnere mich an diese. Ich habe Admiral Market Bid=1,29000 Ask = 1,29001. Das ist ein Problem, das ich kenne, aber ich habe keine Lösung in diesem Moment habe ich nicht das gute Beispiel gefunden.
Ja. Ich weiß, was NormalizeDouble tun, ich denke, dass ich verstehe (wenn ich habe: euro/usd = 1.2390022129.....09.... Und wir brauchen: 1,29893 Ende! nicht unendlich ) aber ich kann diese nicht schreiben, könnte das sein?
if (NormalizeDouble( abc(),0 ) )
bool abc()
{
Man kann nicht NormalizeDouble() a bool, der Hinweis steht im Funktionsnamen und auch in der Dokumentation....
Sie können NormalizeDouble() nicht als bool verwenden, der Hinweis steht im Funktionsnamen und auch in der Dokumentation.
Es ist schade, dass wir nicht normalisieren können, dass wahr sehr wahr ist :-(
Wodzuuu: Ja. Ich weiß, was tun NormalizeDouble, ich Sache, die ich verstehe (wenn ich habe: euro/usd = 1.2390022129.....09.... Und wir brauchen: 1,29893 Ende! nicht unendlich ) aber ich kann diese nicht schreiben, könnte diese sein?
Nein, Sie müssen Bid oder Close[1] nicht normalisieren. Was ich meinte, ist, dass man sie einfach nicht auf Gleichheit vergleichen sollte.
Ihr Code sucht nach einem Tick, bei dem Bid 1,31936 ist.
if( Bid==Close[1]+3*Point)
Dies würde nicht passieren, wenn Sie > verwenden.
Wodzuuu: Ich kann +1 kein Problem haben result=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
Das macht es nicht viel besser. Alle Ihre Berechnungen in Points sollten nach meinem Verständnis Pips sein. Allerdings habe ich keine Erfahrung mit ECN-Brokern, so könnte es funktionieren.
Wodzuuu:
Das ist nicht falsch, aber nicht ideal und führt im schlimmsten Fall nicht zu dem, was Sie innerhalb der Schleife wollen. Am besten, Sie fangen gar nicht erst an, Schleifen von 0 bis OrdersTotal zu verwenden. Lesen Sie dies: Schleifen und Schließen oder Löschen von Aufträgen
SEHR GUTER ARTIKEL! Ich sollte diese am Anfang lesen :)
Stimme zu und es gibt noch viele sehr gute Artikel, die vom gleichen Autor geschrieben wurden. Auch das Buch ist nicht ein schlechter Ort zu beginnen.
Wodzuuu:
Ich habe Admiral Market Bid=1,29000 Ask = 1,29001. Dies ist ein Problem, das ich weiß,, aber ich habe keine Lösung in diesem Moment habe ich nicht das gute Beispiel gefunden.
Auf der Website Ihres Brokers wird angegeben, dass der minimale Spread für EURUSD 0,1 beträgt. Der durchschnittliche Spread ist 0,5. <-- Das ist in Pips gemeint! Also 0,1 ist 1 Punkt. 0,5 sind 5 Punkte. In Ihrem Fall ist also ein Pip 10*Punkte. Der Spread verwirrt alle Ihre Minirechnungen, bei denen Sie nur 3 Punkte zu einem Kurs addieren. Suchen Sie nach 'adjust for 5 digit broker' und Sie sollten eine Menge Beispiele finden.
Wenndieser Codeschlecht war, weil ichSignaleweitergegeben habe, hat er sich verbessert.Ich dachte,dass das Probleman einerganzanderen Stelleliegt, nichtimGleichheitszeichen '=='......... das '>=' ist natürlich die bessere Idee
if( Bid==Close[1]+3*Point)
if( Bid>=Close[1]+MyPips*3)
Frage 1. Muss ich MyPips in der Kerze verwenden, in dieser Funktion? bool BULL4()
Da Sie derExpertesind,hätte ich etwas sagen sollen, es könnte wichtig sein . Jetztbenutze ich dieMT4Plattformund ich sehe4 Ziffernnach dem Komma(Bid-Ask= 0.0001 usualy). Im Moment haben wirin MQL4programmiertlassen Sie essein. InMT5,sehe ich5 Ziffernnach dem Komma. Im Moment ist dieseSpreizungfür michnichtwichtig. Wichtig ist, dass unserEAgut funktioniert. Ich möchtezu diesem Zeitpunktnichtdarüber reden(es sei denn,es ist notwendig)
AND I WROTE PROGRAM für mich ist gut :) wie über Sie?
//+------------------------------------------------------------------+//+------------------------------------------------------------------+#define MAGICMA1 2000// blue starategy//+------------------------------------------------------------------+//| Check NEW BAR |//+------------------------------------------------------------------+// nothing yet, one moment//+------------------------------------------------------------------+//| These are adjusted for 5/4 digit brokers |//+------------------------------------------------------------------+double MyPips; // slippage and othersint init()
{
if (Digits == 5) // Adjust for five (5)
{
MyPips=Point*10;
}
else// Adjust for four (4, and ..)
{
MyPips=Point*1;
}
}
//+------------------------------------------------------------------+//| Calculate open positions HOW MEANY OF THIS is open |//+------------------------------------------------------------------+int OpenOrders_BULL4(string symbol)
{
int buys=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)
{
if(OrderType()==OP_BUY) buys++;
}
}
return(buys);
}
//+------------------------------------------------------------------+//| Condition candle |//+------------------------------------------------------------------+bool BULL4()
{
if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
{
return(true);
}
else
{
return(false);
}
}
//+------------------------------------------------------------------+//| Condition send buy |//+------------------------------------------------------------------+bool BULL4send()
{
if( Bid>=Close[1]+MyPips*3)
{
return(true);
}
else
{
return(false);
}
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+bool OpenBULL41()
{
int result;
result=OrderSend(Symbol(),OP_BUY,0.41,Ask,MyPips,Close[1]-25*MyPips,0,"",MAGICMA1,0,Blue);
if(result>0)
{
if(OrderSelect(result,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else
{
Print("Error opening BUY order : ",GetLastError());
return(false);
}
return(true);
}
//+------------------------------------------------------------------+//| Check for close order conditions |//+------------------------------------------------------------------+bool CheckForCloseBULL4()
{
int i;
for(i=OrdersTotal()-1;i>=0;i--)
if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol() && OrderType() == OP_BUY )
if(OrderOpenPrice()+8*MyPips < Ask) return(true);
elsereturn(false);
}
//+------------------------------------------------------------------+//| close |//+------------------------------------------------------------------+void CloseBULL4()
{
int i;
for(i=OrdersTotal()-1;i>=0;i--)
{
if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol() && OrderType() == OP_BUY )
if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), MyPips*1,Black ) )
Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );
}
}
//+------------------------------------------------------------------+//| Start function |//+------------------------------------------------------------------+void start()
{
// ----------------bull4if(BULL4() && BULL4send() && OpenOrders_BULL4(Symbol())==0)
{
OpenBULL41();//do open buy position
}
if(CheckForCloseBULL4()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
}
//+------------------------------------------------------------------+
Ich habe das Gefühl, wir verlieren ein wenig die Kontrolle über den Code....
Nein, das ist mit Sicherheit nicht der richtige Ort.
Diese "Fehlerbehandlung" macht nichts besser. Prüfen Sie es noch einmal.
Dies ist nicht zum Spaß gedacht! Es sollte verwendet werden, um die ausgeführten Flaggen bei einem neuen Takt zurückzusetzen.
Was haben wir über den Vergleich von Doubles gelernt und ob dies hier Sinn macht?
Sie haben also beschlossen, Ihren Beitrag zu löschen, auf den ich mich beziehe... Gut gemacht, das ist sehr hilfreich!
Sorry, aber gestern gab es Probleme mit dem Internet (mql4.com funktioniert nicht mehr). Ich war versuchen, etwas zu korrigieren und ... Zusammenbruch
Es ist nicht einfach, Ihnen zu helfen. Warum versuchen Sie nicht, vorerst nur eine Strategie zu implementieren, aber mit einer richtigen, Open(), Close(), Count(), NewBar(), Signal()Funktion.
Der folgende Block befindet sich außerhalb der Startfunktion. Ich bin mir nicht sicher, ob dies erwünscht ist.
Ich denke dasselbe wie Sie, kleine Schritte. Nehmen wir nur eine Option BULL4
Manchmal sieht es für mich in der Codebasis wie Ea aus
https://www.mql5.com/en/code/9156 - interessant
Ich verstehe diese (aber nicht fühlen), es ist eine Flagge undich verstehe ihren Zweck
Was denken Sie? über kleine Schritte
Ja, kleine Schritte, damit die Fehler überschaubar sind...
Möchten Sie etwas Bestimmtes aus der Codebase EA hervorheben?
Ich werde das nicht noch einmal sehen - ich werde Ihnen nicht mehr helfen, wenn Sie die Korrekturschritte, zu denen ich - oder jemand anderes - geraten hat, weiter ignorieren:
Schlupf ist 0? Sie werden wahrscheinlich einen Fehler bekommen, aber die festgelegte Fehlerbehandlung wird ihn abfangen :-)
Das ist nicht falsch, aber nicht ideal und führt im schlimmsten Fall nicht zu dem, was Sie in der Schleife wollen. Am besten, Sie fangen gar nicht erst an, Schleifen von 0 bis OrdersTotal zu verwenden. Lesen Sie dies: Schleifen und Schließen oder Löschen von Aufträgen
Wie hoch ist der Spread Ihres Brokers und wie viele Ziffern haben Sie für das Symbol, das Sie handeln möchten? Ich bin mir nicht sicher, ob Sie Point richtig verwenden (Lesen Sie auf der ersten Seite Ihres Threads).
Ja, kleine Schritte, damit die Fehler überschaubar sind...
Möchten Sie etwas Bestimmtes aus der Codebase EA hervorheben?
Ich denke, nein, nichts zu sehen, ich verstehe, was ich geschrieben habe.
Ich werde das nicht mehr sehen - ich werde Ihnen nicht mehr helfen, wenn Sie weiterhin die Korrekturschritte ignorieren, die ich - oder jemand anderes - Ihnen empfohlen hat:
Ja. Ich weiß, was tun NormalizeDouble, ich denke, dass ich verstehe ( wenn ich habe: euro/usd = 1.2390022129.....09.... Und wir brauchen: 1,29893 Ende! nicht unendlich ), aber ich kann diese nicht schreiben, könnte das sein?
if ( NormalizeDouble ( abc(),0 ) )
If ( NormalizeDouble ((Close[1]-Bid) +3*Point),0 ) ;
Schlupf ist 0? Sie werden wahrscheinlich einen Fehler erhalten, aber die feste Fehlerbehandlung wird ihn abfangen :-)
Ich kann ohne Probleme +1 haben result=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
Fehlerbehandlung, gut, wir sehen, was nach sein wird
Das ist nicht falsch, aber nicht ideal, und im schlimmsten Fall bewirkt es nicht das, was Sie innerhalb der Schleife wollen. Am besten, Sie fangen gar nicht erst an, Schleifen von 0 bis OrdersTotal zu verwenden. Lesen Sie dies: Schleifen und Schließen oder Löschen von Aufträgen
SEHR GUTER ARTIKEL, den ich unbedingt zu Beginn lesen sollte :)
Wie hoch ist der Spread Ihres Brokers und wie viele Ziffern haben Sie für das Symbol, das Sie handeln wollen? Ich bin mir nicht sicher, ob Sie Point richtig verwenden (Lesen Sie auf der ersten Seite Ihres Threads).
Ich erinnere mich an diese. Ich habe Admiral Market Bid=1,29000 Ask = 1,29001. Das ist ein Problem, das ich kenne, aber ich habe keine Lösung in diesem Moment habe ich nicht das gute Beispiel gefunden.
Ich schreibe Code...
Ja. Ich weiß, was NormalizeDouble tun, ich denke, dass ich verstehe (wenn ich habe: euro/usd = 1.2390022129.....09.... Und wir brauchen: 1,29893 Ende! nicht unendlich ) aber ich kann diese nicht schreiben, könnte das sein?
if (NormalizeDouble( abc(),0 ) )
Man kann nicht NormalizeDouble() a bool, der Hinweis steht im Funktionsnamen und auch in der Dokumentation....
Sie können NormalizeDouble() nicht als bool verwenden, der Hinweis steht im Funktionsnamen und auch in der Dokumentation.
Es ist schade, dass wir nicht normalisieren können, dass wahr sehr wahr ist :-(
Ja. Ich weiß, was tun NormalizeDouble, ich Sache, die ich verstehe (wenn ich habe: euro/usd = 1.2390022129.....09.... Und wir brauchen: 1,29893 Ende! nicht unendlich ) aber ich kann diese nicht schreiben, könnte diese sein?
Nein, Sie müssen Bid oder Close[1] nicht normalisieren. Was ich meinte, ist, dass man sie einfach nicht auf Gleichheit vergleichen sollte.
Stellen Sie sich vor:
Close[1] = 1,31933
Neuer_Bar
Tick1, Bid = 1,31935
Tick2, Gebot = 1.31934
Tick3, Gebot = 1,31937
Tick4, Gebot = 1,31937
Tick5, Gebot = 1,31942
Ihr Code sucht nach einem Tick, bei dem Bid 1,31936 ist.
Dies würde nicht passieren, wenn Sie > verwenden.
Ich kann +1 kein Problem haben result=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
Das macht es nicht viel besser. Alle Ihre Berechnungen in Points sollten nach meinem Verständnis Pips sein. Allerdings habe ich keine Erfahrung mit ECN-Brokern, so könnte es funktionieren.
Das ist nicht falsch, aber nicht ideal und führt im schlimmsten Fall nicht zu dem, was Sie innerhalb der Schleife wollen. Am besten, Sie fangen gar nicht erst an, Schleifen von 0 bis OrdersTotal zu verwenden. Lesen Sie dies: Schleifen und Schließen oder Löschen von Aufträgen
SEHR GUTER ARTIKEL! Ich sollte diese am Anfang lesen :)
Stimme zu und es gibt noch viele sehr gute Artikel, die vom gleichen Autor geschrieben wurden. Auch das Buch ist nicht ein schlechter Ort zu beginnen.
Ich habe Admiral Market Bid=1,29000 Ask = 1,29001. Dies ist ein Problem, das ich weiß,, aber ich habe keine Lösung in diesem Moment habe ich nicht das gute Beispiel gefunden.
Auf der Website Ihres Brokers wird angegeben, dass der minimale Spread für EURUSD 0,1 beträgt. Der durchschnittliche Spread ist 0,5. <-- Das ist in Pips gemeint! Also 0,1 ist 1 Punkt. 0,5 sind 5 Punkte.
In Ihrem Fall ist also ein Pip 10*Punkte. Der Spread verwirrt alle Ihre Minirechnungen, bei denen Sie nur 3 Punkte zu einem Kurs addieren.
Suchen Sie nach 'adjust for 5 digit broker' und Sie sollten eine Menge Beispiele finden.
HI :)
Wenn dieser Code schlecht war, weil ich Signale weitergegeben habe, hat er sich verbessert.Ich dachte, dass das Problem an einer ganz anderen Stelle liegt, nicht im Gleichheitszeichen '=='......... das '>=' ist natürlich die bessere Idee
Frage 1. Muss ich MyPips in der Kerze verwenden, in dieser Funktion? bool BULL4()
DIGIT Problem.
Ich fand diese
https://www.mql5.com/en/forum/140097 von WHRoeder
https://www.mql5.com/en/forum/123736 von WHRoeder
Was ist Digit? in https://docs.mql4.com/predefined/variables/digits und https://docs.mql4.com/convert/doubletostr
Da Sie der Expertesind, hätte ich etwas sagen sollen, es könnte wichtig sein .
Jetzt benutze ich die MT4Plattform und ich sehe 4 Ziffern nach dem Komma (Bid-Ask= 0.0001 usualy). Im Moment haben wirin MQL4 programmiert lassen Sie es sein.
In MT5, sehe ich5 Ziffern nach dem Komma. Im Moment ist diese Spreizung für mich nichtwichtig. Wichtig ist, dass unser EA gut funktioniert.
Ich möchte zu diesem Zeitpunktnicht darüber reden (es sei denn, es ist notwendig)
AND I WROTE PROGRAM für mich ist gut :) wie über Sie?