проблема с циклом - страница 2

 
Sergey Savinkin:
Ну а  я Вам про что? Не доходит цикл до этого места. В первой функции Вы начинаете с 1, доходите до нужного места в массиве и прерываете цикл. А во второй - сразу начинаете с "правильного" места. И цикл прерывается.

Так я откуда только не начинал. И начинаю я с index_sell+1. Со следующего после сигнала бара.

 
Vitaly Stepanov:

Так я откуда только не начинал. И начинаю я с index_sell+1. Со следующего после сигнала бара.

Да не важно, откуда начинать. Главное - что условие выполняется, и до заполнения переменной цикл не доходит. Поставьте принты внутрь цикла с указанием значения переменных и увидите.

 
Sergey Savinkin:

Да не важно, откуда начинать. Главное - что условие выполняется, и до заполнения переменной цикл не доходит. Поставьте принты внутрь цикла с указанием значения переменных и увидите.

 "i" равен значению index_sell+1.

То есть цикл сразу прерывается. Почему?

 
Vitaly Stepanov:

 "i" равен значению index_sell+1.

То есть цикл сразу прерывается. Почему?

Я не знаю, что у Вас в массивах. Говорю же, напишите

Print("macd_current = "+(string)macd_current+macd_previous"+(string)macd_previous+signal_current"+(string)signal_current+signal_previous"+(string)signal_previous);

 
Sergey Savinkin:

Я не знаю, что у Вас в массивах. Говорю же, напишите

Print("macd_current = "+(string)macd_current+macd_previous"+(string)macd_previous+signal_current"+(string)signal_current+signal_previous"+(string)signal_previous);

2018.07.23 02:19:21.521 2013.07.09 04:08:20   macd_current = 0.0003429946794533123 macd_previous= 0.0004134609122965482 signal_current= 0.0003611962860996767 signal_previous= 0.0002967761989818543

Вроде как есть сигнал macd. Откуда он берется, если цикл начинает считать с бара до сигнала в обратную сторону, назад. Ведь бар сигнала равен 

index_sell.

А цикл считает с  index_sell+1, 

со следующего бара.

 

Мне интересно, почему вот эта штука работает

copy_sell=CopyBuffer(handle_macd,0,0,copy_sell,buff_MACD_main); 

Ведь copy_sell = 0; Инициализация происходит в начале процедуры. Может, если указать с 0 бара, 0 элементов, то копирует всю историю?

 
Vitaly Stepanov:

2018.07.23 02:19:21.521 2013.07.09 04:08:20   macd_current = 0.0003429946794533123 macd_previous= 0.0004134609122965482 signal_current= 0.0003611962860996767 signal_previous= 0.0002967761989818543

Вроде как есть сигнал macd. Откуда он берется, если цикл начинает считать с бара до сигнала в обратную сторону, назад. Ведь бар сигнала равен 

index_sell.

А цикл считает с  index_sell+1, 

со следующего бара.

Кстати, индексацию проверьте. Напишите

ArrayPrint(buff_MACD_main);

И другие массивы. Увидите, что там внутри.

 
Sergey Savinkin:

Кстати, индексацию проверьте. Напишите

ArrayPrint(buff_MACD_main);

И другие массивы. Увидите, что там внутри.

Там была ошибка, она исправлена.

Функция копибуфер получает с 0 до bars.

Да я думал об индексации, пробовал и как таймсерию и наоборот, что то не получалось. Завтра еще попробую.

Спасибо большое за участие!

 
Sergey Savinkin:

Кстати, индексацию проверьте. Напишите

ArrayPrint(buff_MACD_main);

И другие массивы. Увидите, что там внутри.

Эта функция вываливает мне весь буфер. Я в шоке, я даже не знаю куда мне там смотреть. Для тракториста это слишком сложно.

 
Vitaly Stepanov:

Эта функция вываливает мне весь буфер. Я в шоке, я даже не знаю куда мне там смотреть. Для тракториста это слишком сложно.

Он весь не нужен. Начало и конец. Или просто

Print(buff_MACD_main[0]);

Print(buff_MACD_main[ArraySize(buff_MACD_main)-1]);

Смотрим, что в начале и что в конце. Сравниваем с графиком. Индексация становится понятна.

В случае печати всего массива можно было еще и увидеть соседние значения, если знать значение i
Причина обращения: