Может кто-нибудбь подробно объснить что просходит? - страница 3

 
Я не домагаюсь а помогаю. И к разработчикам и их времени отношусь уважительно. Просто когда такой крик души об ответе а они молчат. .. 


Во вторых пусть они сами про это скажут что работы ведутся.
 
sergeev:
Я не домагаюсь а помогаю. И к разработчикам и их времени отношусь уважительно. Просто когда такой крик души об ответе а они молчат. ..


Во вторых пусть они сами про это скажут что работы ведутся.

Уважаемый sergeev очень благодарен за помощь , скропулезное изучение данного случая и оказанную помощь.
 
Разбираемся
 
Большое спасибо. И тогда когда разберетесь отпишите пожауйста здесь. Мне бы очень хотелось, чтобы это была наша ошибка (юзверей),  а не билда.
 

судя по всему проблема с ArrayCopySeries

хоть в хелпе и сказано, что для индикаторных буферов данные копируются (а не делается редирект доступа), но наверное все же функции *OnArray делают редирект, как и для простых массивов

разработчики могут точнее разобраться.

рабочий код я запостил в этой теме 'ПОИСКЗНАЧЕНИЯ RSI'

 
Кстати массив я изменял в двух элементах
 

Действительно, если сделать расчёт iRSIOnArray один раз за тик, то всё работает:

2007.10.30 14:15:53 qwqwqwwqwq EURUSD,H1: iRSIOnArray 32.7776 RSIBuf() 32.7776 iRSI 47.1247 - 5
2007.10.30 14:15:33 qwqwqwwqwq EURUSD,H1: iRSIOnArray 34.4451 RSIBuf() 34.4451 iRSI 46.6214 - 4
2007.10.30 14:15:27 qwqwqwwqwq EURUSD,H1: iRSIOnArray 36.3726 RSIBuf() 36.3726 iRSI 46.1085 - 3
2007.10.30 14:15:17 qwqwqwwqwq EURUSD,H1: iRSIOnArray 39.6188 RSIBuf() 39.6188 iRSI 46.6214 - 2
2007.10.30 14:15:16 qwqwqwwqwq EURUSD,H1: iRSIOnArray 43.3314 RSIBuf() 43.3314 iRSI 47.1247 - 1
2007.10.30 14:15:00 qwqwqwwqwq EURUSD,H1: iRSIOnArray 46.6214 RSIBuf() 46.6214 iRSI 46.6214 - 0

 
Ошибки в терминале нет.

Вы определили рабочий массив как индексный:
double ExtBuffer[];
SetIndexBuffer(0,ExtBuffer);
тем самым включив для массива ExtBuffer механизм экономичного расчета индикаторов, который полагается на правило "индикатор получил свою копию данных и эти данные не изменятся до следующего тика". Первый вызов (на данном тике) индикатора iRSIOnArray на индексном буфере пересчитывает данные и результат этих данных фиксируется (работает правило "индикатор получил свою копию данных и эти данные не изменятся до следующего тика").

Именно поэтому следующие вызовы iRSIOnArray не вызывают пересчетов на индексном буфере (который не может измениться до следующего тика), а берутся уже просчитанные данные. Проблема Вашего кода в том, что Вы использовали наш индексный экономичный массив для своих внутренних нужд не по назначению.

Решение проблемы:
  • использовать собственный локальный (не индексный) массив, тем самым не включая индексный/экономичный режим пересчетов
 
Да ренат, я как раз об этом хотел написать (дошел до этого сам экспериментами)

Если не задавать ExtBuffer написать как индексный, то все нормально.  ПОэтому решение такое:

int start() {    ArrayResize(ExtBuf,Bars-1); ArraySetAsSeries(ExtBuf,true);
Во вторых копирование выполнять только
        for (int j=0; j<Bars; j++) ExtBuf[j]=Close[j];

Если пишем
ArrayCopySeries(ExtBuf,MODE_CLOSE,Symbol(),Period());
то iRSIOnArray не меняется. и в журнале вообще выходит ошибка 4053 - ERR_SOME_ARRAY_ERROR

"series array cannot be used with iRSIOnArray"

Короче то что я понял - надо очень внимательно относиться к индексным массивам... Напишу у сябя на мониторе крупными буквами
 
sergeev:
Да ренат, я как раз об этом хотел написать (дошел до этого сам экспериментами)

Если не задавать ExtBuffer написать как индексный, то все нормально. ПОэтому решение такое:

int start() {    ArrayResize(ExtBuf,Bars-1); ArraySetAsSeries(ExtBuf,true);
Во вторых копирование выполнять только
        for (int j=0; j<Bars; j++) ExtBuf[j]=Close[j];

Если пишем
ArrayCopySeries(ExtBuf,MODE_CLOSE,Symbol(),Period());
то iRSIOnArray не меняется. и в журнале вообще выходит ошибка 4053 - ERR_SOME_ARRAY_ERROR

"series array cannot be used with iRSIOnArray"

Короче то что я понял - надо очень внимательно относиться к индексным массивам... Напишу у сябя на мониторе крупными буквами

Большое спасибо, с уважением Артем!