Страница 1 из 3
Определение центра канала в написании робота.
Добавлено: 20 июл 2018, 12:22
Alexandr-IV
Народ привет. Вот такая задача, определить канал по вершинам и впадинам – например определение по 6-10 свечам. И провести открытие в середине этого канала т.е 50% от пройдённого канала, в направлении тренда (ну например, направление тренда определяется по индикатору СуперТренд). Закрытие осуществляется по не доходу до границы канала, где-то 90% от пройдённого канала. Стоп за каналом.
Например так:
Re: Определение центра канала в написании робота.
Добавлено: 22 июл 2018, 09:42
evge
Входящие параметры какие у стратегии будут?
Количество баров в пределах которых ищем Min, Max, или это поиск вершин и впадин по фракталам?
И дополнительно параметры для построения SuperTrend?
По рисунку выставляться будет ордер на 7ом баре т.е. он будет ждать исполнения, т.е. это либо EnterLongStop() - вход по стоп ордеру в Long, либо ждем закрытия выше этой цены и входим обычным EnterLong() ордером.
Эти нюансы могут влиять на результат хорошо.
Ещё важно, как я понимаю, очередность Min и Max.
Для Long по SuperTrend:
Например, если Min раньше Max, то здесь нет сигнала и канал не запоминаем. Если Max раньше чем Min тогда работаем в Long.
Для Short всё противоположно.
Re: Определение центра канала в написании робота.
Добавлено: 23 июл 2018, 13:17
Alexandr-IV
Спасибо что ответили. Вот, уточняю параметры:
Количество баров, где мы ищем Min, Max - это задаваемая, изменяемая величина - N.
Вот примерный алгоритмик накатал, посмотрите.
Re: Определение центра канала в написании робота.
Добавлено: 23 июл 2018, 18:12
evge
Пока не смотрел.
Изучу чуть позже описание (схему), как появится чуть больше времени.
И выложу готовый код или вопросы

.
Re: Определение центра канала в написании робота.
Добавлено: 23 июл 2018, 22:22
Alexandr-IV
Спасибо большое буду ждать
Re: Определение центра канала в написании робота.
Добавлено: 24 июл 2018, 16:08
evge
Код: Выделить всё
/**
**/
function Initialize()
{
StrategyName = "SuperTrendChannel";
AddParameter("C", 6, "Кол-во баров для поиска min, max", 1);
AddParameter("PeriodATR", 5, "", 1);
AddParameter("PeriodCCI", 50, "", 1);
AddParameter("K", 1, "", 1);
AddInput("I", Inputs.Candle, 60, true, "");
LongLimit = 1000;
ShortLimit = 1000;
AddGlobalVariable("N", Types.Int, 0);
AddChartIndicator("MY.SuperTrend", new Dictionary <string, string>{{"PeriodATR", "PeriodATR"},{"PeriodCCI", "PeriodCCI"},{"K", "K"}});
}
function OnUpdate()
{
var S = MY.SuperTrend(I, PeriodATR, PeriodCCI, K);
if (S["U"][0] > 0) N = 1;
if (S["D"][0] > 0) N = -1;
double Hi = 0, Li = 0;
for (int x = 1; x <= C; x++)
{
if (I.High[x] > I.High[Hi]) Hi = x;
if (I.Low[x] < I.Low[Li]) Li = x;
}
var AV = (I.High[Hi] + I.Low[Li]) * 0.5;
if (Li > Hi && N < 0)
{
if (I.High[0] < I.High[Hi])
{
CancelActiveOrders(true);
}
else
{
if (I.Low[0] > AV)
{
EnterShortStop(AV);
BreakingStop(I.High[Hi], I.Low[Li], SignalPriceType.Price);
}
}
}
if (Li < Hi && N > 0)
{
if (I.Low[0] > I.Low[Li])
{
CancelActiveOrders(true);
}
else
{
if (I.High[0] < AV)
{
EnterLongStop(AV);
BreakingStop(I.Low[Li], I.High[Hi], SignalPriceType.Price);
}
}
}
}
Проверяйте. Если захочется изменить алгоритм или найдете ошибки, пишите

Re: Определение центра канала в написании робота.
Добавлено: 24 июл 2018, 16:16
evge
На 5 минутном ТФ на сбербанке (без учета комиссий):
CCI = 10

- SuperTrendChannel-01.png (37.33 КБ) 27263 просмотра
Re: Определение центра канала в написании робота.
Добавлено: 24 июл 2018, 16:25
Alexandr-IV
Обалдеть!

Будем тестить!
Re: Определение центра канала в написании робота.
Добавлено: 24 июл 2018, 16:46
evge
Одну ошибку поправил в коде выше, так что результат надо перепроверять
Re: Определение центра канала в написании робота.
Добавлено: 24 июл 2018, 18:14
evge
ах да забыл ещё что тейк не 90% от границы канала тут, а 100% на границе. Хотя каналом это трудно назвать. В рамках N баров на краях.