Секреты моего Автолота DynamicLot Autolot

Секреты моего Автолота DynamicLot Autolot

Алерт в индикатор. Как вставить Alert и Arrow в индикатор?
MT 4 Отчеты эксперта и сервера log файлы для рассмотрения проблемы
Алерт в индикатор. Как вставить Alert и Arrow в индикатор?
MT 4 Отчеты эксперта и сервера log файлы для рассмотрения проблемы


В рамках данной статьи, я попытаюсь рассказать Вам о своих методах расчета лота от % (РИСК) Свободной маржи, на разных валютных парах и разных типах депозита

И так начнем.:
 

Основные понятия:

   Для начала осветим несколько понятий, используемых в данном расчете:

Free margin (свободная маржа) (AccountFreeMargin())– денежные средства, которые не используются в открытых позициях в качестве залога. Свободная маржа рассчитывается по формуле: свободная маржа = текущее состояние депозита – необходимая маржа в открытых позициях. Данный показатель используется для определения количества сделок, которые могут быть открыты на текущий момент.

Ask – это цена, по которой вы покупаете определенное количество финансового инструмента у банка. А банк, соответственно по этой цене вам его продает. Торгуя на рынке Форекс, Вы будете встречать данный тип цены повсюду: от торгового терминала, до биржевых сводок и аналитических статей по финансовым рынкам. 

   Bid – это цена, по которой вы продаете определенное количество финансового инструмента своему банку. А банк, соответственно, по этой цене у Вас его покупает. Торгуя на рынке Форекс, Вы будете встречать данный тип цены везде, где речь будет идти о международном валютном рынке Форекс: от торгового терминала и курсов валют на сайте Вашего брокера, до биржевых сводок и аналитических статей по международным финансовым рынкам. 

   Кредитное плечо – отношение суммы залога к заемной сумме. При начальном выборе кредитного плеча выбирается размер кредитного плеча, который обозначает ту сумму, во сколько раз будет увеличен депозит Клиента для осуществления им торговых операций на валютном рынке. Клиент может выбрать размер кредитного плеча от 1:1 до 1:500, то есть Клиент может торговать только на свои средства, а может запросить увеличение своего депозита до 500 раз, чтобы с этой суммой выходить на рынок. Кредитное плечо, как отношение суммы, с которой трейдер выходит на рынок к размеру его депозита, играет важную роль в процессе торговли, так как именно кредитное плечо позволяет трейдеру существенно увеличить свой капитал.

   Валютная пара – это обозначение двух валют, образующих вместе курс валют. Валютная пара служит в качестве объекта для осуществления финансовых сделок. Валютная пара обозначается в виде последовательно идущих друг за другом обозначений двух валют, составляющих эту валютную пару, которые записываются либо слитно, либо через наклонную черту в следующем виде: базовая валюта/валюта котировки. Базовой валютой обозначается первая валюта, которая продается и покупается, а котируемая валюта служит для выражения цены на базовую валюту. Валютная пара – это базовое понятие валютного рынка, которое встречается повсюду, как только речь заходит о данном рынке: от рыночной сводки до торгового терминала.

   Размер лота – объем базовой валюты, товара или количество акций, указанных в спецификации контракта. Размер лота зависит от количества валюты, указанной в контракте и является единицей измерения в определении размера торгового контракта. Лот имеет определенный размер, с помощью которого осуществляется определение количества валюты, по которой совершаются финансовые операции на рынке Форекс. Чтобы осуществить сделку, Клиент определяет размер совершаемой им сделки, который выражается в количествах лотов. Объем торговой сделки указывает какое количество валюты будет составлять сделку. Лот – это размер контракта, который является фиксированным объемом валюты, используемой в торговых операциях на рынке Форекс.

    Курс одной валюты по отношению к другой устанавливается в результате взаимодействия спроса и предложения на них в определенный момент времени. Процесс установки валютного курса носит название котировки валют. Котировки могут быть прямыми и обратными.   Под прямой котировкой понимается выражение цены иностранной валюты в единицах национальной. Большинство валютных курсов представляет собой прямую котировку доллара США к валютам различных стран. Например:USD/RUR – 30, 70 – это значит, что один доллар США оценивается или равен   30, 70 российских рублей;USD/CHF – 1, 0850 – в этом случае, один доллар США оценивается или равен 1.0850 швейцарских франков.   Обратная котировка – это выражение стоимости национальной валюты в единицах иностранной. Обратную котировку исторически имеют английский фунт стерлингов, евро, австралийский и новозеландский доллары. Например, котировка – EUR/USD – 1,3374 значит, что 1 еврo стоит 1,3374 долларов США, GBP/USD – 1,5970, это значит, что 1 английский фунт стерлингов равен 1.5970 американских долларов и т.д.     Еще существует такое понятие как “кросс курс” – это обменные курсы, в которых доллар не является ни базовой, ни валютой котировки, например EUR/JPY, GBP/CHF, EUR/GBP и другие.

 Техническая сторона

  1. NormalizeDouble – Округление числа с плавающей запятой до указанной точности.
  2. MODE_LOTSIZE – Размер контракта в базовой валюте инструмента
  3. MODE_LOTSTEP – Шаг изменения размера лота 
  4. AccountCurrency – Возвращает наименование валюты для текущего счета. 
  5. MathFloor  – Функция возвращает числовое значение, представляющее наибольшее целое число, которое меньше или равно x. 


Важно: Для того, чтобы все расчеты были верны – активируйте все символы в панели “Обзор рынка” 

Моя формула расчета

   Моя формула расчета выглядит так: 

Депозит USD 

Депозит USD  Прямая котировка ()

 Лот= Свободная маржа*Риск*Кредитное плечо/100/Размер контракта

Депозит USD  Обратная котировка()

 Лот= Свободная маржа*Риск*Кредитное плечо/Ask/100/Размер контракта

Депозит USD  Кросс курс:()

       1 вариант, если есть текущая цена базовой валюты+USD (например если расчетная пара AUDCAD то текущая цена базовой валюты = AUDUSD)

          Лот= Свободная маржа*Риск*Кредитное плечо/(текущая цена базовой валюты+USD)/100/Размер контракта

       2 вариант, если нет текущей цены базовой валюты+USD (например CADJPY)

          Лот= Свободная маржа*Риск*Кредитное плечо/100/Размер контракта

Депозит EUR

Депозит EUR Прямая котировка

 Лот= Свободная маржа*Риск*Кредитное плечо/100/Размер контракта

Депозит EUR Кросс курс:

       текущая цена EUR + валюта котирования (например если расчетная пара AUDCAD то текущая цена  валюта котирования  = EURAUD)

          Лот= Свободная маржа*Риск*Кредитное плечо/( текущая цена EUR валюта котирования)/100/Размер контракта

Депозит RUR

Депозит RUR Обратная котировка(например USDRUR)

 Лот= MathFloor  (Свободная маржа*Риск*Кредитное плечо/100/Текущая цена/Размер контракта/Шаг лота/20)*Шаг лота

Депозит RUR Кросс(например EURGBP)

  текущая цена =MarketInfo(StringSubstr(Symbol(),0,3)+”RUR”+StringSubstr(Symbol(),6),MODE_BID);     

if(pr!=0)Lot2=MathFloor( Свободная маржа * Риск * Кредитное плечо / текущая цена /100/ Размер контракт / Шаг лота )* Шаг лота ; 

else  Лот =MathFloor( Свободная маржа * Риск * Кредитное плечо /100/ Размер контракт / Шаг лота )* Шаг лота ; 

Порядок данных функций получились в ходе расчетов параметров на разных депозитах. Если ВЫ имеете свое мнение по поводу данных расчетов, пожалуйста, предлагайте свои функции автолота при заказе на программирование

Внешние переменные Функция расчета автолота::

LotsФиксированный лот для открытия позиции. 
DynamicLotДинамический лот, Автолот для открываемой позиции. 
Включение динамический расчет лота в процентах от свободной маржи и других факторов. 
Расчет нашего автолота.
LotBalancePcntПроцент для автолота
RiskRateRiskRate – курс вашей валюты по отношению к доллару. 
По умолчанию RiskRate = 0 – означает, что советник будет пытаться найти правильный курс в Обзоре рынка. 
Для того чтобы автолот работал адекватно со всеми валютными парами, вам необходимо включить в Обзоре рынка “Показать все валютные пары”.
MaxLotМаксимальный лот, который может открыть советник при расчете автолота и мартингейла на первую главную позицию 
Martin Стандартное умножение лота последней закрытой позиции в убытке.
Если Martin = 1, тогда мартингейл не включается. 
Если Martin = 0, тогда советник не сможет открыть следующую позицию 
Если Martin = 2, тогда первый лот = 0.1, второй лот = 0.2, и так далее, 0.4 – 0.8 – 1.6
Если Martin = 0.5, тогда первый лот = 1, второй лот = 0.5, и так далее, 0.25 – 0.125

Вам необходим код? 

Функция код  расчета автолота:

double GetSizeLot(double ll=1) //Функция возвращает значение лотов, 
  {
   string Autor=" Автор функции для шаблона : www.expforex.com";
   string lotcalc;
   double pr;
   string Valdepo=AccountCurrency();
//если включен ММ то значение лотов, 
   double Lot2,MinLots,MaxLots;
   int lotdig;
   if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.01)lotdig=2; else lotdig=1;
   if(Valdepo=="USD")
     {
      if(StringSubstr(Symbol(),0,3)=="USD")Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*
         AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
      else if(StringSubstr(Symbol(),3,3)=="USD")Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*
         AccountLeverage()/Ask/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
      else
        {
         pr=MarketInfo(StringSubstr(Symbol(),0,3)+"USD",MODE_ASK);
         if(pr!=0)Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()/pr/100/
            MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
         else Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()/100/
            MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
        }
     }
   if(Valdepo=="EUR")
     {
      if(StringSubstr(Symbol(),0,3)=="EUR")Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*
         AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
      else
        {
         pr=MarketInfo("EUR"+StringSubstr(Symbol(),0,3),MODE_BID);
         if(pr!=0)Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()*pr/100/
            MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
         else Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()/100/
            MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
        }
     }

   if(Valdepo=="RUR" || Valdepo=="RUB")
     {
      if(StringSubstr(Symbol(),0,3)=="USD")Lot2=NormalizeDouble(AccountFreeMargin()/40*
         LotBalancePcnt*AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
      else if(StringSubstr(Symbol(),3,3)=="USD")Lot2=NormalizeDouble(AccountFreeMargin()/40*
         LotBalancePcnt*AccountLeverage()/Ask/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
      else
        {
         pr=MarketInfo(StringSubstr(Symbol(),0,3)+"USD",MODE_ASK);
         if(pr!=0)Lot2=NormalizeDouble(AccountFreeMargin()/40*LotBalancePcnt*AccountLeverage()/pr/100/
            MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
         else Lot2=NormalizeDouble(AccountFreeMargin()/40*LotBalancePcnt*AccountLeverage()/100/
            MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
        }
     }

   MinLots=MarketInfo(Symbol(),MODE_MINLOT);
   MaxLots=MaxLot;
   lotcalc=" Autolot="+Lot2;
   if(!DynamicLot)Lot2=Lots;

   if(Lot2 < MinLots) Lot2 = MinLots;
   if(Lot2 > MaxLots) Lot2 = MaxLots;
   lotcalc=lotcalc+" MinLots="+MinLots+" LOT="+NormalizeDouble(Lot2,lotdig);
   Print(lotcalc);
   return(NormalizeDouble(Lot2,lotdig));
  }
 

Функция расчета автолота по стоплоссу:

Если Вы хотите добавить в Ваш эксперт фуцнкцию автолота от стоплосса, вы можете скачать наш код: 

StopLosssd= стоплосс в пунктах

Внешние переменные:

extern double Lots=0.1;                   // Фиксированный лот 
extern double LotBalancePcnt=20;          // % от депозита если LotBalancePcnt==0 используется лот
 

Функция:

double GetSizeLotStopLoss(double StopLosssd=1) //Функция возвращает значение лотов, 
 {
 string Autor=" Автор функции для шаблона : www.expforex.com";
 string Valdepo=AccountCurrency();
//если включен ММ то значение лотов, 
 double MinLots;
 int lotdig;
 if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.01)lotdig=2; else lotdig=1;
 double Free=AccountFreeMargin();
 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*LotBalancePcnt/100)/(StopLosssd*LotVal)/Step)*Step;
 MinLots=MarketInfo(Symbol(),MODE_MINLOT);

 if(Lot<MinLots) Lot=MinLots;

 return(NormalizeDouble(Lot,lotdig));
 }

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.


    This website uses cookies to improve your experience. By using this website you agree to our Data Protection Policy.
    Read more