OCO Orders + Trailing Stop

 

Привет ребят помогите пожалуйста решить проблему с трейлинг стопом хочу его добавить в OCO Orders

Как бы ни старался но код не работает не знаю где ошибка

при компиляции нет никаких ошибок, OCO Orders работает, трейлинг стоп не работает

Заранее огромное вам спасибо

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

void OnTick()
  {

   double Balance=AccountInfoDouble(ACCOUNT_BALANCE);

   double Equity=AccountInfoDouble(ACCOUNT_EQUITY);

   double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK), _Digits);

   double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_BID), _Digits);

   if(PositionsTotal()==0 && OrdersTotal()==0)
     {

      trade.BuyStop(1,Ask+3*_Point,_Symbol,Ask-27*_Point,Ask+63*_Point, ORDER_TIME_GTC,0,0);

      trade.SellStop(1,Bid-3*_Point,_Symbol,Bid+27*_Point,Bid-63*_Point, ORDER_TIME_GTC,0,0);

     }

   if(Balance!=Equity)
      {
      
      CancelOrder();
      
      }
     
   TrailingStop(Ask, Bid);  

 }


void CancelOrder()
  {
   for(int i=OrdersTotal()-1; i>=0; i--)
     {

      ulong OrderTicket = OrderGetTicket(i);

      trade.OrderDelete(OrderTicket);

     }

  }


void TrailingStop(double Ask, double Bid)
 {

   double SL_Ask = NormalizeDouble(Ask-7*_Point, _Digits);
   
   double SL_Bid = NormalizeDouble(Bid+7*_Point, _Digits);
   
   for (int i=PositionsTotal()-1; i>=0; i--)
   {
   
      string symbol=PositionGetSymbol(i);
      
      if (_Symbol==symbol)
      {
      
         ulong PositionTicket = PositionGetInteger(POSITION_TICKET);
         
         double CurrentSL = PositionGetDouble(POSITION_SL);
         
         if(CurrentSL>SL_Ask)
         {
         
         trade.PositionModify(PositionTicket,(CurrentSL+3*_Point),0);
        
         
         }
         
         if(CurrentSL<SL_Bid)
         {
         
         trade.PositionModify(PositionTicket,(CurrentSL-3*_Point),0);
        
         
         }
         
      }
   
   }

 }
 
hackintosh:

Привет ребят помогите пожалуйста решить проблему с трейлинг стопом хочу его добавить в OCO Orders

Как бы ни старался но код не работает не знаю где ошибка

при компиляции нет никаких ошибок, OCO Orders работает, трейлинг стоп не работает

Заранее огромное вам спасибо

не знаю, может этот подойдёт 

#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
CPositionInfo  m_position;                   // trade position object
CTrade         m_trade;                      // trading object
CSymbolInfo    m_symbol;                     // symbol info object
input int      TrailingStop_STOP_LEVEL      = 36;                // Button: Trailing Stop LEVEL
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void _Trailing(void)
  {
   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
     {
      string   position_GetSymbol=PositionGetSymbol(i); // GetSymbol позиции
      if(position_GetSymbol==m_symbol.Name())
        {
         long digits=SymbolInfoInteger(m_position.Symbol(),SYMBOL_DIGITS);
         long _SYMBOL_TRADE_STOPS_LEVEL=SymbolInfoInteger(m_position.Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
         m_adjusted_point=SymbolInfoDouble(m_position.Symbol(),SYMBOL_POINT);
         double n=10;
         double _PriceCurrent_Stop=0.0;
         double _PriceOpen_Stop_bezubutok=0.0;
         double _PositionModify_Stop=0.0;
         if(TrailingStop_STOP_LEVEL>_SYMBOL_TRADE_STOPS_LEVEL)
           {_SYMBOL_TRADE_STOPS_LEVEL=TrailingStop_STOP_LEVEL;};
         if(m_position.PositionType()==POSITION_TYPE_BUY)
           {
            _PriceCurrent_Stop=m_position.PriceCurrent()-(_SYMBOL_TRADE_STOPS_LEVEL+1)*m_adjusted_point*n;
            if(m_position.PriceCurrent()>m_position.PriceOpen())
              {
               if(_PriceCurrent_Stop>m_position.StopLoss()|| m_position.StopLoss()==0.0)
                 {
                  //--- save Magic Number for the position
                  if(_PriceCurrent_Stop>0)
                    {
                     m_trade.SetExpertMagicNumber(m_position.Magic());
                     m_trade.PositionModify(m_position.Ticket(),
                                            _PriceCurrent_Stop,
                                            m_position.TakeProfit());
                    };
                 };
              };
           };
         if(m_position.PositionType()==POSITION_TYPE_SELL)
           {
            _PriceCurrent_Stop=m_position.PriceCurrent()+_SYMBOL_TRADE_STOPS_LEVEL*m_adjusted_point*n;
            if(m_position.PriceCurrent()<m_position.PriceOpen())
              {
               if(_PriceCurrent_Stop<m_position.StopLoss()|| m_position.StopLoss()==0.0)
                 {
                  if(_PriceCurrent_Stop>0)
                    {
                     //--- save Magic Number for the position
                     m_trade.SetExpertMagicNumber(m_position.Magic());
                     m_trade.PositionModify(m_position.Ticket(),
                                            _PriceCurrent_Stop,
                                            m_position.TakeProfit());
                    };
                 }
              };
           };
        };
     };
  }
//+------------------------------------------------------------------+
Причина обращения: