Как кодировать? - страница 338

 
at120:
Привет Мальден!

Спасибо за поддержку! ;-)

Даже, когда я напишу код, как вы мне сказали:

(я так думаю...)

#property indicator_chart_window

double buffer[];

double mom1[];

int init() { SetIndexBuffer(0,buffer); SetIndexBuffer(1,mom1);return(0); }

int deinit() { return(0); }

int start()

{

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(Bars-counted_bars,Bars-1);

for(int i = limit; i>=0; i--)

{

mom1 = iCustom(NULL,0,"custom name",0,i);

buffer = (

Mom(mom1,10,Bars,i);

//doesn't work - no value in indi

// Mom(mom1,10,Bars,i); //error: parameter conversation not allowed

// mom1 // this works

);

}

return(0);

}

double Mom(const double& series[], int period, int totcount, int index)

{

if (totcount<1 || period<1) return (EMPTY_VALUE);

if (indextotcount-1) return (EMPTY_VALUE);

return (series-series);

}

);

Итак, когда я использую "Первую" версию, я не получаю никакого значения...

Когда я использую вторую версию, я получаю ошибку... хммм...

Работает только вызов mom1... но это не то значение...

Спасибо за помощь!

Пока, АТ

Замените "custom name" на название вашего индикатора (существующего индикатора), добавьте параметры в вызов iCustom(), и все заработает. Это имя было помещено туда просто в качестве примера.

Также вы не определили количество буферов (ни с помощью #property indicator_buffers, ни с помощью функции IndicatorBuffers()) Индикатор "думает", что буферов 0 и никогда не инициализирует эти буфера до реального размера. Определите количество буферов, которые вы собираетесь использовать

_______________________

 

Привет, Младен!

Спасибо за информацию... Я уже сделал это... Код выглядит следующим образом:

#property indicator_separate_window

#property indicator_color3 Red

#property indicator_width1 3

#property indicator_buffers 3

#property indicator_color1 LawnGreen

#property indicator_color2 Red

#include // here the mom() function is incl.

double buffer[];

double mom1[];

int init() { SetIndexBuffer(0,buffer); SetIndexBuffer(1,mom1);return(0); }

int deinit() { return(0); }

int start()

{

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(Bars-counted_bars,Bars-1);

for(int i = limit; i>=0; i--)

{

mom1 = iCustom(NULL,0,"myIndi",0,i);

buffer = (

Mom(mom1,10,Bars,i); //doesn't work - no value in indi

// Mom(mom1,10,Bars,i); //error: parameter conversation not allowed

// mom1 // this works, but no subfunction incl.

);

}

return(0);

}

//normaly in mqh incl.

double Mom(const double& series[], int period, int totcount, int index)

{

if (totcount<1 || period<1) return (EMPTY_VALUE);

if (indextotcount-1) return (EMPTY_VALUE);

return (series-series);

}

);

Ошибка разговора все еще присутствует...

Спасибо за помощь!

Пока, AT

 
at120:
Привет, Младен!

Спасибо за информацию... Я уже сделал это... Код выглядит так:

#property indicator_separate_window

#property indicator_color3 Red

#property indicator_width1 3

#property indicator_buffers 3

#property indicator_color1 LawnGreen

#property indicator_color2 Red

#include // here the mom() function is incl.

double buffer[];

double mom1[];

int init() { SetIndexBuffer(0,buffer); SetIndexBuffer(1,mom1);return(0); }

int deinit() { return(0); }

int start()

{

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(Bars-counted_bars,Bars-1);

for(int i = limit; i>=0; i--)

{

mom1 = iCustom(NULL,0,"myIndi",0,i);

buffer = (

Mom(mom1,10,Bars,i); //doesn't work - no value in indi

// Mom(mom1,10,Bars,i); //error: parameter conversation not allowed

// mom1 // this works, but no subfunction incl.

);

}

return(0);

}

//normaly in mqh incl.

double Mom(const double& series[], int period, int totcount, int index)

{

if (totcount<1 || period<1) return (EMPTY_VALUE);

if (indextotcount-1) return (EMPTY_VALUE);

return (series-series);

}

);

Ошибка разговора все еще присутствует...

Спасибо за помощь!

Пока, AT

Вот версия без ошибок компилятора : _test.mq4

Я понятия не имею, что такое "myIndi", поэтому не смог проверить, возвращает ли iCustom() значения из вашего индикатора "myIndi".

Файлы:
copiler.gif  52 kb
_test.mq4  2 kb
 

Привет, Младен!

Мой indi - это обычный выход JMA.mq4 / JMA Indi.

Это также может быть выход MA или что-либо еще. "myIndi" не является специальным инди.

И вызов инди работает в обычном окне инди...

Мой код выглядит так:

#property indicator_separate_window

#property indicator_color3 Red

#property indicator_width1 3

#property indicator_buffers 3

#property indicator_color1 LawnGreen

#property indicator_color2 Red

#include // here the mom() function is incl.

double buffer[];

double mom1[];

int init() { SetIndexBuffer(0,buffer); SetIndexBuffer(1,mom1);return(0); }

int deinit() { return(0); }

int start()

{

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(Bars-counted_bars,Bars-1);

for(int i = limit; i>=0; i--)

{

mom1 = iCustom(NULL,0,"JMA",0,i); //normal JMA / MA output

// I get this out put, and it's ok, but the second output (buffer) is zero...

buffer = (

Mom(mom1,10,Bars,i); //no compiler error, but doesn't work - no value in indi window

// Mom(mom1,10,Bars,i); //error: parameter conversation not allowed

// mom1 // this works, but it's the value i want

);

}

return(0);

}

//normaly in mqh incl.

double Mom(const double& series[], int period, int totcount, int index)

{

if (totcount<1 || period<1) return (EMPTY_VALUE);

if (indextotcount-1) return (EMPTY_VALUE);

return (series-series);

}

);

Я не получаю сбой, который я сделал...

Спасибо большое за помощь!!!

Пока, AT

 

Привет, Младен!

Когда я пишу или изменяю вот так...

я также получаю ошибку разговора... есть идеи...?

Большое спасибо!

Пока, AT

#property indicator_separate_window

#property indicator_color3 Red

#property indicator_width1 3

#property indicator_buffers 3

#property indicator_color1 LawnGreen

#property indicator_color2 Red

//#include // here the mom() function is incl.

double buffer[];

double mom1[];

int init() { SetIndexBuffer(0,buffer); SetIndexBuffer(1,mom1);return(0); }

//normaly in mqh incl.

double Mom(const double& series[], int period, int totcount, int index)

{

if (totcount<1 || period<1) return (EMPTY_VALUE);

if (indextotcount-1) return (EMPTY_VALUE);

return (series-series);

}

int deinit() { return(0); }

int start()

{

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(Bars-counted_bars,Bars-1);

for(int i = limit; i>=0; i--)

{

mom1 = iMA(Symbol(),Period(),13,8,MODE_SMMA,PRICE_MEDIAN,i); //normal JMA / MA output

// I get this out put, and it's ok, but the second output (buffer) is zero...

buffer = (

// Mom(mom1,10,Bars,i) //no compiler error, but doesn't work - no value in indi window

Mom(mom1,10,Bars,i) //error: parameter conversation not allowed

// mom1 // this works, but it is NOT the value i want

);

}

return(0);

}

 
at120:
Привет, Младен!

Когда я пишу или изменяю его вот так...

я также получаю ошибку разговора... есть идеи...?

Большое спасибо!

Пока, AT

#property indicator_separate_window

#property indicator_color3 Red

#property indicator_width1 3

#property indicator_buffers 3

#property indicator_color1 LawnGreen

#property indicator_color2 Red

//#include // here the mom() function is incl.

double buffer[];

double mom1[];

int init() { SetIndexBuffer(0,buffer); SetIndexBuffer(1,mom1);return(0); }

//normaly in mqh incl.

double Mom(const double& series[], int period, int totcount, int index)

{

if (totcount<1 || period<1) return (EMPTY_VALUE);

if (indextotcount-1) return (EMPTY_VALUE);

return (series-series);

}

int deinit() { return(0); }

int start()

{

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(Bars-counted_bars,Bars-1);

for(int i = limit; i>=0; i--)

{

mom1 = iMA(Symbol(),Period(),13,8,MODE_SMMA,PRICE_MEDIAN,i); //normal JMA / MA output

// I get this out put, and it's ok, but the second output (buffer) is zero...

buffer = (

// Mom(mom1,10,Bars,i) //no compiler error, but doesn't work - no value in indi window

Mom(mom1,10,Bars,i) //error: parameter conversation not allowed

// mom1 // this works, but it is NOT the value i want

);

}

return(0);

}

at120

Вы не можете использовать элемент, который эволюционирует до double, когда ожидаемый параметр должен быть const double[]. Вместо "мама1" используйте "мама1".

 

Привет, Младен!

Спасибо за ответ, теперь мой вопрос в том, как "преобразовать" мой double в const double series[].

потому что когда я использую только mom1, я получаю на выходе "0"...

Как мне сделать так, чтобы mom1 "выглядел" как, например, Close. Есть ли какой-нибудь пример кода для этого?

Большое спасибо и до свидания, AT

 
at120:
Привет, Младен!

Спасибо за ответ, теперь мой вопрос в том, как "преобразовать" мой double в const double series[].

потому что когда я использую только mom1, я получаю "0" на выходе...

Как мне сделать так, чтобы mom1 "выглядел" как, например, Close. Есть ли какой-нибудь пример кода для этого?

Большое спасибо и пока, AT

Вам не нужно ничего "преобразовывать". В тот момент, когда убирается часть "", он "становится" правильным параметром.

Вот как это выглядит на графике:

А вот код: _test_2.mq4

Файлы:
_test_2.mq4  1 kb
test.gif  64 kb
 

Привет, Младен!

Теперь это работает для меня, кажется, что я забыл IndicatorBuffers(2);

Теперь кажется, что я получаю правильное значение!

Спасибо большое за помощь!!!

Пока, AT

 

Какие массивы должны быть объявлены как const в параметрах функций?