Требуется помощь профессиональных програмистов

 

здравствуйте.

Я попытался написать советник который только бы управлял открытими позициями 

(открытие происходит к ручную). Советник основывается на индикаторе FractalChannel.

Но при написании столкнулся с проблемой: куда девать куски кода открытия позиций. И я их

просто механически удалил. Но то что получилось совершенно не работает, хотя компилируется (непосредственных ошибок нет). Подскажите где ошибки. Может таких советникиков не бывает?

Файлы:
kkigu.mq4  2 kb
 

Измените на

for(cnt=0;cnt<OrdersTotal();cnt++)

Перебор то не идёт. Ваш total ничему не равен.

 
zhuki:

Измените на

for(cnt=0;cnt<OrdersTotal();cnt++)

Перебор то не идёт. Ваш total ничему не равен.

поменял. выдается ошибка при компилировании выдает ошибку!

 
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)
      {
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol()&&OrderCloseTime()==0)
Было - ОрдереСелект выбирал все ордера, в том числе и закрытые.
Стало - ставим начало блока (конец соотвественно).
Было - не проверялось время закрытия ордера.
Стало - проверяем если равно нулю то ордер еще не закрыт.
 
Kostay:
zhuki:

Измените на

for(cnt=0;cnt<OrdersTotal();cnt++)

Перебор то не идёт. Ваш total ничему не равен.

поменял. выдается ошибка при компилировании выдает ошибку!

Проверил, все нормально

 
Vinin:
Kostay:
zhuki:

Измените на

for(cnt=0;cnt<OrdersTotal();cnt++)

Перебор то не идёт. Ваш total ничему не равен.

поменял. выдается ошибка при компилировании выдает ошибку!

Проверил, все нормально

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

 
Kostay:
Vinin:
Kostay:
zhuki:

Измените на

for(cnt=0;cnt<OrdersTotal();cnt++)

Перебор то не идёт. Ваш total ничему не равен.

поменял. выдается ошибка при компилировании выдает ошибку!

Проверил, все нормально

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

Файлы:
kkigut_1_.mq4  2 kb
 
проверил на демо счете. при возникновении условия закрытия позиция не срабатывает!
 
Kostay:
проверил на демо счете. при возникновении условия закрытия позиция не срабатывает!

Речи не было о правке кода. Возник вопрос что при компиляции вылетает ошибка. Я проверил, ошибок не было. А что в логику засунули, то это уже к автору то бишь к вам.

 
Vinin:
Kostay:
проверил на демо счете. при возникновении условия закрытия позиция не срабатывает!

Речи не было о правке кода. Возник вопрос что при компиляции вылетает ошибка. Я проверил, ошибок не было. А что в логику засунули, то это уже к автору то бишь к вам.

Вообще я в курсе, что код не выдает ошибки. Большое спасибо что напомнили!??

А вопрос звучал, если вы читали тему?!, в коде явно алгоритмическая ошибка, а в чем она 

заключается я просил помоч разобраться!

 
Kostay:
Vinin:
Kostay:
проверил на демо счете. при возникновении условия закрытия позиция не срабатывает!

Речи не было о правке кода. Возник вопрос что при компиляции вылетает ошибка. Я проверил, ошибок не было. А что в логику засунули, то это уже к автору то бишь к вам.

Вообще я в курсе, что код не выдает ошибки. Большое спасибо что напомнили!??

А вопрос звучал, если вы читали тему?!, в коде явно алгоритмическая ошибка, а в чем она

заключается я просил помоч разобраться!

Тогда давай порассуждаем. В основе индикатора "FractalChannel_v1" вернее всего используются значения фрактала. Но существование фрактала можно проверить только на 3 баре, если конечно текущий 0. Других замечаний по логике нету. И еще, так как у меня этого индикатора нет, то я не знаю какие он значения возвращает, и естественно проверить работу индикатора, на котором все построено не могу.

Да, еще. Сделай для проверки

   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol())  
        {
         if(OrderType()==OP_BUY)   // длинная позиция открыта
           {
            // условие закрытие длинной позиции
            Print("закрытие длинной позиции: Fr_down1=",Fr_down1,"Fr_down0=",Fr_down0);
            if(Fr_down1>Fr_down0)
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
                 return(0); 
                }
           }
         else 
           {
            // условие закрытия короткой позиции
            Print("закрытие короткой позиции: Fr_up1=",Fr_up1,"Fr_up0=",Fr_up0);
            if(Fr_up1<Fr_up0)
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); 
               return(0); 
              }
            
           }
        }
     }
С помощью принтов сможет понять почему не раьотает.
Причина обращения: