Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Хочешь написать технический индикатор? Загляни в Справочник MQL5!
ALex
742
ALex 2012.04.06 02:30 

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

Ну и контроль по времени не работает, подскажите, что не так -

if (Hour()<9 && Hour()>=21) return(0); 

Комменты пред функциями не все соответствуют действительности, т.к. переделываю свой старый советник.

СыПасибо!

Первый раз:

Второй и он же последний раз:

Igor Kim
2770
Igor Kim 2012.04.06 02:47  
Перед выставлением ордеров Вы накручиваете лот, а при удалении ордеров забываете возвращать лот обратно.
ALex
742
ALex 2012.04.06 03:00  

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

Лот должен возвращаться, только после получения профита.

ALex
742
ALex 2012.04.06 07:45  
Подправьте плиз... Примерно понял почему так происходит. Видимо, при выставлении новой пары ордеров, стоплевел не всегда дает поставить один из ордеров и создается ситуация похожая на ту, когда остается один ордер после срабатывания второго. Вот и идет неправильная накрутка лота по другому условию..
ALex
742
ALex 2012.04.06 10:18  

В общем чем дальше, тем хуже... никак не въеду в код...

Подскажите, где тут ошибки проверки баланса и проверки формирования новой свечи?

if(OrdersTotal()==0) Enter();                         //если нет ордеров - установка ордеров
   
   if(OrdersTotal()==1){                                 // если остался один ордер, то проверяем прибыль
      abb=AccountBalance();                                
      if(abb<ab){                                        //если баланс меньше начального, умножаем лот
         ab=AccountBalance();
         Lot=Lot*xLots;
         DellAllOrders();
         Enter();
      }
      if(abb>ab){                                        //если баланс от сделки положительный, то лот приравниваем к начальному
         ab=AccountBalance();
         Lot=Lots;
         if(OP==(iOpen(NULL,PER,0))){                     //и он не устарел, то ставим второй из этой пары
            WorkOrders();
            if(Type==0) Sell();
            if(Type==1) By();
         }
      }
   }
   
   if(OrdersTotal()>=1){                                  //если есть устаревшие отложенники, один или два
      if(OP!=(iOpen(NULL,PER,0))){
         WorkOrders();
         if(Type==4) DellAllOrders();
         if(Type==5) DellAllOrders();
          //Enter();
      }
   }  
ALex
742
ALex 2012.04.06 13:47  

Закоментировал умножение лотов

//Lot=Lot*xLots;

и всё работает нормально... не могу понять, как умножение лотов влечет ошибки в работе советника с кодом OrderSend error 131

ALex
742
ALex 2012.04.06 14:00  

Бред какой-то... Поставил вместо

Lot=Lot*xLots;
Lot=0.02;

.. заработало, но мне надо чтоб умножение было, по множителю xLots...

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий