Страница 2 из 2

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

Добавлено: 04 апр 2016, 12:31
Alex



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

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

Добавлено: 04 апр 2016, 13:03
evge
"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++)

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

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

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

Добавлено: 04 апр 2016, 13:49
evge
Alex писал(а):Отловить момент появления нового бара


Зачем?

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

Добавлено: 04 апр 2016, 14:01
Alex
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 ...

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

Добавлено: 04 апр 2016, 14:13
evge
Alex писал(а):Чтоб на каждом тике не считать.


Есть MaxIndex

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

if (CurrentIndex == MaxIndex) ...