Ошибка 4756

 

доброго дня! 

советник выдает ошибку 4756 на графиках Финама, на графиках Альпари работает

помогите, пожалуйста, найти ее

//+------------------------------------------------------------------+
#property copyright "Copyright 2019, cmillion@narod.ru"
#property link      
#property version   
#property description 
//--------------------------------------------------------------------
input int     Stoploss             = 500,           //стоплосс
              Takeprofit           = 200,           //тейкпрофит
              NoLoss               = 50,            //перевод в безубыток, если 0, то нет перевода в безубыток
              MinProfitNoLoss      = 10;            //минимальная прибыль при переводе вбезубыток
//--------------------------------------------------------------------
MqlTick tick;
MqlTradeRequest request;
MqlTradeResult result;
MqlTradeCheckResult check;
MqlDateTime tm;
//+------------------------------------------------------------------+
int OnInit()
{
    Comment("Start ");
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
void OnTick()
{
   double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
   double StLo,OOP,OSL,OTP;
   for(int i=0; i<PositionsTotal(); i++)
   {
      if(_Symbol==PositionGetSymbol(i))
      {
         ZeroMemory(request);
         ZeroMemory(result);
         request.position = PositionGetInteger(POSITION_TICKET);
         OOP = PositionGetDouble(POSITION_PRICE_OPEN); 
         OSL = PositionGetDouble(POSITION_SL); request.sl = OSL;
         OTP = PositionGetDouble(POSITION_TP); request.tp = OTP;
         long tip = PositionGetInteger(POSITION_TYPE);
         request.sl=OSL;request.tp=OTP;
         if (tip==POSITION_TYPE_BUY ) 
         {
            if (Stoploss!=0)
            {
               request.sl = NormalizeDouble(OOP - Stoploss * _Point,_Digits);
               if (request.sl>=Bid) request.sl = NormalizeDouble(Bid - Stoploss * _Point,_Digits);
               if (request.sl < OSL && OSL!=0) request.sl = OSL;
            }
            else if (OSL<OOP) request.sl=0;
            //---
            if (Takeprofit!=0)
            {
               request.tp = NormalizeDouble(OOP + Takeprofit * _Point,_Digits);
               if (request.tp<=Ask) request.tp = NormalizeDouble(Ask + Stoploss * _Point,_Digits);
               if (request.tp > OTP && OTP!=0) request.tp = OTP;
            }
            else request.tp=0;
            //---
            if (OSL<OOP)
            {
               if (NoLoss!=0)
               {
                  StLo = NormalizeDouble(OOP+MinProfitNoLoss*_Point,_Digits); 
                  if (StLo > OSL && StLo <= NormalizeDouble(Bid - NoLoss * _Point,_Digits)) 
                     request.sl = StLo;
               }
            }
            //else request.sl = OSL;
            
            if (request.sl != OSL || request.tp != OTP)
            {
               request.action = TRADE_ACTION_SLTP;
               //Alert("Modify Buy ",request.position,",  SL ",DoubleToString(OSL,_Digits)," -> ",DoubleToString(request.sl,_Digits)," (",DoubleToString((OOP-request.sl)/_Point,0),"),  TP ",DoubleToString(OTP,_Digits)," -> ",request.tp," (",DoubleToString((request.tp-OOP)/_Point,0),")");
               if(!OrderSend(request,result)) Print("error ",GetLastError());
            }
         }                     
         if (tip==POSITION_TYPE_SELL) 
         {
            if (Stoploss!=0)
            {
               request.sl = NormalizeDouble(OOP + Stoploss   * _Point,_Digits);
               if (request.sl<=Ask) request.sl = NormalizeDouble(Ask + Stoploss   * _Point,_Digits);
               if (request.sl > OSL && OSL!=0) request.sl = OSL;
            }
            else if (OSL>OOP) request.sl=0;
            //---
            if (Takeprofit!=0)
            {
               request.tp = NormalizeDouble(OOP - Takeprofit * _Point,_Digits);
               if (request.tp>=Bid) request.tp = NormalizeDouble(Bid - Stoploss   * _Point,_Digits);
               if (request.tp < OTP && OTP!=0) request.tp = OTP;
            }
            else request.tp=0;
            //---
            if (OSL>OOP)
            {
               if (NoLoss!=0)
               {
                  StLo = NormalizeDouble(OOP-MinProfitNoLoss*_Point,_Digits); 
                  if ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + NoLoss * _Point,_Digits)) 
                     request.sl = StLo;
               }
            }
            //else request.sl = OSL;
            
            if (request.sl != OSL || request.tp != OTP)
            {
               request.action = TRADE_ACTION_SLTP;
               //Alert("Modify Sell ",request.position,",  SL ",DoubleToString(OSL,_Digits)," -> ",DoubleToString(request.sl,_Digits)," (",DoubleToString((request.sl-OOP)/_Point,0),"),  TP ",DoubleToString(OTP,_Digits)," -> ",request.tp," (",DoubleToString((OOP-request.tp)/_Point,0),")");
               if(!OrderSend(request,result)) Print("error ",GetLastError());
            }
         }  
      }  
   }
}
//+------------------------------------------------------------------+
 
abcgo:

доброго дня! 

советник выдает ошибку 4756 на графиках Финама, на графиках Альпари работает

помогите, пожалуйста, найти ее

  1. Проверьте синтаксис кода: убедитесь, что входные параметры заданы правильно, и в коде нет ошибок.

  2. Проверьте соединение с сервером: убедитесь, что соединение между терминалом и сервером стабильно. Вы можете попробовать перезапустить терминал, чтобы проверить, решает ли он проблему.

  3. Проверьте баланс счета: убедитесь, что на счете достаточно средств для покрытия запроса на изменение.

  4. Проверьте спецификации символов: убедитесь, что символ, который вы пытаетесь изменить, имеет правильные спецификации, такие как минимальные уровни стоп-лосса или тейк-профита и т. Д.

  5. Проверьте торговый контекст: Убедитесь, что запрос на изменение отправлен в нужное время, например, в течение торговых часов, и что на счете нет ограничений для совершения сделок.

 
Lilita Bogachkova #:
  1. Проверьте синтаксис кода: убедитесь, что входные параметры заданы правильно, и в коде нет ошибок.

  2. Проверьте соединение с сервером: убедитесь, что соединение между терминалом и сервером стабильно. Вы можете попробовать перезапустить терминал, чтобы проверить, решает ли он проблему.

  3. Проверьте баланс счета: убедитесь, что на счете достаточно средств для покрытия запроса на изменение.

  4. Проверьте спецификации символов: убедитесь, что символ, который вы пытаетесь изменить, имеет правильные спецификации, такие как минимальные уровни стоп-лосса или тейк-профита и т. Д.

  5. Проверьте торговый контекст: Убедитесь, что запрос на изменение отправлен в нужное время, например, в течение торговых часов, и что на счете нет ограничений для совершения сделок.

Все проверил. Везде ОК
 
Почему вы определяете
void OnTick()
{
   double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
...

 для OrderSend в начале кода, а не непосредственно во время выполнения функции OrderSend?
 
Lilita Bogachkova #:
Почему вы определяете

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

на что это влияет?

 
abcgo #:
Все проверил. Везде ОК

request.symbol ?

 
Vladimir Deryagin #:

request.symbol ?

?
 
abcgo #:
?

Перед отправкой запроса на модификацию стоп лосса и/или тейк профита нужно сделать запрос на торговый сервер по какому символу провести эту операцию. В Справочнике MQL5 в разделе MqlTradeRequest есть пример на модификацию стоп лосса и/или тейк профита.

SL & TP Modification

Торговый приказ на модификацию уровней StopLoss и/или TakeProfit. Требуется указание 4 полей:

•action
•symbol
•sl
•tp
•position

С уважением, Владимир.

 
MrBrooklin #:

Перед отправкой запроса на модификацию стоп лосса и/или тейк профита нужно сделать запрос на торговый сервер по какому символу провести эту операцию. В Справочнике MQL5 в разделе MqlTradeRequest есть пример на модификацию стоп лосса и/или тейк профита.

С уважением, Владимир.

что изменить в коде?
 
abcgo #:
что изменить в коде?

В двух местах после строчек с кодом:

request.action = TRADE_ACTION_SLTP;

вставить:

request.symbol=_Symbol;

С уважением, Владимир.

 
MrBrooklin #:

В двух местах после строчек с кодом:

вставить:

С уважением, Владимир.

Заработало! Огромное спасибо!