Общие вопросы по разработке > Как графический объект превратить в индикатор

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Evgeny_TK
Сообщения: 7
Зарегистрирован: 11 сен 2017, 14:42

Как графический объект превратить в индикатор

Непрочитанное сообщение Evgeny_TK » 11 сен 2017, 18:54

Уважаемые коллги!
Прошу помочь.
Как графический объект, например луч (канал, дуги и тд.) превратить в индикатор?
Идея такая:
Нарисовал луч в окне графика, сделал его индикатором.
Потом робот, используя его значения, действует по заданному алгоритму.
Такая полу автоматическая торголя.
Спасибо!
Евгений

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

Re: Как графический объект превратить в индикатор

Непрочитанное сообщение evge » 12 сен 2017, 07:21

Идея хорошая, на заметку программистам АД4 :)

Но пока читать граф. объекты, отрисованные вручную, на текущем графике нет возможности из кода индикаторов.
никогда такого не было и вот опять

Evgeny_TK
Сообщения: 7
Зарегистрирован: 11 сен 2017, 14:42

Re: Как графический объект превратить в индикатор

Непрочитанное сообщение Evgeny_TK » 12 сен 2017, 11:00

Жаль! Тогда может такой алгоритм:
Нарисовал луч, в окне настройки свойства луча скопировал т. 1 и т.2
Они там в таком виде:
Точка № 1 01.09.2017 19:00:00; 57,3922
Точка № 2 12.09.2017 10:00:00; 59,0113
Вызвал индикатор Luch, С такими же параметрами, скопировал-вставил значения.
Можно работать!
Если добавить Точку № 3 (сдвиг) 0,45 будет канал.
Только мне знаний не хватить такой “Luch” написть, может у Вас время найдется)
Спасибо!

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

Re: Как графический объект превратить в индикатор

Непрочитанное сообщение evge » 12 сен 2017, 13:34

Как программно рисовать луч?

Есть мой индикатор TrendLines. Это самый первый индикатор, который я здесь на сайте разместил.

Есть ещё один мною написанный индикатор AutoChannels, который рисует каналы на основании лучей проведенных через фракталы

Есть индикатор LinRegChannel - канал линейной регрессии Дмитрия (ox)
никогда такого не было и вот опять

Evgeny_TK
Сообщения: 7
Зарегистрирован: 11 сен 2017, 14:42

Re: Как графический объект превратить в индикатор

Непрочитанное сообщение Evgeny_TK » 12 сен 2017, 15:52

Вы правы, отличные индикаторы!
Но в некоторых случаях, руками точнее получается, см пример из последнего.
Луч прог и руками.png

Подскажите как “нарисовать” луч через введение параметров двух точек.
Даты, времени, и цены.
Я не програмист, не “догоняю” как работать с функциями даты, времени!
С меня магарыч!

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

Re: Как графический объект превратить в индикатор

Непрочитанное сообщение evge » 12 сен 2017, 16:10

Evgeny_TK писал(а):Но в некоторых случаях, руками точнее получается


Если алгоритм поиска экстремумов поменять в индикаторе, то будет строить по другим точкам, если он формализуется то это возможно перенести в код, если же он субъективно строится и алгоритма четкого нет то нет, если только нейросети не городить :)

Evgeny_TK писал(а):Подскажите как “нарисовать” луч через введение параметров двух точек.


Уравнение прямой между двумя точками

В коде индикаторов можно подсмотреть как это делается.

Если мы знаем 2 точки в истории на графике, то между ними можно провести прямую линию до рассчитанного значения третьей точки Y в последней точке истории.

Y = (0 - x1) / (x2 - x1) * (y2 - y1) + y1;

,где

x1, y1 - первая точка (x1 - номер бара в истории, y2 - цена)
x2, y2 - вторая точка (x2 - номер бара в истории, y2 - цена)
Y - наша третья расчетная точка, последняя точка на графике
никогда такого не было и вот опять

Evgeny_TK
Сообщения: 7
Зарегистрирован: 11 сен 2017, 14:42

Re: Как графический объект превратить в индикатор

Непрочитанное сообщение Evgeny_TK » 12 сен 2017, 16:53

Спасибо!
С уравнением прямой проблем нету)
Проблема как значение даты и времени (Точка № 1 01.09.2017 19:00:00; 57,3922)
в номер бара в истории превратить?
И хотелось бы чтоб луч на месте оставался при переходе с одного тайм-фрейма на другой.
Тут видимо ко времени привязка должна быть?

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

Re: Как графический объект превратить в индикатор

Непрочитанное сообщение evge » 12 сен 2017, 16:59

Время бара можно узнать через функцию BarTime(N),
где N номер бара в истории

BarTime(N) – время начала бара в момент вызова функции Evaluate(), N - смещение назад от текущего бара.
AsTime(int HH, int MM, int SS) – создание значения времени.
Параметры:
• HH – часы (число);
• MM – минуты (число);
• SS – секунды (число).

Пример. Определение цены открытия дня (для рынков с открытием в 10:00).

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

if (BarTime() <= AsTime(10, 00, 00))             
    A = Input.Open[0];


BarTime имеет ряд свойств, например: часы, минуты, секунды
см. MSDN TimeSpan()

например вот так можно узнать число часа

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

if (BarTime().Hours <= 10
    A = Input.Open[0];


индикаторы использующие данную функцию есть в списке пользовательских индикаторов здесь на сайте.

например индикатор BarFrame активно использует BarTime()
никогда такого не было и вот опять

Evgeny_TK
Сообщения: 7
Зарегистрирован: 11 сен 2017, 14:42

Re: Как графический объект превратить в индикатор

Непрочитанное сообщение Evgeny_TK » 12 сен 2017, 18:52

А если наоборот зная время и дату узнать сколько боров назад это было?
к примеру N = BarTime() - AsTime(10, 0, 0) сколько боров прошло с открытия сессии. Это корректное выражение?
Можно ли время и дату задавать из настроек индикатора?
например AddParameter("Scan", 300, 1); // сканируемый период
Заменить //сканировать с такой то даты.

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

Re: Как графический объект превратить в индикатор

Непрочитанное сообщение evge » 12 сен 2017, 21:27

Evgeny_TK писал(а):к примеру N = BarTime() - AsTime(10, 0, 0) сколько боров прошло с открытия сессии. Это корректное выражение?


сомневаюсь что оно вернет количество баров.

Evgeny_TK писал(а):Можно ли время и дату задавать из настроек индикатора?


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


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

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

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