Спасибо, но я уже пробовал - не помогает.
Что ещё может быть не так? может быть, стоит вместо ArrayInitialize вернуться к counted_bars?
правда, у меня так тоже не получалось
ArrayInitialize(0,TrixBuf); ArrayInitialize(1,signalBuf); ArrayInitialize(2,first); ArrayInitialize(3,second); ArrayInitialize(4,third);А это вобще удалить, ктому же параметры неправильно передаются
if(counted_bars<1)
for(i=1; i<=(SlowMA_Period+Shift); i++) ind_buffer2[Bars-i]=0.0;
//----
for(i=0; i<=limit; i++)
ind_buffer3[i]=iMAOnArray(ind_buffer2, Bars, SignalMA_Period, SignalMA_Shift, SignalMA_Method, i);
Вот алгоритм Трикса из Омеги:
{******************************************************************* Description : This Function returns TRIX - Triple Exponential Average Provided By : Omega Research, Inc. (c) Copyright 1999 ********************************************************************} Inputs : Price(NumericSeries),Length(NumericSimple); Variables : TripleXAvg(0); If Length <> 0 Then Begin TripleXAvg = XAverage(XAverage(XAverage(Log(Price), Length) , Length) , Length); Trix = (TripleXAvg - TripleXAvg[1]) * 10000; End Else Trix = 0;Текст XAverage:
{******************************************************************* Description: Exponential Average Provided By: Omega Research, Inc. (c) Copyright 1999 ********************************************************************} Inputs: Price(NumericSeries), Length(NumericSimple); Variables: Factor(0); If Length + 1 <> 0 Then Begin If CurrentBar <= 1 Then Begin Factor = 2 / (Length + 1); XAverage = Price; End Else XAverage = Factor * Price + (1 - Factor) * XAverage[1]; End;Экспоненциальное среднее (XAverage) тут считается правильно - никаких выбросов не дает, и ни одного бара обрезать не требуется.
Если в МТ оно дает выбросы, значит там есть глючек с расчетом - значение на первом баре нужно инициализировать входным значением.
В текущей реализации в МТ все работает правильно, но в предположении, что значения слева от первого бара равны нулю (или еще чему-то)
Спасибо всем за ответы.
Сделал так как посоветовал Integer - всё отображатся корректно. Но я не понимаю почему следует делать столь большое обрезание. В принципе, я считал так: допустим у нас период 15, то есть значение ЕМА мы можем просчитать начиная с 16-го бара, потом сглаживаем таким же периодом, для этого необходимо иметь просчитанных 15 значений ЕМА - итого 2*Period и т.д. Потому, когда ставил в SetIndexDrawBegin значение 3*Period + Signal_Period и ничего не получилось, подумал, что проблема не в этом.
Также попробую и вариант, предложенный Sadhu.
Что касается формулы, брал её вот с этого сайта: http://fmlabs.com/reference/default.htm Правда, там тоже не всегда всё хорошо - с тем же Stochastic Mometntum Index пришлось помучиться - оказалось что у них на сайте в формуле вместо + стоит - (проверял по книге У.Блау). Может и с TRIX похожая история
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Написал вышеуказанные индикаторы и работает вроде всё нормально, но вот в начале графика происходит что-то непонятное - линии идут откуда-то с "потолка". Пробовал различные варианты, но исправить никак не получается - понятно только что подобное возникает, когда несколько раз применяю iMAOnArray. Для примера выкладываю код TRIX, подскажите, пожалуйста, что не так. Ранее советовали применять Сomment и т.д., но пока с этим не разобрался.