Отслеживание исполнения отложенного ордера - страница 2

 
Можно же придумать алгоритм, чтобы определить исполнился ваш ордер или нет. Вариантов наверно бесконечное множество. Всё в принципе зависит от программы, в которой это всё пытаетесь это сделать, потому как алгоритмов сеточных может быть бесконечное множество и наверняка есть способы по параметрам позиции это сделать, ну а если уж всё так сложно, то история сделок поможет.
 
micle:
Есть какой либо прогрес в данном направлении? Тоже столкнулся с проблемой отслеживания исполнения ордеров. Отложенный ордер не меняет свой статус.... Как быть?
OrderSelect(ticket) с последующей проверкой что с ним произошло(HistoryOrderGetInteger(ticket,ORDER_STATE)), не годится?
 

подтверждаю ошибку.

вот простой код, который показывает недоступность свойств "исторического ордера"

 

#property copyright "abrakadobr"

#property link      ""

#property version   "1.00"


bool dealed = false;

#include <Trade\SymbolInfo.mqh>

#include <Trade\Trade.mqh>

int OnInit()

  {

   return(INIT_SUCCEEDED);

  }

void OnDeinit(const int reason)

  {

  }

void OnTick()

  {

      if ( !dealed)

      {

         CSymbolInfo si;

         si.Name(_Symbol);

         si.RefreshRates();

         //создаём отложеный ордер с небольшими отклонением от цены, что бы сработал быстрее. 

         double price = si.Ask() + 0.0005;

         double sl = si.Bid() - 0.001;

         double tp = si.Ask() + 0.001;

         CTrade trader;

         trader.BuyStop(0.01,price,_Symbol,sl,tp);

         dealed = true;

      } else {

         //у первого оредра, почему-то, тикет 2. ну да ладно. 

         ulong ticket = 2;

         if ( OrderSelect(ticket) )

         {

            int st = OrderGetInteger(ORDER_STATE);

            Print("Order info status: ",st); //пока ордер не исполнился - статус выводится 

         }

         long histSt;

         HistoryOrderSelect(ticket); 

         if ( HistoryOrderGetInteger(ticket,ORDER_STATE,histSt) )

            Print("Order hist status: ",histSt); //а тут уже всегда выводится статус 4, даже если ордер уже filled (и вообще закрылся следующим)

      }

  }

void OnTradeTransaction(const MqlTradeTransaction& trans,

                        const MqlTradeRequest& request,

                        const MqlTradeResult& result)

  {

//тут можно увидеть, что последний "Print" для ордера с тикетом 2 будет со статусом 4. что бы дальше с ордером не проиходило бы - транзакций для этого не возникает.

   Print("TT:",EnumToString(trans.type)," order: ",trans.order, " status: ",trans.order_state);

  }

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

получается, что после того, как отложеный ордер исполняется - он становится недоступным для программной проверки.

 OrderSelect(ticket) с последующей проверкой что с ним произошло(HistoryOrderGetInteger(ticket,ORDER_STATE)), не годится?

вот выше пример - не годится.

отслеживание ордера через транзакции - не годится (выше пример).

вот и получается - через что отслеживать статус ордера? 

 

ีupd: да, если делать не отложеный ордер, а, к примеру, обычный Buy - история та же самая, что, в целом, логично 

 
brakadobr:

         long histSt;

         HistoryOrderSelect(ticket); 

         if ( HistoryOrderGetInteger(ticket,ORDER_STATE,histSt) )

            Print("Order hist status: ",histSt); //а тут уже всегда выводится статус 4, даже если ордер уже filled (и вообще закрылся следующим)

Что-то не пойму, что вы там пытаетесь добиться. Статус 4 означает "Ордер выполнен полностью".

 

получается, что после того, как отложеный ордер исполняется - он становится недоступным для программной проверки.

 Через "OrderSelect(ticket)" проверяем активен ли еще ордер, если (false) проверяем его статус через " HistoryOrderGetInteger(ticket,ORDER_STATE,histSt) " исполнился он или отменен , далее если  "Ордер выполнен полностью" можно цену исполнения и т.д. узнавать о нем через   HistoryOrder... . 

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
Причина обращения: