Как определить срабатывание стоп ордера?

 

Здравствуйте уважаемые программисты. Мне нужна Ваша помощь. Дело в том, что мне нужно узнать, когда сработал ордер BuyStop или SellStop. То есть после срабатывания отложенного ордера мне нужно закрывать убыточные ордера, а прибыльные тралить.

Вот как узнать, когда ордер сработал?

Заранее спасибо за ответы!

 
Я храню тикеты отложек в массиве и проверяю их тип на каждом тике. Если тип из OP_BUYSTOP превратился в OP_BUY значит отложенный ордер сработал. После чего перезаписываю массив. И естественно при открытии новых отложек дополняю массив новыми тикетами.
 
Alexey Viktorov:
Я храню тикеты отложек в массиве и проверяю их тип на каждом тике. Если тип из OP_BUYSTOP превратился в OP_BUY значит отложенный ордер сработал. После чего перезаписываю массив. И естественно при открытии новых отложек дополняю массив новыми тикетами.

Спасибо за ответ! А код как написать? 

А можно как нибудь через цикл  for()?

Или выбор ордера из истории?

 или прямо! Как  OP_BUYSTOP превратился в OP_BUY, певеменная OpBuyOpen стала true!

 
Тяжёлый случай. Знания программирования равны нулю. Написанием кода я не помогаю, такие у меня принципы.
 
int Ticket,Rorder;
bool OprTicket(int order)
  {

   if(order==OP_BUYSTOP)Rorder=OP_BUY;
   if(order==OP_SELLSTOP)Rorder=OP_SELL;
   for(int i=OrdersTotal(); i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
         if(OrderType()==order)
            Ticket=OrderTicket();
     }
   for(int i=OrdersTotal(); i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
         if(OrderType()==Rorder)
            if(OrderTicket()==Ticket)
               return(true);
     }
   return(false);
  }
Alexey Viktorov
:

Тяжёлый случай. Знания программирования равны нулю. Написанием кода я не помогаю, такие у меня принципы.

Вот код! Нашел ошибку! Все работает!

Выдает true при срабатывании отложенного ордера, указанного в передаваемых параметрах функции.

 
Alexey Viktorov:
Тяжёлый случай. Знания программирования равны нулю. Написанием кода я не помогаю, такие у меня принципы.
Но тогда советы зачем даешь, если код написать не можешь! И дело не в принципах, а так же знания равны нулю!
 
Vadim Kazakevich:
Но тогда советы зачем даешь, если код написать не можешь! И дело не в принципах, а так же знания равны нулю!
Потому, что я вырос в стране советов...
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как узнать что сработал стоплосс или тейкпрофит

Vladimir Karputov, 2017.06.30 10:57


Теперь (начиная с билда 1625 и даже уже в 1616) Бета-версия платформы MetaTrader 5 build 1625: Пользовательские финансовые инструменты можно узнать, что сработал Stop Loss или Take Profit:


MQL5: Добавлена возможность получения причины создания ордера, сделки и позиции.

Новые свойства


Причины создания ордера, сделки и позиции
Для получения причин создания торговых операций добавлено три перечисления:

ENUM_POSITION_REASONENUM_DEAL_REASONENUM_ORDER_REASONОписание причины
POSITION_REASON_CLIENTDEAL_REASON_CLIENTORDER_REASON_CLIENTОперация совершена в результате срабатывания ордера, выставленного из десктопного терминала
POSITION_REASON_MOBILEDEAL_REASON_MOBILEORDER_REASON_MOBILEОперация совершена в результате ордера, выставленного из мобильного приложения
POSITION_REASON_WEBDEAL_REASON_WEBORDER_REASON_WEBОперация совершена в результате срабатывания ордера, выставленного из веб-платформы
POSITION_REASON_EXPERTDEAL_REASON_EXPERTORDER_REASON_EXPERTОперация совершена в результате срабатывания ордера, выставленного из MQL5-программы – советником или скриптом
-DEAL_REASON_SLORDER_REASON_SLОперация совершена в результате срабатывания Stop Loss
-DEAL_REASON_TPORDER_REASON_TPОперация совершена в результате срабатывания Take Profit
-DEAL_REASON_SOORDER_REASON_SOОперация совершена в результате наступления события Stop Out
-DEAL_REASON_ROLLOVER-Сделка совершена по причине переноса позиции
-DEAL_REASON_VMARGIN-Сделка совершена по причине начисления/списания вариационной маржи
-DEAL_REASON_SPLIT-Сделка совершена по причине сплита (понижения цены) акции или иного актива, по которому имелась позиция на момент объявления сплита

 

Всё это хорошо, но можно проще.

То есть считаем количество ордеров по типам. Если убавился любой тип отложки, можно запомнить и время.

В итоге имеем и время и тип.

Записать это всё дело в глобальные переменные, на случай сбоя.

Далее должна следовать Ваша логика

Обращаемся к глобальным переменным до тех пор, пока Ваша логика не выполнится. Потом не желательно обращаться к глобальным, если жесткий диск жалко.

Ну и так далее по циклу.

Причина обращения: