В сети есть масса предложений «сверхприбыльных» советников , за которые их авторы просят скромненько , эдак под 1000 баксов не меньше. Высокая цена ,по их задумке, как бы является неким доказательством того, что советник действительно способен принести его покупателю , может быть не «сверх-« но все-таки приличную прибыль. На поверку многие из них оказываются , что называется, типичными «сливаторами». Сегодня, в популярном стиле «как это делается» ,мы рассмотрим простую технику написания сверхприбыльного советника и покажем, что это может сделать любой .хоть немного знакомый с графическим анализом и прочитавший книжку Сергея Ковалева по языку программирования MQL4.
Техника в общем несложная. Берется некоторый участок графика ценовых колебаний какой-либо валютной пары и на языке MQL4 описывается то, что там происходит плюс к этому добавляются приказы на покупку-продажу валютной пары после изменения направления тренда - и советник готов. Советник напишем для пары AUD/USD на примере ее колебаний за январь 2015 года на таймфрейме Н1. Будем писать трендовый советник,так как все приличные деньги на Форексе по сути делаются на трендах. Все другие системы типа Мартингейл, заумные нейронные сети, забивающие график радужным веером из бесчисленного количества кривых и тормозящие комп, арбитражные советники,дающие эффект только на демо-счетах и сливающие депозит на реале,по причине войны брокерских контор с «арбитражом», не способные оседлать стихию рынка Форэкс, отставим в сторону. Будем использовать известные каждому трейдеру стандартные индикаторы терминала МТ4. RSI (10) с периодом 10, Rfractal (5) с фракталами из пяти баров, стандартный ZigZag с параметрами 15,5,3 и две МАшки – быструю с периодом 9 и медленную с периодом 21.
Посмотрим на график пары. Видим, что подавляющее большинство приличных трендов сопровождается:
Выходом RSI из зоны перекупленности (70%) и перепроданности (30%),
Образованием свечных разворотных фигур – падающая звезда вверху рынка, молот внизу рынка(который некоторые для удобства называют «восходящей звездой),фигур поглощения,
Образованием фрактальных разворотных фигур типа «три горы» вверху рынка и «три реки» внизу.
Взаимным пересечением быстрой и медленной МА.
Совпадением пиковых значений цены в разворотных свечах и фигурах с вершинами индикатора ZigZag
Вот пожалуй и все основное. Значения индикаторов на интересующих нас барах получаем с помощью функции iCustom();значения фракталов с помощью функции iFractals(); ценовые значения свечей с помощью функций iHigh(), iLow(), iOpen(); iClose(); на соответствующих барах
Дальше записываем условия:
Выхода RSI из зоны перекупленности например в виде
If (I_2>70 && I_1<70) Fact_70_DN=true;
Где I_1 – значение RSI на первом баре.I_2 – значение на втором. Аналогично записываем условие выхода RSI из зоны перепроданности.
Пересечения быстрой и медленной МА например когда быстрая становится выше медленной (восходящий тренд) в виде
If (Sq1_2<=Sq2_2 && Sq1_1>Sq2_1) Fact_CrosUP = true;
Где Sq1_1 – значение быстрой МА на первом баре, Sq1_2 – тоже на втором баре, Sq2_1 - значение медленной МА на первом баре, Sq2_2 – тоже на втором баре, выбор такого обозначения переменных в данном случае объясняется применением в советнике при его написании вместо двух отдельных индикаторов МА универсального индикатора ,известного под названием 35_MA_SquizeMA_Ed, индицирующего не только обе МА, но еще и флэт(не в буквальном смысле, а так как его понимал автор индикатора).
При записи условий образования фигур поглощения и падающей и восходящей звезды следует помнить, что нас интересует не любая такая свечная фигура, а только те, экстремумы которых совпадают с концом ZigZaga. Обозначим их например индексом R Бары конца и вершин ZigZaga , определяемые с помощью той же функции iCustom(); обозначим как t1, t2, t3, t4, а значения - соответственно b1, b2, b3, b4, считая от конца .Нам понадобятся так же значения RSI на вершинах ZigZaga, которые получим с помощью ф-ции iCustom(); по строке:
double I_t1=iCustom(NULL,0,"RSI",10,0,t1);
При этом надо обратить внимание на то, что экстремум RSI может не совпадать с вершиной ZigZaga, или фракталом и отличаться от него на один бар.Это может вносить искажения в срабатывание критериев ,использующих данное значение.Поэтому следует определить экстремальное значение RSI на соседних барах и выбрать минимальное (максимальное ) из них,обозначив его так же индексом R.Достаточно описать три основных типа фигур поглощения – поглощение свечи второго бара свечой первого бара,поглощение свечи третьего бара свчой первого с волчком или дожи между ними и поглощение свечой первого бара трех предыдущих свечей.Первый тип может быть записан в виде:
if(I_1>40.0 && b1>b2 && ((CndW_2>=10 && CndB_1>=CndW_2*0.6)||(CndB_1>=10 && CndW_2>=6 && O_2>C_1)) && (( t1==1)||(t1==2)))
{
Fact_Pog1R_UP=true;
}
Где CndB_1, CndW_2 – высота тела чернойсвечи на первом баре и высота тела белой свечи на втором баре соответственно в пунктах, определяемые по ценовым значениям баров.
Для остальных типов фигур поглощениязаписывается аналогтчно.
Условие образования «падающей звезды» может быть записано в виде:
if( I_1>40.0 && ((CndW_1>=0 && SdwUpW_1>=10 && SdwUpW_1>=SdwDnW_1*2.0 && SdwUpW_1>=CndW_1*1.6) || (CndB_1>=0 &&
SdwUpB_1>=10 && SdwUpB_1>=SdwDnB_1*2.0 && SdwUpB_1>=CndB_1*1.6)))
{
Fact_FStar=true;
}
Где SdwUpW_1 – величина верхней тени белой свечи на первом баре, SdwDnB_1 – величина нижней тени черной свечи на первом баре в пунктах .Такая запись охватывает так же и такую разворотную фигуру как «надгробный камень».Условие образования «молота» и «дракона» записывается аналогично.
Фрактальная разворотная фигура «три горы» может быть записана в виде:
if( NMax_1<=3 && IMax_2R>70 && (UpV2-UpV3)/Point<50 && (UpV2- UpV1)/Point<50&&(UpV2-UpV3)/Point>=5 && (UpV2-UpV1)/Point>=5 && IMax_2R>IMax_1R && IMax_3R>IMax_1R && (( b2== UpV2 && b2>b1)||(b1==UpV2 && b1>b2)) )
{
Fact_3H = true;
}
Где UpV1, UpV2, UpV3 – значения перого, второго и третьего фрактального максимума,определяемые с помощью функции iFractals(); Аналогично записывается условие образования фигуры «три реки».
В случае изменения тренда без образования вышеперечисленных разворотных фигур в качестве критерия разворота может быть использованы фрактальный подъем и фрактальный спад по первому и второму или по первому и третьему фракталу, когда второй или третий фрактал находится в зоне перекупленности,а первый ниже нее(разворот вниз).Или когда второй или третий фрактал находится в зоне перепроданности, а первый выше нее(разворот вверх).Условие фрактального спада может быть записано в виде:
if( (((UpV2 == b2) && (UpV2-UpV1)/Point>=10 && (UpV2-UpV1)/Point <100 )||(UpV3 == b2 && (UpV3-UpV1)/Point>15 && (UpV3-UpV1)/Point<100)) && (H_3-H_1)/Point>=5 && (H_3- H_5)/Point>=3 && t2-NMax_1>6&& I_t2RMax>70)
{
Fact_FallLS=true;
}
Аналогично записывается факт образования фрактального спада.
Перечень разворотных критериев может быть дополнени другими – фигурой «пинцет»,откатом после гэпа и др.
Поскольку после образования разворотных фигур тренд может и не измениться в принципе , то действие разворотных критериев должно быть ограничено по времени ,с тем чтобы ордера не открывались по давно потерявшей актуальность разворотной фигуре.Запись «обнуления» критерия по истечении определенного количества баров может выглядеть например так:
if(N_FStar1>10)
{
Fact_FStar1=false;
Fact_FStar1_R=false;
}
Где N_FStar1 – бар образобания «падающей звезды».По истечении 10 баров критерий обнуляется.
График Н1 пары AUDUSD изобилует небольшими трендами от 50 до 100 пунктов, при этом переворот ордеров будет происходить вблизи цены открытия и профит при этом будет небольшой.Чтобы извлечь максимальную пользу даже из небольших трендов применим простой прием – будем открывать не один ордер , а несколько – например шесть, первые пять с цепочкой тейк-профитов 30, 50, 100, 150, 200 пунктов и шестой с заведомо значительно большим тейк-профитом.Он будет закрываться только по перевороту ,одновременно с ним будут закрываться остальные ордера, если они не закрылись по своему тейк-профиту до этого.Таким образом прибыль будет гарантирована даже если тренд развернется вообще без образования разворотных фигур, что бывает довольно часто.
Запись типичного критерия открытия ордеров например SELL по фигурам поглощения должна содержать факт выхода RSI из зоны перекупленнсти ( Fact_70_DN==true ),факт самих фигур поглощения (Fact_Pog1R_UP==true || Fact_Pog=21R_UP==true|| Fact_Pog3R_UP==true), условие, чтобы бар образования фигуры поглощения не отличался бы от бара выхода RSI из зоны перекупленности больше чем на 2 бара ( MathAbs(N_Fact_H-N_Pog1R_UP)<=2 ) для исключения влияния старых, потерявших актуальность фактов.Кроме того имеет смысл подтверждать образование нового нисходящего тренда наклоном быстрой или медленной МА на 1-м и 2-м барах хотя бы на 1 пункт.При этом удобно разбить тренд на две части – до 140-150 пунктов изменение тренда подтверждать наклоном быстрой МА, а после 140-150 пунктов – наклоном медленной МА. Это позволит вовремя переворачивать позиции при малых трендах и поможет избежать преждевременного закрытия ордеров при корректировках с последующим продолжением на больших трендах. Запись такого условия деления тренда может выглядеть так:
(b1>b2 && (b1-b2)/Point<140 && D_Sq1_21>=1.0)||(b1>b2&&(b1-b2)/Point>140 && D_Sq2_21>1.0)
При выполнении вышеперечисленных условий присваиваем критерию открытия ордеров SELL значение - Crit_S=true ,а если есть открытые BUY-ордера ,то и критерию их закрытия - Crit_B_Cl=true;Аналогично может быть сделана запись условий для других разворотных критериев как SELL так и BUY. Открытие и закрытие ордеров производится с помощьй стандартных функций MQL4 : OrderClose(),OrderSend();
Имеет смысл так же ввести закрытие ордеров в безубыток в случае, если после их открытия сформировались разворотные фигуры противоположного направления и произошел выход RSI из противоположной зоны.
Вот и все. Советник готов!
Прогоним его в тестере МТ4 за январь месяц 2015г(первый график, полный отчет - StrategyTester-v1-1).
Результат в принципе не плохой 190% прибыли за месяц. средний размер прибыльной сделки почти в три раза больше убыточной, коэффициент прибыльности 2.53 . С таким результатом советник уже можно выставлять на продажу как « сверхприбыльный» .Шутка сказать - за месяц 190% прибыли не ударив пальцем о палец! Какой банк может вам такое пообещать? И многие авторы так и делают – сопровождают свой советник отчетами и графиками прибыльности за специально подобранный узкий промежуток времени. Поэтому конечно найти лохов, которые купят советник при наличии отчета только за один месяц достаточно проблематично.
Но мы все таки проверим , какой результат покажет наш советник за промежуток например с сентября(когда рынок просыпается от летней спячки – времени отпусков) по январь месяц, по которому советник собственно и написан(второй график, полный отчет - StrategyTester-v1-5).
Результат в принципе неплохой. Все знают, какая дикая волотильность была на рынке в эти пять месяцев. Мировой кризис, греческие долги, украинский кризис, война процентных ставок и программ QE ведущих экономик мира, паденье цен на нефть и другие сырьевые товары – все это приводило к диким , мало-предсказуемым скачкам курсов валют. И в этих условиях дикой рыночной стихии, сделавшей многих банкротами, советник не только не слил депозит, но и умудрился сделать 326% прибыли! Обеспечил коэффициент прибыльности 1.54. Что очень неплохо!
Так что как видите написать «сверхприбыльный» советник может любой из вас.И результат будет ничуть не хуже, чем у дорогосоящего покупного советника.Как говорили древние - «Пишите и обрящите»!
Техника в общем несложная. Берется некоторый участок графика ценовых колебаний какой-либо валютной пары и на языке MQL4 описывается то, что там происходит плюс к этому добавляются приказы на покупку-продажу валютной пары после изменения направления тренда - и советник готов. Советник напишем для пары AUD/USD на примере ее колебаний за январь 2015 года на таймфрейме Н1. Будем писать трендовый советник,так как все приличные деньги на Форексе по сути делаются на трендах. Все другие системы типа Мартингейл, заумные нейронные сети, забивающие график радужным веером из бесчисленного количества кривых и тормозящие комп, арбитражные советники,дающие эффект только на демо-счетах и сливающие депозит на реале,по причине войны брокерских контор с «арбитражом», не способные оседлать стихию рынка Форэкс, отставим в сторону. Будем использовать известные каждому трейдеру стандартные индикаторы терминала МТ4. RSI (10) с периодом 10, Rfractal (5) с фракталами из пяти баров, стандартный ZigZag с параметрами 15,5,3 и две МАшки – быструю с периодом 9 и медленную с периодом 21.
Посмотрим на график пары. Видим, что подавляющее большинство приличных трендов сопровождается:
Выходом RSI из зоны перекупленности (70%) и перепроданности (30%),
Образованием свечных разворотных фигур – падающая звезда вверху рынка, молот внизу рынка(который некоторые для удобства называют «восходящей звездой),фигур поглощения,
Образованием фрактальных разворотных фигур типа «три горы» вверху рынка и «три реки» внизу.
Взаимным пересечением быстрой и медленной МА.
Совпадением пиковых значений цены в разворотных свечах и фигурах с вершинами индикатора ZigZag
Вот пожалуй и все основное. Значения индикаторов на интересующих нас барах получаем с помощью функции iCustom();значения фракталов с помощью функции iFractals(); ценовые значения свечей с помощью функций iHigh(), iLow(), iOpen(); iClose(); на соответствующих барах
Дальше записываем условия:
Выхода RSI из зоны перекупленности например в виде
If (I_2>70 && I_1<70) Fact_70_DN=true;
Где I_1 – значение RSI на первом баре.I_2 – значение на втором. Аналогично записываем условие выхода RSI из зоны перепроданности.
Пересечения быстрой и медленной МА например когда быстрая становится выше медленной (восходящий тренд) в виде
If (Sq1_2<=Sq2_2 && Sq1_1>Sq2_1) Fact_CrosUP = true;
Где Sq1_1 – значение быстрой МА на первом баре, Sq1_2 – тоже на втором баре, Sq2_1 - значение медленной МА на первом баре, Sq2_2 – тоже на втором баре, выбор такого обозначения переменных в данном случае объясняется применением в советнике при его написании вместо двух отдельных индикаторов МА универсального индикатора ,известного под названием 35_MA_SquizeMA_Ed, индицирующего не только обе МА, но еще и флэт(не в буквальном смысле, а так как его понимал автор индикатора).
При записи условий образования фигур поглощения и падающей и восходящей звезды следует помнить, что нас интересует не любая такая свечная фигура, а только те, экстремумы которых совпадают с концом ZigZaga. Обозначим их например индексом R Бары конца и вершин ZigZaga , определяемые с помощью той же функции iCustom(); обозначим как t1, t2, t3, t4, а значения - соответственно b1, b2, b3, b4, считая от конца .Нам понадобятся так же значения RSI на вершинах ZigZaga, которые получим с помощью ф-ции iCustom(); по строке:
double I_t1=iCustom(NULL,0,"RSI",10,0,t1);
При этом надо обратить внимание на то, что экстремум RSI может не совпадать с вершиной ZigZaga, или фракталом и отличаться от него на один бар.Это может вносить искажения в срабатывание критериев ,использующих данное значение.Поэтому следует определить экстремальное значение RSI на соседних барах и выбрать минимальное (максимальное ) из них,обозначив его так же индексом R.Достаточно описать три основных типа фигур поглощения – поглощение свечи второго бара свечой первого бара,поглощение свечи третьего бара свчой первого с волчком или дожи между ними и поглощение свечой первого бара трех предыдущих свечей.Первый тип может быть записан в виде:
if(I_1>40.0 && b1>b2 && ((CndW_2>=10 && CndB_1>=CndW_2*0.6)||(CndB_1>=10 && CndW_2>=6 && O_2>C_1)) && (( t1==1)||(t1==2)))
{
Fact_Pog1R_UP=true;
}
Где CndB_1, CndW_2 – высота тела чернойсвечи на первом баре и высота тела белой свечи на втором баре соответственно в пунктах, определяемые по ценовым значениям баров.
Для остальных типов фигур поглощениязаписывается аналогтчно.
Условие образования «падающей звезды» может быть записано в виде:
if( I_1>40.0 && ((CndW_1>=0 && SdwUpW_1>=10 && SdwUpW_1>=SdwDnW_1*2.0 && SdwUpW_1>=CndW_1*1.6) || (CndB_1>=0 &&
SdwUpB_1>=10 && SdwUpB_1>=SdwDnB_1*2.0 && SdwUpB_1>=CndB_1*1.6)))
{
Fact_FStar=true;
}
Где SdwUpW_1 – величина верхней тени белой свечи на первом баре, SdwDnB_1 – величина нижней тени черной свечи на первом баре в пунктах .Такая запись охватывает так же и такую разворотную фигуру как «надгробный камень».Условие образования «молота» и «дракона» записывается аналогично.
Фрактальная разворотная фигура «три горы» может быть записана в виде:
if( NMax_1<=3 && IMax_2R>70 && (UpV2-UpV3)/Point<50 && (UpV2- UpV1)/Point<50&&(UpV2-UpV3)/Point>=5 && (UpV2-UpV1)/Point>=5 && IMax_2R>IMax_1R && IMax_3R>IMax_1R && (( b2== UpV2 && b2>b1)||(b1==UpV2 && b1>b2)) )
{
Fact_3H = true;
}
Где UpV1, UpV2, UpV3 – значения перого, второго и третьего фрактального максимума,определяемые с помощью функции iFractals(); Аналогично записывается условие образования фигуры «три реки».
В случае изменения тренда без образования вышеперечисленных разворотных фигур в качестве критерия разворота может быть использованы фрактальный подъем и фрактальный спад по первому и второму или по первому и третьему фракталу, когда второй или третий фрактал находится в зоне перекупленности,а первый ниже нее(разворот вниз).Или когда второй или третий фрактал находится в зоне перепроданности, а первый выше нее(разворот вверх).Условие фрактального спада может быть записано в виде:
if( (((UpV2 == b2) && (UpV2-UpV1)/Point>=10 && (UpV2-UpV1)/Point <100 )||(UpV3 == b2 && (UpV3-UpV1)/Point>15 && (UpV3-UpV1)/Point<100)) && (H_3-H_1)/Point>=5 && (H_3- H_5)/Point>=3 && t2-NMax_1>6&& I_t2RMax>70)
{
Fact_FallLS=true;
}
Аналогично записывается факт образования фрактального спада.
Перечень разворотных критериев может быть дополнени другими – фигурой «пинцет»,откатом после гэпа и др.
Поскольку после образования разворотных фигур тренд может и не измениться в принципе , то действие разворотных критериев должно быть ограничено по времени ,с тем чтобы ордера не открывались по давно потерявшей актуальность разворотной фигуре.Запись «обнуления» критерия по истечении определенного количества баров может выглядеть например так:
if(N_FStar1>10)
{
Fact_FStar1=false;
Fact_FStar1_R=false;
}
Где N_FStar1 – бар образобания «падающей звезды».По истечении 10 баров критерий обнуляется.
График Н1 пары AUDUSD изобилует небольшими трендами от 50 до 100 пунктов, при этом переворот ордеров будет происходить вблизи цены открытия и профит при этом будет небольшой.Чтобы извлечь максимальную пользу даже из небольших трендов применим простой прием – будем открывать не один ордер , а несколько – например шесть, первые пять с цепочкой тейк-профитов 30, 50, 100, 150, 200 пунктов и шестой с заведомо значительно большим тейк-профитом.Он будет закрываться только по перевороту ,одновременно с ним будут закрываться остальные ордера, если они не закрылись по своему тейк-профиту до этого.Таким образом прибыль будет гарантирована даже если тренд развернется вообще без образования разворотных фигур, что бывает довольно часто.
Запись типичного критерия открытия ордеров например SELL по фигурам поглощения должна содержать факт выхода RSI из зоны перекупленнсти ( Fact_70_DN==true ),факт самих фигур поглощения (Fact_Pog1R_UP==true || Fact_Pog=21R_UP==true|| Fact_Pog3R_UP==true), условие, чтобы бар образования фигуры поглощения не отличался бы от бара выхода RSI из зоны перекупленности больше чем на 2 бара ( MathAbs(N_Fact_H-N_Pog1R_UP)<=2 ) для исключения влияния старых, потерявших актуальность фактов.Кроме того имеет смысл подтверждать образование нового нисходящего тренда наклоном быстрой или медленной МА на 1-м и 2-м барах хотя бы на 1 пункт.При этом удобно разбить тренд на две части – до 140-150 пунктов изменение тренда подтверждать наклоном быстрой МА, а после 140-150 пунктов – наклоном медленной МА. Это позволит вовремя переворачивать позиции при малых трендах и поможет избежать преждевременного закрытия ордеров при корректировках с последующим продолжением на больших трендах. Запись такого условия деления тренда может выглядеть так:
(b1>b2 && (b1-b2)/Point<140 && D_Sq1_21>=1.0)||(b1>b2&&(b1-b2)/Point>140 && D_Sq2_21>1.0)
При выполнении вышеперечисленных условий присваиваем критерию открытия ордеров SELL значение - Crit_S=true ,а если есть открытые BUY-ордера ,то и критерию их закрытия - Crit_B_Cl=true;Аналогично может быть сделана запись условий для других разворотных критериев как SELL так и BUY. Открытие и закрытие ордеров производится с помощьй стандартных функций MQL4 : OrderClose(),OrderSend();
Имеет смысл так же ввести закрытие ордеров в безубыток в случае, если после их открытия сформировались разворотные фигуры противоположного направления и произошел выход RSI из противоположной зоны.
Вот и все. Советник готов!
Прогоним его в тестере МТ4 за январь месяц 2015г(первый график, полный отчет - StrategyTester-v1-1).
Результат в принципе не плохой 190% прибыли за месяц. средний размер прибыльной сделки почти в три раза больше убыточной, коэффициент прибыльности 2.53 . С таким результатом советник уже можно выставлять на продажу как « сверхприбыльный» .Шутка сказать - за месяц 190% прибыли не ударив пальцем о палец! Какой банк может вам такое пообещать? И многие авторы так и делают – сопровождают свой советник отчетами и графиками прибыльности за специально подобранный узкий промежуток времени. Поэтому конечно найти лохов, которые купят советник при наличии отчета только за один месяц достаточно проблематично.
Но мы все таки проверим , какой результат покажет наш советник за промежуток например с сентября(когда рынок просыпается от летней спячки – времени отпусков) по январь месяц, по которому советник собственно и написан(второй график, полный отчет - StrategyTester-v1-5).
Результат в принципе неплохой. Все знают, какая дикая волотильность была на рынке в эти пять месяцев. Мировой кризис, греческие долги, украинский кризис, война процентных ставок и программ QE ведущих экономик мира, паденье цен на нефть и другие сырьевые товары – все это приводило к диким , мало-предсказуемым скачкам курсов валют. И в этих условиях дикой рыночной стихии, сделавшей многих банкротами, советник не только не слил депозит, но и умудрился сделать 326% прибыли! Обеспечил коэффициент прибыльности 1.54. Что очень неплохо!
Так что как видите написать «сверхприбыльный» советник может любой из вас.И результат будет ничуть не хуже, чем у дорогосоящего покупного советника.Как говорили древние - «Пишите и обрящите»!
Вложения
Последнее редактирование: