Ich bin schon total verzweifelt, habe sogar eine Druckvariable hinzugefügt, wenn sie an OnTick gesendet wird... und wenn es geholfen hat :) es ist immer falsch in OnTick
Guten Tag, können Sie mir helfen, ein Problem zu lösen: Bei einer M15-Kerze werden mehrere Trades hintereinander eröffnet.
Ich möchte nicht mehr als einen Handel eröffnen. Die Logik hinter dem EA besteht darin, dass die nächste Order erst dann eröffnet wird, wenn die vorherige Order geschlossen ist, aber manchmal wird eine Reihe von Geschäften bei einer solchen langen Kerze eröffnet. Was muss in den Code eingefügt werden, um diese Situation zu verhindern?
Codeschnipsel :
In bCheckOrders() werden nicht nur offene Aufträge, sondern auch schwebende Aufträge (MODE_TRADES) aufgezählt.
Guten Tag, können Sie mir helfen, ein Problem zu lösen: Bei einer M15-Kerze öffnen sich mehrere Trades hintereinander.
Ich möchte nicht mehr als einen Handel eröffnen. Die Logik hinter dem EA besteht darin, dass die nächste Order erst dann eröffnet wird, wenn die vorherige Order geschlossen ist, aber manchmal wird eine Reihe von Geschäften bei einer solchen langen Kerze eröffnet. Was muss in den Code eingefügt werden, um diese Situation zu verhindern?
voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если нет открытых ордеров, то входим в условиеif(bCheckOrders() == true)
{
// Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy() == true)
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell() == true)
vOrderOpenSell();
}
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfitif(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
{
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
CloseOrder();
}
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
}
Versuchen Sie Folgendes: Entfernen Sie bCheckOrders() aus OnTick() und setzen Sie es wie hervorgehoben.
voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy() == true)
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell() == true)
vOrderOpenSell();
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfitif(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
{
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
CloseOrder();
}
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на покупку |//+-----------------------------------------------------------------------------------------------+void vOrderOpenBuy()
{
// Если нет открытых ордеров, то входим в условиеif(bCheckOrders() == true)
{
// Тикет ордераint iOTi = 0;
iOTi = OrderSend(Symbol(), OP_BUY, LOT(), Ask, Slippage, 0, 0, "", Magic, 0, clrNONE);
// Проверим открылся ли ордерif(iOTi > 0)
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError(GetLastError());
}
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на продажу |//+-----------------------------------------------------------------------------------------------+void vOrderOpenSell()
{
// Если нет открытых ордеров, то входим в условиеif(bCheckOrders() == true)
{
// Тикет ордера int iOTi = 0;
iOTi = OrderSend(Symbol(), OP_SELL, LOT(), Bid, Slippage, 0, 0, "", Magic, 0, clrNONE);
// Проверим открылся ли ордерif(iOTi > 0)
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError(GetLastError());
}
}
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Unnötiger Code wurde entfernt.
Was bedeutet das?
Um diese Daten für verschiedene TFs berechnen zu können.
Ich frage mich, ob jemand eine Implementierung durch eine Klasse hat.
Ich versuche, die Logik der Klassen zu verstehen, es wäre eine große Hilfe für das Lernen.
Guten Tag, können Sie mir helfen, ein Problem zu lösen: Bei einer M15-Kerze werden mehrere Trades hintereinander eröffnet.
Ich möchte nicht mehr als einen Handel eröffnen. Die Logik hinter dem EA besteht darin, dass die nächste Order erst dann eröffnet wird, wenn die vorherige Order geschlossen ist, aber manchmal wird eine Reihe von Geschäften bei einer solchen langen Kerze eröffnet. Was muss in den Code eingefügt werden, um diese Situation zu verhindern?
Codeschnipsel :
Ähm ... in iOTi in vOrderModify() immer = 1, es ist kein Ticket, sondern ein positives Ergebnis der OrderSend()-Operation, d. h. der Wert "1".
Danke, der Originalcode ist nicht von mir, also ändere ich nichts unnötig. Es funktioniert und es funktioniert.
Wird dies zur Lösung meines Problems beitragen?
Guten Tag, können Sie mir helfen, ein Problem zu lösen: Bei einer M15-Kerze öffnen sich mehrere Trades hintereinander.
Ich möchte nicht mehr als einen Handel eröffnen. Die Logik hinter dem EA besteht darin, dass die nächste Order erst dann eröffnet wird, wenn die vorherige Order geschlossen ist, aber manchmal wird eine Reihe von Geschäften bei einer solchen langen Kerze eröffnet. Was muss in den Code eingefügt werden, um diese Situation zu verhindern?
Codeschnipsel :
Ich bin auf der Suche nach jemandem, der seine Erfahrungen mit der Integration von Indikatoren in Expert Advisor teilen kann.
Um diese Daten für verschiedene TFs berechnen zu können.
Ich frage mich, ob jemand eine Implementierung durch eine Klasse hat.
Ich versuche, die Logik der Klassen zu verstehen, es wäre eine große Hilfe für das Lernen.
rates_total = Bars time[] = Time[] open[] = Open[] high[] = High[] low[] = Low[] close[] = Close[]OnTick() anzeigen
Danke, der Originalcode ist nicht von mir, also ändere ich nichts unnötig. Es funktioniert und es funktioniert.
Löst dies mein Problem in irgendeiner Weise?
Versuchen Sie Folgendes: Entfernen Sie bCheckOrders() aus OnTick() und setzen Sie es wie hervorgehoben.
Nein, ich habe mich geirrt, OrderSend() gibt ein Ticket oder -1 zurück, also ist daran nichts auszusetzen.
Ja.
Ich werde das für die Zukunft im Hinterkopf behalten.