Та самая 4806 ошибка - страница 2

 
И ещё непонятка… int needCalcBars = чему получается равна? И сколько максимально баров в окне в настройках терминала? Может их действительно нет?
 

Я вложил ниже инпуты для понимания.

input int      i_ADX_period_start   = 2;           // ADX Period Start
input int      i_ADX_period_end     = 15;          // ADX Period End
input int      i_atr_period_start   = 2;           // ATR Period Start
input int      i_atr_period_end     = 15;          // ATR Period End
input int      i_line_percent_start = 3;           // Процент размещения линии Start
input int      i_line_percent_end   = 95;          // Процент размещения линии End
input int      i_days_calc          = 30;          // Дней истории
input int      i_max_dogon_start    = 0;           // Количество усреднений От
input int      i_max_dogon_end      = 5;           // Количество усреднений До

Обратите внимание на кол-во циклов for. 

for(int adx = i_ADX_period_start; adx <= i_ADX_period_end && !IsStopped(); adx++)

Проходится по периоду АДХ с 5 до 15

Внутри него цикл

for(int atr = i_atr_period_start; atr <= i_atr_period_end && !IsStopped(); atr++) {

Который так же перебирается с 5 до 15

Внутри которого еще цикл

for(int dogon = i_max_dogon_start; dogon <= i_max_dogon_end && !IsStopped(); dogon++) {

Который перебирается с 0 до 5

А так далее в глубину.

Логика в том, что каждое значение счетчика for это период или параметр расчета.
И все комбинации параметров индикаторов должны перебраться между собой для того чтобы выдать нужные мне результаты.

Ну получается  АДХ 12 плюс  АТР 12 итого 24. А откуда вы набираете

Почему вы их складываете? 12 вариантов АДХ должны перебраться с 12 вариантами АТР = 144. Это только АДХ и АТР. А если вы глянете на то какие в циклах for параметры, которые только приумножают количество итераций, то доходит до 2-5 миллионов.

И ещё непонятка… int needCalcBars = чему получается равна? И сколько максимально баров в окне в настройках терминала? Может их действительно нет?

needCalcBars. Для примера мне надо 30 дней. На ТФ М1 это ~43000 баров. На М5 это ~8600. И так далее. Мой код считает сколько надо баров перебрать на выбранном ТФ исходя из дней истории.
В окне настроек терминала у меня 100 000 баров стоит. Доступны 100 000.
Да и код есть который выдает мне доступное кол-во баров. BARS он же iBars(), просто в препроцессорах сделал себе BARS.

needCalcBars     = MathMin(needCalcBars, BARS(_Symbol, TFs[tf]))

Остальные значения из вложенных for тоже используются в коде, но я его не отображал. В этом нет смысла. Ошибка на уровне CopyBuffer.



Возможно конечно вы предлагаете создавать хендл не внутри всех циклов, а внутри его конректного цикла.
Например хендл АДХ создавать сразу после его for. 
Но я не уверен что это решит проблему CopyBuffer. 
И все еще вижу необходимость объявлять хендлы внутри циклов, а не в OnInit()

 
Petr Zharuk #:

Я вложил ниже инпуты для понимания.

Обратите внимание на кол-во циклов for. 

Проходится по периоду АДХ с 5 до 15.

...

Перенесите расчёты индикаторов в основной файл функцией, и хендлы будут не нужны. Я однажды такое делал, примерно с такой задачей

 
Vitaly Muzichenko #:

Перенесите расчёты индикаторов в основной файл функцией, и хендлы будут не нужны. Я однажды такое делал, примерно с такой задачей

Мне к сожалению не очевидно то, что вы предложили. 
Что сделать?

 
Petr Zharuk #:
Что сделать?
Вам стоит в эту ветку обратиться:

 
Petr Zharuk #:

Мне к сожалению не очевидно то, что вы предложили. 
Что сделать?

Перенести код расчёта АДХ / АТР / тд. в основной файл функцией, и с ней работать

Примерно так

double
 ADX(string symbol, int timeframe, int period,  int applied_price, int mode, int shift)
 {
 // code
 return res;
 }
 
Sergey Gridnev #:
Вам стоит в эту ветку обратиться:

Почему мне стоит обратится в эту ветку?

 
Petr Zharuk #:

Почему мне стоит обратится в эту ветку?

Она больше подходит под Ваши вопросы. Люди, которые там помогают новичкам, могут даже не заглянуть сюда.
 
Sergey Gridnev #:
Она больше подходит под Ваши вопросы. Люди, которые там помогают новичкам, могут даже не заглянуть сюда.

Не подходит. 

 
Sergey Gridnev #:
Она больше подходит под Ваши вопросы. Люди, которые там помогают новичкам, могут даже не заглянуть сюда.

Кто читает форум, тот смотрит все ветки