Wie programmiert man? - Seite 344

 
mladen:

tkuan77

Sie müssen den letzten geschlossenen Balken finden und prüfen, ob der Tag des letzten geschlossenen Balkens mit dem aktuellen Tag identisch ist.

Sie können etwas wie diese Funktion verwenden, um die letzte geschlossene Orderzeit zu erhalten:

datetime GetLastClosedOrderTime()

{

datetime CloseTime = 0;

for(int i=OrdersHistoryTotal()-1;i>=0;i--)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

CloseTime = OrderCloseTime();

}

return(CloseTime);

}

Und dann können Sie überprüfen, ob das Datum dasselbe ist

Hallo mladen,

aber wo muss ich diesen Teil des Codes einfügen? Tut mir leid, dass ich diese Frage stelle, da ich selbst noch recht neu im Programmieren bin und immer noch nicht herauszufinden scheine, wie die For-Schleife funktioniert.

Mit freundlichen Grüßen

Ryan

 
tkuan77:

Hallo mladen,

aber wo soll ich diesen Teil des Codes einfügen? Tut mir leid, dass ich diese Frage stelle, da ich selbst noch ziemlich neu im Programmieren bin und immer noch nicht herausfinden kann, wie die For-Schleife funktioniert.

Mit freundlichen Grüßen

Ryan

Ryan

Etwas wie dies :

if (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime())) // kein Handel

 
mladen:

Ryan

Etwa so:

if (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime())) // kein Handel

Hallo mladen, ich habe den Code eingefügt, aber es scheint eine Art Fehler bei einer globalen Variable zu geben. Außerdem ist mir aufgefallen, dass du eine Variable MagicNumber hast, die nicht definiert ist. Darf ich fragen, wofür die ist? Ich habe sie unter int eingefügt, aber ich bin mir nicht sicher, wofür diese Variable verwendet wird.

Bitte um Rat. Nochmals vielen Dank für Ihre Geduld.

//---- Eingabeparameter

extern double TakeProfit = 1000.0;

extern double Lots = 0.1;

extern double StopLoss = 980.0;

extern int Entry_Hour_1st = 21;

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

//| Experten-Initialisierungsfunktion |

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

int init()

{

//----

//----

return(0);

}

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

//| Experten-Deinitialisierungsfunktion |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int start()

{

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

//-- Handel auslösen

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

int ticket, total, MagicNumber;

double TP_Value, SL_Value;

datetime GetLastClosedOrderTime()

{

datetime CloseTime = 0;

for(int i=OrdersHistoryTotal()-1;i>=0;i--)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

CloseTime = OrderCloseTime();

}

return(CloseTime);

}

total = OrdersTotal(); // Prüfung der Gesamtzahl der derzeit offenen Geschäfte

if(gesamt < 1)

{

if (Hour()==Entry_Hour_1st && ((High[0] - High[1])) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())))

{

if ((Close[1] - Open[1]) > 0,00100)

{

TP_Wert = (Close[1] - Open[1]);

SL_Wert = (Tief[1] - 0,0010);

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "Mein EA",200,0,Green);

return(0);

}

wenn ((Open[1] - Close[1]) > 0,00100)

{

TP_Value = (Open[1] - Close[1]);

SL_Wert = (Tief[1] - 0,0010);

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "Mein EA",200,0,Green);

return(0);

}

if ((Open[1] - Close[1]) <= 0,00100)

{

TP_Value = (High[1] - Low[1]);

SL_Wert = (Tief[1] - 0,0010);

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "Mein EA",200,0,Green);

return(0);

}

}

if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

if ((Close[1] - Open[1]) > 0,00100)

{

TP_Wert = (Close[1] - Open[1]);

SL_Wert = (Hoch[1] + 0,0010);

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "Mein EA",200,0,Red);

return(0);

}

if ((Open[1] - Close[1]) > 0,00100)

{

TP_Value = (Open[1] - Close[1]);

SL_Wert = (Hoch[1] + 0,0010);

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "Mein EA",200,0,Red);

return(0);

}

if ((Open[1] - Close[1]) <= 0,00100)

{

TP_Value = (High[1] - Low[1]);

SL_Wert = (Hoch[1] + 0,0010);

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "Mein EA",200,0,Red);

return(0);

}

}

}

return(0);

}

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

 
tkuan77:

Hallo mladen, ich habe den Code eingefügt, aber es scheint eine Form von globalen Variablenfehler zu geben. Außerdem ist mir aufgefallen, dass du eine Variable MagicNumber hast, die nicht definiert ist. Darf ich fragen, wofür die ist? Ich habe sie unter int eingefügt, aber ich bin mir nicht sicher, wofür diese Variable verwendet wird.

Bitte um Rat. Nochmals vielen Dank für Ihre Geduld.

//---- Eingabeparameter

extern double TakeProfit = 1000.0;

extern double Lots = 0.1;

extern double StopLoss = 980.0;

extern int Entry_Hour_1st = 21;

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

//| Experten-Initialisierungsfunktion |

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

int init()

{

//----

//----

return(0);

}

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

//| Experten-Deinitialisierungsfunktion |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int start()

{

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

//-- Handel auslösen

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

int ticket, total, MagicNumber;

double TP_Value, SL_Value;

datetime GetLastClosedOrderTime()

{

datetime CloseTime = 0;

for(int i=OrdersHistoryTotal()-1;i>=0;i--)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

CloseTime = OrderCloseTime();

}

return(CloseTime);

}

total = OrdersTotal(); // Prüfung der Gesamtzahl der derzeit offenen Geschäfte

if(gesamt < 1)

{

if (Hour()==Entry_Hour_1st && ((High[0] - High[1])) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())))

{

if ((Close[1] - Open[1]) > 0,00100)

{

TP_Wert = (Close[1] - Open[1]);

SL_Wert = (Tief[1] - 0,0010);

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "Mein EA",200,0,Green);

return(0);

}

wenn ((Open[1] - Close[1]) > 0,00100)

{

TP_Value = (Open[1] - Close[1]);

SL_Wert = (Tief[1] - 0,0010);

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "Mein EA",200,0,Green);

return(0);

}

if ((Open[1] - Close[1]) <= 0,00100)

{

TP_Value = (High[1] - Low[1]);

SL_Wert = (Tief[1] - 0,0010);

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "Mein EA",200,0,Green);

return(0);

}

}

if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

if ((Close[1] - Open[1]) > 0,00100)

{

TP_Wert = (Close[1] - Open[1]);

SL_Wert = (Hoch[1] + 0,0010);

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "Mein EA",200,0,Red);

return(0);

}

if ((Open[1] - Close[1]) > 0,00100)

{

TP_Value = (Open[1] - Close[1]);

SL_Wert = (Hoch[1] + 0,0010);

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "Mein EA",200,0,Red);

return(0);

}

if ((Open[1] - Close[1]) <= 0,00100)

{

TP_Value = (High[1] - Low[1]);

SL_Wert = (Hoch[1] + 0,0010);

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "Mein EA",200,0,Red);

return(0);

}

}

}

return(0);

}

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

Dies ist eine Funktion

Verschieben Sie sie außerhalb des Körpers der Funktion start()

 

mladen:

Das ist eine Funktion

Verschieben Sie sie außerhalb des Körpers der Funktion start()

Hallo mladen, ich habe versucht, die Funktion aus der Startfunktion zu verschieben, aber mein EA löst immer noch mehr als 1 Handel pro Tag aus, anstatt sich auf nur 1 Handel pro Tag zu beschränken.

Vielen Dank für die Erleuchtung.

Mit freundlichen Grüßen

//---- Eingabeparameter

extern double TakeProfit = 1000.0;

extern double Lots = 0.1;

extern double StopLoss = 980.0;

extern int Entry_Hour_1st = 21;

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

//| Experten-Initialisierungsfunktion |

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

int init()

{

//----

//----

return(0);

}

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

//| Experten-Deinitialisierungsfunktion |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int MagicNumber;

datetime GetLastClosedOrderTime()

{

datetime CloseTime = 0;

for(int i=OrdersHistoryTotal()-1;i>=0;i--)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

CloseTime = OrderCloseTime();

}

return(CloseTime);

}

int start()

{

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

//-- Handel auslösen

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

int ticket, total;

double TP_Wert, SL_Wert;

total = OrdersTotal(); // Überprüfung der Gesamtzahl der derzeit offenen Trades

if(total < 1)

{

if (Hour()==Entry_Hour_1st && ((High[0] - High[1])) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

if ((Close[1] - Open[1]) > 0,00100)

{

TP_Value = (Close[1] - Open[1]); // Wert des Long-Körpers

SL_Value = (Low[1] - 0.0010); // immer der gleiche Wert für Long

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "Mein EA",200,0,Green);

return(0);

}

wenn ((Open[1] - Close[1]) > 0,00100)

{

TP_Value = (Open[1] - Close[1]); // Wert des Short-Körpers

SL_Value = (Low[1] - 0.0010); // immer der gleiche Wert für Long

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "Mein EA",200,0,Green);

return(0);

}

if ((Open[1] - Close[1]) <= 0,00100)

{

TP_Value = (High[1] - Low[1]); // Wert der gesamten Kerze einschließlich Kopf und Fuß

SL_Value = (Low[1] - 0.0010); // immer der gleiche Wert für Long

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "Mein EA",200,0,Green);

return(0);

}

}

if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

if ((Close[1] - Open[1]) > 0,00100)

{

TP_Value = (Close[1] - Open[1]); // Wert des Long-Körpers

SL_Value = (High[1] + 0.0010); // immer der gleiche Wert für Short

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "Mein EA",200,0,Red);

return(0);

}

if ((Open[1] - Close[1]) > 0,00100)

{

TP_Value = (Open[1] - Close[1]); // Wert des Shortkörpers

SL_Value = (High[1] + 0.0010); // immer der gleiche Wert für Short

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "Mein EA",200,0,Red);

return(0);

}

if ((Open[1] - Close[1]) <= 0,00100)

{

TP_Value = (High[1] - Low[1]); // Wert der gesamten Kerze einschließlich Kopf und Fuß

SL_Value = (High[1] + 0.0010); // immer derselbe Wert für Short

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "Mein EA",200,0,Red);

return(0);

}

}

}

return(0);

}

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

 
tkuan77:

Hallo mladen, ich habe versucht, die Funktion aus der Startfunktion zu verschieben, aber mein EA löst immer noch mehr als 1 Handel pro Tag aus, anstatt nur 1 Handel pro Tag auszulösen.

Vielen Dank für die Erleuchtung.

Mit freundlichen Grüßen

//---- Eingabeparameter

extern double TakeProfit = 1000.0;

extern double Lots = 0.1;

extern double StopLoss = 980.0;

extern int Entry_Hour_1st = 21;

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

//| Experten-Initialisierungsfunktion |

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

int init()

{

//----

//----

return(0);

}

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

//| Experten-Deinitialisierungsfunktion |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int MagicNumber;

datetime GetLastClosedOrderTime()

{

datetime CloseTime = 0;

for(int i=OrdersHistoryTotal()-1;i>=0;i--)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

CloseTime = OrderCloseTime();

}

return(CloseTime);

}

int start()

{

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

//-- Handel auslösen

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

int ticket, total;

double TP_Wert, SL_Wert;

total = OrdersTotal(); // Überprüfung der Gesamtzahl der derzeit offenen Trades

if(total < 1)

{

if (Hour()==Entry_Hour_1st && ((High[0] - High[1])) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

if ((Close[1] - Open[1]) > 0,00100)

{

TP_Value = (Close[1] - Open[1]); // Wert des Long-Körpers

SL_Value = (Low[1] - 0.0010); // immer der gleiche Wert für Long

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "Mein EA",200,0,Green);

return(0);

}

wenn ((Open[1] - Close[1]) > 0,00100)

{

TP_Value = (Open[1] - Close[1]); // Wert des Short-Körpers

SL_Value = (Low[1] - 0.0010); // immer der gleiche Wert für Long

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "Mein EA",200,0,Green);

return(0);

}

if ((Open[1] - Close[1]) <= 0,00100)

{

TP_Value = (High[1] - Low[1]); // Wert der gesamten Kerze einschließlich Kopf und Fuß

SL_Value = (Low[1] - 0.0010); // immer der gleiche Wert für Long

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "Mein EA",200,0,Green);

return(0);

}

}

if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

if ((Close[1] - Open[1]) > 0,00100)

{

TP_Value = (Close[1] - Open[1]); // Wert des Long-Körpers

SL_Value = (High[1] + 0.0010); // immer der gleiche Wert für Short

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "Mein EA",200,0,Red);

return(0);

}

if ((Open[1] - Close[1]) > 0,00100)

{

TP_Value = (Open[1] - Close[1]); // Wert des Shortkörpers

SL_Value = (High[1] + 0.0010); // immer der gleiche Wert für Short

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "Mein EA",200,0,Red);

return(0);

}

if ((Open[1] - Close[1]) <= 0,00100)

{

TP_Value = (High[1] - Low[1]); // Wert der gesamten Kerze einschließlich Kopf und Fuß

SL_Value = (High[1] + 0.0010); // immer derselbe Wert für Short

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "Mein EA",200,0,Red);

return(0);

}

}

}

return(0);

}

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

tkuan77

Ersetze dies :

if(gesamt < 1)

mit diesem :

if(total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ;

Und das sollte es nicht mehr tun

 
mladen:

tkuan77

Ersetze dies :

if(gesamt < 1)

mit diesem :

if(total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ;

Und das sollte sie auch nicht mehr tun

Hallo mladen, nachdem ich den Code eingegeben habe, löste er statt 1 Trade pro Tag mehrere Trades auf einmal aus, bis das Konto geplatzt ist. Könnte es an einem Auslösemechanismus liegen, der dies verursacht?

Mit freundlichen Grüßen

 

Hallo mladen, ich habe diesen speziellen Code, der alle schwebenden Geschäfte schließt, die ich habe, nachdem ich ein Geschäft ausgeführt habe. Wie kann ich einstellen, dass nur mein aktuelles schwebendes Geschäft abgebrochen wird, nachdem ich ein Geschäft ausgelöst habe, anstatt alle zukünftigen schwebenden Geschäfte?

danke.....

int new_del()

{

int i,a;

int total = OrdersTotal();

string comentario,par;

for (i=total-1; i >=0; i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

{

for (a=Gesamt-1; a >=0; a--)

{

OrderSelect(a,SELECT_BY_POS,MODE_TRADES);

comentario=OrderComment();

par=StringSubstr(comentario,0,6);

if(OrderType()==OP_SELLSTOP)// && comentario==Symbol())

{

OrderDelete(OrderTicket());

Print("Löschen von SELL_STOP"," OrderType:",OrderType());

return(1);

}

if(OrderType()==OP_BUYSTOP)// && par==Symbol())

{

OrderDelete(OrderTicket());

Print("Löschen von BUY_STOP"," OrderType:",OrderType());

return(1);

}

}

}

}

}

 
tkuan77:
Hallo mladen, ich habe diesen speziellen Code, der alle schwebenden Geschäfte schließt, die ich habe, nachdem ich ein Geschäft ausgeführt habe. Wie kann ich einstellen, dass nur mein aktuelles schwebendes Geschäft abgebrochen wird, nachdem ich ein Geschäft ausgelöst habe, und nicht alle zukünftigen schwebenden Geschäfte?

danke.....

int new_del()

{

int i,a;

int total = OrdersTotal();

string comentario,par;

for (i=total-1; i >=0; i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

{

for (a=Gesamt-1; a >=0; a--)

{

OrderSelect(a,SELECT_BY_POS,MODE_TRADES);

comentario=OrderComment();

par=StringSubstr(comentario,0,6);

if(OrderType()==OP_SELLSTOP)// && comentario==Symbol())

{

OrderDelete(OrderTicket());

Print("Löschen von SELL_STOP"," OrderType:",OrderType());

return(1);

}

if(OrderType()==OP_BUYSTOP)// && par==Symbol())

{

OrderDelete(OrderTicket());

Print("Löschen von BUY_STOP"," OrderType:",OrderType());

return(1);

}

}

}

}

}

tkuan77

Was bedeutet der "aktuelle schwebende Handel" und was bedeutet der "zukünftige schwebende Handel"?

 
mladen:

tkuan77

Was bedeutet der "aktuelle schwebende Handel" und was bedeutet der "zukünftige schwebende Handel"?

Hallo mladen,

Current pending trade bedeutet: Sobald eine Bedingung erfüllt ist, setzt die Ea 2 pending trades (1 long und 1 short). Wenn also, sagen wir, der Long-Handel ausgelöst wird, wird die Ea automatisch den Short-Pending-Handel aufheben.

Future Pending Trade bedeutet: nachdem das Ea die vorherigen Pending Trades storniert hat und die Bedingung wieder erfüllt ist, sollte das Ea von Rechts wegen 2 weitere Pending Trades setzen (1 Long und 1 Short). wenn das Ea jedoch gerade einen laufenden Trade hat, wird das Ea automatisch alle Pending Orders stornieren, die das Ea zu setzen versucht.

Was ich versuche zu tun ist, um nur lassen Sie das System stornieren nur die aktuelle schwebenden Handel nach einem Handel ausgelöst wurde. schätzen die Hilfe

Grüße