Проект
AutoGraf 4

Краткая характеристика

Пуск и настройка
Сервисные функции
Управление ордерами
Инструменты
Настроечные параметры
Тестирование стратегий

История поддержки

Продукты
Распространение
Брокеры-партнёры
Для трейдеров
Ссылки
Форум

Торговые критерии.

   

 

Любая стратегия основывается на торговых критериях - совокупности признаков, согласно которым необходимо выполнить какие-то конкретные действия, - открыть, закрыть или модифицировать ордера. Алгоритм вычисления торговых критериев закладывается в программу. Если торговые критерии в программе не вычисляются, то такая программа не может быть признана реализацией стратегии и здесь не рассматривается.

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

В пользовательской функции AG_AT() может применяться любой из указанных способов. Но практика программирования показывает, что второй способ является более удобным и поэтому предпочтительным. Ниже рассматривается пример файла AG_Trade_Criterion.mq4, содержащего функции вычисления торговых критериев AG_Trade_Criterion_1() и AG_Trade_Criterion_2(). Для того, чтобы любую из этих функций можно было вызвать на исполнение и практически использовать результаты вычислений (торговые критерии),  в функции AG_AT()  необходимо указать, что эти функции содержатся в файле AG_Trade_Criterion.mq4:

 
#import "AG_Trade_Criterion.ex4"
   int AG_Trade_Criterion_1();                     // Ф-ия определен. торгов. критериев 1
   int AG_Trade_Criterion_2();                     // Ф-ия определен. торгов. критериев 2
#import
 

Эти строки кода можно увидеть в любом примере функции AG_AT(), например, здесь:

Входные и выходные параметры функции AG_AT().

Файл AG_Trade_Criterion.mq4, содержащий Функции AG_Trade_Criterion_1() и AG_Trade_Criterion_2():

 
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
// AG_Trade_Criterion.mq4
// Функции вычисления торговых критериев.
// Могут применяться при построении функции автоматической торговли для AutoGraf 4
// Сергей Ковалёв, Днепропетровск, sk@autograf.dp.ua, ICQ 64015987, http://autograf.dp.ua
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
#property library   
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int AG_Trade_Criterion_1()                   // Функции вычисления торговых критериев 1
   {                                         // http://book.mql4.com/ru/samples/expert
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 0 жж
// Возвращаемые значения:
// 10 - открытие Buy  
// 20 - открытие Sell 
//  0 - значимых критериев нет
// -1 - используется другой финансовый инструмент
//---------------------------------------------------------------------------------- 1 --
   int    Period_MA_1 = 11;                  // Период МА 1
   int    Period_MA_2 = 31;                  // Период МА 2
   double Delta_MA    = 28.0;                // Расстояние между МА 
//   double Delta_MA    = 13.0;              // Расстояние между МА 
   double MA_1;                              // Значение МА_1 текущее
   double MA_2;                              // Значение МА_2 текущее 
   string Sym   = "EURUSD";                  // Название финансового инструмента
//================================================================================== 2 ==
   if (Sym != Symbol())                      // Если это не наш финансовый инструмент..
      return(-1);                            // .. то уходим без рассуждений
//---------------------------------------------------------------------------------- 3 --
   MA_1 = iMA(NULL,0,Period_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0);// МА_1 на текущем баре
   MA_2 = iMA(NULL,0,Period_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0);// МА_2 на текущем баре

   if (MA_1 > MA_2 + Delta_MA*Point)         // Если разница между МА 1 и 2 большая ..
      return (10);                           // .. то возвращаем критерий открытия Buy
   if (MA_1 < MA_2 - Delta_MA*Point)         // Если разница между МА 1 и 2 большая ..
      return (20);                           // .. то возвращаем критерий открытия Sell
//================================================================================== 4 ==
   return(0);                                // Значимых критериев нет
   }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 5 жж
int AG_Trade_Criterion_2()                   // Функции вычисления торговых критериев 2
   {                                         // http://book.mql4.com/ru/build/conditions    
//================================================================================== 6 ==
// Возвращаемые значения:
// 10 - открытие Buy  
// 20 - открытие Sell 
// 11 - закрытие Buy
// 21 - закрытие Sell
// 0  - значимых критериев нет
// -1 - используется другой финансовый инструмент
//---------------------------------------------------------------------------------- 7 --
   int St_min = 30;                          // Минимальный  уровень стохастика
   int St_max = 70;                          // Максимальный уровень стохастика
   double Open_Level =5;                     // Уровень MACD для открытия (пунктов)
   double Close_Level=4;                     // Уровень MACD для закрытия (пунктов)
   double M_0, M_1;                          // Значение MACD MAIN   на 0 и 1 барах
   double S_0, S_1;                          // Значение MACD SIGNAL на 0 и 1 барах
   double St_M_0, St_M_1;                    // Значение Stochastic MAIN на 0 и 1 барах
   double St_S_0, St_S_1;                    // Значение Stochastic SIGNAL на 0 и 1 бар
   string Sym   = "EURUSD";                  // Название финансового инструмента
//================================================================================== 8 ==
   if (Sym != Symbol())                      // Если это не наш финансовый инструмент..
      return(-1);                            // .. то уходим без рассуждений
//---------------------------------------------------------------------------------- 9 --
   M_0=iMACD(Sym,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,0);               // 0 бар
   M_1=iMACD(Sym,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,1);               // 1 бар
   S_0=iMACD(Sym,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);             // 0 бар
   S_1=iMACD(Sym,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);             // 1 бар

   St_M_0=iStochastic(Sym,PERIOD_M15,5,3,3,MODE_SMA,0,MODE_MAIN,  0);      // 0 бар
   St_M_1=iStochastic(Sym,PERIOD_M15,5,3,3,MODE_SMA,0,MODE_MAIN,  1);      // 1 бар
   St_S_0=iStochastic(Sym,PERIOD_M15,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);      // 0 бар
   St_S_1=iStochastic(Sym,PERIOD_M15,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);      // 1 бар

//--------------------------------------------------------------------------------- 10--
   double Opn = Open_Level *Point;           // Уровень MACD для открытия (отн.знач.цены)
   double Cls = Close_Level*Point;           // Уровень MACD для закрытия (отн.знач.цены)
 
   if(M_0>S_0 && -M_0>Opn && St_M_0>St_S_0 && St_S_0<St_min)
      return(10);                            // Сработал критерий открытия Buy    
   if(M_0<S_0 &&  M_0>Opn && St_M_0<St_S_0 && St_S_0>St_max)
      return(20);                            // Сработал критерий открытия Sell 

   if(M_0<S_0 &&  M_0>Cls && St_M_0<St_S_0 && St_S_0>St_max)
      return(11);                            // Сработал критерий закрытия Buy    
   if(M_0>S_0 && -M_0>Cls && St_M_0>St_S_0 && St_S_0<St_min)
      return(21);                            // Сработал критерий закрытия Sell         
//================================================================================= 11 ==
   return(0);                                // Значимых критериев нет
   }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж Конец модуля жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 12 жж
 

Скачать файл AG_Trade_Criterion

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

  • Функция AG_Trade_Criterion_1().

Вычисления торговых критериев выполняются на основе значений двух скользящих средних (МА) с разными периодами. Если МА с меньшим периодом усреднения (здесь МА11) выше МА с большим периодом (здесь МА31) и разница цен между ними большая (здесь 28 пунктов), то считается сработавшим критерий на открытие Buy. Если ситуация зеркальная, то срабатывает критерий открытия Sell.

В блоке 0-1 описаны значения возвращаемые функцией. В зависимости от того, какой критерий вычислен, возвращается то или иное численное значение. Например, если функция возвращает значение 10, то это означает, что сработал критерий для открытия ордера Buy.

EUR/USD. Если программа запущена в окне другого финансового инструмента, то функция будет прерывать вычисления в блоке 2-3 и всё время возвращать значение -1, что в принятых значениях возврата означает "не наш финансовый инструмент". Иными словами в окне любого фин. инструмента, кроме EUR/USD, функция никогда не определит значимый торговый критерий.

В блоке 3-4 выполняются вычисления торговых критериев. Сначала определяются текущие значения МА разных периодов, которые потом сравниваются. И если оказывается, что разница между значениями МА превышает пороговое значение, то функция возвращает значение 10 или 20 в зависимости от направления движения рыночных цен. Если же ни один из критериев не сработал, то функция возвращает 0 - значимых критериев нет.т.

  • Функция AG_Trade_Criterion_2().

Вычисления торговых критериев выполняются на основе значений двух стандартных индикаторов - MACD и Stochastiс. Структура этой функции такая же, как и у предыдущей. В блоке 7-8 инициализированы переменные и заданы численные значения некоторых из них. В блоке 9-10 вычисляются численные значения индикаторов MACD и Stochastiс, а в блоке 10-11 выполняется анализ соотношения показаний индикаторов. И если эти показания соответствуют одному из принятых критериев, то функция возвращает соответствующее численное значение.

Подробное описание критериев, принятых в этой функции (+картинки) можно посмотреть здесь:

Представленные функции вычисления торговых критериев используются в некоторых примерах функции AG_AT(). Для практического использования в реальной практике торговли необходимо разработать и проверить собственные правила вычисления торговых критериев. Приложение AutoGraf 4 позволяет проверить работоспособность различных способов вычисления торговых критериев при скоростном тестировании и тестировании в режиме визуализации.

 

 

Copyright © SK 2006 - 2011