Bom dia Youtrade.
Quais são as vantagens de se testar off-line?
Bom dia Youtrade.
Quais são as vantagens de se testar off-line?
Eu uso muito quando quero entender com mais detalhes o comportamento de determinada variável, função e/ou analisar os resultados de uma estratégia.
Quando você usa o OnTimer(), veja que eu coloquei vários Print() para que eu possa ver o conteúdo das variáveis.
Eu posso por exemplo colocar alguns if() para fazer com que o meu EA se comporte de uma forma particular para eu continuar as minhas investigações forçando certas condições.
Outra vantagem é que se fosse fosse usar OnTick(), o mercado deveria estar "aberto" ou seja, você pode fazer a noite por exemplo.
[]s
Coutinho
...
Outra vantagem é que se fosse fosse usar OnTick(), o mercado deveria estar "aberto" ou seja, você pode fazer a noite por exemplo.
...
Eu uso muito quando quero entender com mais detalhes o comportamento de determinada variável, função e/ou analisar os resultados de uma estratégia.
Quando você usa o OnTimer(), veja que eu coloquei vários Print() para que eu possa ver o conteúdo das variáveis.
Eu posso por exemplo colocar alguns if() para fazer com que o meu EA se comporte de uma forma particular para eu continuar as minhas investigações forçando certas condições.
Outra vantagem é que se fosse fosse usar OnTick(), o mercado deveria estar "aberto" ou seja, você pode fazer a noite por exemplo.
[]s
Coutinho
Se o mercado está fechado, mesmo dentro de OnTimer você não conseguirá enviar nenhuma ordem, logo nenhuma de suas variáveis de interesse (openPosition, positionType e currentVolume) irá mudar de estado ...
De acordo. No programa acima na verdade tem dois pontos.
O primeiro é dar uma olhada na sintaxe das variáveis pois eu estava vendo qual das request.xxx eu realmente precisava e fui fazendo por eliminação e para "acionar" o programa eu fiz via OnTimer().
A segunda parte é á que vc tem mais razão. Eu fiz uma conta demo de FX pra testar o envio. Acabei misturando as duas.
Tks
Olá Coutinho, ótimo tópico, e se, nesse caso, chamarmos a OnTick() dentro da OnTimer(), o que aconteceria?
Pra mim funcionou normalmente como se estivesse chamando a OnTick() dada a entrada de um novo tick de mercado. A única diferença aqui é que nao ocorreria a atualização dos valores "de mercado".
De qquer forma, o EA respondeu com NOK a minha solicitação de envio de ordem. Perdi algo ?
//+------------------------------------------------------------------+ //| teste3.mq5 | //| Copyright 2014, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- create timer EventSetTimer(5); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- MqlTradeRequest request; MqlTradeResult result; ZeroMemory(request); ZeroMemory(result); request.action=TRADE_ACTION_DEAL; request.type=ORDER_TYPE_BUY; request.symbol = _Symbol; request.volume = 1; request.type_filling=ORDER_FILLING_FOK; request.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK); request.sl=0; request.tp=0; request.deviation=20; if(OrderSend(request,result)) { Print("OK"); } else { Print("NOK"); } } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- OnTick(); } //+------------------------------------------------------------------+
Olá Coutinho,
Parabéns, a provocação do OnTick() era justamente para mostrar que na prática você está tentando simular um tick que não existe, já que o mercado está parado, o que deve ser feito com todo cuidado.
E, portanto, você matou a charada de que não iria atualizar os dados de mercado.
Mas existe uma aplicação muito relevante para o que você propõe, e que utilizo em algumas situações, principalmente quando é possível testar algoritmos que não dependam de dados de mercado (e eles são cada vez mais frequentes nas avançadas estratégias existentes hoje no mercado, principalmente quando se trabalha com dados remotos).
Estou falando do debugger. Você já experimentou utilizar o debugger nesse seu código, mesmo offline? Sim, ele vai funcionar normalmente.
Então, se você tem uma lógica assim, mesmo estando offline, pode utilizar a funcionalidade do debugger do MetaEditor para simular passo a passo um algoritmo desse perfil (por exemplo tuas rotinas de relatório, ou acesso à banco de dados, ou logs, etc), o que muitas vezes pode ser útil quando não se pode esperar pela abertura do mercado e se quer validar passo a passo um algoritmo que não depende de dados de mercado.
Olá Coutinho,
Parabéns, a provocação do OnTick() era justamente para mostrar que na prática você está tentando simular um tick que não existe, já que o mercado está parado, o que deve ser feito com todo cuidado.
E, portanto, você matou a charada de que não iria atualizar os dados de mercado.
Mas existe uma aplicação muito relevante para o que você propõe, e que utilizo em algumas situações, principalmente quando é possível testar algoritmos que não dependam de dados de mercado (e eles são cada vez mais frequentes nas avançadas estratégias existentes hoje no mercado, principalmente quando se trabalha com dados remotos).
Estou falando do debugger. Você já experimentou utilizar o debugger nesse seu código, mesmo offline? Sim, ele vai funcionar normalmente.
Então, se você tem uma lógica assim, mesmo estando offline, pode utilizar a funcionalidade do debugger do MetaEditor para simular passo a passo um algoritmo desse perfil (por exemplo tuas rotinas de relatório, ou acesso à banco de dados, ou logs, etc), o que muitas vezes pode ser útil quando não se pode esperar pela abertura do mercado e se quer validar passo a passo um algoritmo que não depende de dados de mercado.
Oi Figurelli !
Não conheço não ... ta no pipeline de "coisas a fazer" kkk
Acabei de configurar 2 servidores remotos pra gastar menos US$ mandando pra fora. Funciona bem né ? (pict anexa)
Com relação ao debugger, vou dar uma "sapiada" da meia noite às seis da manhã ;)
Obrigado pela atenção.
Oi Figurelli !
Não conheço não ... ta no pipeline de "coisas a fazer" kkk
Acabei de configurar 2 servidores remotos pra gastar menos US$ mandando pra fora. Funciona bem né ? (pict anexa)
Com relação ao debugger, vou dar uma "sapiada" da meia noite às seis da manhã ;)
Obrigado pela atenção.
- 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
Pessoal,
Para aqueles que querem testar/debugar suas estratégias e ver como se comportam os parâmetros de colocação de ordem, segue um exemplo com OnTimer().