Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Maximum Percentage of Equity Risk - библиотека для MetaTrader 5

Просмотров:
2455
Рейтинг:
(34)
Опубликован:
2015.01.23 14:11
Обновлен:
2016.11.22 07:33
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Этот код позволяет вам установить максимальный процент риска от эквити.

Он проверяет, соответствуют ли риску запрашиваемые лоты на покупку/продажу. Если нет, лоты автоматически исправляются так, чтобы они подходили под установленный риск.

Код:

bool UseMaximumPercentageRisk=true;
double MaximumPercentageRisk=25;

#include <Trade\SymbolInfo.mqh>
//+------------------------------------------------------------------+
//|  GetLotSize RPTrade                                              |
//+------------------------------------------------------------------+
double GetLotSize(double lotsize)
  {
//--- Gets pair specs  
   CSymbolInfo symInfo;
   int  digits_bn=symInfo.Digits();
   double  points_bn=symInfo.Point();
   string symbol_bn=_Symbol;
//--- adjust lot 
   int tmpdecimal=1;
   double old_lot=lotsize;
//---
   if((NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*(MaximumPercentageRisk/100)/1000.0,tmpdecimal)<lotsize) && UseMaximumPercentageRisk) //лот подходит под риск ?
     {
      lotsize=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*(MaximumPercentageRisk/100)/1000.0,tmpdecimal);  //расчет нового размера лота 

      if(lotsize<SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_MIN)) //размер лота подходит под минимльный размер лота брокера ?
        {
         lotsize=SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_MIN);   //Нет! Настройка размера лота под минимальный размер лота брокера
         Print(_Symbol," Lot adjusted from ",old_lot," для уменьшения размера разрешенного сервером ",lotsize);
        }
      else
        {
         Print(_Symbol," Lot adjusted from ",old_lot," to ",lotsize," для соответствия условию максимального риска. В каждой сделке рисковать можно только ",MaximumPercentageRisk,"% от свободной маржи.");   //Да! 
         if(MathAbs(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)-MathRound(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)))>1.0E-10) //Размер лота подходит под разрешенный шаг брокера ?
           {
            lotsize=SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)*NormalizeDouble(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP),0);   //НЕТ! Перерасчет размера лота.    
            Print("M-",_Symbol," Warning: Your calculated percentage at risk lot size of was not a multiple of minimal step",SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP),". Размер лота изменился до",lotsize);
           }
        }
     }
   return(lotsize);
  }


Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/2142

Change Chart and Timeframe Change Chart and Timeframe

Модифицированные скрипты для быстрого изменения графиков и таймфреймов на всех графиках при помощи горячих клавиш.

Apply Template Apply Template

Простой скрипт для применения шаблона и/или таймфрейма ко всем открытым графикам.

Long position Long position

Простой скрипт, обеспечивающий открытие длинной позиции с расчетом указанного соотношения процента риска и прибыли.

Short position Short position

Простой скрипт, обеспечивающий открытие короткой позиции с указанным соотношением процента риска и прибыли.