Общие вопросы по разработке > Помогите написать индикатор

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Павел Эдуардович
Сообщения: 6
Зарегистрирован: 06 окт 2017, 12:32
Контактная информация:

Помогите написать индикатор

Непрочитанное сообщение Павел Эдуардович » 06 окт 2017, 14:30

Всем доброго времени суток!

Во время торгов, постоянно провожу эксперименты и расчеты различных показателей, и в недавнее время столкнулся с очень интересным расчетом. За основу взял цену по high и low, а также объем, и при расчете получил показатель, который показывает ближайшее направление цены (возможно, я ошибаюсь, но руками считать не получается быстро, чтобы убедиться). Если тут найдется добрый человек, который поможет автоматизировать данные расчеты и сделать отображение на графике, то возможно, данный индикатор станет очень полезен дэйтрейдерам.

Вкратце как работает:
1. За основу берём 5 баров (количество, наверное, может быть любое) (рис 1)
2. С каждого бара нас интересует средняя цена на основе high и low, а также объем того же бара (рис 2)
3. Затем считаем среднюю цену этих баров, она станет 0 в расчетах (рис 3)
4. Распределяем цены баров по сортировке и присваиваем уровни. Объем распределяем в шкале от 100% до 0 (рис 4)
5. Расставляем полученные значения в когорте. То значение, которое попадает на 100% является этим самым индикатором. (рис 5)
6. Для наглядности рисуем лучи, где первая точка - открытие первого бара, на которых идет расчет (рис 6)

Рис 1
IPE1.png


Рис 2
IPE2.png


Рис 3
IPE3.png


Рис 4
IPE4.png


Рис 5
IPE5.png


Рис 6
IPE6.png


Также рассмотрел еще один участок, чтобы было более наглядно:

IPE1-1.png
IPE1-2.png


Считал всё на 5-минутках, то есть по факту, как только закроется бар, индикатор (пока вымышленный) покажет ближайшее направление цены и силу движения, основываясь на предыдущих ценах в соотношении с объемом. На других таймфреймах тоже считал, например, на часовике, на ближайшие пару баров индикатор всегда указывает верно. Я не могу пока сказать больше и дать гарантию того, что это действительно работает, так как хочется протестировать это в бою. Для этого и прошу у вас помощи.

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

Всем добра и прибыльных сделок!

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

Re: Помогите написать индикатор

Непрочитанное сообщение evge » 06 окт 2017, 15:35

Здравствуйте.

Через какие точки проводятся лучи?

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

Вторая точка это что, какое значение берется по оси цены? какой номер бара берется из пяти, тот у которого 100%, т.е. просто максимальный объем из тех самых пяти баров?

Тогда не понятно зачем считать остальные % баров и вообще какой-то анализ по ним проводить, если можно взять просто бар с максимальным объемом и всё.
никогда такого не было и вот опять

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

Re: Помогите написать индикатор

Непрочитанное сообщение evge » 06 окт 2017, 15:44

Ещё вопросы:

Какие именно бары в истории необходимо анализировать?
Каким образом выбраны именно эти 5 баров, а не соседние 5 или другие?

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

Например, 20 баров назад берем 5 баров и их анализируем и индикатор будет строить свои лучи всегда на основе анализа баров с 20 по 25 или же надо как-то искать эти 5 баров предварительно на графике и только потом проводить анализ?
никогда такого не было и вот опять

Павел Эдуардович
Сообщения: 6
Зарегистрирован: 06 окт 2017, 12:32
Контактная информация:

Re: Помогите написать индикатор

Непрочитанное сообщение Павел Эдуардович » 06 окт 2017, 16:28

Приветствую!

Начну с последнего:
зачем считать остальные % баров и вообще какой-то анализ по ним проводить, если можно взять просто бар с максимальным объемом и всё

Вот тут как раз важно использовать все бары, так как по ним проводится анализ значений для второй точки. если же взять только один бар, то тогда не получится посчитать на какой позиции (по Y) должна быть точка. Т.е. из пяти баров, по мимо 5 значений, мы получаем среднее значение, которое принимаем за 0, затем все 5 значений каждого бара распределяем по возрастанию и убыванию от 0. После этого процентное соотношение каждой цены к 0 формируем в значение, тем самым, условно, рисуем уровни, которые потом пересекают ось Х (объемы). В итоге мы получаем одну точку привязанную к открытию первого бара из пяти, и 5 точек на плоскости для каждого направления. Тут, действительно, все лучи не нужны, достаточно будет только основного, т.е. того, который соответствует 100%

Как я себе вижу формирование плоскости:

За анализ берутся 5 закрытых баров от текущего (т.е. не в середине, как я изобразил на рисунках. это лишь для понимания). Получаем, что анализ начинается с 6 бара с конца (5 закрытых +1 текущий). Соответственно первая точка индикатора будет на 1 баре в анализе, на открытии.
Шкала по оси Х формируется по всему окну с графиком, где 0 открытие нашего бара. Максимальная длина окна получает разбег от 0 до 100, другая часть пропорциональная. По оси Y распределяется объем анализируемых баров (от 100% до 0%), где 100% это притык окна по горизонтале.
0.png


Сами точки у нас берутся из расчетов, они не должны отображаться, это просто ориентиры для лучей - главное, сигнальный луч. Точки появляются при пересечении значений по осям Х и Y
00.png


Ну вот как-то так))


Вторая часть:
Пропуск баров (N баров назад), это, конечно, прям идеально, но это сложно, наверное. Мне сейчас хочется понять, действительно ли расчеты дают нужный результат, а красоту можно и потом сделать)) В изначальном варианте, начинаться анализ должен всегда с 6 бара с конца (5+1), а чтобы было видно луч (если вдруг такой вопрос будет), то для этого ставим отступ на графике, тем самым рисуем как бы в даль графика.

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

Не факт, что смог объяснить, но я пытался)))

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

Re: Помогите написать индикатор

Непрочитанное сообщение evge » 06 окт 2017, 18:08

Объясните появление точек по оси Y на графике вне анализируемых 5 баров. Каким образом Вы их рассчитали по оси Y и по оси баров X?

Через точку открытия первого бара и эти 4 точки построены лучи. Пока непонятно как рассчитаны эти точки и их координаты на оси X (бар),Y (цена)
никогда такого не было и вот опять

Павел Эдуардович
Сообщения: 6
Зарегистрирован: 06 окт 2017, 12:32
Контактная информация:

Re: Помогите написать индикатор

Непрочитанное сообщение Павел Эдуардович » 06 окт 2017, 18:50

Я вроде попробовал объяснить))

Может так поможет, я накидал таблицу с шагами действий, думаю, что так станет более понятней.
Индикатор.xlsx
(113.97 КБ) 255 скачиваний

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

Re: Помогите написать индикатор

Непрочитанное сообщение evge » 06 окт 2017, 19:31

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

Павел Эдуардович
Сообщения: 6
Зарегистрирован: 06 окт 2017, 12:32
Контактная информация:

Re: Помогите написать индикатор

Непрочитанное сообщение Павел Эдуардович » 06 окт 2017, 19:34

О, спасибо огромное.
Надеюсь, что всё получится.

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

Re: Помогите написать индикатор

Непрочитанное сообщение evge » 09 окт 2017, 10:59

Перевожу что понял из приложенного файла.

1. Берем 5 баров
2. Ищем тот, у которого максимальный объем, запоминаем его среднюю цену (high + low) * 0.5. Далее "Цена бара".
3. По всем средним ценам 5 баров вычисляем общую среднюю цену. Далее "Средняя общая"
4. Прогноз строим по формуле:

Цена бара * 100 / Средняя общая - 100

Ещё для какой-то цели это всё умножаем на 1000, в итоге это значение является значением для "Луч индикатора". Я в коде оставил * 1000 под комментарием. Нет особого смысла в этом умножении, если надо добавить в формулу, то сделать это будет просто, место в коде обозначено. На визуализацию это не повлияет никак (только значения будут в 1000 раз увеличены).

Неизвестно для чего считаются все остальные показатели, если их проигнорировать то получаем вот такой код (см. ниже)

Значение вывожу в виде гистограммы, нет большой пользы выводить луч. Гистограмма нагляднее в данном случае. Луч неинформативен будет, т.к. ось Y у луча по той формуле не коррелирует с ценой на графике.

В индикаторе значение рассчитывается на каждом баре истории для количества баров, указанных в параметре индикатора "Period", т.е. 5 баров можно заменить на любое другое значение.

Пример отображения

VBars-01.png
VBars-01.png (32.52 КБ) 5115 просмотров


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

function Initialize()
{
IndicatorName = "VBars";
PriceStudy = false;
AddInput("I", Inputs.Candle);
AddSeries("A", DrawAs.Custom, Color.Red, AxisType.ZeroBased, false);
AddSeries("U", DrawAs.Custom, Color.Red, AxisType.ZeroBased);
AddSeries("D", DrawAs.Custom, Color.Green, AxisType.ZeroBased);

AddParameter("Period", 5);

AddGlobalVariable("APrice", Types.DoubleList);
}

function Evaluate()
{

var MaxVol = 0.0;
var MaxVolPrice = 0.0;

APrice.Clear();
for (var x = 0; x < Period; x++)
{
   APrice.Add((I.High[x] + I.Low[x]) * 0.5);
   if (MaxVol < I.Volume[x])
      {
      MaxVol = I.Volume[x];
      MaxVolPrice = (I.High[x] + I.Low[x]) * 0.5;
      }
}

var Average = APrice.Average(x => x);

A = MaxVolPrice * 100 / Average - 100; //* 1000

if (A[0] >= 0)
{
   U = A[0];
   U.DrawHistogram(Color.Green);
}
else
{
   D = A[0];
   D.DrawHistogram(Color.Red);
}

}


Если ваши расчеты не совпадают с тем что посчитал индикатор, напишите об этом здесь.
никогда такого не было и вот опять

Павел Эдуардович
Сообщения: 6
Зарегистрирован: 06 окт 2017, 12:32
Контактная информация:

Re: Помогите написать индикатор

Непрочитанное сообщение Павел Эдуардович » 09 окт 2017, 11:55

Приветствую!

Спасибо! Сегодня в течение дня протестирую, сверюсь с расчетами и отпишу.

Ещё для какой-то цели это всё умножаем на 1000

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

Одно уточнение, Period - это количество баров, которое берется или это количество баров с конца? То есть, чтобы взять 5 баров от текущего, нужно выставить Period (6)? Иными словами, текущий бар (пока он не закрыт) учитывается или нет?


Вернуться в «Общие вопросы по разработке»

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

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