MQL5 расчет лотности !

 

Здравствуйте уважаемые программисты MQL5. Задался вопросом о расчете лотности при депо в % риска. Искал информацию на форумах и гуглах. Находил только ответ на MQL4 при помощи функции MarketInfo();  но к сожалению такой функции в MQL5 нет.

Кто сможет поделится опытом и знаниями, как при помочи переменной % риска на депо, и размер стоп лоста рассчитать правильную лотность на форексах. Буду вам очень благодарен.

 
setborg:

Здравствуйте уважаемые программисты 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() 

и это дело будет вам рассчитывать 

 

Два примера:

Money Fixed Margin
Money Fixed Margin
  • www.mql5.com
Пример для расчёта размера лота c фиксированным уровнем маржи. То есть, если задать 10%, откроется позиция, размер маржи которой составит 10% от свободной маржи. Входные параметры: Начальное значение  задаётся исключительно для "разогрева" тестера стратегий. Далее рассчитывается остаток от деления переменной  на число  (число взято просто с...
 
Aleksandr Klapatyuk:

Где у вас лот - впишете туда TradeSizeOptimized() 

и это дело будет вам рассчитывать 

только не пойму как он рассчитывает и открывает разные лоты (обьём) и почему именно так?

объём

 
Aleksandr Klapatyuk:

только не пойму как он рассчитывает и открывает разные лоты (обьём) и почему именно так?


наверное, там где цена пойдёт против меня - выставляет с большем объёмом лот

-----------------

что бы я быстрее слился 

 
Aleksandr Klapatyuk:

наверное, там где цена пойдёт против меня - выставляет с большем объёмом лот

-----------------

что бы я быстрее слился 

ну да! скорее всего оно так и есть. там где больше лот - там и минус 63 точки 

точка

а вот где меньше лот идёт в плюсе 36 точек 

точка 1 

 

кажись этот расчёт- кто то ведёт - в свою выгоду 

точка ч

точка 3

где меньше лот - там плюс, где больше лот там минус  

 

Спасибо ! Автору - за эту тему. я бы не додумался проследить - как выставляются объёмы лот.

вывод мой - не буду я с этим  риском пользоваться. лучше определённый лот буду выставлять .

закрыл всё - пока всё не слили .

пока не слили

 
Aleksandr Klapatyuk:

Где у вас лот - впишете туда TradeSizeOptimized() 

и это дело будет вам рассчитывать 

а я так , на него рассчитывал - TradeSizeOptimized(). а он играет, в свою дудочку