Sunday 9 July 2017

Trading System Optimization


Mesmo depois de projetar com sucesso e construir um sistema de negociação de trabalho, um comerciante pode achar que seu sistema é imperfeito. Pode haver alguns problemas, como um evento que mantém gerando perdas ou talvez as regras sejam muito amplas e precisam ser otimizadas. O que é a maneira mais fácil de corrigir o problema Como eficaz é otimização Esta seção irá mostrar-lhe como solucionar problemas e otimizar seu sistema de comércio para maximizar os lucros e minimizar as perdas. Solução de problemas A solução de problemas é um aspecto muito importante do desenvolvimento do sistema. Um sistema de comércio decente será rentável na maioria das condições de mercado, mas se ocasionalmente torna grandes perdas, você pode trabalhar para identificar e resolver o problema. Aqui estão quatro etapas fáceis: 1. Identificar o problema - Encontre todas as instâncias em que o problema ocorreu durante o backtesting e / ou inicie a gravação quando o problema ocorre durante a negociação ao vivo. Durante cada instância, tome nota de qualquer tendência dos seguintes quatro fatores: Padrão de gráfico ou série de preços - Pico nos preços.13 Volume - volume grande inicialmente e baixo volume depois disso.13 spread Bid / Ask - Spike no preço em baixo volume muitas vezes Indica um grande spread.13 Margem (se usado). 13 13Essas são algumas das áreas nas quais os problemas podem ocorrer, o que podemos ver analisando o quadro abaixo. Observe os picos de preços em baixo volume pela seta verde. Observe também o grande volume (perto da seta azul) seguido de baixo volume depois disso. Se nenhum destes revela-se para ser o culpado, há outros fatores que podem ser analisados, tais como o bloco-tamanhos e padrões avançados do gráfico. Avaliar o problema - Use as informações coletadas para determinar o que exatamente causou o mau funcionamento do sistema ou gerar uma perda. Isso geralmente é feito usando o senso comum, ou analisando logs de transações (fornecidos pelo seu corretor). Aqui estão alguns exemplos de como algumas condições dos quatro fatores listados acima podem ser a razão para um problema identificado: Padrão de gráfico ou série de preços - O sistema é incapaz de vender durante declínios acentuados ou comprar durante subidas íngremes. Talvez o sistema não tenha tempo suficiente para comprar ou vender. Volume - O sistema é incapaz de vender durante declínios ou comprar durante aumentos. Talvez a equidade tenha um volume de negociação tão baixo que o sistema é incapaz de comprar ou vender a um preço. Durante essas instâncias, o preço pode ser enganoso sem uma consideração de volume e bid / ask. Bid / Ask spread - O sistema faz uma compra, mas doesnt lucro tanto quanto deveria quando vender. Isso poderia ser devido ao fato de que o comerciante esqueceu de considerar spreads bid / ask. Se um sistema é programado para comprar e vender ao preço atual que realmente paga a pedir. E quando vendido, não vende a preço atual mas ao preço de oferta. Às vezes, as diferenças entre a oferta e pedir pode ser grande, levando a perdas indesejadas. Margin - O sistema de repente vende sem razão aparente. Se isso ocorrer, você pode ter esquecido de considerar chamadas de margem. 13 3. Considere as alternativas - Basta tentar algumas soluções para os problemas que você identificou. Considere as seguintes alternativas correspondentes aos problemas acima. Padrão gráfico ou série de preços - Uma alternativa é simplesmente dizer ao sistema para esperar até que o preço se estabilize antes de comprar. Isso pode ser feito usando as diferenças entre os preços anteriores eo preço atual para criar uma regra. Volume - Para resolver esse problema, você pode criar uma regra que exige o patrimônio para ter uma certa quantidade de volume antes de executar um trade. Bid / Pedir spread - Aqui você pode querer comprar e vender com base no lance e pedir preços em vez do preço atual. Margin - Usando margem pode ser rentável se o risco é gerenciado de forma eficaz. Limitar a desvantagem deve impedi-lo de receber chamadas de margem. Isso pode ser feito com trailing stop pontos de perda ou outras táticas similares para limitar o lado negativo. 13 4. Implementar uma solução - Finalmente, precisamos aplicar a solução e ver como ela funciona. Negociação de papel ou teste de volta antes de negociação ao vivo é muitas vezes uma boa idéia depois de aplicar uma solução, porque às vezes as soluções têm consequências não intencionais. Por exemplo, regras adicionais podem limitar estes dias de baixa, mas também diminuir os lucros globais (devido a oportunidades perdidas). Otimização Otimização significa simplesmente encontrar os melhores conjuntos de parâmetros para um determinado mercado. Este processo pode melhorar marginalmente os resultados. No entanto, também traz muitos riscos porque a sua suposição subjacente é que o desempenho passado é indicativo de futuros movimentos de preços. A otimização pode ser realizada alterando os valores do parâmetro que você deseja otimizar e depois testar novamente essas alterações. Tenha em mente que os outros parâmetros devem permanecer constantes para que os efeitos das alterações sejam determinados. Depois de encontrar o valor que produz o maior desempenho no teste de volta, implementá-lo no sistema de comércio. Vamos considerar um exemplo. Digamos que um comerciante analisou o SampP 500 e descobriu que ele ou ela poderia otimizar o sistema usando um gráfico diário. Este mesmo processo também pode ser levado a um grau mais elevado. Por exemplo, se uma média móvel simples de 6 funciona melhor do que 8 para uma estratégia MA-crossover em um determinado mercado, então 6 seria usado. O problema aqui não é apenas no pressuposto, mas também no fato de que o sistema pode ter um desempenho pior em muitos outros mercados, tornando-o assim menos universal. Muitos desenvolvedores de sistemas abandonam o estágio de otimização por duas razões: A otimização muitas vezes exagera os resultados. Isso ocorre porque os parâmetros são tão específicos e não universais que qualquer mudança no mercado (ou seja, o futuro) pode causar instabilidade. Em muitos casos, a otimização não melhorará o desempenho de forma significativa. Pequenas melhorias podem ser evidentes no entanto, a perda da universalidade é um preço alto a pagar. 13 Como regra geral, a otimização só deve definir configurações amplas para parâmetros, em vez de estabelecer regras específicas - mesmo se tiver sucesso no backtesting e na negociação de papel. Conclusão A solução de problemas é crucial para tornar seu sistema funcionando da maneira que você deseja. É importante identificar os problemas observando os casos em que eles ocorreram e, em seguida, avaliar como certas condições de vários fatores - como padrão de preços, volume, spread bid / ask e margem - podem ter causado o problema. A otimização pode melhorar seus resultados, mas é importante lembrar que ele tem suas limitações. Não só é baseado no pressuposto de que o desempenho passado indica o futuro, mas não é o estágio em que o comerciante cria regras específicas - otimização é apenas definir definições amplas. Na próxima e última parcela, iremos fornecer uma visão geral de tudo weve coberto, juntamente com alguns conselhos e recursos para ajudá-lo a ganhar um conhecimento de trabalho de design do sistema de negociação e desenvolvimento. Sistemas de negociação: Conclusão Como otimizar o sistema de negociação NOTA: Este é um tópico bastante avançado. Leia os tutoriais anteriores da AFL primeiro. A idéia por trás de uma otimização é simples. Primeiro você tem que ter um sistema de comércio, este pode ser um crossover média móvel simples, por exemplo. Em quase todos os sistemas existem alguns parâmetros (como período de média) que decidem como se comporta o sistema (isto é, é bem adequado para longo ou curto prazo, como é que reage a estoques altamente voláteis, etc.). A otimização é o processo de encontrar valores ótimos desses parâmetros (dando maior lucro do sistema) para um dado símbolo (ou um portfólio de símbolos). AmiBroker é um dos poucos programas que permitem otimizar seu sistema em vários símbolos ao mesmo tempo. Para otimizar seu sistema você tem que definir de um até dez parâmetros para ser otimizado. Você decide qual é o valor mínimo e máximo permitido do parâmetro e em que incrementos esse valor deve ser atualizado. AmiBroker, em seguida, executa vários testes de volta o sistema usando TODAS as combinações possíveis de valores de parâmetros. Quando este processo é terminado AmiBroker exibe a lista de resultados classificados por lucro líquido. É possível ver os valores dos parâmetros de otimização que dão o melhor resultado. Escrevendo a fórmula AFL A otimização no back tester é suportada através de uma nova função chamada optimize. A sintaxe desta função é a seguinte: variável optimize (quot Descrição quot, default. Min. Max. Step) variável - é a variável AFL normal que recebe o valor retornado pela função optimize. Com o backtesting normal, varredura, exploração e modos de comentar a função de otimização retorna o valor padrão, então a chamada de função acima é equivalente a: default de variável Em modo de otimização otimizar função retorna valores sucessivos de min a max (inclusivamente) com step stepping. Quot Descrição é uma string que é usada para identificar a variável de otimização e é exibida como um nome de coluna na lista de resultados de otimização. O padrão é um valor padrão que otimizar a função retorna nos modos de exploração, de indicador, de comentário, de varredura e de back-test normal min é um valor mínimo da variável otimizada max é um valor máximo da variável sendo otimizado step é um intervalo usado para aumentar a Valor de min para máximo AmiBroker suporta até 64 chamadas para otimizar a função (portanto, até 64 variáveis ​​de otimização), observe que se você estiver usando otimização exaustiva, então é realmente boa idéia para limitar o número de variáveis ​​de otimização para apenas alguns. Cada chamada para otimizar gerar loops de otimização (max - min) / etapa e múltiplas chamadas para otimizar multiplicam o número de execuções necessárias. Por exemplo, a otimização de dois parâmetros usando 10 etapas exigirá 1010 100 loops de otimização. Call optimize função apenas ONCE por variável no início da sua fórmula como cada chamada gera um novo otimização loops Otimização de símbolo múltiplo é totalmente suportado pelo AmiBroker O espaço de pesquisa máximo é 2 64 (10 19 10,000,000,000,000,000,000) combinações 1. Otimização de variável única: sigavg Otimizar (Sinal (12. 26. sigavg), MACD (12. 26)) Sinal (12. 26. sigavg) 2. Otimização de duas variáveis ​​(adequado para gráficos em 3D) por Otimizar (por 2. 5. 50. 1) Nível Otimizar (nível 2. 2. 150. 4) Comprar Cross (CCI (per), - Level) 3. Otimização de variáveis ​​múltiplas (3) Otimização de variáveis ​​(mfast) Optimize (MACD Slow, 26. 17, 30. 1) (Mfast, mslow, sigavg), MACD (mfast, mslow)) Sinal (mfast, mslow, sigavg)) Depois de entrar A fórmula basta clicar no botão Otimizar na janela QuotAutomatic Analysisquot. AmiBroker vai começar a testar todas as combinações possíveis de variáveis ​​de otimização e relatar os resultados na lista. Após a otimização é feita a lista de resultado é apresentado classificado pelo lucro líquido. Como você pode classificar os resultados por qualquer coluna na lista de resultados é fácil obter os valores ideais de parâmetros para o menor drawdown, menor número de comércios, maior fator de lucro, menor exposição ao mercado e mais alto risco ajustado retorno anual. As últimas colunas da lista de resultados apresentam os valores das variáveis ​​de otimização para determinado teste. Quando você decide qual combinação de parâmetros se adequa às suas necessidades, o melhor que você precisa fazer é substituir os valores padrão em otimizar chamadas de função com os valores ideais. No estágio atual você precisa digitá-los manualmente na janela de edição de fórmula (o segundo parâmetro de otimizar a chamada de função). Exibição de gráficos de otimização animados 3D Para exibir o gráfico de otimização 3D, é necessário executar a otimização de duas variáveis ​​primeiro. Duas otimização variável precisa de uma fórmula que tenha 2 chamadas de função Optimize (). Um exemplo de fórmula de otimização de duas variáveis ​​se parece com isto: por Otimizar (por 2. 5. 50. 1) Nível Otimizar (nível 2. 2. 150. 4) Comprar Cross (CCI (per), - Level) Sell Cross (Level, CCI (per)) Após digitar a fórmula, você precisa clicar no botão quotOptimizequot. Quando a otimização estiver concluída, você deve clicar na seta suspensa no botão Otimizar e selecionar Exibir gráfico de otimização 3D. Em poucos segundos, um traçado de superfície tridimensional colorido será exibido em uma janela do visualizador de gráfico 3D. Um exemplo de gráfico 3D gerado usando a fórmula acima é mostrado abaixo. Por padrão, os gráficos 3D exibem valores de lucro líquido contra variáveis ​​de otimização. No entanto, é possível traçar gráfico de superfície 3D para qualquer coluna na tabela de resultados de otimização. Basta clicar no cabeçalho da coluna para classificá-lo (uma seta azul aparecerá indicando que os resultados de otimização são classificados por coluna selecionada) e, em seguida, escolha Exibir gráfico de otimização 3D novamente. Ao visualizar como seus parâmetros de sistemas afetam o desempenho de negociação, você pode decidir mais facilmente quais valores de parâmetros produzem quotfragilequot e quais produzem quotrobustquot desempenho do sistema. Configurações robustas são regiões no gráfico 3D que mostram mudanças graduais e não abruptas no gráfico de superfície. Gráficos de otimização 3D são uma ótima ferramenta para evitar ajuste de curva. Curve-fitting (ou sobre-otimização) ocorre quando o sistema é mais complexo do que ele precisa ser, e toda essa complexidade foi focada em condições de mercado que podem nunca acontecer novamente. Mudanças radicais (ou picos) nos gráficos de otimização 3D mostram claramente áreas de sobre-otimização. Você deve escolher a região do parâmetro que produz um platô largo e largo na carta 3D para sua troca real da vida. Os conjuntos de parâmetros que produzem picos de lucro não funcionarão de forma confiável na negociação real. Controles de visualizador de gráfico 3D AmiBrokers visualizador de gráfico 3D oferece capacidades de visualização total com rotação de gráfico completo e animação. Agora você pode ver os resultados do sistema de todas as perspectivas possíveis. Você pode controlar a posição e outros parâmetros do gráfico usando o mouse, barra de ferramentas e atalhos de teclado, o que você achar mais fácil para você. Abaixo você encontrará a lista. - para girar - mantenha premido o botão esquerdo do rato e movimente-se nas direcções X / Y - para Zoom-in, zoom-out - mantenha premido o botão direito do rato e mova-se para X / Y - para mover (traduzir) E tecla CTRL e mova-se em direções X / Y - para Animar - mantenha pressionado o botão esquerdo do mouse, arraste rapidamente e solte o botão ao arrastar ESPAÇO - animar (auto-gire) TECLA DE SETA ESQUERDA - gire vert. Esquerda TECLA DE DIREITA - rotate vert. Direita SETA PARA CIMA - girar horiz. Up DOWN ARROW KEY - girar horiz. NUMPAD 4 - mover para a esquerda NUMPAD 6 - mover para a direita NUMPAD 8 - mover para cima NUMPAD 2 - mover para baixo PAGE UP - nível da água para cima PAGE DOWN - nível de água baixo Otimização inteligente (não exaustiva) A AmiBroker oferece agora uma otimização inteligente (não exaustiva) além da busca regular e exaustiva. A pesquisa não exaustiva é útil se o número de todas as combinações de parâmetros do sistema de negociação determinado for simplesmente demasiado grande para ser viável para uma pesquisa exaustiva. Busca exaustiva é perfeitamente bem desde que seja razoável usá-lo. Vamos dizer que você tem 2 parâmetros cada variando de 1 a 100 (etapa 1). Thats 10000 combinações - perfeitamente OK para pesquisa exaustiva. Agora, com 3 parâmetros você tem 1 milhão de combinações - ainda é OK para pesquisa exaustiva (mas pode ser lenghty). Com 4 parâmetros você tem 100 milhões de combinações e com 5 parâmetros (1..100) você tem 10 bilhões de combinações. Nesse caso, seria muito demorado para verificar todos eles, e esta é a área onde métodos não-exaustivos de busca inteligente pode resolver o problema que não é resolvível em tempo razoável usando a pesquisa exaustiva. Aqui está absolutamente a instrução SIMPLEST como usar novo otimizador não-exaustivo (neste caso CMA-ES). 1. Abra sua fórmula no Editor de Fórmulas. 2. Adicione esta única linha no topo de sua fórmula: OptimizerSetEngine (quotcmaequot) // você também pode usar quotspsoquot ou quottribquot aqui 3. (Opcional) Selecione seu alvo de otimização em Análise Automática, Configurações , QuotWalk-Forwardquot guia, campo de otimização de destino. Se você pular esta etapa otimizará para CAR / MDD (retorno anual composto dividido pelo drawdown máximo). Agora, se você executar otimização usando esta fórmula, ele usará novo evolucionário (não-exaustiva) CMA-ES otimizador. Como funciona A otimização é o processo de encontrar o mínimo (ou o máximo) de determinada função. Qualquer sistema de negociação pode ser considerado como uma função de certo número de argumentos. As entradas são parâmetros e dados de cotação. A saída é o seu alvo de otimização (diga CAR / MDD). E você está procurando o máximo de determinada função. Alguns dos algoritmos inteligentes de otimização são baseados na natureza (comportamento animal) - algoritmo PSO, ou processo biológico - Algoritmos genéticos, e alguns são baseados em conceitos matemáticos derivados por humanos - CMA-ES. Esses algoritmos são usados ​​em muitas áreas diferentes, incluindo finanças. Digite quotPSO financequot ou quotCMA-ES financequot no Google e você vai encontrar muitas informações. Métodos não-exaustivos (ou quotsmartquot) encontrarão óptimo global ou local. O objetivo é, naturalmente, encontrar um global, mas se houver um único pico afiado fora de combinações de parâmetros zilhões, métodos não-exaustivos podem não conseguir encontrar este pico único, mas tomando-lo forma comerciantes perspecive, encontrando pico único afiado é inútil para Porque o resultado seria instável (muito frágil) e não replicável na negociação real. No processo de otimização estamos procurando regiões planalto com parâmetros estáveis ​​e esta é a área onde os métodos inteligentes brilham. No que diz respeito ao algoritmo utilizado pela pesquisa não exaustiva, ele se parece com: a) o otimizador gera alguma população de partida (geralmente aleatória) dos conjuntos de parâmetros b) o backtest é realizado por AmiBroker para cada conjunto de parâmetros da população c) os resultados dos backtests são Avaliado de acordo com a lógica do algoritmo ea nova população é gerada com base na evolução dos resultados, d) se for encontrado o melhor - salve-o e vá para a etapa b) até que os critérios de parada sejam atendidos Exemplo de critérios de parada podem incluir: Iterações máximas b) parar se o intervalo de melhores valores objetivos das últimas gerações X é zero c) parar se adicionar 0,1 vetor de desvio padrão em qualquer direção do eixo principal não mudar o valor do valor objetivo d) outros Para usar qualquer inteligente (não - Exaustivo) no AmiBroker você precisa especificar o mecanismo otimizador que deseja usar na fórmula AFL usando a função OptimizerSetEngine. A função seleciona o mecanismo de otimização externo definido pelo nome. O AmiBroker atualmente é fornecido com 3 mecanismos: Standard Particle Swarm Optimizer (quotspsoquot), Tribos (quottribquot) e CMA-ES (quotcmaequot) - os nomes em chaves devem ser usados ​​em chamadas do OptimizerSetEngine. Além de selecionar otimizador motor você pode querer definir alguns dos seus parâmetros internos. Para isso, use a função OptimizerSetOption. Função OptimizerSetOption (quotnamequot, value) A função define parâmetros adicionais para o mecanismo de otimização externo. Os parâmetros são dependentes do motor. Os três otimizadores fornecidos com o AmiBroker (SPSO, Trib, CMAE) suportam dois parâmetros: quotRunsquot (número de execuções) e quotMaxEvalquot (avaliações máximas (testes) por execução única). O comportamento de cada parâmetro é dependente do motor, de modo que os mesmos valores podem e normalmente produzirão resultados diferentes com diferentes motores usados. A diferença entre Runs e MaxEval é a seguinte. A avaliação (ou teste) é backtest único (ou avaliação do valor da função objetivo). RUN é uma execução completa do algoritmo (encontrar o valor ótimo) - geralmente envolvendo muitos testes (avaliações). Cada execução simplesmente restabelece todo o processo de otimização a partir do novo início (nova população aleatória inicial). Portanto, cada corrida pode levar a encontrar diferentes locais max / min (se não encontrar global). Portanto, o parâmetro Runs define o número de execuções de algoritmos subseqüentes. MaxEval é o número máximo de avaliações (bactests) em qualquer execução única. Se o problema é relativamente simples e 1000 testes são suficientes para encontrar o máximo global, 5x1000 é mais provável encontrar o máximo global, porque há menos chances de ser preso no local máximo, como subseqüentes vai começar a partir de diferentes aleatória população inicial Escolhendo valores de parâmetro pode Ser complicado Depende do problema em teste, da sua complexidade, etc., etc. Qualquer método não-exaustivo estocástico não lhe dá garantia de encontrar max / min global, independentemente do número de testes, se for menor do que exaustivo. A resposta mais fácil é. Especifique como grande número de testes como é razoável para você em termos de tempo necessário para concluir. Outro conselho simples é multiplicar por 10 o número de testes com a adição de nova dimensão. Isso pode levar a superestimar o número de testes necessários, mas é bastante seguro. Os motores enviados são projetados para serem simples de usar, portanto quotreasonablequot valores padrão / automáticos são usados ​​para que a otimização possa ser normalmente executada sem especificar nada (aceitando padrões). É importante entender que todos os métodos de otimização inteligentes funcionam melhor em espaços de parâmetros contínuos e funções objetivas relativamente suaves. Se o espaço de parâmetros é discreto, os algoritmos evolutivos podem ter dificuldade em encontrar o melhor valor. É especialmente verdadeiro para binário (on / off) parâmetros - eles não são adequados para qualquer método de pesquisa que usa gradiente de mudança de função objetivo (como a maioria dos métodos inteligentes fazer). Se o seu sistema de negociação contém muitos parâmetros binários, você não deve usar otimizador inteligente diretamente neles. Em vez disso, tente otimizar apenas parâmetros contínuos usando o otimizador inteligente e alterne parâmetros binários manualmente ou via script externo. SPSO - Standard Particle Swarm Optimizer O Otimizador Padrão de Enxames de Partículas é baseado no código SPSO2007 que é suposto produzir bons resultados desde que sejam fornecidos parâmetros corretos (isto é, Executados, MaxEval) para problemas específicos. Escolher opções corretas para o otimizador PSO pode ser complicado, portanto, os resultados podem variar significativamente de caso para caso. SPSO. dll vem com códigos fonte completo dentro de subpasta quotADKquot. Exemplo de código para Padrão Particle Swarm Optimizer: (encontrando otimizado valor em 1000 testes dentro de espaço de pesquisa de 10000 combinações) OptimizerSetEngine (quotspsoquot) OptimizerSetOption (quotRunsquot, 1) OptimizerSetOption (quotMaxEvalquot, 1000) sl Otimizar (quotsquot, 26, 1, 100, 1 ) Otimizar (quotfquot, 12, 1, 100, 1) Comprar Cross (MACD (fa, sl), 0) TRIBES - Adaptive Parâmetro-menos Partículas Swarm Optimizer Tribes é adaptável , Versão sem parâmetros de otimizador PSO (otimização de enxame de partículas) não-exaustiva. Para o fundo científico veja: particlewarm. info/Tribes2006Cooren. pdf Na teoria deve executar melhor do que o PSO regular, porque pode ajustar automaticamente os tamanhos do enxame ea estratégia do algoritmo ao problema que está sendo resolvido. A prática mostra que seu desempenho é bastante semelhante ao PSO. O plug-in Tribes. DLL implementa a variante quotTribes-Dquot (ou seja, adimensional). Baseado em clerc. maurice. free. fr/pso/Tribes/TRIBES-D. zip por Maurice Clerc. Parâmetros suportados: quotMaxEvalquot - número máximo de avaliações (backtests) por execução (predefinição 1000). Os códigos originais utilizados com a permissão do autor Tribes. DLL são fornecidos com código fonte completo (dentro da pasta quotADKquot). Você deve aumentar o número de avaliações com um número crescente de dimensões (número de parâmetros de otimização). O padrão 1000 é bom para 2 ou máximo 3 dimensões. QuotRunsquot - número de execuções (reinícios). (Padrão 5) Você pode deixar o número de execuções com o valor padrão de 5. Por padrão, o número de execuções (ou reinicializações) é definido como 5. Para usar otimizador Tribes, basta adicionar uma linha ao seu código: OptimizerSetOption (quotMaxEvalquot , 5000) // 5000 avaliações max CMA-ES - Covariance Matrix Adaptation Otimizador de Estratégia Evolutiva CMA-ES (Covariance Matrix Adaptação Estratégia Evolutiva) é avançado otimizador não-exaustiva. Para o fundo científico veja: bionik. tu-berlin. de/user/niko/cmaesintro. html De acordo com benchmarks científicos outperforms nove outros, as estratégias evolucionárias as mais populares (como o PSO, a evolução genética e diferencial). Bionik. tu-berlin. de/user/niko/cec2005.html O plug-in CMAE. DLL implementa quotGlobalquot variante de pesquisa com várias reinicializações com tamanho de população crescente CMAE. DLL vem com código-fonte completo (dentro de pasta quotADKquot) Por padrão número de execuções (Ou reinicia) é definido como 5. É aconselhável deixar o número padrão de reinícios. Você pode variá-lo usando a chamada OptimizerSetOption (quotRunsquot, N), onde N deve estar no intervalo 1..10. Especificar mais de 10 execuções não é recomendado, embora possível. Observe que cada execução usa TWICE o tamanho da população da execução anterior para que ele cresce exponencialmente. Portanto, com 10 corridas você acaba com a população 210 maior (1024 vezes) do que a primeira corrida. Existe outro parâmetro quotMaxEvalquot. O valor padrão é ZERO, o que significa que o plugin irá calcular automaticamente MaxEval. É aconselhável não definir MaxEval por si mesmo como padrão funciona bem. O algoritmo é inteligente o suficiente para minimizar o número de avaliações necessárias e converge muito rápido para ponto de solução, por isso muitas vezes encontra soluções mais rápido do que outras estratégias. É normal que o plugin ignore algumas etapas de avaliação, se detectar que a solução foi encontrada, portanto, você não deve se surpreender que a barra de progresso de otimização pode se mover muito rápido em alguns pontos. O plugin também tem a capacidade de aumentar o número de etapas acima do valor inicialmente estimado se for necessário para encontrar a solução. Devido à sua natureza adaptativa, o tempo restante e / ou quotnumber das etapas mostradas pelo diálogo de progresso é apenas quotbest adivinhar no timequot e pode variar durante curso de otimização. Para usar otimizador CMA-ES, você só precisa adicionar uma linha ao seu código: Isso irá executar a otimização com configurações padrão que são muito bem para a maioria dos casos. Deve-se notar, como é o caso de muitos algoritmos de busca de espaço contínuo, que a diminuição do parâmetro quotstepquot em chamadas de função Optimize () não afeta significativamente os tempos de otimização. A única coisa que importa é o problema quotdimension, ou seja, o número de diferentes parâmetros (número de otimizar chamadas de função). O número de quotstepsquot por parâmetro pode ser definido sem afetar o tempo de otimização, então use a melhor resolução que você deseja. Em teoria, o algoritmo deve ser capaz de encontrar solução em no máximo 900 (N3) (N3) backtests onde quotNquot é a dimensão. Na prática, converge um LOT mais rápido. Por exemplo, a solução em espaço de parâmetros dimensionais 3 (N3) (digamos 100100100 1 milhão de passos exaustivos) pode ser encontrada em apenas 500-900 passos CMA-ES. Otimização individual multi-threaded A partir do AmiBroker 5.70 além do multithreading de múltiplos símbolos. Você pode executar a otimização multi-threaded single-symbol. Para acessar essa funcionalidade, clique na seta suspensa ao lado do botão quotOptimizequot na janela Nova Análise e selecione quot. QuotIndividual Optimizequot usará todos os núcleos de processador disponíveis para realizar a otimização de símbolo único, tornando-a muito mais rápida do que a otimização regular. No modo quotCurrent symbolquot ele realizará a otimização em um símbolo. Em quotAll symbolsquot e QuotFilterquot modos irá processar todos os símbolos sequencialmente, ou seja, primeira otimização completa para o primeiro símbolo, em seguida, a otimização no segundo símbolo, etc Limitações: 1. Backtester personalizado não é suportado (ainda) 2. Smart otimização motores não são suportados - Somente a otimização EXHAUSTIVA funciona. Eventualmente, podemos nos livrar da limitação (1) - quando AmiBroker é alterado para backtester personalizado não usa OLE mais. Agora, você tem um sistema de negociação projetado e codificado, é hora de testá-lo para se certificar de que sua codificação é livre de lógica e técnica Erros. Vamos também olhar para algo conhecido como otimização - um recurso em alguns programas de negociação que permite que você ajuste suas regras de negociação para atender as ações que você planeja em negociação. Testando Seu Sistema de Negociação A grande maioria das aplicações comerciais que suportam linguagens de programação também suportam ferramentas de teste. Essas ferramentas são divididas em duas categorias: 1. Técnico Técnico ferramentas de teste de busca de erros técnicos em seu código. Por exemplo, se você esquecer de adicionar um ponto-e-vírgula após uma instrução, a ferramenta de teste técnico irá notificá-lo de que sua declaração é inválida. A localização da ferramenta de teste técnico depende do aplicativo comercial sendo usado. MetaTrader exibe um erro ou resultados falho quando você tenta compilar seu código, enquanto os aplicativos de negociação como Tradecision têm um utilitário de verificação de código construído na interface que permite verificar seu código para erros antes de aplicá-lo. 2. Logical As ferramentas de teste lógico pesquisam erros lógicos em seu código. Por exemplo, se você usar um sinal maior do que em vez de um sinal menor (o que não é um erro técnico), uma ferramenta de teste lógico mostrará que seus resultados não fazem sentido. A ferramenta de teste lógica mais popular é a ferramenta backtesting. Esta ferramenta permite-lhe tirar dados passados ​​e aplicar o seu sistema de negociação a esses dados. Isto dá-lhe uma ideia do seguinte: Se o seu sistema comercial é rentável 13 Quais condições provam ser mais rentáveis ​​13 Onde quaisquer erros em suas regras podem existir (Para mais informações, consulte Backtesting: Interpretando o Passado.) Solução de problemas de sua negociação Sistema Como com qualquer outro tipo de programação, a solução de problemas pode ser uma tarefa tediosa e difícil. Encontrar erros no seu código requer sistematicamente a classificação através do seu código para identificar erros sintáticos que, embora muitas vezes menor, pode trazer o seu programa a uma parada. Aqui estão alguns erros comuns para procurar: Faltando ponto-e-vírgula depois de instruções - Estas têm de ser após cada instrução. 13 Variáveis ​​indefinidas - Lembre-se de que você precisa declará-las antes de usá-las 13 Erros ortográficos - Se algum nome ou função estiver escrito incorretamente, o aplicativo de troca retornará um erro (veja o exemplo abaixo). 13 Uso incorreto de () - Lembre-se que atribui um valor a outro valor, enquanto significa igual a. 13 Uso incorreto de funções internas - Consulte a documentação de aplicativos comerciais ou a interface de programação de aplicativos (API) para certificar-se de que está usando a sintaxe correta. Alguns aplicativos comerciais contêm um recurso que permite testar seu código antes de usá-lo ou compilá-lo. Este recurso permite que você veja qual é o erro e em qual linha ele pode ser encontrado. Tome Tradecision por exemplo: Aqui podemos ver que Tradecision nos dá a localização (linha e coluna) do erro, uma descrição do erro e do tipo de erro (neste caso, é sintática). Se olharmos para a expressão, podemos ver que na coluna 8 xrossBelow não é uma função válida. Se substituímos o x (que está na coluna 8) por um c, então teremos um código válido. Se olharmos para MetaTrader, podemos ver que os erros surgem quando tentamos compilar o programa: Aqui podemos ver que na descrição diz que a variável BuyNow não estava definida. Clicar duas vezes nesta mensagem de erro nos levará ao local específico do erro no código. Como você pode ver, a maioria das aplicações comerciais lhe dá uma maneira fácil de localizar erros técnicos e corrigi-los. Corrigir os erros simplesmente envolve sistematicamente passar por cada mensagem de erro e, em seguida, recompilar o código e / ou aplicar o sistema de negociação para seus gráficos. Otimizando Seu Sistema de Negociação Alguns aplicativos comerciais permitem selecionar variáveis ​​a serem otimizadas. Tradecision, por exemplo, permite que você facilmente selecionar uma variável e substituí-lo com código que tentará otimização. Otimização em si é simplesmente um processo que encontra o valor ideal para um determinado sistema de comércio elemento baseado em resultados anteriores e desempenho. Observe que a sobre-otimização resulta em sistemas de negociação que são incapazes de se adaptar às condições de mercado, portanto, é importante apenas otimizar algumas variáveis ​​importantes, não todas as variáveis ​​Aqui está o que o recurso de otimização parece no Tradecision: Você pode ver que nós declaramos Duas novas variáveis ​​e defini-las igual a. O simplesmente significa que o programa de troca irá substituir isso com o número ideal. Em seguida, você pode ver que nós usamos as novas variáveis ​​dentro de nossa estratégia de negociação. Finalmente, definimos um intervalo para os números (para que o programa não procure no infinito). Alguns outros programas de negociação têm recursos que operam de forma semelhante, permitindo que você substitua o valor numérico com um e dizendo o aplicativo de negociação para otimizá-lo. Conclusão Até agora você deve ter desenvolvido um sistema de comércio de trabalho em que você pode ter confiança. Na próxima parte desta série, você aprenderá como aplicar seu sistema de negociação a gráficos e como usá-lo para tomar decisões comerciais

No comments:

Post a Comment