Minha EA tem uma estratégia de preços apenas abertos e eu queria me ater a isso para economizar tempo durante os testes de retaguarda (obviamente).
A solução que eu concebi é a seguinte:
use o par mais ativo durante o período principal de negociação de sua EA como o "condutor" (o gráfico que produz os carrapatos).
em cada onTick() verifique se seu motorista entrou em uma nova barra
se não houver um novo bar, espere um pouco mais
se houver uma nova barra, distribua a mensagem OnTick() para seus comerciantes individuais (cada comerciante é responsável por um par de moedas)
no trader verificar se a última vez do par de moedas do trader é igual ao "tempo da nova barra" do motorista
se sim, você pode continuar como normalmente
se não, você tem que tratar o preço de fechamento do bar atual como o preço de abertura que você está procurando e se você está procurando informações de bares anteriores leve em conta esta situação "por um".
Vou cortar e colar as seções importantes do código do meu EA aqui abaixo. Espero que isto seja de alguma ajuda para vocês!
Abraço!
// this is from the Trader base class// manage a new tick and predetermines whether a new bar hast startedvirtualvoid onTick() {
MqlRates rates[1];
// check the rates of the tick stream we're attached to (_Symbol!!!)if (CopyRates(_Symbol, _period, 0, 1, rates) != 1) {
Print("CopyRates of ", _Symbol, " failed");
return;
}
if (_newBar = (rates[0].time != _currBarTime)) {
_prevBarTime = _currBarTime; // remember the previous bar time
_currBarTime = rates[0].time; // remember the current bar time
}
}
// this is the actual trader for a specific currency pair// checks whether a new trade (closing or opening) is to be performedvoid checkForTrade(void) {
MqlRates rates[3];
if (CopyRates(_symbol, _period, 0, 3, rates) != 3) {
Print("CopyRates of ", _symbol, " failed");
return;
}
bool inSameBar = (rates[2].time == _currBarTime); // _currBarTime determined in OnTick()!double sBuf[3]; // signal buffer! 2: current bar, 1: previous bar, 0: current - 2 if (CopyBuffer(_ind, SIGNAL3, 0, 3, sBuf) != 3) {
Print("copy signal from indicator failed, no data");
return;
}
// first close exiting ordersdouble v0 = inSameBar ? sBuf[0] : sBuf[1]; // determine the actual 'previous' bardouble v1 = inSameBar ? sBuf[1] : sBuf[2]; // determine the actual 'current' barif (_volume > 0) {
if (crossesZeroDownwards(v0, v1)) { // cross down?
setReqVolume(0); // close this order
tradeCloses = true;
}
} elseif (_volume < 0) {
if (crossesZeroUpwards(v0, v1)) { // cross up?
setReqVolume(0); // close this order
tradeCloses = true;
}
}
...
Eu mesmo acabei de me deparar com este problema. Você adivinhou, tentando portar da JForex para a MQL5! Estou começando a desejar não ter me incomodado, embora suponho que a prorrogação do prazo ajude :)
Parece que a MetaQuotes ainda não a consertou.
O MT5 não parece suportar o DOM.
isNewBar não vai me ajudar.
Parece um estado de coisas ridículo.
Alguém sabe se alguma coisa mudou dentro do MT5 em relação a esta questão?
Alguém sabe de uma solução que funciona para uma estratégia de múltiplas moedas que está esperando ser alimentada com carrapatos?
Eu mesmo acabei de me deparar com este problema. Você adivinhou, tentando portar da JForex para a MQL5! Estou começando a desejar não ter me incomodado, embora suponho que a prorrogação do prazo ajude :)
Parece que a MetaQuotes ainda não a consertou.
O MT5 não parece suportar o DOM.
isNewBar não vai me ajudar.
Parece um estado de coisas ridículo.
Alguém sabe se alguma coisa mudou dentro do MT5 em relação a esta questão?
Alguém sabe de uma solução que funciona para uma estratégia de múltiplas moedas que está esperando ser alimentada com carrapatos?
A sua em frustração,
Jim
Tente usar OnTimer() com temporizador de 1 segundo em vez de OnTick().
enivid: Tente usar OnTimer() com temporizador de 1 segundo em vez de OnTick().
TradingGurus:
No entanto, a execução de testes com múltiplas moedas contra diferentes pares ainda produz resultados ligeiramente diferentes.
Jim, eu uso a solução OnTimer com 1 segundo na minha carteira de concursos EA. Se sua estratégia depende de cada tick, então sim, você terá resultados diferentes ao usar OnTimer vs OnTick em uma única moeda, já que mais de um tick por segundo é possível. Descobri que normalmente faz mais diferença quando o tick "faltando" cria uma nova barra alta ou baixa. Você pode verificar a barra anterior alta/baixa e a barra atual alta/baixa para detectar qualquer mudança e inseri-la como "falta" quando elas ocorrem, a menos, é claro, que o tick atual tenha criado a nova barra alta/baixa.
Lembre-se também que o MetaTrader Strategy Tester apenas simula os dados do tick. Dependendo de quão sensível sua estratégia é ao movimento do tick, esta simulação pode ter um impacto significativo nos testes de retaguarda em relação aos testes de avanço.
Se sua estratégia depende de cada tick, então sim, você obterá resultados diferentes ao usar OnTimer vs OnTick em uma única moeda, já que mais de um tick por segundo é possível.
- Patrick
Não era bem isso que eu queria dizer. Nosso (ainda só potencial!) concurso EA comercializa todos os 12 pares. Usando apenas OnTimer(), obtenho resultados diferentes se selecionar GBP/USD em testador de estratégia ao invés de EUR/USD, por exemplo.
Estou muito familiarizado com as limitações do MT4 quando faço backtest usando carrapatos simulados. Infelizmente, parece que o MT5 não é muito melhor!
Estávamos extremamente interessados em fazer tudo isso com carrapatos por razões históricas, mas desistimos. Simplesmente, não conseguimos fazer as coisas consistentes.
Mordemos a bala e agora estamos trabalhando com barras de 1 minuto com a ajuda do OnTimer() e do isNewBar().
As coisas começaram a parecer vagamente sensatas finalmente, e o que é mais, ainda faltam 4 horas para o prazo final do campeonato :)
Finalmente, submetemos nossa EA com cerca de 5 minutos de antecedência ao prazo.
Um backtest sob sua correia, e nenhuma otimização.
Nunca tendo feito isto antes, alguém pode me dizer se ainda tem uma chance de ser aprovado?
Se sim, seremos autorizados a mexer nas configurações de entrada durante a próxima semana, ou não?
Jim
Boa Sorte Jim!
Se sua EA tiver testado corretamente dentro de 2010.01.01 até 2010.08.01 sem erros(erros comerciais, etc.) e sem lucro, então você provavelmente será aprovado, desde que suas informações pessoais também estejam corretas. Entretanto, você não poderá alterar nada a partir deste ponto, inclusive as configurações (parâmetros de entrada).
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Eu queria publicar isto naquela época, mas fiquei horrível na primeira página:
Oi pessoal e garotas,
Também me deparei com este assunto há algum tempo e discutimos aqui: https://www.mql5.com/en/forum/1642
Minha EA tem uma estratégia de preços apenas abertos e eu queria me ater a isso para economizar tempo durante os testes de retaguarda (obviamente).
A solução que eu concebi é a seguinte:
Vou cortar e colar as seções importantes do código do meu EA aqui abaixo. Espero que isto seja de alguma ajuda para vocês!
Abraço!
Eu mesmo acabei de me deparar com este problema. Você adivinhou, tentando portar da JForex para a MQL5! Estou começando a desejar não ter me incomodado, embora suponho que a prorrogação do prazo ajude :)
Parece que a MetaQuotes ainda não a consertou.
O MT5 não parece suportar o DOM.
isNewBar não vai me ajudar.
Parece um estado de coisas ridículo.
Alguém sabe se alguma coisa mudou dentro do MT5 em relação a esta questão?
Alguém sabe de uma solução que funciona para uma estratégia de múltiplas moedas que está esperando ser alimentada com carrapatos?
A sua em frustração,
Jim
Eu mesmo acabei de me deparar com este problema. Você adivinhou, tentando portar da JForex para a MQL5! Estou começando a desejar não ter me incomodado, embora suponho que a prorrogação do prazo ajude :)
Parece que a MetaQuotes ainda não a consertou.
O MT5 não parece suportar o DOM.
isNewBar não vai me ajudar.
Parece um estado de coisas ridículo.
Alguém sabe se alguma coisa mudou dentro do MT5 em relação a esta questão?
Alguém sabe de uma solução que funciona para uma estratégia de múltiplas moedas que está esperando ser alimentada com carrapatos?
A sua em frustração,
Jim
Oi, viva,
Tente usar OnTimer() com temporizador de 1 segundo em vez de OnTick().
Obrigado pela sugestão. Sua solução funciona muito melhor que qualquer uma das outras que tentei, certamente para nossas exigências.
No entanto, a execução de testes com múltiplas moedas contra diferentes pares ainda produz resultados ligeiramente diferentes.
Não inspira muita confiança!
Estou indo para queimar muito mais óleo à meia-noite agora!
Abraço,
Jim
Tente usar OnTimer() com temporizador de 1 segundo em vez de OnTick().
TradingGurus:
No entanto, a execução de testes com múltiplas moedas contra diferentes pares ainda produz resultados ligeiramente diferentes.
Jim, eu uso a solução OnTimer com 1 segundo na minha carteira de concursos EA. Se sua estratégia depende de cada tick, então sim, você terá resultados diferentes ao usar OnTimer vs OnTick em uma única moeda, já que mais de um tick por segundo é possível. Descobri que normalmente faz mais diferença quando o tick "faltando" cria uma nova barra alta ou baixa. Você pode verificar a barra anterior alta/baixa e a barra atual alta/baixa para detectar qualquer mudança e inseri-la como "falta" quando elas ocorrem, a menos, é claro, que o tick atual tenha criado a nova barra alta/baixa.
Lembre-se também que o MetaTrader Strategy Tester apenas simula os dados do tick. Dependendo de quão sensível sua estratégia é ao movimento do tick, esta simulação pode ter um impacto significativo nos testes de retaguarda em relação aos testes de avanço.
- Patrick
Se sua estratégia depende de cada tick, então sim, você obterá resultados diferentes ao usar OnTimer vs OnTick em uma única moeda, já que mais de um tick por segundo é possível.
- Patrick
Não era bem isso que eu queria dizer. Nosso (ainda só potencial!) concurso EA comercializa todos os 12 pares. Usando apenas OnTimer(), obtenho resultados diferentes se selecionar GBP/USD em testador de estratégia ao invés de EUR/USD, por exemplo.
Estou muito familiarizado com as limitações do MT4 quando faço backtest usando carrapatos simulados. Infelizmente, parece que o MT5 não é muito melhor!
Jim
Estávamos extremamente interessados em fazer tudo isso com carrapatos por razões históricas, mas desistimos. Simplesmente, não conseguimos fazer as coisas consistentes.
Mordemos a bala e agora estamos trabalhando com barras de 1 minuto com a ajuda do OnTimer() e do isNewBar().
As coisas começaram a parecer vagamente sensatas finalmente, e o que é mais, ainda faltam 4 horas para o prazo final do campeonato :)
JimFinalmente, submetemos nossa EA com cerca de 5 minutos de antecedência ao prazo.
Um backtest sob sua correia, e nenhuma otimização.
Nunca tendo feito isto antes, alguém pode me dizer se ainda tem uma chance de ser aprovado?
Se sim, seremos autorizados a mexer nas configurações de entrada durante a próxima semana, ou não?
Jim
Finalmente, submetemos nossa EA com cerca de 5 minutos de antecedência ao prazo.
Um backtest sob sua correia, e nenhuma otimização.
Nunca tendo feito isto antes, alguém pode me dizer se ainda tem uma chance de ser aprovado?
Se sim, seremos autorizados a mexer nas configurações de entrada durante a próxima semana, ou não?
Jim
Boa Sorte Jim!
Se sua EA tiver testado corretamente dentro de 2010.01.01 até 2010.08.01 sem erros(erros comerciais, etc.) e sem lucro, então você provavelmente será aprovado, desde que suas informações pessoais também estejam corretas. Entretanto, você não poderá alterar nada a partir deste ponto, inclusive as configurações (parâmetros de entrada).
Espero ver seu bot em ação!
- Patrick