Вообще задача передать эксперту двумерный массив из индикатора, а как сделать не фурычу.
ну и вызываю его в советнике
1. Нужно помнить, что в ИНДИКАТОРЕ по-умолчанию индикаторный буфер с индексом "0" соответствует самому ЛЕВОМУ бару на графике.
2. В советнике нет команды "SetIndexBuffer".
3. iCustom - это создание пользовательского индикатора, а не запрос буфера (поэтому всё нужно прописывать явно, а не ",0,1"). В Вашем случае можно использовать такую форму
//--- create handle of the indicator TopqwResetLastError();
handle_Topqw=iCustom(Symbol(),Period(),"Topqw",PRICE_CLOSE);
//--- if the handle is not created if(handle_Topqw==INVALID_HANDLE)
{
//--- tell about the failure and output the error code PrintFormat("Failed to create handle of the Topqw indicator for the symbol %s/%s, error code %d",
Symbol(),
EnumToString(Period()),
GetLastError());
//--- the indicator is stopped early return(INIT_FAILED);
}
4. CopyBuffer вроде верно написан.
5. Двумерный массив не передать - сделайте два массива-индикаторных буфера.
1. Нужно помнить, что в ИНДИКАТОРЕ по-умолчанию индикаторный буфер с индексом "0" соответствует самому ЛЕВОМУ бару на графике.
2. В советнике нет команды "SetIndexBuffer".
3. iCustom - это создание пользовательского индикатора, а не запрос буфера (поэтому всё нужно прописывать явно, а не ",0,1"). В Вашем случае можно использовать такую форму
4. CopyBuffer вроде верно написан.
5. Двумерный массив не передать - сделайте два массива-индикаторных буфера.
Спасибо, за поправку, вот только не пойму, если задать явно для передачи массивов, то формализуется как? где указывать что мне нужно извлечь два массива?
MA_handle=iCustom(Symbol(),Period(),"TopFidCounselor",per,bar); per,bar - же массивы, а данные должны быть imput,
в индикаторе записываю в массивы
SetIndexBuffer(0,per,INDICATOR_CALCULATIONS);
SetIndexBuffer(1,bar,INDICATOR_CALCULATIONS);
если я сделаю такую запись
intOnCalculate(
...
{
//--------------------------------------------------------------
for ( int i = 0; i < rates_total; i ++ ) per[i] = price[i]; -
//--------------------------------------------------------------
ТО СОВЕТНИК РАБОТАЕТ БЕЗ ОШИБКИ
а если такую
//----------------------------------------------------------------
for(int b=1; b<200; b++) //отбор по х-
{-
for(int p=1; p<200; p++) // отбор по у-
{-
if(arrayZ[6][p][b]>0||arrayZ[6][p][b]<0)-
{-
per[b]=p;-
bar[b]=b;-
}-
}-
}-
//----------------------------------------------------------------
ТО ОШИБКА код 4002
Я посмотрел, что нужно через IndicatorCreate() , будьте добры подскажите как, а то щас если разбираться это опять недели уйдут, а мне уже так немного осталось, чтоб закончить блок мысли. Скоро в тайгу надо ехать до конца лета пчел на кормешку вывозить, так хочется до отъезда проверить идею, что б там понапрасну себя не терзать иллюзиями
только не ясно, куда записывать извлекаемый массив?
Массив per объявляется в советнике, в процедуре, в которой Вы выполняете копирование. Это должен быть динамический массив (объявляется как [] - без указания размерности).
Господа, скажите пожалуйста где ошибка.
Подготавливаю индикатор для вызова в советнике.
Из индикатора требуется передать буфер.
Результат - к бару перекреплено значения int.
Вообще задача передать эксперту двумерный массив из индикатора, а как сделать не фурычу.
ну и вызываю его в советнике
Господа, скажите пожалуйста где ошибка.
Подготавливаю индикатор для вызова в советнике.
Из индикатора требуется передать буфер.
Результат - к бару перекреплено значения int.
Вообще задача передать эксперту двумерный массив из индикатора, а как сделать не фурычу.
ну и вызываю его в советнике
1. Нужно помнить, что в ИНДИКАТОРЕ по-умолчанию индикаторный буфер с индексом "0" соответствует самому ЛЕВОМУ бару на графике.
2. В советнике нет команды "SetIndexBuffer".
3. iCustom - это создание пользовательского индикатора, а не запрос буфера (поэтому всё нужно прописывать явно, а не ",0,1"). В Вашем случае можно использовать такую форму
4. CopyBuffer вроде верно написан.
5. Двумерный массив не передать - сделайте два массива-индикаторных буфера.
1. Нужно помнить, что в ИНДИКАТОРЕ по-умолчанию индикаторный буфер с индексом "0" соответствует самому ЛЕВОМУ бару на графике.
2. В советнике нет команды "SetIndexBuffer".
3. iCustom - это создание пользовательского индикатора, а не запрос буфера (поэтому всё нужно прописывать явно, а не ",0,1"). В Вашем случае можно использовать такую форму
4. CopyBuffer вроде верно написан.
5. Двумерный массив не передать - сделайте два массива-индикаторных буфера.
Я посмотрел, что нужно через IndicatorCreate() , будьте добры подскажите как, а то щас если разбираться это опять недели уйдут, а мне уже так немного осталось, чтоб закончить блок мысли. Скоро в тайгу надо ехать до конца лета пчел на кормешку вывозить, так хочется до отъезда проверить идею, что б там понапрасну себя не терзать иллюзиямиСпасибо, за поправку, вот только не пойму, если задать явно для передачи массивов, то формализуется как? где указывать что мне нужно извлечь два массива?
Верно ли то что я использую в индикаторе INDICATOR_CALCULATIONS?
С ошибкой 4002 решен вопрос.
только не ясно, куда записывать извлекаемый массив?
С ошибкой 4002 решен вопрос.
только не ясно, куда записывать извлекаемый массив?
Массив per объявляется в советнике, в процедуре, в которой Вы выполняете копирование. Это должен быть динамический массив (объявляется как [] - без указания размерности).
Спасибо! Если не затруднит еще вопрос, как же это разбить двумерный массив на два, логика же ломается?
Если вам нужно двумерный массив отдавать из индикатора, то сделайте на каждое измерение массива по буферу.
Буфер 0 - первое измерение, буфер 1 - второе.
И получайте их в советнике обычным образом.
Если вам нужно двумерный массив отдавать из индикатора, то сделайте на каждое измерение массива по буферу.
Буфер 0 - первое измерение, буфер 1 - второе.
И получайте их в советнике обычным образом.
Благодарю, но если размерность 1000*1000, то не как.
Как же это разбить двумерный массив на два?
у меня выходит что на каждом баре есть одномерный массив данных