Стратегии и роботы > Линии ABC

Обсуждение, описание стратегий и роботов, идеи для стратегий
Avialr
Сообщения: 34
Зарегистрирован: 05 фев 2016, 18:15

Линии ABC

Непрочитанное сообщение Avialr » 06 фев 2016, 16:22

Если не туда создал тему - перенаправьте куда нужно.
Если вообще на форуме не не уместна тема - сообщите и удалите ее.

На официальном форуме начинал тему - ОХ помог сделав такой индикатор:

Индикатор
Up и Dn - ближайшие главные уровни вокруг цены (серые)
St - стоп уровень для закрытия позиции (синий)

Для закрытия позиции как прибыльной, так и убыточной, цена должна пройти вниз последовательно главный уровень и стоп

Код: Выделить всё

function Initialize()
{
IndicatorName = "LevelBase";
PriceStudy = true;
AddInput("Input", Inputs.Price);   
AddSeries("Up", DrawAs.Line, Color.Gray);   
AddSeries("Dn", DrawAs.Line, Color.Gray);
AddSeries("St", DrawAs.Line, Color.Blue);

AddParameter("D", 1.5, 0);   
AddParameter("BaseLev", 90, 0);   
}

function Evaluate()
{
// Область расчета значения индикатора

double Delta = Input[0] - BaseLev;
double N = Math.Floor(Delta / D);

Up = BaseLev + D*(N+1);
Dn = BaseLev + D*(N);
St = Up - 0.25*D;

}


В принципе то что хотел - но не удобно идет отображение - что линия двигается зигзагом где-то + не получается у меня описать корректный вход - выход.

Идея изначально такая - см.картинку.

LevelBase.png


Решил каждую линию назвать именем (в данном случае иногда придется менять базовую линию)

Код: Выделить всё

function Initialize()
{
IndicatorName = "Level_ABC";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddSeries("A", DrawAs.Line, Color.Gray);
AddSeries("B", DrawAs.Line, Color.Gray);
AddSeries("C", DrawAs.Line, Color.Gray);
AddSeries("D", DrawAs.Line, Color.Gray);
AddSeries("E", DrawAs.Line, Color.Gray);
AddSeries("St_bay_A", DrawAs.Line, Color.Blue);
AddSeries("St_sell_A", DrawAs.Line, Color.Blue);
AddSeries("St_bay_B", DrawAs.Line, Color.Blue);
AddSeries("St_sell_B", DrawAs.Line, Color.Blue);
AddSeries("St_bay_C", DrawAs.Line, Color.Blue);
AddSeries("St_sell_C", DrawAs.Line, Color.Blue);
AddSeries("St_bay_D", DrawAs.Line, Color.Blue);
AddSeries("St_sell_D", DrawAs.Line, Color.Blue);
AddSeries("St_bay_E", DrawAs.Line, Color.Blue);
AddSeries("St_sell_E", DrawAs.Line, Color.Blue);

AddParameter("Dell", 1.5, 0);
AddParameter("BaseLev", 80, 0);
}

function Evaluate()
{
// Область расчета значения индикатора

A = BaseLev + Dell;
St_bay_A = A - 0.25*Dell;
St_sell_A = A + 0.25*Dell;

B = A + Dell;
St_bay_B = B - 0.25*Dell;
St_sell_B = B + 0.25*Dell;

C = B + Dell;
St_bay_C = C - 0.25*Dell;
St_sell_C = C + 0.25*Dell;

D = C + Dell;
St_bay_D = D - 0.25*Dell;
St_sell_D = D + 0.25*Dell;

E = D + Dell;
St_bay_E = E - 0.25*Dell;
St_sell_E = E + 0.25*Dell;

}


Такое отображение и нужно - но столкнулся с другой проблемой - все линии постоянно отображаются на экране - т.е. убрать линии которые не участвуют с помощью масштабирования - не получается.
Наверняка такие исходные данные можно сделать более проще - посоветуйте как.

Когда у каждой линии есть имя - то проще прописать условие (только их будет много) - т.е. если цена больше линии А но меньше линии В (предыдущее значение цены менее линии А) - то осуществляем вход и так для каждой линии. Как выход прописать - не могу логарифмировать данный момент - нужно ведь сначала пробить следующую линию - а потом вернуться и выйти при проходе линии - 25%

Поможете?

Заранее спасибо!
Вложения
Экскиз2.pdf
идея алгоритма
(51.17 КБ) 2175 скачиваний

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: Линии ABC

Непрочитанное сообщение evge » 07 фев 2016, 11:17

Скриншоты лучше добавлять в виде картинок. Pdf конечно можно и он отображается как вложение, но скриншоты картинками можно вставить в текст сообщения.

Используйте BBCode, доступные в сообщениях, например код скриптов можно обрамлять в тег: [code]здесь Ваш код[/code] и тогда он будет отображаться близко к тому, что привычно нам в самом АД4. В Вашем сообщении это поправил.

По самому вопросу помочь пока не могу. т.к. занялся переносом индикаторов из библиотеки.
никогда такого не было и вот опять

Avialr
Сообщения: 34
Зарегистрирован: 05 фев 2016, 18:15

Re: Линии ABC

Непрочитанное сообщение Avialr » 07 фев 2016, 11:41

Спасибо!
Замечания учту.
Библиотеку смотрю - возможно что то оттуда сам подчеркну.

Надеяться на помощь можно - но позже - правильно?

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: Линии ABC

Непрочитанное сообщение evge » 08 фев 2016, 15:27

Лучше поставить отображать последние значение.

Двигаться уровни будут кратно Dell, что сделано через Math.Ceiling()...

Всё пляшет от текущей цены (последний отображаемый на графике бар) с шагом Dell.

Dell должно быть >= 1

Индикатор рассчитывается только для текущего бара и отображает уровни и задает серии (если понадобится его использовать в стратегиях, т.к. уровни недоступны). Это позволит двигая график в истории получать значения именно для последнего отображаемого бара.

делается это через условие:

Код: Выделить всё

if (CurrentIndex != MaxIndex) return;


LevelBase-01.png
LevelBase-01.png (44.24 КБ) 29899 просмотров


Код: Выделить всё

function Initialize()
{
IndicatorName = "Level_ABC";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddSeries("A", DrawAs.Line, Color.Gray);
AddSeries("B", DrawAs.Line, Color.Gray);
AddSeries("C", DrawAs.Line, Color.Gray);
AddSeries("D", DrawAs.Line, Color.Gray);
AddSeries("E", DrawAs.Line, Color.Gray);
AddSeries("St_bay_A", DrawAs.Line, Color.Blue);
AddSeries("St_sell_A", DrawAs.Line, Color.Blue);
AddSeries("St_bay_B", DrawAs.Line, Color.Blue);
AddSeries("St_sell_B", DrawAs.Line, Color.Blue);
AddSeries("St_bay_C", DrawAs.Line, Color.Blue);
AddSeries("St_sell_C", DrawAs.Line, Color.Blue);
AddSeries("St_bay_D", DrawAs.Line, Color.Blue);
AddSeries("St_sell_D", DrawAs.Line, Color.Blue);
AddSeries("St_bay_E", DrawAs.Line, Color.Blue);
AddSeries("St_sell_E", DrawAs.Line, Color.Blue);

AddLevel(0, Color.Blue, "X"); 
AddLevel(0, Color.Blue, "X"); 
AddLevel(0, Color.Blue, "X"); 
AddLevel(0, Color.Blue, "X"); 
AddLevel(0, Color.Blue, "X"); 
AddLevel(0, Color.Blue, "X"); 
AddLevel(0, Color.Blue, "X"); 
AddLevel(0, Color.Blue, "X"); 
AddLevel(0, Color.Blue, "X"); 
AddLevel(0, Color.Blue, "X"); 

AddParameter("Dell", 1.5, 0);
}

function Evaluate()
{
// Область расчета значения индикатора

if (CurrentIndex != MaxIndex) return;

A = Math.Ceiling(Input.Close[0] / Dell) * Dell - Dell * 2;
St_bay_A = A - 0.25*Dell;
St_sell_A = A + 0.25*Dell;
Levels[0].Level = St_bay_A;
Levels[1].Level = St_sell_A;

B = A + Dell;
St_bay_B = B - 0.25*Dell;
St_sell_B = B + 0.25*Dell;
Levels[2].Level = St_bay_B;
Levels[3].Level = St_sell_B;

C = B + Dell;
St_bay_C = C - 0.25*Dell;
St_sell_C = C + 0.25*Dell;
Levels[4].Level = St_bay_C;
Levels[5].Level = St_sell_C;

D = C + Dell;
St_bay_D = D - 0.25*Dell;
St_sell_D = D + 0.25*Dell;
Levels[6].Level = St_bay_D;
Levels[7].Level = St_sell_D;

E = D + Dell;
St_bay_E = E - 0.25*Dell;
St_sell_E = E + 0.25*Dell;
Levels[8].Level = St_bay_E;
Levels[9].Level = St_sell_E;

}

никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: Линии ABC

Непрочитанное сообщение evge » 08 фев 2016, 15:51

Смысла конечно в доп уровнях > 3 нет, т.к. смещаться будет при превышении кратности, но можно конечно смещаться сделать кратно Dell*5
никогда такого не было и вот опять

Avialr
Сообщения: 34
Зарегистрирован: 05 фев 2016, 18:15

Re: Линии ABC

Непрочитанное сообщение Avialr » 08 фев 2016, 17:13

Т.е. основные линии все-таки лучше делать именными (и регулярно менять базовую точку) - для более точного описания входа? Не хочу к текущей цене привязываться - сложно воспринимать информацию и делать какие то расчеты в уме.
Вход в позицию я смогу прописать без проблем - дав условия нахождения цены и привязавшись к именам линий.
Как выйти? Мне же нужно преодолеть новый уровень и если он не пробивает следующий - выходить в зоне линии (отклонение 25%)

Avialr
Сообщения: 34
Зарегистрирован: 05 фев 2016, 18:15

Re: Линии ABC

Непрочитанное сообщение Avialr » 09 фев 2016, 22:24

А почему стратегия не увидит именные линии? Тогда получается нет смысла им давать имена?
И почему Dell должно быть >= 1 - не целые числа никак использовать нельзя получается?

Как логарифмировать выход из позиции - ведь цена может колебаться между главной линией и линией 25% достаточно долго - а потом пойти дальше по заданному направлению.

Опять запутался - вроде понимаю что нужно сделать - потом в процессе ничего не получается.

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: Линии ABC

Непрочитанное сообщение evge » 10 фев 2016, 07:19

Стратегия должна описывать входы \ выходы. В индикаторе не нужно пытаться отрисовать 5-10-15 уровней. Достаточно тех точек по которым будет формирвоаться сигнал на вход и выход. Доп линии не нужны. Если у вас линии рисуются кратно определенному параметру (Dell), то достаточно будет двух линий. Пересекая одну из них вниз сигнал на выход из длинной и \ или на вход в короткую позицию, пересечение верхней линии сигнал на вход в длинную позицию и \ или закрытие короткой. Вообщем столько линий не нужно, мое мнение.

Позже попробую дописать код.
никогда такого не было и вот опять

Avialr
Сообщения: 34
Зарегистрирован: 05 фев 2016, 18:15

Re: Линии ABC

Непрочитанное сообщение Avialr » 15 фев 2016, 21:34

Напомню о себе.

Если (см.начало темы) - изобразить в виде Гистограммы:
Главная линия будет нулевой - а значение будет варьироваться от отклонения в 1,5 руб. (диапазон от +1,5 до -1,5 руб.) т.е. пробив следующий главный уровень - значение на гистограмме будет 0. Если цена поменяла направление и прошла отметку (25% - 0,375) - то выходим из позиции.

Хотел поглядеть как MACD написан - но везде гистограммы как встроенные фигурируют - где бы раскрыть данную информацию.

Или может поможете прописать? Тут вроде все запрещающие условия исключаются и можно пробовать делать стратегию (+ массив линий не нужен становится).

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: Линии ABC

Непрочитанное сообщение evge » 15 фев 2016, 21:47

На текущий момент не могу помочь с написанием, но могу подсказать с гистограммами.

Скрипты индикаторов и стратегий в Альфа-Директ 4.0

поиск по Histogram

AddSeries(Name, Type, Color, AxisType, Visible, Axes) – создание выходного ряда, можно добавлять несколько.

конкретно:

• Type – константа, определяющая вид отображения выходного ряда:
o DrawAs.Line – линия;
o DrawAs.Histogram – гистограмма.
o DrawAs.Custom – произвольный метод рисования (определяется в области вычисления индикатора).

поиск далее

DrawHistogram – рисовать гистограмму на данном баре от ряда до минимума видимой области графика

Series.DrawHistogram();
Series.DrawHistogram (Color color, int Alpha = 50);
Series.DrawHistogram (Color color, Color fill, int Alpha = 50);

а так же для понимания смотрите примеры индикаторов с гистограммами:

MACDH
OICandle

и другие.
никогда такого не было и вот опять


Вернуться в «Стратегии и роботы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя