Ошибки в автотестере

 
Здравствуйте, уважаемые форумчане!

Написал советник (МТ4) хочу разместить на маркете, но не принимает автотестер.

Выдает ошибку 131 (неправильные объёмы).

Хотя у меня в терминале все работает без ошибок.

Помогите, пожалуйста, разобраться.
 
Petr Voytenko:
Здравствуйте, уважаемые форумчане!

Написал советник (МТ4) хочу разместить на маркете, но не принимает автотестер.

Выдает ошибку 131 (неправильные объёмы).

Хотя у меня в терминале все работает без ошибок.

Помогите, пожалуйста, разобраться.

допустим у вас брокер1, позволяющий объем 0.01,

а в автотестере брокер2, у которого минимальный объем 0.1,

скорее всего, что-то в этом духе...надо видно в вашей ЕА проверять что брокер позволяет...

 

так же надо учесть балланс 1, 2, 5 10, 20, 50 долларов. Т.е проверка на минимальный лот и проверка на маржу на открытие такого объема. 

так же нужна проверка на максимальный лот. Типа если максимальный лот брокер позволяет 100, а вас рассчитывается как 105. 

 

   minlot=MarketInfo(Symbol(),MODE_MINLOT);

   maxlot=MarketInfo(Symbol(),MODE_MAXLOT);

   lot=NormalizeDouble(MMlot*AccountBalance()/100000,2);
   if (lot<minlot){lot=minlot;}
   if (lot>maxlot){lot=maxlot;}
   
   Ask_=Ask+distance*Point;
   Bid_=Bid-distance*Point;
   buytik = OrderSend(Symbol(),OP_BUYSTOP, lot,Ask_,slippage,NormalizeDouble(Ask_-stoploss_and_trail*Point,Digits),0,"",magicnumber,0,clrNONE);

   selltik= OrderSend(Symbol(),OP_SELLSTOP,lot,Bid_,slippage,NormalizeDouble(Bid_+stoploss_and_trail*Point,Digits),0,"",magicnumber,0,clrNONE);



Вот кусок кода, вроде предусмотрел такую ситуацию... Может что не увидел...

 
Petr Voytenko:

   minlot=MarketInfo(Symbol(),MODE_MINLOT);

   maxlot=MarketInfo(Symbol(),MODE_MAXLOT);

   lot=NormalizeDouble(MMlot*AccountBalance()/100000,2);
   if (lot<minlot){lot=minlot;}
   if (lot>maxlot){lot=maxlot;}
   
   Ask_=Ask+distance*Point;
   Bid_=Bid-distance*Point;
   buytik = OrderSend(Symbol(),OP_BUYSTOP, lot,Ask_,slippage,NormalizeDouble(Ask_-stoploss_and_trail*Point,Digits),0,"",magicnumber,0,clrNONE);

   selltik= OrderSend(Symbol(),OP_SELLSTOP,lot,Bid_,slippage,NormalizeDouble(Bid_+stoploss_and_trail*Point,Digits),0,"",magicnumber,0,clrNONE);



Вот кусок кода, вроде предусмотрел такую ситуацию... Может что не увидел...

 lot=NormalizeDouble(MMlot*AccountBalance()/100000,2);

100000 с потолка взято?

 
Vitaly Muzichenko:

 lot=NormalizeDouble(MMlot*AccountBalance()/100000,2);

100000 с потолка взято?

это манименеджмент - расчёт лота от баланса, когда-то давным давно тоже так делал ибо лень было делать по нормальному ))
 

Ну и я 5 копеек вставлю )))
Обязательно надо проверять и такое :

         if(MarketInfo(NULL,MODE_MARGINREQUIRED)*iLots<AccountFreeMargin())

тогда разрешаем открывать
П.С. Упс... перечитал сообщения , у Дмитрия уже упоминалось это. Но ладно, пусть будет тут готовая строка.
 
Aleksey Semenov:
это манименеджмент - расчёт лота от баланса, когда-то давным давно тоже так делал ибо лень было делать по нормальному ))

Это расчёт лота от бабы клавы.

Не нужно себя обманывать


 
Andrei Fandeev:

Ну и я 5 копеек вставлю )))
Обязательно надо проверять и такое :

         if(MarketInfo(NULL,MODE_MARGINREQUIRED)*iLots<AccountFreeMargin())

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

Спасибо большое - буду пробовать с вашей строчкой!

 

Нет, к сожалению такая картина:


err

 
Petr Voytenko:

Нет, к сожалению такая картина:

Попробуйте вывести в Журнал объём лота в открываемом ордере. Посмотрите что там "насчитал" ваш код.
Причина обращения: