Мультивалютным называется такой советник, который устанавливается на один график, а торговые операции выполняет с двумя и более инструментами. Надо различать мультивалютный советник и тот, который устанавливается на множество графиков - это просто совместная работа нескольких экземпляров обыкновенного моновалютного советника.
Сразу скажу, что ничего сложного в мультивалютных советниках нету, нужно просто соблюдать некоторые правила, которые ниже рассмотрим.
1. Перечень торгуемых инструментов.
Есть несколько способов задания наименований всех инструментов, которыми собираемся торговать.
Самый простой способ - в настройках советника предусмотреть отдельные параметры для каждого инструмента:
- Код: выделить все
input string Sym1 = "EURUSD"; // имя 1-й пары
input string Sym2 = "GBPUSD"; // имя 2-й пары
input string Sym3 = "AUDUSD"; // имя 3-й пары
input string Sym4 = "USDJPY"; // имя 4-й пары
input string Sym5 = "USDCAD"; // имя 5-й пары
Недостаток данного способа заключается в том, что работа возможна только с заранее определенным количеством инструментов, хотя для некоторых задач, обычно связанных с хеджированием, такой способ предпочтительный.
Второй способ - перечислить торгуемые инструменты в каком-то параметре в настройках советника:
- Код: выделить все
input string Symbols = "EURUSD,GBPUSD,AUDUSD,USDJPY,USDCAD,USDCHF,NZDUSD"; // перечень торгуемых символов
При этом количество инструментов может быть любым, но в программе надо аккуратно прочитать в строковый массив имена всех символов и затем в цикле для каждого элемента массива брать наименование символа и поочередно с каждым из них работать. Об этом более подробно разберем в процессе работы.
Также немаловажный аспект: советник будет запускаться по тикам того инструмента, на графике которого он стоит. Если установили на EURUSD, то только когда будет тик именно на EURUSD, советник сможет проанализировать все другие пары. Поэтому мультивалютный советник следует устанавливать на самую ликвидную валютную пару.
ВАЖНО: в "Обзоре рынка" МТ4 должны присутствовать все инструменты, по которым должна вестись торговля.
2. Доступ к таймсериям
Если необходимо определить значение цены открытия, закрытия, хая, лоу, количество баров, время открытия, тиковые объемы, то в обычном моновалютном советнике мы используем предопределенные массивы-таймсерии Open[], Close[], High[], Low[], Time[] и т.д. В мультивалютном советнике об этом можно забыть. Для доступа к таймсериям используются соответствующие функции с явным указанием инструмента, таймфрейма и номера бара:
- Код: выделить все
double iOpen(
string symbol, // символ
int timeframe, // период
int shift // сдвиг
);
double iClose(
string symbol, // символ
int timeframe, // период
int shift // сдвиг
);
double iHigh(
string symbol, // символ
int timeframe, // период
int shift // сдвиг
);
double iLow(
string symbol, // символ
int timeframe, // период
int shift // сдвиг
);
3. Работа с предопределенными переменными
Речь идет о таких предопределенных переменных, как последняя известная цена продажи (запрашиваемая цена) Ask, последняя известная цена покупки (предложение на покупку) Bid, Размер пункта Point, количество цифр после десятичной точки в цене Digits и тому подобных.
Для мультивалютных советников необходимо все эти значения брать с помощью функции MarketInfo(...). Из справки MQL4:
- Код: выделить все
double MarketInfo(
string symbol, // символ инструмента
int type // тип информации
);
Параметры
symbol
[in] Имя символа.
type
[in] Идентификатор запроса, определяющий тип возвращаемой информации. Может быть любым из значений идентификаторов запроса.
Возвращаемое значение
Информация о финансовом инструменте. Часть информации о текущем финансовом инструменте хранится в предопределенных переменных.
Пример:
double vbid = MarketInfo("EURUSD",MODE_BID);
double vask = MarketInfo("EURUSD",MODE_ASK);
double vpoint = MarketInfo("EURUSD",MODE_POINT);
int vdigits = (int)MarketInfo("EURUSD",MODE_DIGITS);
int vspread = (int)MarketInfo("EURUSD",MODE_SPREAD);
А теперь перейдем к примеру простого мультивалютного советника.