В данной теме мы рассмотрим самый жесткий шаблон для проведения подобных торговых операций. Прежде всего нам нужно определиться с тем каким образом мы будем представлять готовый программный код. Как обычно, я предлагаю формировать его в виде отдельных функций. Если функция возвращать должна три варианта результата выполнения или более и при этом эти результаты отличны от математических величин, то я создаю функцию строкового типа и результат её выполнения это строка и, поскольку, для торговой операции нужно лишь знать в данном контексте покупать, продавать или быть вне рынка, то я так и формирую возвращаемые значения:
"UP", "DN", "NO" ("вверх", "вниз", "нет").
Таким образом, мы должны в соответствие с условиями определить какой шаблон складывается: бычий, медвежий или вне рынка.
Рассмотрим условия бычьего шаблона
0 свеча (текущая, на которой возможно открывать будем сделку)
1) Open[0] > MA[0].
Открытие свечи на которой будет откываться покупка должно быть больше значения МАшки.
1 свеча назад:
1) Low[1] <= MA[1] (факт касания, теста МАшки);
2) Close[1] > MA[1] (ни в коем случае не должны пробить закрытием МАшку);
3) Open[1] > MA[1] (т.е. подошли к МАшке сверху, значит бычий паттерн).
Мы требуем факта тестирования ценой МАшки и дополнительно это скажет нам о том, что цена возле МАшки и сверху. Открытие и закрытие 1-ой свечи должно быть выше МАшки, это значит мы цена находится в бычьем положении.
2 свеча назад:
1) Open[2] > MA[2] (т.е. находимся выше МАшки);
2) Close[2] > MA[2] (ни в коем случае не должны были пробить МАшку и ранее).
Таким образом, у нас в шаблоне три свечи: нулевая (на которой потенциально открываем покупку), первая (прошлая свеча), вторая (позапрошлая свеча). Это минимальный набор для шаблона. Можно и более строгие требования добавить, к примеру чтобы и третья свеча была в бычьем положении, но пока остановимся на этом.
Почему мы вообще требуем условия не пробития ценой закрытия МАшки? Да потому, что если этого не требовать, то как тогда фильтровать флет? Флет просто убьет депозит, т.к. будет так или иначе при торговле до нескольких десятков пересечений ценой МАшки.
Рассмотрим условия медвежьего шаблона
0 свеча (текущая, на которой возможно открывать будем сделку)
1) Open[0] < MA[0].
Открытие свечи на которой будет откываться продажа должно быть меньше значения МАшки.
1 свеча назад:
1) High[1] >= MA[1];
2) Close[1] < MA[1];
3) Open[1] < MA[1].
2 свеча назад:
1) Open[2] < MA[2];
2) Close[2] < MA[2].
Код данной функции выглядит так:
- Код: выделить все
string f_PatMAPrice(int pe, int me, int ap)
{
double dblMA0 = iMA(NULL, 0, pe, 0, me, ap, 0);
double dblMA1 = iMA(NULL, 0, pe, 0, me, ap, 1);
double dblMA2 = iMA(NULL, 0, pe, 0, me, ap, 2);
bool bolA = false, bolB = false, bolC = false;
// Бычий паттерн рассматриваем:
if(Open[0] > dblMA0) bolA = true;
if((Low[1] <= dblMA1) && (Open[1] > dblMA1) && (Close[1] > dblMA1)) bolB = true;
if((Open[2] > dblMA2) && (Close[2] > dblMA2)) bolC = true;
if(bolA && bolB && bolC) return("UP");
// Медвежий паттерн рассматриваем:
bolA = false; bolB = false; bolC = false;
if(Open[0] < dblMA0) bolA = true;
if((High[1] >= dblMA1) && (Open[1] < dblMA1) && (Close[1] < dblMA1)) bolB = true;
if((Open[2] < dblMA2) && (Close[2] < dblMA2)) bolC = true;
if(bolA && bolB && bolC) return("DN");
return("NO");
}
В функцию f_PatMAPrice() мы передаем параметры:
- pe - период МАшки;
- me - метод усреднения МАшки;
- ap - тип цены МАшки.
В основном коде программы для использования данного шаблона нужно создать строковую переменную и присвоить ей значение данной функции, передав в неё соответствующие параметры скользящей средней. Данная переменная получит значения:
- "UP" - появился бычий шаблон и можно открывать покупку:
- "DN" - появился медвежий шаблон и можно открывать продажу;
- "NO" - шаблон оставаться вне рынка.
На скрине ниже мы видим пример работы по данному шаблону. Есть прибыльные входы, но также есть и убыточные. Полностью избежать убытков не удается. Также многое зависит от правильного подбора периода и типа скользящей средней.