Saturday 21 July 2018

Como sistema de negociação backtest


Backtesting: Interpreting The Past Backtesting é um componente-chave do desenvolvimento efetivo do sistema comercial. É conseguido reconstruindo, com dados históricos, trades que teriam ocorrido no passado usando regras definidas por uma determinada estratégia. O resultado oferece estatísticas que podem ser usadas para avaliar a eficácia da estratégia. Usando esses dados, os comerciantes podem otimizar e melhorar suas estratégias, encontrar falhas técnicas ou teóricas e ganhar confiança em sua estratégia antes de aplicá-la aos mercados reais. A teoria subjacente é que qualquer estratégia que funcionou bem no passado provavelmente funcionará bem no futuro, e, inversamente, qualquer estratégia que tenha tido um desempenho fraco no passado provavelmente irá apresentar um desempenho fraco no futuro. Este artigo analisa o que os aplicativos são usados ​​para testar, o tipo de dados obtidos e a forma de usá-lo. O Backtesting de dados e ferramentas pode fornecer muitos comentários estatísticos valiosos sobre um determinado sistema. Algumas estatísticas de backtesting universais incluem: Lucro ou perda líquida - Ganho ou perda de porcentagem líquida. Prazo - Datas passadas em que ocorreu teste. Universo - Estoques incluídos no backtest. Medidas de volatilidade - percentual máximo para cima e para baixo. Médias - Ganho médio percentual e perda média, barras médias mantidas. Exposição - Porcentagem de capital investido (ou exposto ao mercado). Razões - Índice de vitórias para perdas. Retorno anualizado - Retorno percentual ao longo de um ano. Retorno ajustado ao risco - Retorno percentual em função do risco. Normalmente, o software backtesting terá duas telas que são importantes. O primeiro permite ao comerciante personalizar as configurações de backtesting. Essas personalizações incluem tudo, desde o período de tempo até os custos de comissão. Aqui está um exemplo dessa tela em AmiBroker: a segunda tela é o relatório de resultados de backtesting real. Aqui é onde você pode encontrar todas as estatísticas mencionadas acima. Mais uma vez, aqui está um exemplo desta tela no AmiBroker: em geral, a maioria dos softwares de negociação contém elementos semelhantes. Alguns programas de software high-end também incluem funcionalidades adicionais para executar dimensionamento automático de posição, otimização e outros recursos mais avançados. Os 10 mandamentos Existem muitos fatores pelos quais os comerciantes prestam atenção quando estão testando as estratégias de negociação. Aqui está uma lista das 10 coisas mais importantes a serem lembradas durante o backtesting: leve em consideração as amplas tendências do mercado no período em que uma determinada estratégia foi testada. Por exemplo, se uma estratégia só foi testada de 1999 a 2000, pode não estar bem em um mercado ostentoso. Muitas vezes, é uma boa idéia fazer um teste longo em um longo período de tempo que engloba vários tipos diferentes de condições de mercado. Tome em consideração o universo em que ocorreu o teste de retorno. Por exemplo, se um sistema de mercado amplo é testado com um universo composto por estoques tecnológicos, pode deixar de funcionar bem em diferentes setores. Como regra geral, se uma estratégia é direcionada a um gênero específico de estoque, limite o universo a esse gênero, mas, em todos os outros casos, mantenha um grande universo para fins de teste. As medidas de volatilidade são extremamente importantes a serem consideradas no desenvolvimento de um sistema de comércio. Isto é especialmente verdadeiro para contas alavancadas, que são sujeitas a chamadas de margem se seu patrimônio cai abaixo de um determinado ponto. Os comerciantes devem procurar reduzir a volatilidade para reduzir o risco e permitir uma transição mais fácil dentro e fora de uma determinada ação. O número médio de barras mantidas é também muito importante para assistir ao desenvolver um sistema comercial. Embora a maioria dos softwares de backtesting incluam custos de comissão nos cálculos finais, isso não significa que você deve ignorar esta estatística. Se possível, aumentando o número médio de barras mantidas pode reduzir os custos de comissão e melhorar seu retorno geral. A exposição é uma espada de dois gumes. O aumento da exposição pode levar a maiores lucros ou maiores perdas, enquanto a diminuição da exposição significa menores lucros ou menores perdas. No entanto, em geral, é uma boa idéia manter a exposição abaixo de 70 para reduzir o risco e permitir uma transição mais fácil dentro e fora de um dado estoque. A estatística de perda de ganhos médios, combinada com o índice de ganhos para perdas, pode ser útil para determinar o dimensionamento ótimo da posição e gerenciamento de dinheiro usando técnicas como o critério Kelly. (Ver Gestão de Dinheiro Usando o Critério de Kelly.) Os comerciantes podem assumir posições maiores e reduzir os custos de comissão, aumentando seus ganhos médios e aumentando seu índice de ganhos para perdas. O retorno anualizado é importante porque é usado como uma ferramenta para comparar os rendimentos dos sistemas em relação a outros locais de investimento. É importante não só olhar para o retorno anual anualizado, mas também levar em consideração o aumento ou diminuição do risco. Isso pode ser feito observando o retorno ajustado ao risco, que contabiliza vários fatores de risco. Antes de ser adotado um sistema comercial, ele deve superar todos os outros locais de investimento com risco igual ou menor. A personalização do backtesting é extremamente importante. Muitos aplicativos de backtesting têm entrada para valores de comissão, tamanhos de lotes redondos (ou fracionários), tamanhos de garotas, requisitos de margem, taxas de juros, suposições de deslizamento, regras de classificação de posição, regras de saída da mesma barra, configurações de parada (muito próximas) e muito mais. Para obter os resultados de backtesting mais precisos, é importante ajustar essas configurações para imitar o corretor que será usado quando o sistema for atualizado. Backtesting às vezes pode levar a algo conhecido como over-optimization. Esta é uma condição em que os resultados de desempenho são tão atentos ao passado que não são mais precisos no futuro. Geralmente, é uma boa idéia implementar regras que se aplicam a todos os estoques ou um conjunto seleto de ações segmentadas, e não são otimizadas na medida em que as regras não são mais compreensíveis pelo criador. Backtesting nem sempre é a maneira mais precisa de avaliar a eficácia de um determinado sistema de negociação. Às vezes, as estratégias que funcionaram bem no passado não conseguem fazer bem no presente. O desempenho passado não é indicativo de resultados futuros. Certifique-se de trocar papel com um sistema que tenha sido testado com sucesso antes de entrar em operação para ter certeza de que a estratégia ainda se aplica na prática. Conclusão Backtesting é um dos aspectos mais importantes do desenvolvimento de um sistema comercial. Se criado e interpretado adequadamente, pode ajudar os comerciantes a otimizar e melhorar suas estratégias, encontrar falhas técnicas ou teóricas, bem como ganhar confiança em sua estratégia antes de aplicá-la aos mercados do mundo real. Recursos Tradecision (tradecision) - Desenvolvimento de sistema de negociação de gama alta AmiBroker (amibroker) - Desenvolvimento do sistema de negociação do orçamento. Estou tentando testar um sistema de comércio manual no ano de 2017. Como eu tenho a data de trégua de todo comércio aberto e próximo, depois de muita hora de trabalho, eu consegui testá-lo no Excel apenas em termos de lucro. Como você sabe, o sistema I não pode ser avaliado apenas compre seu lucro. Eu preciso saber como foi grande a redução, quanta margem o sistema requer, o que é o fator de lucro etc. A única maneira que eu sei fazer um bom backtest é comprar Mt4 Strategy Tester. Ok, então eu só preciso criar uma EA simples que abre e fecha negociações em um tipo específico de datashoursminutes. E aqui vem o problema: se, por um lado, eu tenho certeza de que esta é uma das mais simples EAs, estou nos primeiros passos da programação mql4 e não estou conseguindo fazer com que esta EA funcione. Você pode me ajudar? Pode ser, ajudando-me a encontrar o que há de errado com o EA Ive projetado ou mesmo me falando sobre outra maneira de obter um bom backtest no meu sistema manual. Agradeço antecipadamente. Reis: aqui vem o problema: não estou conseguindo fazer com que este EA funcione. Você pode me ajudar? Seu problema não está afirmando um problema. Você não pode nem indicar o que está fazendo e o que deveria ser. Adicione declarações de impressão antes e dentro de seus condicionais, despeje seus valores variáveis ​​e descubra o que está fazendo e por quê. Quais são os valores de retorno da função. Como faço para usá-los. - Fórum MQL4 Obrigado WHRoeder pela resposta rápida. Neste momento estou estudando como colocar as declarações de impressão para encontrar o que está acontecendo. Obrigado mais uma vez. Eu fiz o que WHReder me disse e eu não tive que procurar muito para encontrar problemas. Eu fiz algumas mudanças na EA e esta é a nova: eu fiz o backtest para dezembro de 2017 e, como você pode ver nesta parte do meu diário, parece que tenho um problema com o comando TimeCurrent (). Embora eu tenha testado todo o mês, TimeCurrent () sempre me dá os últimos minutos do dia 24 de dezembro. 2017.12.28 19:32:35 2017.12.24 23:58 Teste de opera 1.12 EURUSD, M1: A hora atual é 2017.12.24 23:58 2017.12.28 19:32:35 2017.12.24 23:57 Teste de opera 1.12 EURUSD , M1: A hora atual é 2017.12.24 23:57 2017.12.28 19:32:35 2017.12.24 23:56 Teste de opera 1.12 EURUSD, M1: A hora atual é 2017.12.24 23:56 2017.12.28 19:32: 35 2017.12.24 23:56 Teste de opera 1.12 EURUSD, M1: A hora atual é 2017.12.24 23:56 2017.12.28 19:32:35 2017.12.24 23:56 Teste de ópera 1.12 EURUSD, M1: A hora atual é 2017.12 .24 23:56 2017.12.28 19:32:35 2017.12.24 23:56 Teste de opera 1.12 EURUSD, M1: A hora atual é 2017.12.24 23:56 Este é o comando certo para esta situação ou estou usando isso int Do jeito errado Você pode continuar me ajudando Obrigado novamente. Você parece ter executado o teste para todo o mês. Assim, as últimas declarações impressas serão para o final do seu histórico. O que você espera Experimente o modo visual, quando chegar ao ponto de fazer algo que você acha errado, pausar o teste, olhar seus valores, descobrir. WHRoeder: seu problema não está afirmando um problema. Você não pode nem indicar o que está fazendo e o que deveria ser. Adicione declarações de impressão antes e dentro de seus condicionais, despeje seus valores variáveis ​​e descubra o que está fazendo e por quê. Quais são os valores de retorno da função. Como faço para usá-los. - Fórum MQL4 Reis: Eu fiz o que o WHReder me disse para você não ter feito nenhum desses (sem problema, sem variável, sem instruções de rastreamento do caminho, sem verificação de função.) Tudo o que você está fazendo é imprimir o tempo para o tique atual (se você Realmente preocupado, talvez você também imprima os segundos). Você não fez nenhum desses (sem problema, sem variável, sem instruções de rastreamento do caminho, sem verificação de função.) Tudo o que você está fazendo é imprimir o tempo para o tiquetaque atual (se você realmente se importou, talvez você também imprima os segundos). Eu fiz o que entendi. Estou estudando e tentando aprender. É por isso que não sei e não entendo muitas coisas sobre os termos mql4 e mql4. É por isso que não fiz todas as coisas que você esperava que eu fizesse. Mas acredite em mim ou não, estou tentando muito, ok, mas da maneira descolada que você escreve parece que você não está muito feliz em me ajudar. Como você não é obrigado a me ajudar ou a ninguém aqui, não entendo por que você está agindo dessa maneira. Parece que você é o tipo de pessoa que acredita que é melhor do que os outros simplesmente porque sabem algo mais. Mas este não é o meu problema. No que me diz respeito, eu só quero dizer-lhe que não estou interessado neste tipo de pessoa em contato comigo. Então, eu não pedi especificamente que você veio aqui para me ajudar, mas agora estou pedindo especificamente para você ir embora e parar de me incomodar, ok. Não se preocupe, eu vou resolver meu problema de outra forma. Tenha uma boa noite. Eu fiz o que WHReder me disse e eu não tive que procurar muito para encontrar problemas. Eu fiz algumas mudanças na EA e esta é a nova: eu fiz o backtest para dezembro de 2017 e, como você pode ver nesta parte do meu diário, parece que tenho um problema com o comando TimeCurrent (). Embora eu tenha testado todo o mês, TimeCurrent () sempre me dá os últimos minutos do dia 24 de dezembro. 2017.12.28 19:32:35 2017.12.24 23:58 Teste de opera 1.12 EURUSD, M1: A hora atual é 2017.12.24 23:58 2017.12.28 19:32:35 2017.12.24 23:57 Teste de opera 1.12 EURUSD , M1: A hora atual é 2017.12.24 23:57 2017.12.28 19:32:35 2017.12.24 23:56 Teste de opera 1.12 EURUSD, M1: A hora atual é 2017.12.24 23:56 2017.12.28 19:32: 35 2017.12.24 23:56 Teste de opera 1.12 EURUSD, M1: A hora atual é 2017.12.24 23:56 2017.12.28 19:32:35 2017.12.24 23:56 Teste de ópera 1.12 EURUSD, M1: A hora atual é 2017.12 .24 23:56 2017.12.28 19:32:35 2017.12.24 23:56 Teste de opera 1.12 EURUSD, M1: A hora atual é 2017.12.24 23:56 Este é o comando certo para esta situação ou estou usando isso int Do jeito errado Você pode continuar me ajudando Obrigado novamente. Eu notei um bug que, se resolvido, deveria ajudá-lo a se aproximar da sua solução. Você está usando o quot StratTime quot função incorretamente. O formato que você deve usar é quyayy. mm. dd hh: mi quot, mas em seu código você parece estar mudando o mês e o dia e usando um dígito em vez de dois dígitos para o dia. Em outras palavras, você está usando, por exemplo, quot 2017.9.12 13:00 quot em vez do formato correto de quot 2017.12.09 13:00 quot. Pode haver outros erros, mas este se destacou mais. PS Se você está tendo dificuldade com a língua inglesa, envie-me um PM em português e vou tentar ajudá-lo. No entanto, o melhor seria continuar em inglês aqui sobre o assunto para que outros também possam ajudar. Muito obrigado pela sua atenção, FMIC. Eu mudei o que você me disse. Estava realmente errado. Infelizmente, a EA ainda não está funcionando. Mas estou grato por sua ajuda. Agradecido também por me oferecer ajuda com a língua inglesa. Como você notou, o inglês não é minha língua materna e, se eu precisar de alguma ajuda, não me envergonho de lhe perguntar. Tenha um bom dia. Muito obrigado pela sua atenção, FMIC. Eu mudei o que você me disse. Estava realmente errado. Infelizmente, a EA ainda não está funcionando. Mas estou grato por sua ajuda. Agradecido também por me oferecer ajuda com a língua inglesa. Como você notou, o inglês não é minha língua materna e, se eu precisar de alguma ajuda, não me envergonho de lhe perguntar. Tenha um bom dia. Aqui estão mais alguns ponteiros: EDITAR - DISTURAR isto - está incorreto: o Slippage não está em unidades PIP, mas como uma diferença de preço. Então use 0.0003 para representar 3 pips, no caso do EURUSD (veja o exemplo abaixo). Para tornar as coisas mais fáceis de ler e para garantir que a variável coincida com o resultado da função OrderSend (), use EMPTY para inicializar as variáveis ​​Ticket e verificar a validade. Não use a constante de cadeia quotEURUSDquot para o nome do símbolo porque pode ser ligeiramente diferente no corretor. Use NULL e simplesmente certifique-se de selecionar o símbolo quotEURUSDquot no testador da Estratégia ou o gráfico ao qual você anexa a EA. Ao fechar um pedido, pode ser mais seguro selecionar primeiro a ordem e depois consultar o número de lotes e o preço de fechamento atual e o uso para fechá-lo. Desta forma, você pode ter certeza de fechar a ordem inteira e não ter um erro ou apenas um fechamento parcial. Você também deve verificar se o pedido realmente fechou ou não, antes de limpar o Ticket com VAZIO. Depois de ter feito as alterações, se ainda não funcionar, publique seu código completo aqui como um anexo de arquivo, e eu vou dar uma olhada nela e listaremos todos os erros que encontrei. Aqui estão alguns outros ponteiros: Slippage não está em unidades PIP, mas como diferença de preço. Então use 0.0003 para representar 3 pips, no caso de EURUSD (veja o exemplo abaixo) Não, Slippage é um int e é uma série de pontos. O código original é correto se o deslizamento for de 3 pontos. Para tornar as coisas mais fáceis de ler e para garantir que a variável coincida com o resultado da função OrderSend (), use EMPTY para inicializar as variáveis ​​Ticket e verificar a validade. Não há necessidade e pode confundir. OrderSend () retorna -1 em caso de erro ou retorna o número do ticket em caso de sucesso. Então, se o boletim VAZIO também houvesse um OrderSend falhado () O que diz respeito ao relatório de erros. Quais são os valores de retorno da função. Como os uso, parece que você executou o teste durante todo o mês. Assim, as últimas declarações impressas serão para o final do seu histórico. O que você espera Experimente o modo visual, quando chegar ao ponto de fazer algo que você acha errado, pausar o teste, olhar seus valores, descobrir. Você não fez nenhum desses (sem problema, sem variável, sem instruções de rastreamento do caminho, sem verificação de função.) Tudo o que você está fazendo é imprimir o tempo para o tiquetaque atual (se você realmente se importou, talvez você também imprima os segundos). Não é sempre necessário elaborar um contexto excessivamente para compreendê-lo. Em português, temos um ditado: qua Parabéns entendido, meia palavra basta quot, o que significa literalmente, para um bom entendedor, uma meia palavra é suficiente. O texto postado, mesmo que não fosse um inglês perfeito, dispunha de informações suficientes para entender o que foi solicitado. Dizer que ele vá ler um post, o que obviamente está acima de sua compreensão do MQL4, não está exatamente ajudando. Seria como dizer-lhe para ir ler o quotmanualquot. Se todos pudessem entender completamente tudo ao ler o manual, não haveria necessidade de fóruns como este. Às vezes, alguém precisava de uma mão orientadora e encontrá-lo a meio caminho teria sido uma abordagem melhor. Repreendê-lo por não entender você não é exatamente amigável, especialmente porque o inglês (e mql4) não é sua língua materna. Vamos, estamos todos aqui para aprender (e ensinar). Não há necessidade da atitude de engano. Todos nós somos amigáveis. É a estação para ser feliz. Como sistemas de negociação de backtest e evitar ajuste de curva. Para julgar o quão bem um determinado sistema de negociação deve funcionar no futuro, nós o devolvemos nos dados do mercado passado. Backtesting aplica um conjunto de regras de negociação a dados históricos para estimar como essas regras teriam funcionado se tivéssemos negociado. Os bons resultados históricos hipotéticos não garantem que um conjunto de regras funcione bem no futuro. No entanto, os baixos resultados históricos hipotéticos quase certamente significam que um sistema não deve ser negociado em tempo real. O valor percebido do backtesting está enraizado na crença de que as tendências históricas se repetem. Os comerciantes têm testado estratégias em dados históricos por gerações. No entanto, a prática tornou-se popular com o advento de computadores pessoais e software de teste de sistema criado especificamente. Como System Writer, que evoluiu para a TradeStation. Este software e um banco de dados de dados históricos permitiram que aqueles sem um fundo de escrita de código para testar idéias do sistema comercial. A compreensão e a aceitação mais amplas dos sistemas de negociação, bem como a frustração que muitos encontraram ao tentar construir sistemas de comércio por conta própria, ajudaram o mercado de sistemas de terceiros a prosperar ao longo da década de 1990. Futures Truth é uma empresa independente que rastreou os sistemas comerciais comercialmente disponíveis desde a década de 1980. Atualmente, ele rastreia mais de 500 sistemas. Futuros Verdade testa sistemas comerciais em tempo real, e não em dados históricos. Isso evita a modificação das regras ao longo do tempo e simula melhor a execução das regras nas condições reais do mercado, como períodos de alta volatilidade. De acordo com a Futures Truth, apenas cerca de 45 dos sistemas rastreados são rentáveis ​​a longo prazo, enquanto apenas 20 exibiram uma boa razão de risco. No entanto, esses números provavelmente são melhores do que o populationrsquos em larga escala, porque apenas esses vendedores realmente confiantes em sua lógica passam a Futures Truth para análise em tempo real e crítica pública. Muitos sistemas falham porque não possuem uma premissa válida. Em vez disso, os parâmetros de entrada e saída são derivados da mineração de dados. A mineração de dados simplesmente verifica dados históricos para regras que teriam funcionado no passado. Muitas vezes, tais regras são adequadas precisamente ao passado e não têm esperança de trabalhar melhor do que aleatório em dados não vistos. Em vez disso, o desenvolvimento do sistema deve começar com uma teoria que pode ser testada, analisada e ajustada para aplicação. Este conceito também implica uma perspectiva diferente sobre o próprio teste do sistema: o objetivo do backtesting não é produzir uma coleção de estatísticas hipotéticas de lucros e perdas. É testar a validade da teoria e a precisão das regras na captura da premissa. O teste do sistema é um processo multifacetado dos dados, à escala de tempo, aos pressupostos de entrada de pedidos, ao contrato específico e ao controle de riscos. Falhar em qualquer um desses pode arruinar um teste de teste de outra forma ou, manipulá-los pode gerar resultados que são muito superiores aos que conseguiríamos em tempo real. Você precisa fazê-lo direito se você quiser validar o mdash ou, quando apropriado, invalidar o seu sistema. Ferramentas do comércio Existem dois elementos para testar: o software apropriado mdash software e mdash de dados e um método científico para desenvolver sistemas usando essas ferramentas. Letrsquos começa por olhar as ferramentas do comércio. Muitas opções estão disponíveis para testar suas idéias. Eles diferem na facilidade de transformar idéias em código e em como eles lidam com os detalhes, o que pode ter um grande impacto nos resultados. Por exemplo, se um sistema entrar em uma ordem limite, algum software registra um preenchimento se esse preço for tocado. No entanto, dificilmente há uma garantia de que tal pedido teria sido preenchido na negociação real, nem há garantia de que não seja. Entrar em paradas garante uma entrada, mas não um preço. Outra questão é registrar os preços reais. Embora a maioria dos softwares desenvolvidos profissionalmente já não tenha esse problema, ainda é uma preocupação para aqueles que testam manualmente sistemas em planilhas, como o Microsoft Excel. Por exemplo, se um sistema comprar em uma parada igual ao fechar mais um terço do alcance médio nos últimos três períodos, e se o alcance médio for 10, então estamos comprando no final mais 3.333. Se estamos negociando o E-mini SampP 500, ele opera com 0,25. Isso significa que o diferencial de entrada deve arredondar até 3,50. Um comerciante de início pode não perceber isso se mantiver manualmente números, e não foi há muito tempo que muitos programas profissionais cometiam o mesmo erro. Ao longo do tempo, esse erro poderia se somar a uma discrepância considerável. Em grande escala, no entanto, tais detalhes processuais são menores. O grande problema é o dado. Artigos relacionados

No comments:

Post a Comment