это пробовал тоже ... как уже сказал, не помогает. выполнение останавливается на той же самой строке
надо получить 2 последних значения, для текущего и предыдущего баров, однако
1) цикл вычисляется наоборот (от большего бара к меньшему) и
2) как я понял для вычисления должно быть минимум 13 баров, поскольку среди них в первом цикле надо найти iHighest
каким образом если в строке
MitBuffer[i] = smooth_coefficient * (MIT - MitBuffer[i+1]) + MitBuffer[i+1];
и в строке
DssBuffer[i] = smooth_coefficient * (DSS - DssBuffer[i+1]) + DssBuffer[i+1];
надо высчитать значение используя следующий элемент по массиву, которое можно получить только если использовать цикл???
каким образом если в строке
MitBuffer[i] = smooth_coefficient * (MIT - MitBuffer[i+1]) + MitBuffer[i+1];
и в строке
DssBuffer[i] = smooth_coefficient * (DSS - DssBuffer[i+1]) + DssBuffer[i+1];
надо высчитать значение используя следующий элемент по массиву, которое можно получить только если использовать цикл???
не знаю если только дробить первый цикл на 2 функции чтобы в конце прибавить след значение MitBuffer для следующего бара?
и потом точно также делать для DssBuffer?
гемор однако
как-то же в начале чарта индикатор начинает рисоватся
да то, что он там рисует на нулевом баре еще пока никто не видел)))
да то, что он там рисует на нулевом баре еще пока никто не видел)))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте!
есть индикатор DSS Bressert, который строит кривую наподобие стохастика. его код (основной алгоритм):
extern int EMA_period=8;
extern int Stochastic_period=13;
double DssBuffer[];
double MitBuffer[];
double DssBuffer_UP[];
double DssBuffer_DW[];
double smooth_coefficient;
init()
{
smooth_coefficient = 2.0 / (1.0 + EMA_period);
}
//----------------------------------------------------
int start()
{
int i, limit, counted_bars=IndicatorCounted(), Bar_OK;
if (counted_bars == 0) limit = Bars - Stochastic_period;
if (counted_bars > 0) limit = Bars - counted_bars;
double HighRange, LowRange;
double delta, MIT;
for (i = limit; i >= 0; i--)
{
HighRange = High[iHighest(NULL,0,MODE_HIGH,Stochastic_period,i)];
LowRange = Low[iLowest(NULL,0,MODE_LOW,Stochastic_period,i)];
delta = Close[i] - LowRange;
MIT = delta/(HighRange - LowRange)*100.0;
MitBuffer[i] = smooth_coefficient * (MIT - MitBuffer[i+1]) + MitBuffer[i+1];
}
double DSS;
for (i = limit; i >= 0; i--)
{
HighRange = MitBuffer[ArrayMaximum(MitBuffer, Stochastic_period, i)];
LowRange = MitBuffer[ArrayMinimum(MitBuffer, Stochastic_period, i)];
delta = MitBuffer[i] - LowRange;
DSS = delta/(HighRange - LowRange)*100.0;
DssBuffer[i] = smooth_coefficient * (DSS - DssBuffer[i+1]) + DssBuffer[i+1];
}
после этого данные из DssBufferа раскидываются на 2 массива, один для long значений, другой для short и рисуются точками на чарте.
нужно вычислить несколько его последних значений, однако не через iCustom(), а в виде отдельной ф-ции.
в итоге, точно копируя эти 2 цикла в ф-цию советника, происходит странная вещь - на выделенной строке расчеты останавливаются и не возвращается никакого значения (проверял пошагово с выводом каждой строки в alert), кто может подсказать в чем тут дело?
что ни пробовал, ничего не помогает ...