Здравствуйте уважаемые программисты MQL5. Задался вопросом о расчете лотности при депо в % риска. Искал информацию на форумах и гуглах. Находил только ответ на MQL4 при помощи функции MarketInfo(); но к сожалению такой функции в MQL5 нет.
Кто сможет поделится опытом и знаниями, как при помочи переменной % риска на депо, и размер стоп лоста рассчитать правильную лотность на форексах. Буду вам очень благодарен.
//+------------------------------------------------------------------+ //| Moving Averages.mq5 | //| Copyright 2009-2017, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2009-2017, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #include <Trade\Trade.mqh> input double MaximumRisk = 0.02; // Maximum Risk in percentage input double DecreaseFactor = 3; // Descrease factor
//--- int ExtHandle=0; bool ExtHedging=false; CTrade ExtTrade; #define MA_MAGIC 1234501
//+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double TradeSizeOptimized(void) { double price=0.0; double margin=0.0; //--- select lot size if(!SymbolInfoDouble(_Symbol,SYMBOL_ASK,price)) return(0.0); if(!OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1.0,price,margin)) return(0.0); if(margin<=0.0) return(0.0); double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*MaximumRisk/margin,2); //--- calculate number of losses orders without a break if(DecreaseFactor>0) { //--- select history for access HistorySelect(0,TimeCurrent()); //--- int orders=HistoryDealsTotal(); // total history deals int losses=0; // number of losses orders without a break for(int i=orders-1;i>=0;i--) { ulong ticket=HistoryDealGetTicket(i); if(ticket==0) { Print("HistoryDealGetTicket failed, no trade history"); break; } //--- check symbol if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=_Symbol) continue; //--- check Expert Magic number if(HistoryDealGetInteger(ticket,DEAL_MAGIC)!=MA_MAGIC) continue; //--- check profit double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT); if(profit>0.0) break; if(profit<0.0) losses++; } //--- if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } //--- normalize and check limits double stepvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP); lot=stepvol*NormalizeDouble(lot/stepvol,0); double minvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN); if(lot<minvol) lot=minvol; double maxvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX); if(lot>maxvol) lot=maxvol; //--- return trading volume return(lot); } //+------------------------------------------------------------------+
Где у вас лот - впишете туда TradeSizeOptimized()
и это дело будет вам рассчитывать
Два примера:
- www.mql5.com
Где у вас лот - впишете туда TradeSizeOptimized()
и это дело будет вам рассчитывать
только не пойму как он рассчитывает и открывает разные лоты (обьём) и почему именно так?
только не пойму как он рассчитывает и открывает разные лоты (обьём) и почему именно так?
наверное, там где цена пойдёт против меня - выставляет с большем объёмом лот
-----------------
что бы я быстрее слился
Где у вас лот - впишете туда TradeSizeOptimized()
и это дело будет вам рассчитывать
а я так , на него рассчитывал - TradeSizeOptimized(). а он играет, в свою дудочку
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте уважаемые программисты MQL5. Задался вопросом о расчете лотности при депо в % риска. Искал информацию на форумах и гуглах. Находил только ответ на MQL4 при помощи функции MarketInfo(); но к сожалению такой функции в MQL5 нет.
Кто сможет поделится опытом и знаниями, как при помочи переменной % риска на депо, и размер стоп лоста рассчитать правильную лотность на форексах. Буду вам очень благодарен.