Приветствую!
Есть одна стратегия. Проверить надо. Буду очень признательна, если по ней напишите советник mql4.
В ней используется индикатор Slope_Direction_Line_ Я его немного доработала, поэтому сам индикатор прилагаю:
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
extern int period = 60; // период
extern double FilterNumber = 2.0; // фильтр
extern int ma_method = 3; // период усреднения 0-3
extern int applied_price = 0; // цена 0-6
double MA_Buffer[];
double Dntrend[];
double Uptrend[];
int init() {
int startDraw = MathSqrt(period) + period + 1.0; // от куда рисуем линию - с 89 бара при периоде 80
IndicatorShortName("Slope_Direction_Line_(" + period + ")"); // название при наведении
IndicatorBuffers(3);
SetIndexBuffer(2, MA_Buffer);
SetIndexBuffer(0, Dntrend);
SetIndexBuffer(1, Uptrend);
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
SetIndexDrawBegin(0, startDraw);
SetIndexDrawBegin(1, startDraw);
return (0);
}
int deinit() {
return (0);
}
int start() {
int counted_bars = IndicatorCounted(); // количество баров, не измененных после последнего вызова индикатора
if (counted_bars<0) return (-1);
//---- последний посчитанный бар будет пересчитан
if (counted_bars>0) counted_bars--;
int limit = Bars - counted_bars;
int shift_MA = limit;
for (shift_MA = limit; shift_MA >= 0; shift_MA--) MA_Buffer[shift_MA] = 2.0 * f_iMA(shift_MA, period / FilterNumber) - f_iMA(shift_MA, period);
for (shift_MA = limit; shift_MA >= 0; shift_MA--) Dntrend[shift_MA] = iMAOnArray(MA_Buffer, 0, MathSqrt(period), 0, ma_method, shift_MA);
for (shift_MA = limit; shift_MA >= 0; shift_MA--)
if (Dntrend[shift_MA] > Dntrend[shift_MA + 1]) Uptrend[shift_MA] = Dntrend[shift_MA];
else Uptrend[shift_MA]=EMPTY_VALUE;
return (0);
}
double f_iMA(int shift, int ma_period) {
return (iMA(Symbol(), 0, ma_period, 0, ma_method, applied_price, shift));
}
Параметры:
double indSlope1 = iCustom(NULL, 0, "Slope_Direction_Line_", 60, 2, 3, 0, 0, 0);
— значение индикатора (и синей линии и красной), переменная есть всегда
double indSlope2 = iCustom(NULL, 0, "Slope_Direction_Line_", 60, 2, 3, 0, 1, 0);
— если значение равно EMPTY_VALUE (indSlope2==EMPTY_VALUE), то значит тренд вниз, линия красная; если значение есть (indSlope2==indSlope1), то линия синяя, тренд вверх.
//+------------------------------------------------------------------+
Сама стратегия.
Для любого тайм-фрейма значение индикатора будет неизменным. Планирую тестировать на парах eur/usd, gbp/usd.
5 знаков.
1)
Тренд вниз — у индикатора красная линия. Цена пересекает красную линию снизу вверх. Образуя над ней вершину (
А). 3-7 свечей над линией. Потом цена возвращается к линии индикатора (
В). Расстояние от
А до
В не менее 30 пунктов (на 5 знаках). В тот момент, когда цена касается линии индикатора в точке
B (+-5 пунктов на 5 знаках), выставляется buy-stop на уровне линии
A, учитывающий спрэд.
Если цена закрылась ниже линии индикатора — buy-stop убираем.
Если на линии осталась только тень свечи, и цена пошла вверх, отработав наш buy-stop, то выставляются stop-loss и take-profit.
stop-loss ставим ниже точки
В, учитывая спрэд.
take-profit = (
А —
В) *
2, плюс учитывая спрэд.
Цифру 2, просьба, вынести в отдельную переменную. Планируется с ней поэкспериментировать.
2)
Тренд вверх — у индикатора синяя линия. Цена пересекает синюю линию сверху вниз. Образуя под ней впадину (
А). 3-7 свечей под линией. Потом цена возвращается к линии индикатора (
В). Расстояние от
А до
В не менее 30 пунктов (на 5 знаках). В тот момент, когда цена касается линии индикатора в точке
B (+-5 пунктов на 5 знаках), выставляется sell-stop на уровне линии
A, учитывающий спрэд.
Если цена закрылась выше линии индикатора — sell-stop убираем.
Если на линии осталась только тень свечи, и цена пошла вниз, отработав наш sell-stop, то выставляются stop-loss и take-profit.
stop-loss ставим выше точки
В, учитывая спрэд.
take-profit = (
В —
А) * 2, плюс учитывая спрэд.
Вот и вся стратегия.
Комментарии (30)
35 AM2 Сообщений: 16264 - Андрей
27 Oxy Автор Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
вот то что пока удалось сделать:
Редактирован: 20 ноября 2014, 13:29
35 AM2 Сообщений: 16264 - Андрей
Значение красной линии при indSlope2==EMPTY_VALUE можно узнать у indSlope1. (indSlope1 — возвращает значение линии, в не зависимости, красной или синей)
27 Oxy Автор Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
35 AM2 Сообщений: 16264 - Андрей
27 Oxy Автор Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
35 AM2 Сообщений: 16264 - Андрей
Проблема в том, что индикатор Slope_Direction_Line_ тоже считает на каждом тике. Т.е. вот это утверждение не верно:
Посылая CountCandle мы хотим получить значение индикатора столько-то свечей назад. А мы то получим столько-то тиков назад.
Или это я запуталась и всё верно??? Но нам же надо от 3-х до 7-ми свечей назад. Циклом делать?
Я закрыла глаза, что у моего индикатора переменных на одну больше (это я и сама подправлю):
Редактирован: 20 ноября 2014, 16:33
27 Oxy Автор Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
27 Oxy Автор Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
35 AM2 Сообщений: 16264 - Андрей
27 Oxy Автор Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
35 AM2 Сообщений: 16264 - Андрей
27 Oxy Автор Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
в базе: www.opentraders.ru/downloads/512/
35 AM2 Сообщений: 16264 - Андрей
Буду над советником мудрить.
Если домудрю что-то дельное — скину.
Мне нравится, что вы нашли простое решение.
А то меня в коде часто заносит…
27 Oxy Автор Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Доделаю на выходных до своей, если получится Редактирован: 21 ноября 2014, 21:58
27 Oxy Автор Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Но пока результаты вашего сова мне нравятся больше
27 Oxy Автор Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
16 Krokus377 Сообщений: 226 - Андрей
35 AM2 Сообщений: 16264 - Андрей
16 Krokus377 Сообщений: 226 - Андрей
16 Krokus377 Сообщений: 226 - Андрей
16 Krokus377 Сообщений: 226 - Андрей
на
35 AM2 Сообщений: 16264 - Андрей
16 Krokus377 Сообщений: 226 - Андрей
13 Buff Сообщений: 401 - Артем
27 Oxy Автор Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
16 Krokus377 Сообщений: 226 - Андрей
В тестере я его сову погоняла. Не добилась того результата, который бы хотелось. У меня там убыток. При разных настройках.
Я сову его дописала ближе под свою стратегию. Но результат тот же.
Та сова, что в базе — это сырой набросок чисто для тестера.
Чтобы её запускать на демо или реале на несколько счетов, его надо допиливать. Допиливать уже профессионально. Думаю AM2 справился бы с этим. Но просто, думаю, это уже не бесплатная работа.
К примеру, чтобы вы поняли, о чем это я. В этом сове просто стоит функция для установки отложенного ордера OrderSend и всё. Нет проверки, ушел приказ, не ушел приказ, можем ли мы открыть позицию, не можем ли мы открыть позицию. И вообще надо делать возможность, если сейчас не ушел приказ, то повторить его… И таких нюансов море. (сама программирую, знаю)
27 Oxy Автор Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
16 Krokus377 Сообщений: 226 - Андрей
27 Oxy Автор Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий