Всем привет. подскажите как реализовать таймаут после сделки задержку?

 


input int      TimeOutPosleSdelki = 3600;          //Таймаут после сделки в секундах



datetime  VremyaPosledneySdelki ;


void OnTick()

  {

  

   //ОТКРЫТИЕ СДЕЛКИ

   if

   (

       (PositionSelect(Symbol()) == false)

       &&

       (TimeCurrent() > (VremyaPosledneySdelki + TimeOutPosleSdelki))

    )   


bool successClose = OrderSend(structRequestClose,structResultClose);

                        if (successClose == true)
                           {
                            Alert("Продано ",_Symbol);
                            Sleep(TimeOutPosleOtpravkiOrdera);
                            VremyaPosledneySdelki = TimeCurrent();
                            Comment("РАЮОТАЕТ");
                           }

                        if (successClose == false)

Вот так реализовано но не работает. Подскажите кто знает Спасибо 

 
  1. Уберите Sleep (иначе таймаут считается два раза).
  2. Объедините отправку торгового приказа и последующую проверку в один блок.
  3. Публикуйте коды через Alt+S.
 
min1983 Блощицын:

Вот так реализовано но не работает. Подскажите кто знает Спасибо 

Не работает что? 

Таймаут не работает или сделки не открывает?

Судя по коду, у вас два в одном)


Попробуйте так:

#include <Trade\Trade.mqh>
CTrade         m_trade;

input int TimeOutPosleSdelki = 3600;          //Таймаут после сделки в секундах
datetime  VremyaPosledneySdelki ;
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!PositionSelect(Symbol()) && TimeCurrent() > (VremyaPosledneySdelki + TimeOutPosleSdelki))
      if(m_trade.Sell(1, _Symbol))
        {
         Alert("Продано ", _Symbol);
         VremyaPosledneySdelki = TimeCurrent();
         Comment("РАЮОТАЕТ");
        }

   if(TimeCurrent() > (VremyaPosledneySdelki + TimeOutPosleSdelki))
      m_trade.PositionClose(_Symbol);
  }
//+------------------------------------------------------------------+



 

 это после отправки ордера  Sleep(TimeOutPosleOtpravkiOrdera);

VremyaPosledneySdelki = TimeCurrent(); это пауза после закрытия всех ордеров 

спасибо сейчас попробую

 
#include <Trade\Trade.mqh>
CTrade         m_trade;

input int TimeOutPosleSdelki = 3600;          //Таймаут после сделки в секундах
datetime  VremyaPosledneySdelki ;
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!PositionSelect(Symbol()) && TimeCurrent() > (VremyaPosledneySdelki + TimeOutPosleSdelki))
      if(m_trade.Sell(1, _Symbol))
        {
         Alert("Продано ", _Symbol);
         VremyaPosledneySdelki = TimeCurrent();
         Comment("РАЮОТАЕТ");
        }

   if(TimeCurrent() > (VremyaPosledneySdelki + TimeOutPosleSdelki))
      m_trade.PositionClose(_Symbol);
  }
//+------------------------------------------------------------------+
круто работает спасибо огромное
Aleksandr Slavskii
Aleksandr Slavskii
  • 2023.02.09
  • www.mql5.com
Профиль трейдера
 

пока так получилось буду смотреть . Где-то я не понимаю.

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