Рекомендуемый ДЦ - Forex4you !

На предыдущем уроке Язык MQL — Урок 3 «расчет лота» мы научили наш скрипт «test» рассчитывать лот в зависимости от свободных средств на торговом счете форекс. Но чего то ему не хватает, давайте взглянем еще раз на рисунок:

Расчет лота на MQL
Вот оно!!! — Лот у нас получился с 4 знаками после запятой. А брокер форекс требует 2 знака после запятой. Конечно в ручную не составит труда откинуть лишние 2 знака, но мы стремимся автоматизировать нашу торговлю, т.е. всю работу свалить на компьютер. Кроме того — на рисунке не понятно по какой валютной паре рассчитан автоматически лот. Да и цифру максимального риска не помешает видеть на экране монитора.

Итак, давайте продолжим улучшать наш скрипт «test».

Для начала заставим компьютер отбрасывать лишние цифры. Округлять нельзя. Ведь при округлении получится не то что нам надо (нам надо 0.06, а при округлении будет 0.07 - это больше указанного нами риска).

Для того чтобы узнать сколько знаков после запятой разрешено вашим брокером форекс — воспользуемся известной нам функцией MarketInfo(string symbol, int type).

Только вторым параметром будем передавать MODE_LOTSTEP шаг изменения размера лота.

double Step =MarketInfo(Symbol(),MODE_LOTSTEP); переменная Step будет содержать шаг изменения лота.
Если разделить наш лот на шаг (например 0.01) мы получим: 0.0684/0.01=6.84
Теперь возьмем целую часть от этого числа (функция MathFloor()) = 6 и умножим на шаг (0.01) получим 0.06 (то что и требовалось).

Объединим это с нашим расчетом:

double Lot =MathFloor(Free*MaxRisk/100/One_Lot/Step)*Step;
результат:

вывод информации в Metatrader 4

Получилось отлично.

Осталось добавить информацию о валюте и риске в выводимое окно.
Риск содержится в переменной MaxRisk, а текущая валюта выдается функцией Symbol().
Все это мы знаем из предыдущих уроков.

Изменим вызов функции "Alert()":
Alert(Symbol(),"(«,MaxRisk,»%)=",Lot);

Результат:
скрипт на MQL

Все хорошо, но брокер форекс ограничил не только количество знаков после запятой для лота, но и максимальный и минимальный размер лота. А наш скрипт «test» это не учитывает. Срочно исправляем этот недочет, для этого добавим в наш скрипт следующий код:

double Min_Lot=MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot=MarketInfo(Symbol(),MODE_MAXLOT);
if(Lot<Min_Lot) Lot=Min_Lot;
if(Lot>Max_Lot) Lot=Max_Lot;

знакомая нам функция MarketInfo() с параметром MODE_MINLOT — вернет нам размер минимально разрешенного лота, а с параметром MODE_MAXLOT — размер максимального лота.

Функция if() — выполняет проверку условия и в зависимости от результата выполняет или нет следующую за ней команду.
if(Lot<Min_Lot) Lot=Min_Lot; — если рассчитанный лот меньше минимального, то используем минимальный.
if(Lot>Max_Lot) Lot=Max_Lot; — если рассчитанный лот больше максимального, то используем максимальный.

Вот полный код нашего созданного скрипта «test» на языке MQL:

//±-----------------------------------------------------------------+
//| test.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//±-----------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property show_inputs
extern int MaxRisk=2;
//±-----------------------------------------------------------------+
//| script program start function |
//±-----------------------------------------------------------------+
int start()
{
//----
double Free =AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Lot =MathFloor(Free*MaxRisk/100/One_Lot/Step)*Step;
if(Lot<Min_Lot) Lot=Min_Lot;
if(Lot>Max_Lot) Lot=Max_Lot;
Alert(Symbol(),"(«,MaxRisk,»%)=",Lot);
//----
return(0);
}
//±-----------------------------------------------------------------+

Результат его работы следующий:
улучшенный скрипт "test" для Metatrader 4

Вроде бы больших изменений нет, но теперь мы научили наш скрипт рассчитывать лот согласно всем ограничениям нашего брокера форекс с Metatrader 4 и этот расчет можно использовать для более серьезных вещей, в том числе и при дальнейшем использовании в любых скриптах или советниках форекс MT4, которые вы в дальнейшем будете создавать.

Скачать: скрипт test