d9e5a92d

Парнюк А. - Первые шаги в MQL

Продолжим обучать наш скрипт рассчитывать размер лота.
На прошлом уроке мы научили его запрашивать у нас размер средств которыми мы хотим рискнуть. Теперь займемся самим расчетом.
Для расчета скрипту необходимо знать какими средствами мы располагаем. Можно конечно в ручную ему это сообщать(как мы сделали с риском), но зачем делать лишнюю работу?

Пусть он сам берет эту цифру из торгового терминала.
Для этих целей предназначена функция AccountFreeMargin()
Все вычислительные операции необходимо делать в функции start.
Поэтому добавим в эту функцию строчку: double Free=AccountFreeMargin();
теперь в переменной типа double(число с плавающей точкой) и именем Free у нас будет содержаться размер свободных средств.
Еще нам необходимо знать стоимость одного лота по заданной валюте. Для этого воспользуемся функцией MarketInfo(string symbol, int type). Эта функция возвращает различную информацию в зависимости от переданных ей параметров. Первым идет строковый параметр для указания валюты.

Можно указать напрямую (например: EURUSD), но мы хотим универсальности(что бы скрипт сам определял валюту на графике которой он запущен). Воспользуемся функцией Symbol() котороя вернет нам название текущей валюты. Второй параметр функции MarketInfo используем: MODE_MARGINREQUIRED (Размер свободных средств, необходимых для открытия 1 лота) Собрав все вместе получим:
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
Итак, переменная One_Lot будет содержать стоимость одного лота по текущей валюте.
С помощью простейших математических операций рассчитаем НАШ лот: double Lot= Free*MaxRisk/100/One_Lot;


Free - свободные средства
MaxRisk/100 - процент(наш параметр MaxRisk надо перевести в %. Для этого его делим на 100) One_Lot - стоимость одного лота
Пример расчета лота для EURUSD(курс для примера возьмем 1.4615): у нас есть Free =1000$(свободные средства)
MaxRisk = 2
2% от 1000$ это 1000*2/100=20$
стандартный размер контракта(1 лот) = 100000
при покупке 100000 EUR мы должны заплатить 100000*1.4615=146150$
но у нас есть плечо(возьмем для примера 500), соответственно мы заплатим One_Lot=146150/ 500=292.3$(все эти вычисления делает MarketInfo(Symbol(),MODE_MARGINREQUIRED))
Наш лот получится: Lot=20/292.3= 0,0684
Хорошо. Оптимальный лот мы рассчитали. А как его теперь увидеть на экране?

Воспользуемся функцией Alert(), в качестве параметра укажем НАШ рассчитанный лот.
¦+
//+¦
//| test.mq4
//| Copyright 2009, MetaQuotes Software Corp.
//|
//+------------------------------------------------------------------+
#property copyright Copyright 2009, MetaQuotes Software Corp. #property link
#property show_inputs extern int MaxRisk=2;
¦+
//+¦
//| script program start function |
//+------------------------------------------------------------------+ int start()
{
//
double Free =AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED); double Lot =Free*MaxRisk/100/One_Lot;
Alert(Lot);
//
return(0);
}
//+------------------------------------------------------------------+ Компилируем и запускаем(это мы уже делать умеем).




Содержание раздела