|
Торговые критерии.
Любая стратегия основывается на торговых критериях - совокупности
признаков, согласно которым необходимо выполнить какие-то конкретные действия, - открыть, закрыть или модифицировать ордера. Алгоритм вычисления торговых критериев закладывается в программу. Если торговые критерии в программе не вычисляются, то такая программа не может быть признана реализацией стратегии и здесь не рассматривается.
Существует два
технических способа вычисления торговых критериев. Первый, простой,
способ заключается в том, что критерии вычисляются непосредственно в коде эксперта. Этот способ пригоден лишь для беглого опробования
критериев в начале создания собственного проекта. Согласно второму способу торговые
критерии вычисляются в специально предназначенной для этого функции, которая при необходимости вызывается экспертом.
В
пользовательской функции 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.
Вычисления торговых критериев выполняются на основе значений двух скользящих
средних (МА) с разными периодами. Если МА с меньшим периодом усреднения (здесь
МА11) выше МА с большим периодом (здесь МА31)
и разница цен между ними большая (здесь 28 пунктов), то считается сработавшим
критерий на открытие Buy. Если ситуация зеркальная, то
срабатывает критерий открытия Sell.
В блоке 0-1 описаны значения возвращаемые функцией. В зависимости
от того, какой критерий вычислен, возвращается то или иное численное значение.
Например, если функция возвращает значение 10, то это означает, что сработал
критерий для открытия ордера Buy.
EUR/USD. Если
программа запущена в окне другого финансового инструмента, то функция будет
прерывать вычисления в блоке 2-3 и всё время возвращать значение -1, что в
принятых значениях возврата означает "не наш финансовый инструмент". Иными
словами в окне любого фин. инструмента, кроме EUR/USD,
функция никогда не определит значимый торговый критерий.
В блоке 3-4 выполняются вычисления торговых критериев. Сначала
определяются текущие значения МА разных периодов, которые потом сравниваются. И
если оказывается, что разница между значениями МА превышает пороговое значение,
то функция возвращает значение 10 или 20 в зависимости от направления движения
рыночных цен. Если же ни один из критериев не сработал, то функция возвращает 0
- значимых критериев нет.т.
Вычисления торговых критериев выполняются на основе значений двух стандартных
индикаторов - MACD и Stochastiс.
Структура этой функции такая же, как и у предыдущей. В блоке 7-8
инициализированы переменные и заданы численные значения некоторых из них. В
блоке 9-10 вычисляются численные значения индикаторов MACD
и Stochastiс, а в блоке 10-11 выполняется анализ соотношения показаний
индикаторов. И если эти показания соответствуют одному из принятых критериев, то
функция возвращает соответствующее численное значение.
Подробное описание критериев, принятых в этой функции (+картинки)
можно посмотреть здесь:
Представленные функции вычисления торговых критериев используются
в некоторых примерах функции AG_AT(). Для
практического использования в реальной практике торговли необходимо разработать
и проверить собственные правила вычисления торговых критериев. Приложение
AutoGraf 4 позволяет проверить работоспособность
различных способов вычисления торговых критериев при скоростном тестировании и
тестировании в режиме визуализации.
|
|