prezados(as),
quado uso o testador de estrategia para alguns indicadores com array tipo matrix fica bastante lento mais de 10 vezes mais lento, retirando a matrix e convertendo em uma função comum fica normal. Alguem já teve esse problema ? grato e bons trades !
exemplo https://www.mql5.com/pt/code/16806
//
double workRsi[][3];
#define
_price 0
#define _change 1
#define _changa 2
//
double iRsi(double price, double period, int bars, int i, int forInstance=0)
{
if (ArrayRange(workRsi,0)!=bars) ArrayResize(workRsi,bars);
int z = forInstance*3; double alpha = 1.0 /(double)period;
//
workRsi[i][_price+z] = price;
if (i<period)
{
int k; double sum = 0; for
(k=0; k<period && (i-k-1)>=0; k++) sum += MathAbs(workRsi[i-k][_price+z]-workRsi[i-k-1][_price+z]);
workRsi[i][_change+z] = (workRsi[i][_price+z]-workRsi[0][_price+z])/MathMax(k,1);
workRsi[i][_changa+z]
=
sum/MathMax(k,1);
}
else
{
double change = workRsi[i][_price+z]-workRsi[i-1][_price+z];
workRsi[i][_change+z] = workRsi[i-1][_change+z] + alpha*( change -
workRsi[i-1][_change+z]);
workRsi[i][_changa+z] = workRsi[i-1][_changa+z] + alpha*(MathAbs(change) - workRsi[i-1][_changa+z]);
}
if
(workRsi[i][_changa+z] != 0)
return(50.0*(workRsi[i][_change+z]/workRsi[i][_changa+z]+1));
else return(0);
}
Já. Resolvi assim >> if (ArrayRange(workRsi,0)!=bars) ArrayResize(workRsi,bars,1000);
Já. Resolvi assim >> if (ArrayRange(workRsi,0)!=bars) ArrayResize(workRsi,bars,1000);
Valeu Murphy ! o indicador já tem o arrayresize, eu estava chamando 2 indicadores com icustom, combinei a média com o DMI e ficou aceitavel chamando 1 só indicador, a medida que se carrega mais indicadores no EA fica mais lento, tem um artigo aqui no site que sugere incorporar o indicador no proprio EA para ficar mais rapido, mais acho isso bem mais complexo, combinar 2 indicadores em 1 para ter só um icustom é mais simples.
Tentei mudar a matrix para um indicator_calculation mais não tive paciencia, o calculation faz o resize automaticamente do array, mais pelo que
lí não da para colocar uma matrix.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
prezados(as),
quado uso o testador de estrategia para alguns indicadores com array tipo matrix fica bastante lento mais de 10 vezes mais lento, retirando a matrix e convertendo em uma função comum fica normal. Alguem já teve esse problema ? grato e bons trades !
exemplo https://www.mql5.com/pt/code/16806
//
double workRsi[][3];
#define _price 0
#define _change 1
#define _changa 2
//
double iRsi(double price, double period, int bars, int i, int forInstance=0)
{
if (ArrayRange(workRsi,0)!=bars) ArrayResize(workRsi,bars);
int z = forInstance*3; double alpha = 1.0 /(double)period;
//
workRsi[i][_price+z] = price;
if (i<period)
{
int k; double sum = 0; for (k=0; k<period && (i-k-1)>=0; k++) sum += MathAbs(workRsi[i-k][_price+z]-workRsi[i-k-1][_price+z]);
workRsi[i][_change+z] = (workRsi[i][_price+z]-workRsi[0][_price+z])/MathMax(k,1);
workRsi[i][_changa+z] = sum/MathMax(k,1);
}
else
{
double change = workRsi[i][_price+z]-workRsi[i-1][_price+z];
workRsi[i][_change+z] = workRsi[i-1][_change+z] + alpha*( change - workRsi[i-1][_change+z]);
workRsi[i][_changa+z] = workRsi[i-1][_changa+z] + alpha*(MathAbs(change) - workRsi[i-1][_changa+z]);
}
if (workRsi[i][_changa+z] != 0)
return(50.0*(workRsi[i][_change+z]/workRsi[i][_changa+z]+1));
else return(0);
}