Всем привет!
Пытаюсь рассчитать размер лота в зависимости от размера депозита.
Получается что-то подобное:
Все правильно высчитывается на форексе, но на металлах (XAUUSD, XAGUSD) риск увеличивается в 10 раз. Если я установил риск в 4%, то на металлах он будет 40%. Что я не учел?
У меня так
Lot=NormalizeDouble((AccountInfoDouble(ACCOUNT_BALANCE)/100000)*LotSize,2);Только не от депозита,а от текущего баланса
У меня так
Только не от депозита,а от текущего балансаМежду прочим, у меня тоже на металлах подобная фигня была. Я так и не нашел, в чем проблема.
Примеры:
Для пары AUDCAD
Balance=AccountBalance();
double VAsk=MarketInfo("AUDUSD.I",MODE_ASK);
Lots=NormalizeDouble((Balance/(VAsk*10.0))*0.01,2);
Для пары AUDUSD
Balance=AccountBalance();
Lots=NormalizeDouble((Balance/(Ask*10.0))*0.01,2);
Для пары CADJPY
Balance=AccountBalance();
double VAsk=1/MarketInfo("USDCAD.I",MODE_ASK);
Lots=NormalizeDouble((Balance/(VAsk*10.0))*0.01,2);
чтож вы плохому то людей учите, стоимость лота на каждом символе разная, надо ж по человечески вычислять, автор - тут где-то правильная формула валялась, можно поискать или погуглить
Я не учу-просто написал,как у меня.Стоимость лота на каждом символе разная-это так-поэтому у меня
LotSize
тоже на каждом символе разный
Оптимизация уже покажет какой процент от баланса использовать безопаснее...
это МТ4 double все эти переменные; part=GlobalVariableGet("part"); Balance=AccountBalance(); minLot=MarketInfo(instrument,MODE_MINLOT); stpLot=MarketInfo(instrument,MODE_LOTSTEP); maxLot=MarketInfo(instrument,MODE_MAXLOT); MarginSize=MarketInfo(instrument,MODE_MARGINREQUIRED); workLotsB=(Balance/MarginSize)*part; if( workLotsB<minLot ) LotsB=NormalizeDouble(minLot,2); else if( workLotsB>maxLot ) LotsB=NormalizeDouble(maxLot,2); else LotsB=NormalizeDouble(workLotsB,2);
Всем привет!
Пытаюсь рассчитать размер лота в зависимости от размера депозита.
Получается что-то подобное:
Все правильно высчитывается на форексе, но на металлах (XAUUSD, XAGUSD) риск увеличивается в 10 раз. Если я установил риск в 4%, то на металлах он будет 40%. Что я не учел?
Вот это
double risk = 0.04; // риск на сделку в процентах
риск не в процентах. Это больше похоже на подгонку ответа в этой строке
double volume = NormalizeDouble((equity * point) / (relativeSl * (1 / risk) * tickValue), 2); // 1/risk = 25
также не понятно для чего. Этот risk надо использовать для определения какой суммой решено рискнуть. В результате формула будет выглядеть так
double volume = NormalizeDouble((equity * risk * point) / (relativeSl * tickValue), 2);
Вот это
риск не в процентах. Это больше похоже на подгонку ответа в этой строке
также не понятно для чего. Этот risk надо использовать для определения какой суммой решено рискнуть. В результате формула будет выглядеть так
Ваша формула - то же самое, что и моя. Умножить на 0.04 и делить на 25(1/0.04) - это одно и то же) Хотя ваш вариант лучше хотя бы потому, что операция деления дороже, чем операция умножения.
чтож вы плохому то людей учите, стоимость лота на каждом символе разная, надо ж по человечески вычислять, автор - тут где-то правильная формула валялась, можно поискать или погуглить
Гуглил, но, к сожалению, ничего путного не нашел. В некоторых формулах используют tick size, но как его сюда всунуть - без понятия.
В общем, проблема не в самом расчете объема сделки, а в вычислении стоимости пипса в валюте депозита. Как раз стоимость пипса вычисляется для металлов неверно.
У меня такая функция была, ещё под MQL4 но это не важно, задаётся размер стоп лосс и риск который получим при стопе, возвращает лот. Работала и работает отлично.
//+------------------------------------------------------------------------+ //+- Расчет лота в зависимости от расстояния до StopLoss (c) BeerGod 2015 -+ //+------------------------------------------------------------------------+ double LotSize(int SL, double MR)// SL-StopLoss MR-MaxRisk { if (SL == 0) return(0); // исключение деления на ноль double Free =AccountBalance(); double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE);//стоимость 1 пункта 1 лота double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT); double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT); double Step =MarketInfo(Symbol(),MODE_LOTSTEP); double Lot =MathFloor((Free*MR/100)/(SL*LotVal)/Step)*Step; if(Lot<Min_Lot) Lot=Min_Lot; if(Lot>Max_Lot) Lot=Max_Lot; return(Lot); } //End
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
Пытаюсь рассчитать размер лота в зависимости от размера депозита.
Получается что-то подобное:
Все правильно высчитывается на форексе, но на металлах (XAUUSD, XAGUSD) риск увеличивается в 10 раз. Если я установил риск в 4%, то на металлах он будет 40%. Что я не учел?