Скрипт по методике торговли "Мажорный Ва-Банк"

Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 0.5$
Ответственный Модератор - Haos

Скрипт по методике торговли "Мажорный Ва-Банк"

Сообщение Haos » 13 дек 2021, 10:19

Рассмотрим создание скрипта по торговой методике для валютных пар рынка Форекс, описанной в теме Журнал торговли ARX.
Скрипт должен выводить на экран информацию о том, какой путь был пройден ценой за прошлую неделю, т.е. рассчитывать растояние от Close до Open недельной свечи по семи мажорным валютным парам, а именно: AUDUSD, EURUSD, GBPUSD, NZDUSD, USDCHF, USDCAD, USDJPY.
При этом, нужно чтобы выводилась информация о том, какая валютная пара была рекордсменом по пройденному пути ценой, а также само значение в пунктах, пройденное ценой. Нам, также, нужно предусмотреть возможность отличия в наименовании инструментов от классических, заключающуюся в том, что иногда брокеры добавляют символ (постфикс) после наименования торгового инструмента, например, EURUSDc, EURUSDm и т.п.

Итак, приступим.
Прежде всего, определим в скрипте семь массивов для хранения различной информации:
Код: выделить все
string strMSym[N];   // массив символов
double dblMOpe[N];   // массив цен открытия
double dblMClo[N];   // массив цен закрытия
int    intMDeY[N];   // массив разности цены открытия и закрытия
int    intMDeM[N];   // массив модулей разности цены открытия и закрытия
double dblPoin[N];
int    intDigi[N];

strMSym[N] - массив наименования торговых пар;
dblMOpe[N] - массив цен открытия недельных свеч;
dblMClo[N] - массив цен закрытия недельных свеч;
Для определения пройденного пути ценой за неделю нам понадобятся массивы:
intMDeY[N] - массив разности цены открытия и закрытия;
intMDeM[N] - массив модулей разности цены открытия и закрытия.
Также нужны будут два массива для хранения рыночной информации о семи валютных пар:
dblPoin[N] - массив величин торговых пунктов;
intDigi[N] - массив количества цифр в валютных парах.

Количество символов в массивах можно специфицировать:
Код: выделить все
#define N 7


Нам понадобятся три функции для работы скрипта, которые напишем.

1. Функция для инициализации массива торговых символов. Фактически, мы просто заносим классические наименования торговых инстументов в массив strMSym[].
Код: выделить все
void f_ItitSymbol()
{
   strMSym[0] = "AUDUSD"; strMSym[1] = "EURUSD"; strMSym[2] = "GBPUSD"; strMSym[3] = "NZDUSD";
   strMSym[4] = "USDCHF"; strMSym[5] = "USDCAD"; strMSym[6] = "USDJPY";
}


2. Данная функция осуществляет модификацию классического наименования торгового инструмента с учетом постфикса, если требуется:
Код: выделить все
void f_AddPostfix(string pos)
{
   if(pos != "")   
   {
      for(int i = 0; i < N; i++) { strMSym[i] += pos; }
   }
}


3. Основная функция для получения рыночной информации и осуществления расчетов f_GetData():
Код: выделить все
void f_GetData()
{
   for(int i = 0; i < N; i++)
   {
      dblMOpe[i] = iOpen (strMSym[i], PERIOD_W1, 1);
      dblMClo[i] = iClose(strMSym[i], PERIOD_W1, 1);
      dblPoin[i] = MarketInfo(strMSym[i], MODE_POINT);
      intDigi[i] = (int) MarketInfo(strMSym[i], MODE_DIGITS);
      // находим разницу между ценой закрытия и открытия (пнт):
      intMDeY[i] = (int) ((dblMClo[i] - dblMOpe[i]) / dblPoin[i]);
      intMDeM[i] = MathAbs(intMDeY[i]);
   }
}

В ней мы заполняем массивы цен открытия и закрытия недельных свечей, производим расчет разностных массивов и определяем величину в пунктах пройденную ценой.

Рассмотрим тело функции OnStart():
Код: выделить все
void OnStart()
{
   f_ItitSymbol();
   f_AddPostfix(strPoS);
   
   f_GetData();
   int intJmax = ArrayMaximum(intMDeM, WHOLE_ARRAY, 0);
   int intYmax = intMDeY[intJmax];
   
   if(intYmax >= 0) { strDir = "UP"; }
   else if(intYmax < 0) { strDir = "DN"; }
   // пара с наибольшим проходом за неделю:
   string strSym = strMSym[intJmax];

   Comment( "\n", "Размер прошлой недельной свечи (пнт.): ",
            "\n", strMSym[0]," = ", intMDeY[0],
            "\n", strMSym[1]," = ", intMDeY[1],
            "\n", strMSym[2]," = ", intMDeY[2],
            "\n", strMSym[3]," = ", intMDeY[3],
            "\n", strMSym[4]," = ", intMDeY[4],
            "\n", strMSym[5]," = ", intMDeY[5],
            "\n", strMSym[6]," = ", intMDeY[6],
            "\n", "------------------------",
            "\n", "Ymax = ", intYmax,
            "\n", "Sym  = ", strSym);
   
}

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

И в конце-концов, осуществляем вывод полученной информации и расчетов на экран, в терминале окна торгового инструмента:
Код: выделить все
   Comment( "\n", "Размер прошлой недельной свечи (пнт.): ",
            "\n", strMSym[0]," = ", intMDeY[0],
            "\n", strMSym[1]," = ", intMDeY[1],
            "\n", strMSym[2]," = ", intMDeY[2],
            "\n", strMSym[3]," = ", intMDeY[3],
            "\n", strMSym[4]," = ", intMDeY[4],
            "\n", strMSym[5]," = ", intMDeY[5],
            "\n", strMSym[6]," = ", intMDeY[6],
            "\n", "------------------------",
            "\n", "Ymax = ", intYmax,
            "\n", "Sym  = ", strSym);

Пример работы скрипта:

1-Скрипт Ва-Банк-2021-12-13 .png

Видно, что за прошлую неделю самый большой путь прошла цена по паре AUDUSD, в значении 1768 пнт.

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

Файл скрипта выложен в теме Скрипт "Мажорный Ва-Банк".
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 23442
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 1,661.25 Доллар
Группа: Главные модераторы
Благодарил (а): 3229 раз.
Поблагодарили: 7945 раз.

Вернуться в MQL – теория и практика

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения