Não fiz nada. Execute-o como está. Nos registros acima, todos os dados a serem reproduzidos. Seu resultado deve ser completamente o mesmo que o meu em termos de lucro. E, em termos de desempenho, não muito diferente.
É mesmo? Quando você afirmar que encontrou um erro ou um problema em meu artigo pelo qual fui pago, com certeza vou verificar. Enquanto isso, não vamos dizer "vamos". Porque você está fazendo parecer que está sendo paternalista.
No período de tempo do artigo, em EURUSD,M30 e USDJPY,M30
MACD Sample One value at a time.mq5:
final balance 100180.01 USD
EURUSD,M30: 26390728 ticks, 12510 bars generated. Environment synchronized in0:00:00.125. Test passed in0:00:41.016 (including ticks preprocessing 0:00:02.328).
EURUSD,M30: total time from login to stop testing 0:00:41.141 (including 0:00:00.125for history data synchronization)
756 Mb memory used including 1.88 Mb of history data, 512 Mb of tick data
final balance 99523.31 USD
USDJPY,M30: 29801706 ticks, 11837 bars generated. Environment synchronized in0:00:00.032. Test passed in0:01:00.937 (including ticks preprocessing 0:00:02.735).
USDJPY,M30: total time from login to stop testing 0:01:00.969 (including 0:00:00.032for history data synchronization)
819 Mb memory used including 1.88 Mb of history data, 576 Mb of tick data
MACD Sample 4 to 5 MQL4 style.mq5:
final balance 100192.51 USD
EURUSD,M30: 26390728 ticks, 12510 bars generated. Environment synchronized in0:00:00.140. Test passed in0:01:37.969 (including ticks preprocessing 0:00:02.329).
EURUSD,M30: total time from login to stop testing 0:01:38.109 (including 0:00:00.140for history data synchronization)
755 Mb memory used including 1.88 Mb of history data, 512 Mb of tick data
final balance 99550.10 USD
USDJPY,M30: 29801706 ticks, 11837 bars generated. Environment synchronized in0:00:00.031. Test passed in0:01:51.328 (including ticks preprocessing 0:00:02.500).
USDJPY,M30: total time from login to stop testing 0:01:51.359 (including 0:00:00.031for history data synchronization)
819 Mb memory used including 1.88 Mb of history data, 576 Mb of tick data
O tempo de teste difere duas vezes. E não se trata de 8 ou 1 segundo.
Se você comparar os balanços, sim, há uma pequena diferença nos números, mas ela não é perceptível no gráfico.
Na verdade, a descrição desse tópico é vista aqui em um plano ligeiramente diferente:
Milhares de indicadores já foram escritos, acessados via iCustom com alocação de buffers/handles apropriados e assim por diante. Essa é uma história lenta e que consome muitos recursos;
Um indicador pode ser implementado como uma função pura dentro de um Expert Advisor - nesse caso, o valor necessário será calculado muito mais rapidamente e exigirá menos memória.
A ideia é escrever algum tipo de interface que permita o acesso unificado a qualquer indicador personalizado, mas se o indicador for implementado como uma função pura separada, a referência será feita a essa função em vez do identificador. Como resultado, obtemos uma boa aceleração e, ao mesmo tempo, não perdemos o acesso a nenhum indicador arbitrário. Esse é um tópico interessante, eu até o abordaria.
Experimente, é interessante ver se vale a pena. Eu gostaria de uma abordagem desse tipo: tiramos OnCalculate do indicador, modificamos um pouco com um novo nome, adicionamos ao código do indicador e agora podemos usar essa função como uma função de bibilio, passando parâmetros do Expert Advisor para ela. Certo?
Rashid Umarov: ...Eu gostaria de uma abordagem desse tipo: retiramos OnCalculate do indicador, modificamos ligeiramente com um novo nome, adicionamos ao código do indicador e agora podemos usar essa função como uma função de bibilio, passando parâmetros do Expert Advisor para ela. Certo?
Precisamos pensar na implementação. Agora é difícil dizer como isso pode ser feito.
Rashid Umarov: Experimente, é interessante ver se vale a pena. Eu gostaria de uma abordagem desse tipo: retiramos OnCalculate do indicador, modificamos um pouco com um novo nome, adicionamos ao código do indicador e agora podemos usar essa função como uma função de bibilio, passando parâmetros do Expert Advisor para ela. Certo?
Fiz isso para iRSIOnArray(), que não está no mql5. Ela funciona no indicador. Para chamá-la a partir do Expert Advisor, não é necessário fazer isso de forma tão direta.
//+------------------------------------------------------------------+//| Índice de Força Relativa na matriz|//+------------------------------------------------------------------+template<typename T>
int RSIOnArray(constint rates_total,
constint prev_calculated,
constint begin,
constint period,
const T &price[],
double &buffer_pos[],
double &buffer_neg[],
double &buffer_rsi[])
{
int i;
T diff;
//--- verificar a contagem de taxasif(period<1 || rates_total-begin<period) return(0);
//--- salvar sinalizadores as_seriesbool as_series_price=ArrayGetAsSeries(price);
bool as_series_rsi=ArrayGetAsSeries(buffer_rsi);
if(as_series_price)
ArraySetAsSeries(price,false);
if(as_series_rsi)
{
ArraySetAsSeries(buffer_rsi,false);
ArraySetAsSeries(buffer_pos,false);
ArraySetAsSeries(buffer_neg,false);
}
//--- cálculos preliminaresint pos=prev_calculated-1;
if(pos<=period)
{
//--- os primeiros valores do RSIPeriod do indicador não são calculados
buffer_rsi[0]=0.0;
buffer_pos[0]=0.0;
buffer_neg[0]=0.0;
T SumP=0.0;
T SumN=0.0;
for(i=1; i<=period; i++)
{
buffer_rsi[i]=0.0;
buffer_pos[i]=0.0;
buffer_neg[i]=0.0;
diff=price[i]-price[i-1];
SumP+=(diff>0 ? diff : 0);
SumN+=(diff<0 ?-diff : 0);
}
//--- calcular o primeiro valor visível
buffer_pos[period]=double(SumP/period);
buffer_neg[period]=double(SumN/period);
buffer_rsi[period]=100.0-(100.0/(1.0+buffer_pos[period]/(buffer_neg[period]>0 ? buffer_neg[period] : DBL_MIN)));
//--- preparar o valor da posição para o cálculo principal
pos=period+1;
}
//--- o loop principal de cálculosfor(i=pos;i<rates_total && !IsStopped();i++)
{
diff=price[i]-price[i-1];
buffer_pos[i]=(buffer_pos[i-1]*(period-1)+(diff>0.0 ? diff : 0.0))/period;
buffer_neg[i]=(buffer_neg[i-1]*(period-1)+(diff<0.0 ?-diff : 0.0))/period;
buffer_rsi[i]=100.0-100.0/(1+buffer_pos[i]/(buffer_neg[i]>0 ? buffer_neg[i] : DBL_MIN));
}
//--- restaurar sinalizadores as_seriesif(as_series_price) ArraySetAsSeries(price,true);
if(as_series_rsi)
{
ArraySetAsSeries(buffer_rsi,true);
ArraySetAsSeries(buffer_pos,true);
ArraySetAsSeries(buffer_neg,true);
}
//---return(rates_total);
}
//+------------------------------------------------------------------+
Fiz o MACD SaMple a partir do fornecimento em suas configurações. De onde vem o EURO na balança, não é esse o ponto?
Essa não é a questão. EUR a partir daqui
E o tempo de teste ainda é muito maior do que o seu.
2018.01.2613:34:10.520 Core 1 authorized (agent build 1755)
2018.01.2613:34:10.522 Tester EURUSD,M1 (MetaQuotes-Demo): testing of Experts\Examples\MACD\MACD Sample.ex5 from2017.09.0100:00 to 2018.01.2600:002018.01.2613:34:16.792 Core 1 EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
2018.01.2613:34:16.792 Core 1 EURUSD,M1: testing of Experts\Examples\MACD\MACD Sample.ex5 from2017.09.0100:00 to 2018.01.2600:00 started with inputs:
2018.01.2613:34:16.792 Core 1 InpLots=0.12018.01.2613:34:16.792 Core 1 InpTakeProfit=502018.01.2613:34:16.792 Core 1 InpTrailingStop=302018.01.2613:34:16.792 Core 1 InpMACDOpenLevel=32018.01.2613:34:16.792 Core 1 InpMACDCloseLevel=22018.01.2613:34:16.792 Core 1 InpMATrendPeriod=262018.01.2613:25:46.482 Core 1 final balance 10168.90 USD2018.01.2613:25:46.482 Core 1 EURUSD,M1: 9753093 ticks, 147480 bars generated. Environment synchronized in0:00:02.610.
Test passed in0:00:19.062 (including ticks preprocessing 0:00:02.078).
2018.01.2613:25:46.482 Core 1 EURUSD,M1: total time fromlogin to stop testing 0:00:21.672 (including 0:00:02.610for history data synchronization)
2018.01.2613:25:46.482 Core 1600 Mb memory used including 44 Mb of history data, 256 Mb of tick data
Aqui está meu registro com suas configurações
EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
EURUSD,M1: testing of Experts\Examples\MACD\MACD Sample.ex5 from2017.09.0100:00 to 2018.01.2600:00 started with inputs:
InpLots=0.10
InpTakeProfit=50
InpTrailingStop=30
InpMACDOpenLevel=3
InpMACDCloseLevel=2
InpMATrendPeriod=26
final balance 10000168.90 USD
EURUSD,M1: 9753093 ticks, 147480 bars generated. Environment synchronized in0:00:00.031. Test passed in0:00:06.302.
EURUSD,M1: total time from login to stop testing 0:00:06.333 (including 0:00:00.031for history data synchronization)
571 Mb memory used including 44 Mb of history data, 256 Mb of tick data
Por que é 3,5 vezes mais rápido para mim (o cache foi removido pela recompilação antes do backtest) - eu não sei. Configuração
Vamos descobrir os motivos! Acho que isso é muito importante. Não tenho um HDD (somente SSD). Talvez esse seja o problema. Mas isso é MUITO ruim para o MT5. O computador é muito antigo, com certeza tem cinco anos. É por isso que ele é estranho.
Não sei por que tenho uma execução 3,5 vezes mais rápida (cache removido pela recompilação antes do backtest). Configuração
Vamos descobrir os motivos! Acho que isso é muito importante. Não tenho um HDD (somente SSD). Talvez esse seja o problema. Mas, nesse caso, isso é MUITO ruim para o MT5. O computador é muito antigo, com certeza tem cinco anos. É por isso que ele é estranho.
Dei uma olhada em todas as postagens - o número de ticks é o mesmo
2018.01.2613:25:46.482 Core 1 final balance 10168.90 USD2018.01.2613:25:46.482 Core 1 EURUSD,M1: 9753093 ticks, 147480 bars generated. Environment synchronized in0:00:02.610.
Test passed in0:00:19.062 (including ticks preprocessing 0:00:02.078).
2018.01.2613:25:46.482 Core 1 EURUSD,M1: total time fromlogin to stop testing 0:00:21.672 (including 0:00:02.610for history data synchronization)
2018.01.2613:25:46.482 Core 1600 Mb memory used including 44 Mb of history data, 256 Mb of tick data
PS: Executei a amostra padrão do MACD no USDJPY M30 2017.02.01-2018.01.18 "Todos os ticks" (como no artigo) MetaQuotes-Demo.
Como você pode caber em 8 segundos? Especialmente em 1 segundo?
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Discussão do artigo "LifeHack for trader: cozinhar fast food a partir de indicadores"
fxsaber, 2018.01.26 11:06 AM.
Não fiz nada. Execute-o como está. Nos registros acima, todos os dados a serem reproduzidos. Seu resultado deve ser completamente o mesmo que o meu em termos de lucro. E, em termos de desempenho, não muito diferente.
Criou o MACD SaMple a partir da entrega em suas configurações. E de onde vem o EURO no saldo, não é essa a questão?
E o tempo de teste ainda é muito maior do que o seu.
No período de tempo do artigo, em EURUSD,M30 e USDJPY,M30
O tempo de teste difere duas vezes. E não se trata de 8 ou 1 segundo.
Se você comparar os balanços, sim, há uma pequena diferença nos números, mas ela não é perceptível no gráfico.
Na verdade, a descrição desse tópico é vista aqui em um plano ligeiramente diferente:
A ideia é escrever algum tipo de interface que permita o acesso unificado a qualquer indicador personalizado , mas se o indicador for implementado como uma função pura separada, a referência será feita a essa função em vez do identificador. Como resultado, obtemos uma boa aceleração e, ao mesmo tempo, não perdemos o acesso a nenhum indicador arbitrário. Esse é um tópico interessante, eu até o abordaria.
...Eu gostaria de uma abordagem desse tipo: retiramos OnCalculate do indicador, modificamos ligeiramente com um novo nome, adicionamos ao código do indicador e agora podemos usar essa função como uma função de bibilio, passando parâmetros do Expert Advisor para ela. Certo?
Experimente, é interessante ver se vale a pena. Eu gostaria de uma abordagem desse tipo: retiramos OnCalculate do indicador, modificamos um pouco com um novo nome, adicionamos ao código do indicador e agora podemos usar essa função como uma função de bibilio, passando parâmetros do Expert Advisor para ela. Certo?
Fiz isso para iRSIOnArray(), que não está no mql5. Ela funciona no indicador. Para chamá-la a partir do Expert Advisor, não é necessário fazer isso de forma tão direta.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Discussão do artigo "LifeHack para trader: cozinhar fast food a partir de indicadores"
Rashid Umarov, 2018.01.26 11:30 AM
Fiz o MACD SaMple a partir do fornecimento em suas configurações. De onde vem o EURO na balança, não é esse o ponto?
Essa não é a questão. EUR a partir daqui
E o tempo de teste ainda é muito maior do que o seu.
Aqui está meu registro com suas configurações
Por que é 3,5 vezes mais rápido para mim (o cache foi removido pela recompilação antes do backtest) - eu não sei. Configuração
Vamos descobrir os motivos! Acho que isso é muito importante. Não tenho um HDD (somente SSD). Talvez esse seja o problema. Mas isso é MUITO ruim para o MT5. O computador é muito antigo, com certeza tem cinco anos. É por isso que ele é estranho.
Os tempos de teste são duas vezes mais diferentes. E não se trata de 8 ou 1 segundo.
Mostre as linhas de configuração do registro de inicialização do Terminal.
Não sei por que tenho uma execução 3,5 vezes mais rápida (cache removido pela recompilação antes do backtest). Configuração
Vamos descobrir os motivos! Acho que isso é muito importante. Não tenho um HDD (somente SSD). Talvez esse seja o problema. Mas, nesse caso, isso é MUITO ruim para o MT5. O computador é muito antigo, com certeza tem cinco anos. É por isso que ele é estranho.
Este é o meu computador, sem SSD
Dei uma olhada em todas as postagens - o número de ticks é o mesmo