Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 911

 
Viktorline14:
Ребят помогите Прошу!!!

Неужели проще сделать скриншот и запостить его сюда, чем скопипастить текст советника? Думаете, кто-то вручную наберёт его со скрина в свой МЕ и станет разбираться?

Если компилятор пишет, что надо проверить результат выполнения функции, то его значит надо проверить. Это несложно:

if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) Print("Opening Buy error #", GetLastError()); //ну и другие действия по усмотрению, в случае ошибки
 

 if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 {OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, SL, TP, NULL, 0, 0,clrBlue);

     MyOrderStateB = 1; 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) 

   Print("Opening Buy error #", GetLastError());}

   else Sleep(2);

Спасибо. Однако правильно или нет ? предупреждение все равно выдает

 
У тебя стоплосс и тейкпрофит в абсолютных величинах, а надо в относительных, типа Bid - Sl*Point.
 
abeiks:

Здравствуйте!

Мне в эксперте на открытие свечи проверяется предыдущая свеча, если условия позволяет то открывается позиция, если нет то не открывается. Проблема в том что позиция открывается раньше чем проверяется условие предыдущее свече. Получается в журнале вижу открытие позиции а потом что позиция не должна открывается. Как решит эту проблему?

Спасибо, сам разобрался. Поставил функцию проверку предыдущей свечи выше функций открытие позиции.
 
Извиняюсь за корявость
 
  if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )
 {OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, Bid - SL * Point, Ask + TP * Point, NULL, 0, 0,clrBlue);
     MyOrderStateB = 1;  
      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) 
   Print("Opening Buy error #", GetLastError());}
   else Sleep(2);
   

      
   if(S1a == S1b && S1a>80.0000 && S1b>80.0000 )

    {OrderSend(Symbol(), OP_SELL, OrderValue, NormalizeDouble(Bid, Digits), Slippage, Ask + SL * Point, Bid - TP * Point , NULL, 0, 0,clrRed);
      MyOrderStateS = 1; }    

       else Sleep(2);

 

И при относительных выдает тоже самое( 

 
Viktorline14:

 if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 {OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, SL, TP, NULL, 0, 0,clrBlue);

     MyOrderStateB = 1; 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) 

   Print("Opening Buy error #", GetLastError());}

   else Sleep(2);

Спасибо. Однако правильно или нет ? предупреждение все равно выдает

 

Неправильно, не надо два раза OrderSend вызывать. Да и СЛ с ТП надо считать относительно цены, а не в пунктах выставлять. И нормализовывать надо не цены открытия Аск и Бид, а результат расчётов СЛ и ТП.

В общем, "учиться, учиться и ещё раз учиться" )))

 
evillive:

Неправильно, не надо два раза OrderSend вызывать. Да и СЛ с ТП надо считать относительно цены, а не в пунктах выставлять. И нормализовывать надо не цены открытия Аск и Бид, а результат расчётов СЛ и ТП.

В общем, "учиться, учиться и ещё раз учиться" )))

Спасибо большое))) Вы мне очень помогли, теперь все работает:3
 

Еще раз большое спасибо!

Теперь есть одна проблема советник открывает несколько ордеров подряд, а не один как я хотел(

int start()



  { S1a = NormalizeDouble(iStochastic(NULL, 0, S1_period, 3, S1_slowing, MODE_SMA, 1, MODE_MAIN, 1), 0);

   S1b = NormalizeDouble(iStochastic(NULL, 0, S1_period, 3, S1_slowing, MODE_SMA, 1, MODE_SIGNAL, 1), 0);

   

   if(MyOrderStateB == 1)Sleep(300000);

    else MyOrderStateB = 0;

   if(MyOrderStateS == 1)Sleep(300000);

    else MyOrderStateS = 0;

    

 

     

   if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, Bid - SL * Point, Ask + TP * Point, NULL, 0, 0,clrBlue))

   Print("Opening Buy error #", GetLastError());  

     else Sleep(2);

   MyOrderStateB = 1;

  

   


      

   if(S1a == S1b && S1a>80.0000 && S1b>80.0000 )


    

    

       if(!OrderSend(Symbol(), OP_SELL, OrderValue, NormalizeDouble(Bid, Digits), Slippage, Ask + SL * Point, Bid - TP * Point , NULL, 0, 0,clrRed))

       Print("Opening Sell error #", GetLastError()); 

       else Sleep(2);

       MyOrderStateS = 1;

       

      

       

       

       

   return(0);}

 

Пронаблюдал странное поведение тестера стратегий. У меня советник устанавливает и тралит отложенные стоповые ордера. ошибка. Происходит следующее. Советник устанавилвает Байстоп и селлстоп на расстоянии 30 пунктов от текущей цены (Инструмент - GbpUsd. Четырёхзнак. Минимально-допустимый уровень = 3 пункта). Через какое-то время он их подтягивает вслед за рынком, если они не сработали. Так вот, что я вижу. модификация успешна, модификация успешна, а затем в какой-то момент времени хлоп и высскакивает ошибка №1. То есть всё было нормально, советник делал одни и те же действия и вдруг выскакивает эта ошибка. Цены все нормализованы до дигитса. Вообще, все величины, которые подаются на вход функции OrderModify() - всё нормализовано!

В чём может быть причина такого поведения советника в тестере? 

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