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

 
MakarFX:

Versuchen Sie es (ich habe es nicht getestet)

Спасибо, я позже проверю. 

 
Eugen8519:



Помогите правильно расположить функцию

...

Но как  и куда вставить 

Чтобы приходило сообщения при достижения стоп лосс или Тейк профит.? 


MakarFX:

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

Нашёл пример, который отслеживает выход по СЛ с помощью OnTradeTransactionhttps://www.mql5.com/ru/code/21147.

Candle shadows v1
Candle shadows v1
  • www.mql5.com
Анализ размера свечи и тени свечи. В OnTradeTransaction отлавливаем открытие (DEAL_ENTRY_IN) и закрытие позиций (DEAL_ENTRY_OUT), а также закрытие по Stop loss (DEAL_REASON_SL).
 

Один и тот же советник на двух разных инструментах

Здравствуйте! Помогите, пожалуйста, разобраться.

Есть советник, который работает на том графике, на который его затащили (значение Symbol() принимается за имя рабочего инструмента).

Но есть в этом советнике и переменная ticket_exist, в которую заносится тикет установленного ордера, и совентник понимает, что если ticket_exist не равно нулю, то ордер здесь установлен.

Вопрос: если я открою такой советник на двух разных инструментах, и на одном инструменте переменная ticket_exist станет не равной нулю, на другом инструменте переменная с этим же именем останется ли равной нулю?

СУ.

 
Mihail Nefedov:

Один и тот же советник на двух разных инструментах

Здравствуйте! Помогите, пожалуйста, разобраться.

Есть советник, который работает на том графике, на который его затащили (значение Symbol() принимается за имя рабочего инструмента).

Но есть в этом советнике и переменная ticket_exist, в которую заносится тикет установленного ордера, и совентник понимает, что если ticket_exist не равно нулю, то ордер здесь установлен.

Вопрос: если я открою такой советник на двух разных инструментах, и на одном инструменте переменная ticket_exist станет не равной нулю, на другом инструменте переменная с этим же именем останется ли равной нулю?

СУ.

Значение переменной в одном советнике недоступна другому советнику. Главное чтобы или символы, или магики, или и то и другое были разными.

 

Подскажите какое время в тиках? Время сервера или UTC ?

Помню читал где-то, но не могу вспомнить где... 

 
Alexey Viktorov:

Значение переменной в одном советнике недоступна другому советнику. Главное чтобы или символы, или магики, или и то и другое были разными.

Благодарю! Если я правильно понял, то для получения конфликта советников (двух абсолютно одинаковых), работающих на разных символах, нужно чтобы их переменные были заданы как глобальные (для всего терминала) или чтобы, например, к ордеру обращались по его порядковому номеру либо просто по факту его существования?

 
MakarFX:

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

так неполучается, выдает ошибки при компиляции


потом я попробывал так, он компилирует без проблем, но при закрытом ринке я не могу это протестировать

завтра буду доделывать

  void OnTradeTransaction(const MqlTradeTransaction &trans,
                          const MqlTradeRequest &request,
                          const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_entry        =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      long     deal_reason       =-1;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason=HistoryDealGetInteger(trans.deal,DEAL_REASON);
        }
      else
         return;

      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            if(deal_reason==DEAL_REASON_SL)
               SendNotification ("Закрыл  позицию > StopLoss");

            if(deal_reason==DEAL_REASON_TP)
               SendNotification ("Закрыл  позицию > TakeProfit");
           }
       }
  }
Файлы:
x4.PNG  11 kb
 
Eugen8519:

так неполучается, выдает ошибки при компиляции


потом я попробывал так, он компилирует без проблем, но при закрытом ринке я не могу это протестировать

завтра буду доделывать

ты не правильно вставил код!

немного поправил, все работает(я проверил)

  datetime lastclouse; 
//+------------------------------------------------------------------+
int OnInit()
  {
   lastclouse=TimeCurrent();
   .....
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if(LastClouseProfit()!=EMPTY_VALUE)
     {
      SendNotification (LastClouseProfit()); lastclouse=TimeCurrent();
     }
   .....   
  }
//+------------------------------------------------------------------+
double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   uint total=HistoryDealsTotal(); 
   for(uint i=0;i<total;i++) 
     { 
      if((ticket=HistoryDealGetTicket(i))>0) 
        { 
         profit+=HistoryDealGetDouble(ticket,DEAL_PROFIT); 
        }
     } 
   return(profit);
  }
//+------------------------------------------------------------------+
 
MakarFX:

ты не правильно вставил код!

немного поправил, все работает(я проверил)

Здесь, нужно ещё отследить то, что сделка закрылась именно по СЛ или ТП. А с помощью OnTradeTransaction получаем уже готовые данные, сразу после закрытия сделки.

double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   uint total=HistoryDealsTotal(); 
   for(uint i=0;i<total;i++) 
     { 
      if((ticket=HistoryDealGetTicket(i))>0) 
        { 
         profit=HistoryDealGetDouble(ticket,DEAL_PROFIT); 
        }
     } 
   return(profit);
  }

Если по  TimeCurrent окажется закрытыми больше одной сделки, то какой результат нужно будет вернуть?... И наличие профита еще не значит, что сделка была закрыта по СЛ или ТП. Это нужно отследить, как я уже говорил. Так что, использование OnTradeTransaction, это наиболее простое решение!

 
Mihail Matkovskij:

Здесь, нужно ещё отследить то, что сделка закрылась именно по СЛ или ТП.

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

Mihail Matkovskij:

Если по  TimeCurrent окажется закрытыми больше одной сделки, то какой результат нужно будет вернуть?

не знаю, надо проверить

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