Guten Abend zusammen, ich habe mich entschlossen, einen Trail auf offene Trades im Tester zu setzen, habe versucht, durch OrderGet....() zu gehen und habe festgestellt, dass das Geschäft von der Kategorie der Orders zu einer offenen Position übergegangen ist, bzw. bin durch PositionGet....() gegangen, aber wieder funktioniert nichts,
Die Frage ist, ob ich jetzt HistoryDealGet...() verwenden sollte? Oder verstehe ich etwas nicht? Wie kann ich SL im offenen Handel im Tester ändern? Vielen Dank im Voraus für Ihre Kommentare.
Bitte verweisen Sie mich auf !!!!, wie man in MQL5 die Prüfung des Vorhandenseins (oder der Abwesenheit) eines grafischen Objekts, z. B. einer Trendlinie oder einer vertikalen Linie, implementiert?
Idealerweise würde ich gerne eine Logik verwenden, die derjenigen von "If Order Does Not Exist" oder "If Order Exists" ähnelt.
Bitte verweisen Sie mich auf !!!!, wie man in MQL5 die Prüfung des Vorhandenseins (oder der Abwesenheit) eines grafischen Objekts, z. B. einer Trendlinie oder einer vertikalen Linie, implementiert?
Idealerweise würde ich gerne eine Logik verwenden, die derjenigen von "If Order Does Not Exist" oder "If Order Exists" ähnelt.
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Können Sie mir sagen, wie man den Kaufalgorithmus korrekt implementiert?
Im Moment muss der Expert Advisor viele Male kaufen, bis er die Information erhält, dass es offene Positionen gibt, und er hinkt hinterher. Wie lässt man den Expert Advisor nach dem ersten Kauf (wenn die Bedingungen eintreten) auf die Reaktion der Börse warten?
Das Problem ist nun, dass die Variable Bye_openedtrue werden sollte und dies den EA davon abhalten sollte, unnötige Trades zu machen, bis die Stops ausgelöst werden. Aber das Ändern der Variable Bye_opened dauert eine lange Zeitundder EA hat Zeit, mehrere Tradeszu machen.
Was fehlt in meinem Code? Bitte weisen Sie auf die Unzulänglichkeiten hin.
//--- Do we have positions opened already?bool Buy_opened=false; // variable to hold the result of Buy opened positionbool Sell_opened=false; // variables to hold the result of Sell opened positionif(PositionSelect(_Symbol)==true) // we have an opened position
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
Buy_opened=true; //It is a Buy
}
elseif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
Sell_opened=true; // It is a Sell
}
}
//+------------------------------------------------------------------+//| СОВЕРШАЕМ СДЕЛКУ |//+------------------------------------------------------------------+if(last_tick.last < BBLow[2] && Buy_opened == false)
{
int znak = last_tick.last - BBLow[2];
//--- 1. Создать запросMqlTradeRequest Trade_reqst={0}; // Инициализация структуры торгового запроса
Trade_reqst.action=TRADE_ACTION_DEAL; // Тип: немедленное совершение сделки
Trade_reqst.symbol=_Symbol; // Инструмент: текущий
Trade_reqst.volume=Lot; // Объём: 1 лот
Trade_reqst.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK)-TakeProfit*_Point; // Цена исполнения
Trade_reqst.type=ORDER_TYPE_BUY; // Тип ордера: на продажу
Trade_reqst.type_filling=ORDER_FILLING_RETURN; // Политика исполнения
Trade_reqst.sl=last_tick.last - StopLoss * _Point; // Stop Loss
Trade_reqst.tp=SymbolInfoDouble(_Symbol,SYMBOL_ASK) + TakeProfit * _Point; // Take Profit// Trade_reqst.tp=Trade_reqst.price + TakeProfit * 2 * _Point; // Take Profit//--- 2. Отправить торговый приказMqlTradeResult Trade_reslt={0}; // Инициализация структуры результата торгового запросаOrderSend(Trade_reqst,Trade_reslt); // Отправка торгового запроса на сервер//--- выведем в лог ответ сервера //Print(__FUNCTION__," - : - ",Trade_reslt.comment);if(Trade_reslt.retcode==10016) Print("Ответ: ",Trade_reslt.bid,Trade_reslt.ask,Trade_reslt.price);
Das Problem ist nun, dass die Variable Bye_openedtrue werden sollte und dies den EA davon abhalten sollte, unnötige Trades zu machen, bis die Stops ausgelöst werden. Aber Änderungen der Variable Bye_opened dauern langeundEA hat Zeit, mehrere Tradeszu machen.
Nur weil eine Variablenänderung lange dauert... Wie haben Sie das festgestellt? Okay, nehmen wir an, dass es so ist. Dann liegt die Antwort in der Frage. Wenn Sie eine Verzögerung beim Öffnen einer Position benötigen, müssen Sie Sleep( N ) verwenden, wobei N experimentell berechnet wird.
Variante 2. Die Antwort liegt wiederum in der Frage. Machen Sie Bye_opened global und ändern Sie es sofort, nachdem die Position erfolgreich geöffnet wurde, direkt in diesem Modul. Setzen Sie auf die gleiche Weise zurück, wie Sie das Vorhandensein der Position prüfen.
Offenbar hat er einen Roboter, der bei jeder Zecke läuft. Zwischen dem Senden der Order an den Server und dem Erhalt der Antwort vom Server werden mehrere Ticks hinzukommen, und für jeden Tick wird eine zusätzliche Position eröffnet. Mein Vorschlag schließt die Situation der Wiederholung von Eröffnungen aus. Und es muss überprüft werden, ob eine Position geöffnet wurde oder nicht.
Das ist es, was ich meine. Andernfalls werden sie buchstäblich alles verstehen und eine wichtige Prüfung verpassen.
Guten Abend zusammen, ich habe mich entschlossen, einen Trail auf offene Trades im Tester zu setzen, habe versucht, durch OrderGet....() zu gehen und habe festgestellt, dass das Geschäft von der Kategorie der Orders zu einer offenen Position übergegangen ist, bzw. bin durch PositionGet....() gegangen, aber wieder funktioniert nichts,
Die Frage ist, ob ich jetzt HistoryDealGet...() verwenden sollte? Oder verstehe ich etwas nicht? Wie kann ich SL im offenen Handel im Tester ändern? Vielen Dank im Voraus für Ihre Kommentare.
Bitte verweisen Sie mich auf !!!!, wie man in MQL5 die Prüfung des Vorhandenseins (oder der Abwesenheit) eines grafischen Objekts, z. B. einer Trendlinie oder einer vertikalen Linie, implementiert?
Idealerweise würde ich gerne eine Logik verwenden, die derjenigen von "If Order Does Not Exist" oder "If Order Exists" ähnelt.
Bitte verweisen Sie mich auf !!!!, wie man in MQL5 die Prüfung des Vorhandenseins (oder der Abwesenheit) eines grafischen Objekts, z. B. einer Trendlinie oder einer vertikalen Linie, implementiert?
Idealerweise würde ich gerne eine Logik verwenden, die derjenigen von "If Order Does Not Exist" oder "If Order Exists" ähnelt.
Können Sie mir sagen, wie man den Kaufalgorithmus korrekt implementiert?
Im Moment muss der Expert Advisor viele Male kaufen, bis er die Information erhält, dass es offene Positionen gibt, und er hinkt hinterher. Wie lässt man den Expert Advisor nach dem ersten Kauf (wenn die Bedingungen eintreten) auf die Reaktion der Börse warten?
Das Problem ist nun, dass die Variable Bye_opened true werden sollte und dies den EA davon abhalten sollte, unnötige Trades zu machen, bis die Stops ausgelöst werden. Aber das Ändern der Variable Bye_opened dauert eine lange Zeit und der EA hat Zeit, mehrere Tradeszu machen.
Was fehlt in meinem Code? Bitte weisen Sie auf die Unzulänglichkeiten hin.
Das Problem ist nun, dass die Variable Bye_opened true werden sollte und dies den EA davon abhalten sollte, unnötige Trades zu machen, bis die Stops ausgelöst werden. Aber Änderungen der Variable Bye_opened dauern lange und EA hat Zeit, mehrere Tradeszu machen.
Nur weil eine Variablenänderung lange dauert... Wie haben Sie das festgestellt? Okay, nehmen wir an, dass es so ist. Dann liegt die Antwort in der Frage. Wenn Sie eine Verzögerung beim Öffnen einer Position benötigen, müssen Sie Sleep( N ) verwenden, wobei N experimentell berechnet wird.
Variante 2. Die Antwort liegt wiederum in der Frage. Machen Sie Bye_opened global und ändern Sie es sofort, nachdem die Position erfolgreich geöffnet wurde, direkt in diesem Modul. Setzen Sie auf die gleiche Weise zurück, wie Sie das Vorhandensein der Position prüfen.
...
Wenn Sie eine Zeile einfügen
nach dem Befehl: OrderSend(), werden keine Positionen neu eröffnet.
Vielleicht ist es besser, erst zu prüfen, ob die Position geöffnet wurde, und dann ...
???
Offenbar hat er einen Roboter, der bei jeder Zecke läuft. Zwischen dem Senden der Order an den Server und dem Erhalt der Antwort vom Server werden mehrere Ticks hinzukommen, und für jeden Tick wird eine zusätzliche Position eröffnet. Mein Vorschlag schließt die Situation der Wiederholung von Eröffnungen aus. Und es muss überprüft werden, ob eine Position geöffnet wurde oder nicht.
Das ist es, was ich damit sagen will. Andernfalls würde es buchstäblich alles verstehen und eine wichtige Prüfung verpassen.
Das ist also die korrekte Vorgehensweise bei der Prüfung? Tut mir leid, ich kann es nicht richtig machen.
Hier ist der Code (der sich im OnTick-Block befindet):
Um das Öffnen unnötiger Bände zu vermeiden:
Leider funktioniert diese Bedingung bei der Eröffnung eines Handels nicht.