чё-то запутался с расчётом :-)
если например хочу открыть BUY со StopLoss=100пунктов и на максимум что позволяет депо. И при всём этом чтобы в худшем случае ордер закрылся по честному стоп-лосу, а не был прибит брокером "за недостатком средств".
как в таком случае рассчитывается объём ? как учитываются всякие MARGIN_REQUIRED, MARGIN_MAINTAINANCE
Ищите по запросу: Расчёт лота по Вильямсу
Ищите по запросу: Расчёт лота по Вильямсу
нельзя более точно направить ? а то поиск по сайту ведёт в словоблудные статьи и быстро попадает в рекурсию
Вот с этого думаю вырежете нужное, где-то есть готовая, но очень жарко искать, извините
//+------------------------------------------------------------------+ //| Расчет лота по риску для StopLoss | //+------------------------------------------------------------------+ string sLot(double Percent=1, double Stoploss=500, int txt=0) { double TickValue =MarketInfo(_symbol,MODE_TICKVALUE), TickSize =MarketInfo(_symbol,MODE_TICKSIZE), ContractSize=SymbolInfoDouble(_symbol,SYMBOL_TRADE_CONTRACT_SIZE), Min_Lot =MarketInfo(_symbol,MODE_MINLOT), Max_Lot =MarketInfo(_symbol,MODE_MAXLOT), Step =MarketInfo(_symbol,MODE_LOTSTEP), Free =AccountFreeMargin(), Lots_New=0; int CalcMode =(int)MarketInfo(_symbol,MODE_MARGINCALCMODE); if (Percent > 100) { Percent = 100; } if (Percent == 0) { Lots_New = Min_Lot; } else { // Lots_New = MathFloor((((Free*Percent/100)/Stoploss)/TickValue)/Step)*Step; // Lots_New = MathFloor((((Free*Percent/100)/Stoploss)/((TickSize*TickValue)*ContractSize))/Step)*Step; if(CalcMode==0) { Lots_New = MathFloor((((Free*Percent/100)/Stoploss)/TickValue)/Step)*Step; } if(CalcMode==1||CalcMode==2||CalcMode==3) { Lots_New = MathFloor(((((Free*Percent)/100)/Stoploss)/((TickSize*TickValue)*ContractSize/TickValue))/Step)*Step; } if(CalcMode==4) { Lots_New = MathFloor((((Free*Percent/100)/Stoploss)/TickValue)/Step)*Step; } } if (Lots_New > Max_Lot) { Lots_New = Max_Lot; } if (Lots_New > cLot(100)) { Lots_New =cLot(100); } if (Lots_New < cLot(100) && Lots_New < Min_Lot) { if (txt==1) { return(Lang?"Превышен лимит":"limit Exceeded"); } else { return(Lang?"Не хватает свободных средств":"There is a lack of available funds"); } } return(DoubleToStr(Lots_New,2)); } //+------------------------------------------------------------------+ //| Расчет лота по риску | //+------------------------------------------------------------------+ double cLot(double Percent=0) { double Free=AccountFreeMargin(), One_Lot=MarketInfo(_symbol,MODE_MARGINREQUIRED), Min_Lot=MarketInfo(_symbol,MODE_MINLOT), cStep=MarketInfo(_symbol,MODE_LOTSTEP), Lots_New=0; if (Percent > 100) { Percent = 100; } if (Percent == 0) { Lots_New = 0; return(0); } else { Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep; } if (Lots_New < Min_Lot) { Lots_New = Min_Lot; } if (Lots_New*One_Lot > Free) { return(NormalizeDouble(0,2)); } return(NormalizeDouble(Lots_New,2)); }
Применять функцию sLot
чё-то запутался с расчётом :-)
если например хочу открыть BUY со StopLoss=100пунктов и на максимум что позволяет депо. И при всём этом чтобы в худшем случае ордер закрылся по честному стоп-лосу, а не был прибит брокером "за недостатком средств".
как в таком случае рассчитывается объём ? как учитываются всякие MARGIN_REQUIRED, MARGIN_MAINTAINANCE
По логике и здравому смыслу лот должен быть в процентах от текущей эквити. Все остальное от лукавого.)
чё-то запутался с расчётом :-)
если например хочу открыть BUY со StopLoss=100пунктов и на максимум что позволяет депо. И при всём этом чтобы в худшем случае ордер закрылся по честному стоп-лосу, а не был прибит брокером "за недостатком средств".
как в таком случае рассчитывается объём ? как учитываются всякие MARGIN_REQUIRED, MARGIN_MAINTAINANCE
узнаем текущий стопаут, от него получаем макс убыток (чтобы "не был прибит брокером"), зная эту сумму и дистанцию (100 пунктов), вычисляем необходимый (для слива) объем ордера...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
чё-то запутался с расчётом :-)
если например хочу открыть BUY со StopLoss=100пунктов и на максимум что позволяет депо. И при всём этом чтобы в худшем случае ордер закрылся по честному стоп-лосу, а не был прибит брокером "за недостатком средств".
как в таком случае рассчитывается объём ? как учитываются всякие MARGIN_REQUIRED, MARGIN_MAINTAINANCE