Общие вопросы по разработке > Цвет линии индикатора

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Alex
Сообщения: 15
Зарегистрирован: 18 мар 2016, 13:47

Re: Цвет линии индикатора

Непрочитанное сообщение Alex » 04 апр 2016, 12:31




evge, помогите разобраться, пожалуйста! Если ЕМА - это коллекция, то не совсем понятно равенство: ЕМА = ? Далее, где относительно точки времени находятся EMA[1], EMA[0], ЕМА[-1]? И не приведете -ли пример какого - либо индикатора, чтоб значение рассчитывалось и отображалось только когда бар сформирован, а на текущем нет.

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

Re: Цвет линии индикатора

Непрочитанное сообщение evge » 04 апр 2016, 13:03

"EMA =" равнозначно "EMA[0] ="

EMA[1] == EMA[-1], т.е. на Ваше усмотрение, как удобно. Но любое значение отличное от 0, неважно положительное или отрицательное это индекс смещения влево от бара.

Если вы хотите индикатор без перерисовки, то просто не используйте данные из текущей (последней) свечи / ряда.

Для расчета используйте данные начиная от [1] и далее [..n]. Тогда перерисовки не будет и Ваш индикатор будет рисовать значения только на основании уже сформированных баров (рядов).

если простейший пример то вот:

SMA с перерисовкой, учитывая последний бар

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

function Initialize()
{
   IndicatorName = "SMA_demo_1";   
   PriceStudy = true;   
   AddInput("Input", Inputs.Price);   
    AddSeries("A", DrawAs.Line, Color.Red);   

   // Дополнительные параметры:
   AddParameter("Period", 20);   
}

function Evaluate()
{
   A = 0.0;
   for (var x = 0; x < Period; x++)
      A = A + Input[x];

   A = A / Period;
}


SMA БЕЗ перерисовки, последний бар не учитывается (данные для расчета сдвинуты на 1 бар)

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

function Initialize()
{
   IndicatorName = "SMA_demo_2";   
   PriceStudy = true;   
   AddInput("Input", Inputs.Price);   
    AddSeries("A", DrawAs.Line, Color.Red);   

   // Дополнительные параметры:
   AddParameter("Period", 20);   
}

function Evaluate()
{
   A = 0.0;
   for (var x = 1; x <= Period; x++)
      A = A + Input[x];

   A = A / Period;
}


Обратите внимание на разницу

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

for (var x = 0; x < Period; x++)


и

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

for (var x = 1; x <= Period; x++)
никогда такого не было и вот опять

Alex
Сообщения: 15
Зарегистрирован: 18 мар 2016, 13:47

Re: Цвет линии индикатора

Непрочитанное сообщение Alex » 04 апр 2016, 13:30

evge, спасибо за подробный ответ)) Отловить момент появления нового бара: ввожу дополнительную глобальную переменную и приравниваю ее к CurrentIndex, если CurrentIndex больше, чем гл. переменная,то == новый бар. Как без дополнительной переменной?

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

Re: Цвет линии индикатора

Непрочитанное сообщение evge » 04 апр 2016, 13:49

Alex писал(а):Отловить момент появления нового бара


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

Alex
Сообщения: 15
Зарегистрирован: 18 мар 2016, 13:47

Re: Цвет линии индикатора

Непрочитанное сообщение Alex » 04 апр 2016, 14:01

evge писал(а):
Alex писал(а):Отловить момент появления нового бара


Зачем?


Перерасчет надо делать)) перемножить последние , ну скажем, 30 close на список из 30 значений... Чтоб на каждом тике не считать.
Хочу закодить http://www.finware.ru/downloads/articles/ATCF.pdf ; http://www.alfadirect.ru/MARKETS/?page=one_conf&conf=14. Идикаторы FATL, SATL ...
Последний раз редактировалось Alex 04 апр 2016, 14:35, всего редактировалось 3 раза.

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

Re: Цвет линии индикатора

Непрочитанное сообщение evge » 04 апр 2016, 14:13

Alex писал(а):Чтоб на каждом тике не считать.


Есть MaxIndex

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

if (CurrentIndex == MaxIndex) ...
никогда такого не было и вот опять


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

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

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