Не выполняется функция после запрета - страница 2

 
xjasond:

Вы всё же попробуйте локализовать/выявить проблему/ы через построчный просмотр логики вывода рассчитываемых/получаемых значений (например, через Print или Comment, как и советовали выше). Отличия выводимых значений от задуманного при написании кода с прописанным по факту, могут подсказать и решение.
 
Dina Paches:
Вы всё же попробуйте локализовать/выявить проблему/ы через построчный просмотр логики вывода рассчитываемых/получаемых значений (например, через Print или Comment, как и советовали выше). Отличия задуманного при написании кода с прописанным по факту, могут подсказать и решение.
В прошлом сообщении выложил скриншот внизу, там сравнение времени. Или еще что то вывести попробовать в comment ?
 

Вывел алерты с проверкой

 

 if ( TimeCurrent() > BlockedTrade1)

         {

         Alert("Разрешаем торговлю");

         }

         

         if ( TimeCurrent() < BlockedTrade1)

         {

         Alert("Запрещаем торговлю");

         } 

 

Алерты выходят так как надо, тоесть прошло время запрета выходит 1 алерт 

 

Но почему сделки не открываются не могу понять 

 
xjasond:
В прошлом сообщении выложил скриншот внизу, там сравнение времени. Или еще что то вывести попробовать в comment ?
Все что угодно, что посчитаете нужным для понимания того, что сейчас происходит в коде, и соответственно для внесения исправлений.
 


Уже в голову не приходит нечего что можно было бы вывести.

 

Может проблема в проверке consecutive_loss ?

 

 

void OnTick()

  {


//---

CheckEvents( magicnumber );


int consecutive_loss = 0;

{                        

                                

  int counter = 0;

  datetime opentime[];

  double profit[];

  for(int index=0;index<OrdersHistoryTotal();index++)

     {

     if(!OrderSelect(index,SELECT_BY_POS,MODE_HISTORY) )

        continue;

     else

        if(OrderMagicNumber() == magicnumber && OrderSymbol() == Symbol() )

        {

        counter++ ;

        ArrayResize( opentime, counter);

        ArrayResize( profit, counter);

        opentime[counter -1]=OrderOpenTime();  //If you change OrderOpenTime() to OrderCloseTime() it will calculate using 

        profit[counter -1]=OrderProfit();      // close time instead of open time

        }

     }   

  int orderarray [];

  ArrayResize( orderarray, counter);

  datetime copyopentime[];

  ArrayResize( copyopentime, counter);

  ArrayCopy(copyopentime,opentime);

  

  for(int x=counter-1;x>=0;x--)

     {

     int latest = ArrayMaximum(copyopentime,WHOLE_ARRAY,0) ;

     orderarray[x]=latest;      

     copyopentime[latest] = 0;

     }

  

  for(int x=counter-1;x>=0;x--)

     {

     int pos = orderarray[x];

     if(profit[pos]<0)

        consecutive_loss++;

     else

        break;

     //Print(" Profit = ",profit[pos]) ;

     }

   

}

 

Но хотя она работает ведь верно, перестают открываться ордера лишь после того как делаю проверку на блокировку

 
Попробуйте распечатывать значение переменной eventBuyClosed_SL возможно в нем и проблема если условие со временем выполняется.
 

Немного по внимательнее изучая ваши приведенные примеры, есть мысль что проблема и в переменной  consecutive_loss может и еще в каком условии, лично мне пока мало что понятно без полного кода советника. 


 
Проблема решена. Всем спасибо за помощь.  Дело оказалось в функции eventBuyClosed_SL
Причина обращения: