Советник, который я написал три месяца назад, сейчас не может пройти тестирование стратегии, но два или три месяца назад он работал отлично!!! - страница 2

 
angevoyageur:
Покажите ваш код, чтобы мы могли сказать вам, куда добавить эту строку.

Добрый день, Анжевояжер,

Вот мой код. Две части разделены в секции onTick.

Спасибо.

Vivaldie


      MqlTick latest_price;      // To be used for getting recent/latest price quotes
      MqlTradeRequest mrequest;  // To be used for sending our trade requests
      MqlTradeResult mresult;    // To be used to get our trade results
      MqlRates mrate[];          // To be used to store the prices, volumes and spread of each bar
      ZeroMemory(mrequest);      // Initialization of mrequest structure
   if(ConditionDICrossMain = -1)
     {
      if(Buy_opened)
        {
         return;    // Don't open a new Buy Position
        }
      mrequest.action = TRADE_ACTION_DEAL;                                  // immediate order execution
      mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // latest ask price
      mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
      mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
      mrequest.symbol = _Symbol;                                            // currency pair
      mrequest.volume = Lot;                                                 // number of lots to trade
      mrequest.magic = EA_Magic;                                             // Order Magic Number
      mrequest.type = ORDER_TYPE_BUY;                                        // Buy Order
      mrequest.type_filling = ORDER_FILLING_FOK;                             // Order execution type
      mrequest.deviation=100;                                                // Deviation from current price
      //--- send order
        
      OrderSend(mrequest,mresult);
      // get the result code
      if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
        {
         Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
        }
      else
        {
         Alert("The Buy order request could not be COMPLETE -error:",GetLastError());
         ResetLastError();           
         return;
        }
     }
 
На этой странице я вижу, что ошибка находится в разделе ACCOUNT. Я пробовал с другим MT5 и другим счетом, но у меня такое же сообщение.
 
Vivaldi:

Добрый день, Анжевояжер,

Вот мой код. Две части разделены в секции onTick.

Спасибо

Vivaldie


  • Каково значение mresult.retcode, когда у вас возникает ошибка?
  • Каковы значения STP, TKP?
  • OrderSend возвращает bool, вы должны проверить возвращаемое значение тоже.
  • Так как я не знаю, что у вас между двумя частями, лучше поставить ZeroMemory(mrequest) непосредственно перед "mrequest.action=TRADE_ACTION_DEAL"
 

Я не видел сообщений в журнале, и он говорит, что проблема возникла из-за стоп-лосса.

При значении 0 все работает отлично : )

 
Vivaldi:

Я не видел сообщений в журнале и там написано, что проблема возникла из-за стоп-лосса.

При значении 0 все работает отлично : )

Для ваших стоп-уровней (SL и TP) вы должны учитывать значение STOP_LEVELS для символа, которым вы торгуете. См. эту тему.
 
angevoyageur:
  • Какое значение имеет mresult.retcode при ошибке?
  • Какие значения STP, TKP ?
  • OrderSend возвращает bool, вам нужно проверить возвращаемое значение тоже.
  • Так как я не знаю, что у вас между двумя частями, лучше поставить ZeroMemory(mrequest) непосредственно перед "mrequest.action=TRADE_ACTION_DEAL"


Ange У меня теперь все работает :) проблема возникла из-за переменной STP.

Нужно изменить объявление с типом double (вместо int), чтобы угодить мистеру NormalizeDouble.

Спасибо

double STP, TKP;
 

Я ошибся и изменение объявления переменной не решило проблему. Проблема возникает из-за переменных STP и TKP, которые равны 0 и делают sl = tp.

 

Является ли необходимость добавления

ZeroMemory(request);

ошибка в сборке 975 (x86)?

Недавно я столкнулся с ошибкой 4756 во время тестирования стратегии, и добавление вышеуказанной строки устранило ее.

 
k.doras:

Является ли необходимость добавления

ошибка в сборке 975 (x86)?

Недавно я столкнулся с ошибкой 4756 во время тестирования стратегии, и добавление приведенной выше строки устранило ее.

Эта строка является обязательной (или эквивалентная инициализация структуры запроса).
 

привет

отправка ордера работает на демо счете, но на реальном счете не работает(2014.11.30 18:21:00.062 55 (اخابر,D1) BuyA: ошибка 4756, retcode = 10006)

{
//--- prepare the request
   MqlTradeRequest request;
   MqlTradeResult  result;
   MqlTradeCheckResult check;
   ZeroMemory(request);
   ZeroMemory(result);
   ZeroMemory(check);
   request.action=5;
   request.symbol=_Symbol;
   request.volume=1000.00;
   request.price=2652.000;
   request.stoplimit=2652.000;
   request.sl=0;
   request.tp=0;
   request.type=6;
   request.type_filling=2;
   request.type_time=0;
   request.expiration=0;
   request.magic=0;
   request.comment="";

   if(!OrderSend(request,result))
     {
      Print(__FUNCTION__,": error ",GetLastError(),", retcode = ",result.retcode);
     }
//---


Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Structure of Request Check Results
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Structure of Request Check Results
  • www.mql5.com
Standard Constants, Enumerations and Structures / Data Structures / Structure of Request Check Results - Reference on algorithmic/automated trading language for MetaTrader 5
Причина обращения: