И снова про публикацию в маркете - Volume limit reached - страница 3

 

 lots / SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP) - получить кол-во приростов.

MathFloor(  - отбросить дробную часть.

 * SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP) - умножаем для получения объёма, близкого к заданному, но кратного ШАГУ(STEP)

NormalizeDouble( ..... CountSignedDigits(Min_Lot) ) - нормализуем по кол-ву десятичных знаков (столько же, сколько и в Min_Lot).

К тому же - 

test on EURUSD,H1 (hedging)
strategy tester report 16 total trades
test on XAUUSD,D1 (hedging)
strategy tester report 18 total trades

прошли нормально.

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Информация об инструменте - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

NormalizeDouble( ..... CountSignedDigits(Min_Lot) ) - нормализуем по кол-ву десятичных знаков (столько же, сколько и в Min_Lot).

----

Min_Lot у вас integer или double?

 
Aleksandr Morozov:

NormalizeDouble( ..... CountSignedDigits(Min_Lot) ) - нормализуем по кол-ву десятичных знаков (столько же, сколько и в Min_Lot).

----

Min_Lot у вас integer или double?

Десятая строка кода снизу.
 
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(lots>max_volume)
     {
      lots=lots-SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
      CheckVolume(symb,lots,type);
     } 

Не проще уж тогда

   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   while(lots>max_volume)
     {
      lots-=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
     }

Если уж вас просто приравнивание не устраивает

   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(lots>max_volume)
      lots=max_volume
 
Konstantin Nikitin:

Не проще уж тогда

Если уж вас просто приравнивание не устраивает

Спасибо за участие. Вы комментируете устаревший код. В крайнем варианте всё по другому. Max_volume проверяется отдельно в конце. Форма записи декремента роли не играет. Max_volume в ДЦ как правило 0.
 [Volume limit reached остается загадкой.
К сожалению, никаких журналов для разрабов нет - локально такой ошибки нет.
 
Dmytryi Voitukhov:
Спасибо за участие. Вы комментируете устаревший код. В крайнем варианте всё по другому. Max_volume проверяется отдельно в конце. Форма записи декремента роли не играет. Max_volume в ДЦ как правило 0.
 [Volume limit reached остается загадкой.
К сожалению, никаких журналов для разрабов нет - локально такой ошибки нет.

Все равно я бы так сделал например

double Min_Lot=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
OrderCalcMargin(type,symb,lots,price,margin);
while(margin>free_margin) 
 {
   lots -= SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
   OrderCalcMargin(type,symb,lots,price,margin);
   if(lots<Min_Lot)
      return 0;
  }
Все равно отнимаете, ну к чему лишние гнать, сразу проверьте на минимальный лот
 
Выгода в 1 итерации... И решится вопрос с Volume limit reached?
 

NormalizeDouble что нужно? Число double для нормализации и integer цифр после запятой.

MathMax что нужно? Два числа double.

думал вы сразу поймете что я имею в виду

 

Второй год возитесь что-ли? ))

Volume limit reached. Значит вы не проверяете Volume limit.

Смотрю код, действительно, не проверяете, точнее проверяете не так как нужно по смыслу. 

 
Aleksandr Morozov:

NormalizeDouble что нужно? Число double для нормализации и integer цифр после запятой.

MathMax что нужно? Два числа double.

думал вы сразу поймете что я имею в виду

NormalizeDouble - так и есть
MathMax - сравнение чисел любых типов


Причина обращения: