Как рассчитать размер лота от заданной суммы? - страница 3

 
   double m;
   bool z=OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),m);   
   double x=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/m;    
   double s=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
   x=NormalizeDouble(MathFloor(x/s)*s,8);
   Alert(x);

Допилите сами

 
Andrey Dik:

нифига не фигня, а зашибись.

не работает штатная функция?

 
Andrey Dik:

не работает штатная функция?

Нет. где-то 0 дает, где-то 100000.

 
Прочитал тему и понял что у меня ошибка в рассчете лота. Уже несколько дней сижу и никак не пойму.  В примере советника moving average (на 25 строке можете глянуть), который с терминалом, по моему неправильный рассчёт. Написано , что риск в процентах, на самом деле с разрядами ошибка по моему. Сори что код не кидаю, у меня буфера общего нет с тем компом. Ну там суть такая что OrderCalcMargin с параметром 1 лот, получает 1000.  Потом ACCOUNT_MARGIN_FREE умножается на риск в процентах и делится на 1000. По моему получается лот огромный слишком, на один разряд кажется ошибка. А почему нет стопа тут? Как правильно написать рассчёт лота? Что-то запутался. Так надо со стопом или без?  Напишите пж, как имея процент риска и стоп, получить лот.
 
Andrey Dik:

не работает штатная функция?

у одних ДЦ работает, а у других нет  -  установлено экспериментально

 
ОrderCalcMargin с лотом 0.01 даёт цену одного пункта в валюте депозита, при лоте 0.01 ????
 
Ivan_Invanov:
ОrderCalcMargin с лотом 0.01 даёт цену одного пункта в валюте депозита, при лоте 0.01 ????

вам нужна OrderCalcProfit

 
Ivan_Invanov:
ОrderCalcMargin с лотом 0.01 даёт цену одного пункта в валюте депозита, при лоте 0.01 ????

Нет