Скачать MetaTrader 5

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

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

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

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

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

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

СыПасибо!

Первый раз:

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

Igor Kim
2740
Igor Kim  
Перед выставлением ордеров Вы накручиваете лот, а при удалении ордеров забываете возвращать лот обратно.
ALex
744
ALex  

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

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

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

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

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

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
744
ALex  

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

//Lot=Lot*xLots;

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

ALex
744
ALex  

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

Lot=Lot*xLots;
Lot=0.02;

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

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