Trading system design and optimization


Design de sistemas de negociação de alta frequência e gestão de processos Design de sistemas de negociação de alta frequência e gestão de processos Orientador: Roy E. Welsch. Departamento: Programa de Design e Gerenciamento de Sistemas. Editora: Massachusetts Institute of Technology Data de publicação: 2009 As empresas de trading atualmente são altamente dependentes de mineração de dados, modelagem computacional e desenvolvimento de software. Os analistas financeiros executam muitas tarefas semelhantes às das indústrias de software e manufatura. No entanto, o setor financeiro ainda não adotou totalmente as estruturas de engenharia de sistemas de alto padrão e as abordagens de gerenciamento de processos que obtiveram sucesso nos setores de software e manufatura. Muitas das metodologias tradicionais de design de produto, controle de qualidade, inovação sistemática e melhoria contínua encontradas em disciplinas de engenharia podem ser aplicadas ao campo financeiro. Esta tese mostra como o conhecimento adquirido em disciplinas de engenharia pode melhorar o gerenciamento de projetos e processos de sistemas de negociação de alta frequência. Os sistemas de negociação de alta frequência são baseados em computação. Esses sistemas são sistemas de software automáticos ou semi-automáticos que são inerentemente complexos e exigem um alto grau de precisão de projeto. O projeto de um sistema de negociação de alta frequência liga vários campos, incluindo finanças quantitativas, projeto de sistemas e engenharia de software. Na indústria financeira, onde teorias matemáticas e modelos comerciais são relativamente bem pesquisados, a capacidade de implementar esses projetos em práticas comerciais reais é um dos elementos-chave da competitividade de uma empresa de investimento. A capacidade de converter ideias de investimento em sistemas de negociação de alto desempenho de forma eficaz e eficiente pode dar a uma empresa de investimento uma enorme vantagem competitiva. (Cont.) Esta tese fornece um estudo detalhado composto por design de sistemas de negociação de alta frequência, modelagem e princípios de sistemas e gerenciamento de processos. para desenvolvimento de sistemas. Particular ênfase é dada ao backtesting e otimização, que são consideradas as partes mais importantes na construção de um sistema de negociação. Esta pesquisa constrói modelos de engenharia de sistemas que orientam o processo de desenvolvimento. Ele também usa sistemas de negociação experimental para verificar e validar os princípios abordados nesta tese. Finalmente, esta tese conclui que os princípios e estruturas de engenharia de sistemas podem ser a chave para o sucesso da implementação de sistemas de negociação de alta frequência ou quantitativos. Tese (S. M.) - Instituto de Tecnologia de Massachusetts, Projeto de Sistema e Programa de Administração, 2009. Catalogado de versão de PDF de tese. Inclui referências bibliográficas (p. 78-79). Palavras-chave: Programa de Desenho e Gestão de Sistemas. My AccountTrading Systems: Resolução de problemas e otimização 1313 Mesmo depois de projetar e construir com sucesso um sistema comercial, um comerciante pode achar que o sistema dele é imperfeito. Pode haver alguns problemas, como um evento que continua gerando perdas ou talvez as regras sejam muito amplas e precisem ser otimizadas. Qual é a maneira mais fácil de corrigir o problema? Como é eficaz a otimização Esta seção irá mostrar-lhe como solucionar problemas e otimizar seu sistema de negociação 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 negociação decente será lucrativo na maioria das condições de mercado, mas se ocasionar grandes perdas, você pode trabalhar para identificar e resolver o problema. Aqui estão quatro etapas fáceis: 1. Identifique o problema - Encontre todas as instâncias em que o problema ocorreu durante o backtesting e / ou inicie a gravação quando o problema ocorrer durante a negociação ao vivo. Durante cada instância, anote todas as tendências dos quatro fatores a seguir: Padrão gráfico ou série de preços - Pico nos preços.13 Volume - Volume grande inicialmente e volume baixo depois disso.13 Proponente Bid / Ask - Pico de preço em baixo volume frequentemente indica um grande spread.13 Margem (se usada). 13 13Estas são algumas das áreas em que os problemas podem ocorrer, o que podemos ver analisando o gráfico abaixo. Observe os picos de preço em volume baixo pela seta verde. Observe também o grande volume (próximo à seta azul) seguido por baixo volume a partir de então. Se nada disso for o culpado, há outros fatores que podem ser analisados, como tamanhos de bloco e padrões gráficos avançados. Avaliar o problema - Use as informações coletadas para determinar o que exatamente causou o mau funcionamento do sistema ou a geração de uma perda. Isso geralmente é feito usando o bom senso ou analisando os logs de transação (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 gráfico ou série de preços - O sistema não consegue vender durante quedas acentuadas ou comprar durante subidas íngremes. Talvez o sistema não tenha tempo suficiente para comprar ou vender. Volume - O sistema não consegue vender durante quedas ou comprar durante aumentos. Talvez o patrimônio tenha um volume de negociação tão baixo que o sistema seja incapaz de comprar ou vender a um preço. Nesses casos, o preço pode ser enganoso sem considerar o volume e a oferta / compra. Propagação do spread / oferta - O sistema faz uma compra, mas não lucra tanto quanto deveria ao vender. Isto pode ser devido ao fato de que o trader esqueceu de considerar os spreads bid / ask. Se um sistema é programado para comprar e vender pelo preço atual, ele realmente paga o pedido. e quando vendido, não é vendido a preço atual, mas ao preço de compra. Às vezes, as diferenças entre o lance e o pedido podem ser grandes, levando a perdas indesejadas. Margem - O sistema subitamente vende sem motivo aparente. Se isso ocorrer, você pode ter esquecido de considerar as chamadas de margem. 13 3. Considere as alternativas - Simplesmente tente 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 e o preço atual para criar uma regra. Volume - Para resolver esse problema, você pode criar uma regra que exija que o patrimônio tenha uma certa quantidade de volume antes de executar um trade. / Pergunte ao spread - Aqui você pode querer comprar e vender com base nos preços de compra e venda, em vez do preço atual. Margem - Usar margem pode ser lucrativo se o risco for gerenciado de forma eficaz. Limite de desvantagem deve evitar que você receba chamadas de margem. Isso pode ser feito com pontos de stop loss ou outras táticas similares para limitar as desvantagens. 13 4. Implementar uma solução - Finalmente, precisamos aplicar a solução e ver como ela funciona. O comércio de papel ou o teste de retorno novamente antes da negociação ao vivo geralmente é uma boa ideia após a aplicação de uma solução, porque às vezes as soluções têm conseqüências não intencionais. Por exemplo, regras adicionais podem limitar esses dias inativos, mas também diminuir os lucros gerais (devido a oportunidades perdidas). Otimização Otimização significa simplesmente encontrar os melhores conjuntos de parâmetros para um determinado mercado. Esse processo pode melhorar marginalmente os resultados. No entanto, ela também carrega muitos riscos porque sua premissa subjacente é que o desempenho passado é indicativo de movimentos futuros de preços. A otimização pode ser realizada alterando os valores do parâmetro que você deseja otimizar e, depois, voltando a testar 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 retorno, implemente-o no sistema de negociação. Vamos considerar um exemplo. Digamos que um trader tenha analisado o SampP 500 e descoberto que ele poderia otimizar o sistema usando um gráfico diário. Esse mesmo processo também pode ser levado a um grau mais alto. Por exemplo, se uma média móvel simples de 6 funcionar melhor que 8 para uma estratégia de crossover de MA em um determinado mercado, então 6 seriam usados. O problema aqui não está apenas na suposição, mas também no fato de que o sistema pode ter um desempenho pior em muitos outros mercados, tornando-o menos universal. Muitos desenvolvedores de sistemas abandonam o estágio de otimização por esses dois motivos: a otimização geralmente exagera os resultados. Isso ocorre porque os parâmetros são tão específicos e não universais que qualquer alteração no mercado (isto é, o futuro) pode causar instabilidade. Em muitos casos, a otimização não melhorará o desempenho em um grau significativo. Pequenas melhorias podem ser aparentes, no entanto, a perda da universalidade é um preço alto a pagar. Como regra geral, a otimização deve apenas definir configurações amplas para parâmetros, em vez de definir regras específicas - mesmo que tenha sido bem-sucedida em backtesting e negociação de papéis. A solução de problemas é crucial para que o sistema funcione da maneira que você quer. É importante identificar quaisquer problemas observando as ocorrências em que ocorreram e, em seguida, avaliando como determinadas condições de vários fatores - como padrão de preço, volume, spread de compra / venda e margem - podem ter causado o problema. A otimização pode melhorar seus resultados, mas é importante lembrar que ela tem suas limitações. Não apenas se baseia no pressuposto de que o desempenho passado indica o futuro, mas não é o estágio em que o negociador cria regras específicas - a otimização é apenas sobre a definição de configurações amplas. Na próxima e última parcela, forneceremos uma visão geral de tudo o que foi abordado, juntamente com alguns conselhos e recursos para ajudá-lo a obter um conhecimento prático do design e desenvolvimento do sistema de negociação. Sistemas de Negociação: ConclusãoComo otimizar o sistema de negociação NOTA: Este é um tópico bastante avançado. Por favor, leia os tutoriais anteriores da AFL primeiro. A ideia por trás de uma otimização é simples. Primeiro você tem que ter um sistema de negociação, isso pode ser um cruzamento de média móvel simples, por exemplo. Em quase todos os sistemas existem alguns parâmetros (como o período médio) que decidem como o sistema se comporta (isto é, é bem adequado para longo prazo 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 o maior lucro do sistema) para um determinado símbolo (ou um portfólio de símbolos). O AmiBroker é um dos poucos programas que permitem otimizar seu sistema em vários símbolos de uma só vez. Para otimizar seu sistema, você precisa definir de um a dez parâmetros para ser otimizado. Você decide qual é o valor mínimo e máximo permitido do parâmetro e em quais incrementos esse valor deve ser atualizado. O AmiBroker então realiza vários testes de retorno do sistema usando TODAS as combinações possíveis de valores de parâmetros. Quando esse processo é concluído, o AmiBroker exibe a lista de resultados classificados por lucro líquido. Você é capaz de 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 por meio de uma nova função chamada otimizar. A sintaxe desta função é a seguinte: variável otimizar (quot Descrição, padrão. Mínimo. Máx. Etapa) variável - é a variável AFL normal que é atribuída ao valor retornado pela função otimizar. Com os modos normais de backtesting, scanning, exploration e comentary a função otimizar retorna o valor padrão, portanto a chamada de função acima é equivalente a: default da variável No modo de otimização a função otimizar retorna valores sucessivos de min a max (inclusive) com stepping. "Descrição" é uma string usada para identificar a variável de otimização e é exibida como um nome de coluna na lista de resultados da otimização. default é um valor padrão que otimiza retornos de função em exploração, indicador, comentário, varredura e modos normais de teste de retorno min é um valor mínimo da variável sendo otimizada max é um valor máximo da variável sendo otimizada step é um intervalo usado para aumentar o valor de min a max O 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, é uma boa ideia limitar o número de variáveis ​​de otimização a apenas algumas. Cada chamada para otimizar ciclos de otimização de geração (max - min) / etapa e várias 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. Chame função de otimização somente UMA vez por variável no início de sua fórmula, pois cada chamada gera um novo ciclo de otimização A otimização de múltiplos símbolos é totalmente suportada pelo AmiBroker O espaço máximo de pesquisa é de 2 64 (10 19, 10.000.000.000.000.000.000) combinações 1. Otimização de variável única: sigavg Optimize (Média do sinal. 9. 2. 20. 1) Buy Cross (MACD (12.26), Sinal (12. 26. sigavg)) Sell Cross (Sinal (12. 26. sigavg), MACD (12. 26)) 2. Otimização de duas variáveis ​​(adequada para gráficos 3D) por Optimize (por. 2. 5. 50. 1) Level Optimize (nível. 2. 2. 150. 4) Buy Cross (CCI (per), - Level) Cruz (Nível, CCI (por)) 3. Otimização de múltiplas (3) variáveis: mfast Otimizar (MACD Rápido. 12. 8. 16. 1) mslow Otimizar (MACD Lento. 26. 17. 30. 1) sigavg Optimize (Sinal média. 9. 2. 20. 1) Comprar cruz (MACD (mfast, mslow). Sinal (mfast, mslow, sigavg)) Vender cruzado (Sinal (mfast, mslow, sigavg), MACD (mfast, mslow)) Depois de entrar o f ormula basta clicar no botão Optimize na janela "Automatic Analysis". O AmiBroker começará a testar todas as combinações possíveis de variáveis ​​de otimização e reportará os resultados na lista. Após a otimização é feita a lista de resultados é apresentada classificada 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 rebaixamento, menor número de negociações, maior fator de lucro, menor exposição de mercado e maior retorno anual ajustado ao risco. 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 atende à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á-las manualmente na janela de edição de fórmulas (o segundo parâmetro de otimização da chamada de função). Exibição de gráficos de otimização animados em 3D Para exibir o gráfico de otimização 3D, é necessário executar primeiro a otimização de duas variáveis. A otimização de duas variáveis ​​precisa de uma fórmula que tenha duas chamadas de função Optimize (). Um exemplo de fórmula de otimização de duas variáveis ​​se parece com isso: por Optimize (por. 2. 5. 50. 1) Level Optimize (nível. 2. 2. 150. 4) Buy Cross (CCI (per), - Level) Sell Cross (Level, CCI (per)) Depois de inserir a fórmula, você precisa clicar no botão quotOptimizequot. Quando a otimização estiver concluída, clique na seta suspensa no botão Otimizar e escolha Exibir gráfico de otimização 3D. Em poucos segundos, um gráfico de superfície tridimensional colorido aparecerá em uma janela do visualizador de gráficos 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 em relação às variáveis ​​de otimização. Você pode, no entanto, traçar um 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 (a seta azul aparecerá indicando que os resultados da otimização são classificados pela coluna selecionada) e, em seguida, escolha Visualizar gráfico de otimização 3D novamente. Visualizando como os parâmetros de seus sistemas afetam o desempenho de negociação, você pode decidir mais facilmente quais valores de parâmetros produzem quotfragilequot e quais produzem desempenho de sistema de cotação. Configurações robustas são regiões no gráfico 3D que mostram mudanças graduais em vez de abruptas no gráfico de superfície. Gráficos de otimização 3D são ótimas ferramentas para evitar ajustes de curva. O ajuste de curva (ou otimização excessiva) ocorre quando o sistema é mais complexo do que o necessário, e toda essa complexidade estava focada em condições de mercado que podem nunca mais acontecer. Mudanças radicais (ou picos) nos gráficos de otimização 3D mostram áreas claramente super otimizadas. Você deve escolher a região do parâmetro que produz um platô amplo e amplo no gráfico 3D para sua negociação na vida real. Conjuntos de parâmetros que produzem picos de lucro não funcionarão de forma confiável na negociação real. Controles do visualizador de gráficos 3D O visualizador de gráficos 3D da AmiBrokers oferece total capacidade de visualização com rotação e animação completas de gráficos. Agora você pode ver os resultados do sistema de todas as perspectivas imagináveis. Você pode controlar a posição e outros parâmetros do gráfico usando o mouse, a barra de ferramentas e os atalhos de teclado, o que for mais fácil para você. Abaixo você encontrará a lista. - para girar - segure o botão esquerdo do mouse e mova nas direções X / Y - para zoom-in, zoom-out - mantenha pressionado o botão DIREITO do mouse e mova nas direções X / Y - para mover (traduzir) - segure o botão esquerdo do mouse e tecla CTRL e mover em direções X / Y - para animar - segure o botão esquerdo do mouse, arraste rapidamente e solte o botão enquanto arrasta espaço - animar (auto-rotação) seta para a esquerda - girar vert. esquerda DIREITA seta - girar vert. direita seta para cima - girar horiz. cima para baixo seta - girar horiz. abaixo NUMPAD (PLUS) - Próximo (zoom in) NUMPAD - (MENOS) - Far (zoom out) NUMPAD 4 - mover para a esquerda NUMPAD 6 - mover para a direita NUMPAD 8 - subir NUMPAD 2 - descer PAGE UP - subir de nível de água PAGE DOWN - nível de água baixo Otimização inteligente (não exaustiva) A AmiBroker agora oferece otimização inteligente (não exaustiva), além de uma busca exaustiva e regular. A pesquisa não exaustiva é útil se o número de todas as combinações de parâmetros de determinado sistema comercial for simplesmente grande demais para ser viável para uma pesquisa exaustiva. A busca exaustiva é perfeitamente adequada, desde que seja razoável usá-la. Vamos dizer que você tem 2 parâmetros cada um variando de 1 a 100 (passo 1). Isso é 10000 combinações - perfeitamente OK para pesquisa exaustiva. Agora com 3 parâmetros você tem 1 milhão de combinações - ainda é bom para uma busca exaustiva (mas pode ser longa). 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 verificar todos eles, e essa é a área em que métodos de pesquisa inteligente não exaustivos podem resolver o problema que não é solucionável em tempo razoável usando uma pesquisa exaustiva. Aqui é absolutamente a instrução mais simples como usar o novo otimizador não exaustivo (neste caso, CMA-ES). 1. Abra sua fórmula no Editor de Fórmulas 2. Adicione esta única linha na parte superior de sua fórmula: OptimizerSetEngine (quotcmaequot) // você também pode usar quotspsoquot ou quottribquot aqui 3. (Opcional) Selecione seu destino de otimização em Análise Automática, Configurações , na guia "Walk-Forward", campo de destino de otimização. Se você pular esta etapa, ela otimizará para CAR / MDD (retorno anual composto dividido pelo rebaixamento máximo). Agora, se você executar a otimização usando essa fórmula, ela usará o novo otimizador evolutivo (não exaustivo) do CMA-ES. Como funciona A otimização é o processo de encontrar o mínimo (ou 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 destino de otimização (digamos CAR / MDD). E você está procurando pelo máximo de determinada função. Alguns dos algoritmos de otimização inteligente 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ê encontrará muitas informações. Métodos não exaustivos (ou quotsmart) irão encontrar o melhor local ou global. Obviamente, o objetivo é encontrar um global, mas se houver um único pico acentuado de combinações de parâmetros zillions, métodos não exaustivos podem falhar em encontrar este pico único, mas levando os comerciantes para o futuro, encontrando um único pico acentuado é inútil para negociação porque esse resultado seria instável (muito frágil) e não replicável na negociação real. No processo de otimização, procuramos por regiões de planalto com parâmetros estáveis ​​e essa é a área onde os métodos inteligentes brilham. Quanto ao algoritmo usado pela pesquisa não exaustiva, ele tem a seguinte aparência: a) o otimizador gera uma população inicial (geralmente aleatória) de conjuntos de parâmetros b) backtest é realizado pela AmiBroker para cada conjunto de parâmetros da população c) os resultados dos backtests são avaliada de acordo com a lógica do algoritmo e nova população é gerada com base na evolução dos resultados, d) se for encontrado novo melhor - salve e vá para a etapa b) até que os critérios de parada sejam atendidos Os exemplos de critérios de parada podem incluir: a) atingir iterações máximas b) pare se o intervalo dos melhores valores objetivos das últimas X gerações for zero c) pare de adicionar o vetor de desvio padrão 0,1 em qualquer direção do eixo principal não altere o valor do objetivo. d) outros otimizador exaustivo) no AmiBroker você precisa especificar o mecanismo otimizador que você 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), Tribes (quottribquot) e CMA-ES (quotcmaequot) - os nomes entre chaves devem ser usados ​​em chamadas OptimizerSetEngine. Além de selecionar o mecanismo otimizador, você pode 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 mecanismo. Todos 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 mecanismo, portanto, os mesmos valores podem e geralmente produzirão resultados diferentes com diferentes mecanismos usados. A diferença entre Runs e MaxEval é a seguinte. Avaliação (ou teste) é backtest único (ou avaliação do valor da função objetivo). RUN é uma execução completa do algoritmo (encontrar valor ótimo) - geralmente envolvendo muitos testes (avaliações). Cada execução simplesmente restaura todo o processo de otimização desde o novo começo (nova população aleatória inicial). Portanto, cada execução pode levar a encontrar diferentes locais max / min (se não encontrar um global). Então, o parâmetro Runs define o número de execuções subseqüentes do algoritmo. MaxEval é o número máximo de avaliações (bactests) em uma única execução. Se o problema for relativamente simples e 1000 testes forem suficientes para encontrar o máximo global, é mais provável que 5x1000 encontre o máximo global, pois há menos chances de ficar preso no máximo local, pois as execuções subseqüentes começarão a partir da população aleatória inicial diferente. seja complicado. Depende do problema em teste, da sua complexidade, etc., etc. Qualquer método não-exaustivo estocástico não oferece garantia de encontrar max / min global, independentemente do número de testes, se for menor que a exaustiva. A resposta mais fácil é para. especifique um número tão grande de testes quanto for razoável para você em termos de tempo necessário para concluir. Outro conselho simples é multiplicar por 10 o número de testes com adição de nova dimensão. Isso pode levar a superestimar o número de testes necessários, mas é bastante seguro. Os motores expedidos são projetados para serem simples de usar, portanto, os valores padrão / automáticos quotreasonable são usados ​​para que a otimização possa ser 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 um valor ótimo. Isso é especialmente verdadeiro para os parâmetros binários (on / off) - eles não são adequados para qualquer método de busca que usa gradiente de mudança de função objetiva (como a maioria dos métodos inteligentes faz). Se o seu sistema de negociação contiver muitos parâmetros binários, você não deve usar o otimizador inteligente diretamente sobre eles. Em vez disso, tente otimizar apenas os parâmetros contínuos usando o otimizador inteligente e alterne os parâmetros binários manualmente ou via script externo. SPSO - Otimizador de Enxame de Partículas Padrão O Otimizador de Enxame de Partículas Standard é baseado no código SPSO2007 que supostamente produz bons resultados, desde que os parâmetros corretos (por exemplo, Runs, MaxEval) sejam fornecidos para um problema específico. Escolher opções corretas para o otimizador de PSO pode ser complicado, portanto, os resultados podem variar significativamente de caso para caso. O SPSO. dll vem com códigos fonte completos dentro da subpasta quotADKquot. Exemplo de código para o Otimizador de Enxame de Partículas Padrão: (achando o valor ideal em 1000 testes no espaço de pesquisa de 10000 combinações) OtimizadorSetEngine (quotspsoquot) OptimizerSetOption (quotRunsquot, 1) OptimizerSetOption (quotMaxEvalquot, 1000) sl Optimize (quotsquot, 26, 1, 100, 1 ) Otimizar (Cruzar (0, MACD (fa, sl)) TRIBOS - Tribos Adaptadores de Enxame de Partículas Adaptáveis ​​a Partículas Sem Parâmetros são adaptáveis ​​(cpc, 12, 1, 100, 1) , versão sem parâmetros do otimizador não exaustivo PSO (otimização de enxame de partículas). Para obter informações científicas, consulte: particleswarm. info/Tribes2006Cooren. pdf Em teoria, ele deve ter um desempenho melhor do que o PSO normal, pois ele pode ajustar automaticamente os tamanhos de enxame e a estratégia do algoritmo para o problema a ser resolvido. A prática mostra que seu desempenho é bastante semelhante ao PSO. O plugin Tribes. DLL implementa a variante quotTribes-Dquot (ou seja, sem dimensão). Com base em clerc. maurice. free. fr/pso/Tribes/TRIBES-D. zip por Maurice Clerc. Códigos-fonte originais usados ​​com permissão do autor O Tribes. DLL vem com código-fonte completo (dentro da pasta quotKadquot) Parâmetros suportados: quotMaxEvalquot - número máximo de avaliações (backtests) por execução (padrão 1000). Você deve aumentar o número de avaliações com o aumento do número de dimensões (número de parâmetros de otimização). O padrão 1000 é bom para 2 ou no máximo 3 dimensões. quotRunsquot - número de execuções (reinicializações). (padrão 5) Você pode deixar o número de execuções no valor padrão de 5. Por padrão, o número de execuções (ou reinicializações) é definido como 5. Para usar o otimizador Tribes, basta adicionar uma linha ao seu código: OptimizerSetOption (quotMaxEvalquot , 5000) // 5000 avaliações max CMA-ES - Covariance Adaptação matricial Otimizador de estratégia evolutiva CMA-ES (Covariance Matrix Adaptation Evolutionary Strategy) é um otimizador não exaustivo avançado. Para obter informações científicas, consulte: bionik. tu-berlin. de/user/niko/cmaesintro. html De acordo com referências científicas, supera outras nove estratégias evolutivas mais populares (como PSO, Genetic e Differential evolution). bionik. tu-berlin. de/user/niko/cec2005.html O plug-in CMAE. DLL implementa a variante quotGlobalquot da pesquisa com várias reinicializações com o aumento do tamanho da população O CMAE. DLL é fornecido com o código fonte completo (dentro da pasta quotADKquot) Por padrão, o número de execuções (ou reinicia) é definido como 5. É aconselhável deixar o número padrão de reinicializações. Você pode alterá-lo usando a opção OptimizerSetOption (quotRunsquot, N), onde N deve estar no intervalo 1..10. Especificar mais de 10 execuções não é recomendado, embora seja possível. Observe que cada execução usa DUAS VEZES o tamanho da população da execução anterior, de modo que ela cresce exponencialmente. Portanto, com 10 execuções, você acaba com uma população 210 maior (1024 vezes) do que a primeira execução. Existe outro parâmetro, o quotMaxEvalquot. O valor padrão é ZERO, o que significa que o plugin calculará automaticamente o MaxEval necessário. É 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 o ponto de solução, por isso, muitas vezes encontra soluções mais rápidas do que outras estratégias. É normal que o plugin pule 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 da otimização possa se mover muito rapidamente em alguns pontos. O plug-in também tem capacidade de aumentar o número de etapas sobre o valor inicialmente estimado, se necessário, para encontrar a solução. Devido à sua natureza adaptativa, o tempo estimado para a esquerda e / ou o número de etapas exibidas pela caixa de diálogo de progresso é apenas a estimativa mais provável no momento e pode variar durante o curso de otimização. Para usar o otimizador CMA-ES, você só precisa adicionar uma linha ao seu código: Isso executará a otimização com configurações padrão que são adequadas para a maioria dos casos. Deve-se notar, como é o caso de muitos algoritmos de busca de espaço contínuo, que diminuir o 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 quotdimensionquot, ou seja, o número de parâmetros diferentes (número de chamadas de função de otimização). O número de quotsteps por parâmetro pode ser definido sem afetar o tempo de otimização, portanto, use a melhor resolução desejada. 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 muito mais rápido. Por exemplo, a solução no espaço de parâmetro dimensional 3 (N3) (digamos 100100100 1 milhão de etapas exaustivas) pode ser encontrada em apenas 500-900 passos CMA-ES. Otimização individual multithread A partir do AmiBroker 5.70, além do multithreading de vários símbolos. você pode executar otimização de símbolo único multi-threaded. Para acessar essa funcionalidade, clique na seta suspensa ao lado do botão "Otimizar" na janela Nova Análise e selecione "Otimização Individual". "Optimize individual" usará todos os núcleos de processadores disponíveis para realizar a otimização de um único símbolo, tornando-a muito mais rápida que a otimização regular. No modo "Símbolo atual", ele executará a otimização em um símbolo. Nos modos "Todos os símbolos" e "Filtro" irá processar todos os símbolos sequencialmente, isto é, a primeira otimização completa para o primeiro símbolo, a otimização no segundo símbolo, etc. Limitações: 1. O backtester personalizado NÃO é suportado (ainda) 2. Os mecanismos de otimização inteligentes NÃO são suportados - somente a otimização EXAUSTÔRICA funciona. Eventualmente, podemos nos livrar da limitação (1) - quando o AmiBroker é alterado, então o backtester personalizado não usa mais OLE. Mas (2) provavelmente está aqui para ficar por muito tempo.

Комментарии

Популярные сообщения