Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1577

 
Mihail Matkovskij:

OnTradeTransaction сработает при срабатывании любого стоп ордера на сервере.

но функцию надо прописать?
 
Eugen8519:
Может через? 

DEAL_REASON_SL  
DEAL_REASON_TP

нет

в доках очень хороший пример OnTradeTransaction

 
MakarFX:
но функцию надо прописать?

Если для этого специально добавить функцию, то это будет удобно. Почему бы и нет?...

Но пересечения стопов в ней отслеживать не обязательно, так как это сделает сервер и пошлёт сигнал в OnTradeTransaction.

 
Mihail Matkovskij:

Если для этого специально добавить функцию, то это будет удобно. Почему бы и нет?...

Но пересечения стопов в ней отслеживать не обязательно, так как это сделает сервер и пошлёт сигнал в OnTradeTransaction.

Миша, я не силен в mql5, только начинаю вникать,

но, я так думаю, сначала надо прописать что то типа

if(OnTradeTransaction(...)==....)  SendNotification ("текст");

если я не прав, буду рад поправке

 
MakarFX:

Миша, я не силен в mql5, только начинаю вникать,

но, я так думаю, сначала надо прописать что то типа

если я не прав, буду рад поправке

OnTradeTransaction это такой обработчик событий. Поэтому, весь код обработки должен быть в нем. Ну или вызов функции обработки, если хотите. Смотрите описание в документации по ссылке.
 
Mihail Matkovskij:
OnTradeTransaction это такой обработчик событий. Поэтому, весь код обработки должен быть в нем. Ну или функция обработки, если хотите. Смотрите описание в документации по ссылке.

Мы об одном и том же?

if(OnTradeTransaction(...)==....)  SendNotification ("текст");
 
A если так?  Нашёл вроде от mql4
void AlertOrder()

{

   string txt;

   double OCP;

   int i=OrdersHistoryTotal()-1;

   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)

   {                                

      OCP=OrderClosePrice();

      if (OCP==OrderStopLoss()) txt="SL";

      if (OCP==OrderTakeProfit()) txt="TP";

      }

      SendNotification(Symbol() + " hit "+txt+"");

 }
 
Eugen8519:
A если так?  Нашёл вроде от mql4
OrdersHistoryTotal

нет в mql5

 
MakarFX:

Мы об одном и том же?

Нет. Вы собираетесь вызывать обработчик в условии (if). Но его нигде вызывать не надо. Просто прописать код обработки в OnTradeTransaction и всё. Посмотрите, какие параметры передаются в OnTradeTransaction при срабатывании стопа.

Хотя, вы должны знать, что такое события и что такое обработчик событий, какие бывают события в MQL. Тогда вы всё начнете понимать.

Вот ссылка на то что такое Функции обработки событий https://www.mql5.com/ru/docs/basis/function/events#ontradetransaction.

Их часто называют просто обработчики событий, чтобы не путаться. Например, как вы перепутали OnTradeTransaction с обычной функцией, которую вызывают в if.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Функции обработки событий - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Eugen8519:
A если так?  Нашёл вроде от mql4

Попробуй так(я не проверял)

datetime lastclouse; 
int OnInit()
  {
   lastclouse=TimeCurrent();
   .....
  }
void OnTick()
  {
   if(LastClouseProfit()!=EMPTY_VALUE) SendNotification (LastClouseProfit());
   .....   
  }  
double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   ticket=HistoryDealGetTicket();
   profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
   if(profit!=EMPTY_VALUE) lastclouse=TimeCurrent();
   return(profit);
  }
Причина обращения: