Como codificar? - página 338

 
at120:
Olá Malden!

Obrigado por seu apoio! ;-)

Mesmo quando eu escrevo o código como você me disse:

(Acho que sim...)

#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);

}

);

Portanto, quando uso a "Primeira" versão, não recebo nenhum valor...

Quando utilizo a segunda versão, recebo o erro... hmmm.

Só chamar a mãe1 funciona... mas este não é o valor certo...

Obrigado por sua ajuda!

Adeus, AT

Substitua o "nome personalizado" pelo nome do seu indicador (indicador existente), adicione parâmetros à chamada iCustom(), e ele funcionará. Esse nome foi colocado ali apenas como um exemplo

Além disso, você não definiu o número de buffers (não usando #property indicator_buffers nem usando a função IndicatorBuffers()) O indicador "pensa" que existem 0 buffers e nunca inicializará esses bugs em tamanho real. Defina o número de buffers que você vai usar

_______________________

 

Olá Mladen!

Obrigado por suas informações... Eu já fiz isso... O código é parecido com este:

#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);

}

);

O erro de conversa ainda está lá...

Obrigado por sua ajuda!

Tchau, AT

 
at120:
Olá Mladen!

Obrigado por suas informações... Eu já fiz isso... O código tem este aspecto:

#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);

}

);

O erro de conversa ainda está lá...

Obrigado por sua ajuda!

Adeus, AT

Aqui está uma versão sem erros de compilação..: _test.mq4

Não tem idéia do que é "myIndi" então não poderia testar se iCustom() retorna valores de seu indicador "myIndi".

Arquivos anexados:
copiler.gif  52 kb
_test.mq4  2 kb
 

Olá Mladen!

Meu indi é uma produção normal do JMA.mq4 / JMA Indi.

Também pode ser uma saída de MA ou qualquer outra coisa. "myIndi" não é um indi especial.

E o chamado do indi funciona na janela normal do indi.

Meu código se parece com este:

#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);

}

);

Eu não entendo o fracasso que eu fiz...

Muito obrigado por sua ajuda!!

Tchau, AT

 

Olá Mladen!

Quando escrevo ou mudo assim...

Também recebo o erro de conversa... alguma idéia...

Muito obrigada!

Tchau, 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:
Olá Mladen!

Quando escrevo ou mudo assim...

Também recebo o erro de conversa... alguma idéia...

Muito obrigado!

Tchau, 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);

}

em120

Você não pode usar um elemento que evolui para o dobro quando o parâmetro esperado é suposto ser constante[]. Ao invés de usar "mom1", use "mom1".

 

Olá Mladen!

Obrigado pela resposta, então minha pergunta agora é, como "converter" meu duplo para minha série dupla constante[]

porque quando eu uso a mãe1 só recebo um "0" como saída.

Então, como posso fazer com que a mãe1 "se pareça", por exemplo, com o Close. Existe algum código de amostra para isso?

Muito obrigado e adeus, AT

 
at120:
Olá Mladen!

Obrigado pela resposta, então minha pergunta agora é, como "converter" meu duplo para minha série dupla constante[]

porque quando eu uso a mãe1 só recebo um "0" como saída.

Então, como posso fazer com que a mãe1 "se pareça", por exemplo, com o Close. Existe algum código de amostra para isso?

Muito obrigado e adeus, AT

Você não precisa "converter" nada. No momento em que a parte "" é removida, ela "se torna" o parâmetro adequado.

Veja como fica na tabela:

E aqui está o código : _test_2.mq4

Arquivos anexados:
_test_2.mq4  1 kb
test.gif  64 kb
 

Olá Mladen!

Agora funciona para mim, parece que esqueci os IndicatorBuffers(2);

Agora parece que tenho o valor certo!

Muito obrigado por sua ajuda!!

Adeus, AT

 

Quais matrizes precisam ser declaradas como constantes nos parâmetros de funções?