StopLoss по времени

 

Привет ребята,

в своей стратегии я обнаружил, что когда сделка длится более 50 секунд и результат отрицательный, он будет оставаться отрицательным до тех пор, пока не будет определен стоп-лосс. Чтобы предвидеть это состояние, я делаю стоп-лосс с течением времени.


Я смог доделать код до этого момента, но по какой-то причине он не работает. Вы не могли бы мне помочь?


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

input ulong  MagicNumber = 1234;
input double timetostop  = 10; //In seconds

//+------------------------------------------------------------------+
int OnInit()
  {

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {


  }

//+------------------------------------------------------------------+
void OnTick()
  {
   if(PositionsTotal() < 1)
     {
      double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
      trade.Buy(1,NULL,Ask,Ask-50*_Point,Ask+50*_Point,"Position Open");
     }
   if(PositionsTotal() == 1)
     {
      StopTimeout();
     }
  }

//+------------------------------------------------------------------+
void StopTimeout()
  {

   for(int i = PositionsTotal() - 1; i >= 0; i--)
     {
      string PositionSymbol = PositionGetSymbol(i);
      ulong  PositionMagic  = PositionGetInteger(POSITION_MAGIC);
      ulong  PositionTicket = PositionGetInteger(POSITION_TICKET);
      double PositionProfit = PositionGetDouble(POSITION_PROFIT);
      
      bool Negative = PositionProfit<0;

      if(PositionMagic == MagicNumber && PositionSymbol == _Symbol && Negative)
        {
         int timesetup      = (int)PositionGetInteger(POSITION_TIME);
         int timeCurrent    = (int)TimeCurrent();

         if(timetostop > 0 && (timeCurrent - timesetup) > timetostop)
           {
            bool ok = trade.PositionClose(PositionTicket);
            if(ok)
              {
               Print("Position Closed");
              }
           }

        }
     }
  }
//+------------------------------------------------------------------+
 
diegotfcastro:

Привет ребята,

в своей стратегии я обнаружил, что когда сделка длится более 50 секунд и результат отрицательный, он будет оставаться отрицательным до тех пор, пока не будет определен стоп-лосс. Чтобы предвидеть это состояние, я делаю стоп-лосс с течением времени.


Я смог доделать код до этого момента, но по какой-то причине он не работает. Вы не могли бы мне помочь?


Забыли добавить в OnInit

trade.SetExpertMagicNumber(MagicNumber);

И типы свойств позиции неплохо бы привести в соответствие.

 
Vladimir Mikhailov:

Забыли добавить в OnInit

И типы свойств позиции неплохо бы привести в соответствие.

Привет мой друг,

Вы были идеальны, сразу перешли к делу и решили мою проблему!

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