К основному контенту

Design e otimização do sistema de negociação


Design e otimização do sistema de negociação
NOTA: Este é um tópico bastante avançado. Leia primeiro os tutoriais AFL anteriores.
A idéia por trás de uma otimização é simples. Primeiro, você precisa ter um sistema comercial, isso pode ser um simples cruzamento de média móvel, por exemplo. Em quase todos os sistemas, existem alguns parâmetros (como período de média) que decidem como o sistema se comporta (ou seja, é adequado para longo prazo ou curto prazo, como é reagir em 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). AmiBroker é um dos poucos programas que permitem otimizar seu sistema em vários símbolos ao mesmo tempo.
Para otimizar seu sistema, você deve definir de um até dez parâmetros para serem otimizados. Você decide o que é um valor mínimo e máximo permitido do parâmetro e em que incrementos este valor deve ser atualizado. O AmiBroker então executa vários testes de retorno do sistema usando TODAS as possíveis combinações de valores de parâmetros. Quando este processo está concluído, o AmiBroker exibe a lista de resultados ordenados pelo lucro líquido. Você pode ver os valores dos parâmetros de otimização que dão o melhor resultado.
Escrevendo fórmula AFL.
A otimização no testador traseiro é suportada por uma nova função chamada otimização. A sintaxe desta função é a seguinte:
variável - é uma variável AFL normal que recebe o valor retornado pela função de otimização.
Com os modos normal de backtesting, digitalização, exploração e comentário, a função de otimização retorna o valor padrão, portanto, a chamada de função acima é equivalente a: variável = padrão;
Na função de otimização, otimizar a função retorna valores sucessivos de min para max (inclusive) 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 otimiza a função retorna na exploração, no indicador, nos comentários, na varredura e nos modos normais de teste de volta.
min é um valor mínimo da variável que está sendo otimizada.
max é um valor máximo da variável otimizada.
step é um intervalo usado para aumentar o valor de min para max.
AmiBroker suporta até 64 chamadas para otimizar a função (portanto, até 64 variáveis ​​de otimização), note que, se você estiver usando uma otimização exaustiva, é realmente uma boa idéia limitar o número de variáveis ​​de otimização a apenas alguns. Cada chamada para otimizar gerar loops de otimização de geração (max - min) / passo e múltiplas chamadas para otimizar multiplique o número de execuções necessárias. Por exemplo, otimizar dois parâmetros usando 10 etapas exigirá 10 * 10 = 100 loops de otimização. Chamar otimizar a função apenas UMA VEZ por variável no início da sua fórmula à medida que cada chamada gera novos laços de otimização A otimização de vários símbolos é totalmente suportada pelo AmiBroker O espaço de busca máximo é de 2 64 (10 19 = 10,000,000,000,000,000,000) de combinações.
1. Otimização de variável única:
sigavg = Otimizar ("Média do sinal", 9, 2, 20, 1);
Sell ​​= Cross (Signal (12, 26, sigavg), MACD (12, 26));
2. Otimização de duas variáveis ​​(adequado para gráficos em 3D)
per = Optimize ("per", 2, 5, 50, 1);
Nível = Otimizar ("nível", 2, 2, 150, 4);
Vender = Cruzar (Nível, CCI (per));
3. Otimização variável múltipla (3):
mfast = Optimize ("MACD Fast", 12, 8, 16, 1);
mslow = Optimize ("MACD Slow", 26, 17, 30, 1);
sigavg = Otimizar ("Média do sinal", 9, 2, 20, 1);
Buy = Cross (MACD (mfast, mslow), Signal (mfast, mslow, sigavg));
Sell ​​= Cross (Signal (mfast, mslow, sigavg), MACD (mfast, mslow));
Depois de inserir a fórmula, basta clicar no botão Otimizar em & quot; Análise automática & quot; janela. AmiBroker começará a testar todas as combinações possíveis de variáveis ​​de otimização e informará os resultados na lista. Após a otimização é feita, a lista de resultado é apresentada ordenada pelo lucro líquido%. Como você pode classificar os resultados por qualquer coluna na lista de resultados, é fácil obter os melhores valores de parâmetros para o menor desconto, o menor número de negócios, o maior fator de lucro, a menor exposição ao mercado e o maior retorno anual ajustado pelo risco. As últimas colunas da lista de resultados apresentam os valores das variáveis ​​de otimização para teste dado.
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 as chamadas de função com os valores ótimos. Na fase atual você precisa digitá-los manualmente na janela de edição da fórmula (o segundo parâmetro da função otimizar a chamada).
Exibição de gráficos de otimização animada 3D.
Para exibir o gráfico de otimização 3D, você precisa primeiro executar a otimização de duas variáveis. A otimização de duas variáveis ​​precisa de uma fórmula que tenha 2 chamadas de função otimizadas (). Um exemplo de fórmula de otimização de duas variáveis ​​parece assim:
per = Optimize ("per", 2, 5, 50, 1);
Nível = Otimizar ("nível", 2, 2, 150, 4);
Vender = Cruzar (Nível, CCI (per));
Depois de inserir a fórmula, você precisa clicar em & quot; Otimizar & quot; botão.
Uma vez que a otimização esteja completa, você deve clicar na seta suspensa no botão Otimizar e escolher Exibir gráfico de otimização 3D. Em alguns segundos, um gráfico de superfície tridimensional colorido aparecerá em uma janela de visualização 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, você pode plotar gráfico de superfície 3D para qualquer coluna na tabela de resultados de otimização. Basta clicar no cabeçalho da coluna para ordená-lo (uma seta azul aparecerá indicando que os resultados de otimização são classificados pela coluna selecionada) e, em seguida, escolha Exibir gráfico de otimização 3D novamente.
Ao visualizar como os parâmetros do seu sistema afetam o desempenho da negociação, você pode decidir mais facilmente quais valores de parâmetro produzem "frágil" e que produzem "robusto" performance do sistema. 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. Os gráficos de otimização 3D são uma ótima ferramenta para evitar o ajuste de curvas. O ajuste de curvas (ou sobre otimização) ocorre quando o sistema é mais complexo do que precisa ser, e toda essa complexidade foi focada em condições de mercado que talvez nunca mais aconteçam. Mudanças radicais (ou espigões) nos gráficos de otimização 3D mostram claramente áreas de otimização excessiva. Você deve escolher uma região de parâmetros que produza um amplo e amplo patamar no gráfico 3D para o seu comércio de vida real. Os 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 AmiBroker oferece capacidades de visualização totais com rotação e animação completas de gráficos. Agora você pode visualizar 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, a barra de ferramentas e os atalhos do teclado, o que você achar mais fácil para você. Abaixo, você encontrará a lista.
- para rodar - mantenha pressionado o botão esquerdo do mouse e mova-se nas direções X / Y.
- para Zoom-in, zoom-out - mantenha pressionado o botão RIGHT do mouse e mova-se nas direções X / Y.
- para mover (traduzir) - mantenha pressionado o botão esquerdo do mouse e a tecla CTRL e mova-se nas direções X / Y.
- para animar - mantenha pressionado o botão esquerdo do mouse, arraste rapidamente e solte o botão enquanto arrasta.
SPACE - animate (auto-rotate)
CHAVE DE FLECHA ESQUERDA - rotate vert. esquerda.
CHAVE DE SETA PARA A DIREITA - rotate vert. certo.
CHAVE DE SETA PARA CIMA - gire horiz. acima.
CHAVE DE SETA PARA BAIXO - gire horiz. baixa.
NUMPAD + (PLUS) - Perto (aproximar)
NUMPAD - (MINUS) - Far (zoom out)
NUMPAD 4 - mover para a esquerda.
NUMPAD 6 - mude para a direita.
NUMPAD 8 - mova-se para cima.
NUMPAD 2 - mova para baixo.
PAGE UP - nível da água para cima.
PAGE DOWN - nível da água para baixo.
Otimização inteligente (não exaustiva).
A AmiBroker agora oferece 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 de um determinado sistema de negociação for simplesmente muito grande para ser viável para uma busca exaustiva.
A busca exaustiva é perfeitamente adequada, desde que seja razoável usá-la. Digamos que você tenha 2 parâmetros cada um variando de 1 a 100 (passo 1).
São 10000 combinações - perfeitamente corretas para pesquisa exaustiva. Agora, com 3 parâmetros, você obteve 1 milhão de combinações - ainda está correto para pesquisa exaustiva (mas pode ser lenta). 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 verificá-los, e esta é a área onde os métodos de pesquisa inteligente não exaustivos podem resolver o problema que não são solucionáveis ​​em um tempo razoável usando uma busca exaustiva.
Aqui está absolutamente a instrução SIMPLES sobre como usar um 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 da sua fórmula:
OptimizerSetEngine (& quot; cmae & quot;); // você também pode usar & quot; spso & quot; ou "trib" Aqui.
3. (Opcional) Selecione seu alvo de otimização em Análise automática, Configurações, & Walker Forward & quot; guia, campo de destino de otimização. Se você ignorar este passo, ele irá otimizar o CAR / MDD (retorno anual composto dividido pelo máximo% de redução).
Agora, se você executar a otimização usando esta fórmula, usará o novo otimizador CMA-ES evolutivo (não exaustivo).
Como funciona ?
A otimização é o processo de encontrar o mínimo (ou o máximo) de função dada. Qualquer sistema comercial 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 objetivo de otimização.
(diga CAR / MDD). E você está procurando o máximo de função dada.
Alguns 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 de humanos - CMA-ES.
Esses algoritmos são usados ​​em muitas áreas diferentes, incluindo finanças. Insira "PSO finance & quot; ou "CMA-ES finance" no Google e você encontrará muitas informações.
Métodos não exaustivos (ou "inteligentes") encontrarão otimizar global ou local. O objetivo é, naturalmente, encontrar um global, mas se houver um único pico afiado.
As combinações de parâmetros fora de zilhões, métodos não-exaustivos podem não conseguir esse único pico, mas assumi-lo de acordo com a perspectiva do comerciante, encontrar único pico afiado é 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, estamos procurando por regiões de platô com parâmetros estáveis ​​e esta é a área onde brilham métodos inteligentes.
Quanto ao algoritmo usado por pesquisa não-exaustiva, ele se destaca da seguinte maneira:
a) o otimizador gera alguma (inicialmente aleatória) população inicial de conjuntos de parâmetros.
b) o backtest é realizado pela AmiBroker para cada conjunto de parâmetros da população.
c) os resultados dos backtests são avaliados de acordo com a lógica do algoritmo.
e a nova população é gerada com base na evolução dos resultados,
d) se o novo melhor for encontrado - salve-o e vá para a etapa b) até que os critérios de parada sejam atendidos.
Os critérios de parada de exemplo podem incluir:
a) atingindo as iterações máximas especificadas.
b) pare se o intervalo dos melhores valores objetivos das últimas gerações X é zero.
c) pare se adicionar 0,1 vetor de desvio padrão em qualquer direção do eixo principal não altera o valor do valor objetivo.
Para usar qualquer otimizador 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. AmiBroker atualmente é fornecido com 3 motores: Otimizador de enxame de partículas padrão ("spso"), Tribes ("trib") e CMA-ES ("cmae") - os nomes em chaves devem ser usados ​​em chamadas OptimizerSetEngine.
Além de selecionar o mecanismo do otimizador, você pode querer definir alguns dos seus parâmetros internos. Para isso use a função OptimizerSetOption.
Função OptimizerSetOption (& quot; name & quot ;, value).
A função define parâmetros adicionais para o mecanismo de otimização externo. Os parâmetros são dependentes do motor.
Todos os três otimizadores fornecidos com AmiBroker (SPSO, Trib, CMAE) suportam dois parâmetros: & quot; Executa & quot; (número de execuções) e "MaxEval" (avaliações máximas (testes) por única execução). O comportamento de cada parâmetro é dependente do motor, então os mesmos valores podem e, geralmente, produzir resultados diferentes com diferentes motores usados.
A diferença entre Runs e MaxEval é a seguinte. A avaliação (ou teste) é um teste simples (ou avaliação do valor da função objetivo).
RUN é uma execução completa do algoritmo (encontrando o melhor valor) - geralmente envolvendo muitos testes (avaliações).
Cada execução simplesmente RESTAURA todo o processo de otimização desde o novo início (nova população aleatória inicial).
Portanto, cada execução pode levar a encontrar diferentes locais max / min (se não encontrar um global). Assim, o parâmetro Runs define o número de algoritmos subseqüentes. MaxEval é o número máximo de avaliações (bactests) em qualquer execução única.
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.
porque há menos chances de ficar preso no máximo local, pois as corridas subseqüentes começam a partir de diferentes populações aleatórias iniciais.
Escolher valores de parâmetros pode ser complicado. Depende do problema sob teste, da sua complexidade, etc., etc.
Qualquer método estocástico não exaustivo 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 é: especificar 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 ser simples de usar, portanto, "razoável" Os valores padrão / automático são usados, de modo que a otimização pode geralmente ser executada sem especificar nada (aceitando padrões).
É importante entender que todos os métodos inteligentes de otimização funcionam melhor em espaços de parâmetros contínuos e funções objetivas relativamente lisas. Se o espaço dos parâmetros é discreto, os algoritmos evolutivos podem ter problemas para encontrar o melhor valor. É especialmente verdade para parâmetros binários (on / off) - não são adequados para qualquer método de pesquisa que use gradiente de mudança de função objetiva (como a maioria dos métodos inteligentes o fazem). Se o seu sistema comercial contiver muitos parâmetros binários, você não deve usar o otimizador inteligente diretamente neles. Em vez disso, tente otimizar apenas os parâmetros contínuos usando otimizador inteligente e altere os parâmetros binários manualmente ou através de um script externo.
SPSO - Otimizador padrão de enxertia de partículas.
O otimizador padrão de enxertia de partículas é baseado no código SPSO2007 que é suposto produzir bons resultados desde que os parâmetros corretos (ou seja, Runs, MaxEval) sejam fornecidos para um problema específico.
Escolher as opções corretas para o otimizador de PSO pode ser complicado, portanto, os resultados podem variar significativamente caso a caso.
SPSO. dll vem com códigos de fonte completos dentro de "ADK & quot; subpasta.
(encontrando o valor ideal em 1000 testes dentro do espaço de busca de 10000 combinações)
Buy = Cross (MACD (fa, sl), 0);
Sell ​​= Cross (0, MACD (fa, sl));
TRIBES - Otimizador de enxertia de partículas sem parâmetros adaptáveis.
Tribes é uma versão adaptável e sem parâmetros do otimizador não-exaustivo PSO (otimização de enxame de partículas). Para o conhecimento científico, veja:
Em teoria, ele deve ter um desempenho melhor do que o PSO normal, pois pode ajustar automaticamente o tamanho dos enxames 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 & quot; Tribes-D & quot; (ou seja, sem adição). Baseado em clerc. maurice. free. fr/pso/Tribes/TRIBES-D. zip por Maurice Clerc. Códigos fonte originais utilizados com permissão do autor.
Tribes. DLL vem com o código fonte completo (dentro da pasta "ADK")
"MaxEval" - número máximo de avaliações (backtests) por execução (padrão = 1000).
O padrão 1000 é bom para 2 ou máximo 3 dimensões.
& quot; Executa & quot; - número de execuções (reinicia). (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 reinicia) é definido como 5.
Para usar o otimizador Tribes, você só precisa adicionar uma linha ao seu código:
OptimizerSetOption (& quot; MaxEval & quot; 5000); // 5000 avaliações máx.
CMA-ES - Covariance Matrix Adaptation Otimizador de estratégia evolutiva.
CMA-ES (Covariance Matrix Adaptation Evolutionary Strategy) é otimizador avançado não-exaustivo.
Para o conhecimento científico, veja:
De acordo com benchmarks científicos, supera as nove outras estratégias evolutivas mais populares (como PSO, evolução genética e diferencial).
O plugin CMAE. DLL implementa & quot; Global & quot; variante de pesquisa com vários reinícios com o aumento do tamanho da população.
CMAE. DLL vem com o código fonte completo (dentro da pasta "ADK")
Por padrão, o número de execuções (ou reinicia) é definido como 5.
É aconselhável deixar o número padrão de reinícios.
Você pode alterá-lo usando OptimizerSetOption (& quot; Runs & quot ;, N) call, onde N deve estar no intervalo 1..10.
Especificar mais de 10 execuções não é recomendado, embora possivel.
Observe que cada execução usa TWICE o tamanho da população da corrida anterior para que ela cresça exponencialmente.
Portanto, com 10 corridas, você acaba com a população 2 ^ 10 maior (1024 vezes) do que a primeira corrida.
Existe outro parâmetro "MaxEval". O valor padrão é ZERO, o que significa que o plugin irá calcular automaticamente o MaxEval necessário. É aconselhável NÃO definir o MaxEval sozinho, pois o 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, muitas vezes encontra soluções mais rápidas 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 possa se mover muito rápido em alguns pontos. O plugin também possui capacidade para aumentar o número de etapas sobre o valor inicialmente estimado se for necessário encontrar a solução. Devido à sua natureza adaptativa, o "tempo estimado deixado" e / ou "número de etapas" exibido pela caixa de diálogo de progresso é apenas "melhor adivinhação no tempo" 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 boas para a maioria dos casos.
Deve-se notar, como é o caso de muitos algoritmos de busca em espaço contínuo, que diminui o "passo" o parâmetro nas chamadas do Optimize () funciton não afeta significativamente os tempos de otimização. O único que importa é o problema "dimensão", isto é, o número de parâmetros diferentes (número de otimização de chamadas de função). O número de & quot; passos & quot; 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 * (N + 3) * (N + 3) backtests em que "N" é a dimensão. Na prática, ele converge muito mais rápido. Por exemplo, a solução em espaço de parâmetros dimensionais 3 (N = 3) (digamos 100 * 100 * 100 = 1 milhão de etapas exaustivas) pode ser encontrada em apenas 500 a 900 passos CMA-ES.
Otimização individual multi-threaded.
A partir do AmiBroker 5.70, além do multithreading de vários símbolos, você pode executar otimização de um único símbolo multi-threaded. Para acessar esta funcionalidade, clique na seta suspensa ao lado de "otimizar" na janela Nova Análise e selecione & quot; Individual Optimize & quot ;.
"otimizar individual" usará todos os núcleos de processador disponíveis para executar otimização de um único símbolo, tornando-o muito mais rápido do que otimização regular.
1. O backtester personalizado NÃO é suportado (ainda)
2. Os motores de otimização inteligentes NÃO são suportados - apenas otimização EXHAUSTIVA funciona.
Eventualmente, podemos eliminar a 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.

Sistemas de Negociação: Solução de Problemas e Otimização.
Mesmo depois de projetar e construir com sucesso um sistema comercial comercial, um comerciante pode achar que seu sistema é imperfeito. Pode haver alguns problemas, como um evento que continua gerando perdas; ou talvez as regras sejam muito amplas e precisam ser otimizadas. Qual é a maneira mais fácil de resolver o problema? Quão 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.
A solução de problemas é um aspecto muito importante do desenvolvimento do sistema. Um sistema comercial decente será rentável 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:
Padrão de gráfico ou série de preços - Spike nos preços. Volume - Grande volume inicial e baixo volume depois disso. Licitação / Ask spread - Spike no preço em baixo volume geralmente indica um grande spread. Margem (se usado). Estas são algumas das áreas em que podem ocorrer problemas, que podemos ver analisando o gráfico abaixo. Observe os picos de preço em baixo volume pela seta verde. Observe também o grande volume (perto da seta azul) seguido de baixo volume depois disso. Se nenhum desses se revelar culpado, existem outros fatores que podem ser analisados, como tamanhos de bloco e padrões de gráficos avançados.
2. Avalie o problema - Use as informações que você reuniu para determinar o que exatamente causou o mau funcionamento do sistema ou gerar uma perda. Isso geralmente é feito usando o senso comum, ou analisando registros de transações (fornecidos por seu corretor). Aqui estão exemplos de como algumas das condições dos quatro fatores listados acima podem ser o motivo de um problema identificado:
Padrão de 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 amplo tempo para comprar ou vender.
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 de gráfico ou série de preços - Uma alternativa é simplesmente dizer ao sistema que aguarde 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.
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 volta novamente antes da negociação ao vivo é muitas vezes uma boa idéia depois de aplicar uma solução, porque às vezes as soluções têm conseqüências não intencionais. Por exemplo, regras adicionais podem limitar esses dias baixos, mas também diminuir os lucros globais (devido a oportunidades perdidas).
A otimização simplesmente significa encontrar os melhores conjuntos de parâmetros para um determinado mercado. Esse processo pode melhorar marginalmente os resultados. No entanto, também traz muitos riscos, porque o seu pressuposto 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 essas alterações. Tenha em mente que os outros parâmetros devem permanecer constantes para que os efeitos das mudanças sejam determinados. Depois de encontrar o valor que produz o maior desempenho no teste de volta, implemente-o no sistema de negociação.
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.
Como regra geral, a otimização só deve definir configurações amplas para parâmetros em vez de configurar regras específicas - mesmo que tenha sido bem sucedido em backtesting e papel trading.
A solução de problemas é crucial para que seu sistema funcione da maneira que você quiser. É importante identificar quaisquer problemas, observando as ocorrências em que ocorreram e depois avaliando como certas condições de diversos fatores - como padrão de preço, volume, oferta / solicitação e margem - podem ter causado o problema.

Avaliações de Clientes.
Houve um problema na filtragem de avaliações agora. Por favor, tente novamente mais tarde.
Incedentemente, administrai o braço de análise técnica de um boletim informativo que tenta prever o fundo mútuo Fidelity Select com melhor desempenho. Este livro foi um recurso durante a implementação do meu sistema de negociação. Eu o escolheria antes de "The Mathematics of Technical Analysis", de Clifford Sherry, por exemplo.
O paradigma do sistema de negociação detalhado neste livro é baseado em análise técnica; o uso de ferramentas matemáticas para estimar o desempenho futuro de uma segurança. A análise técnica está, naturalmente, em desacordo com as versões rigorosas da teoria de mercado eficiente. Você acredita que o desempenho das ações é determinista, que as futuras mudanças nos preços podem ser inferidas das passadas? Se assim for, este é o livro a ser usado para implementar seu sistema de comércio computadorizado.

8 Regras para evitar o excesso de otimização.
Aqueles de nós que empregam sistemas de negociação baseados em regras mecânicas, bem como aqueles que "trocam" seus sistemas baseados em regras, estão à procura de uma qualidade muito importante - uma estratégia que também funciona, ou quase também, na negociação ao vivo como os resultados históricos dos testes de volta indicam.
# 1 Corte o número de "e" declarações.
Use apenas uma ou duas instruções "e" por regra de entrada ou saída. Por exemplo, se houver pré-condição 1 e Momentum & gt; limiar de sinal, em seguida, comprar.
# 2 Use um princípio de entrada única.
Podemos ter várias regras de entrada, mas todos eles usam o mesmo princípio de entrada. Por exemplo, a regra 1 pode ser se a pré-condição 1 existe e momentum & gt; limiar de sinal, em seguida, comprar. A regra # 2 pode ser se Bollinger Band® Difference & lt; 5 pontos e momentum & gt; limiar de sinal, em seguida, comprar. Ambas as regras utilizam precisamente o mesmo "impulso & gt; limiar de sinal ", mas cada um fornece diferentes circunstâncias pelas quais pode ser seguido.
# 3 Aplicar parâmetros de entrada robustos.
Qualquer parâmetro de entrada usado em uma estratégia de negociação é um parâmetro otimizado. Estamos à procura de uma ampla gama de parâmetros de entrada que são satisfatórios. Nós também procuramos uma queda gradual em cada lado do valor ótimo. As estratégias que exibem essa característica são referidas como "robustas".
Regras # 4 são portáteis entre mercados.
Portabilidade significa que os mesmos princípios podem ser aplicados com sucesso em pelo menos alguns mercados não relacionados. A portabilidade das regras de entrada / saída entre os mercados reforça que as regras no trabalho não são ajustáveis ​​em curva a um determinado conjunto de dados. A portabilidade absoluta e idêntica não é necessária, pois também é uma característica dos mercados que eles têm suas próprias personalidades.
Regras de saída # 5 seguem os mesmos requisitos de design como regras de entrada.
Todas as avaliações aplicáveis ​​às entradas são igualmente aplicáveis ​​às saídas. Os testes iniciais para qualquer entrada baseada em regras devem começar com saídas muito simples, como perda de dólar, e objetivos de lucro em dólares ou paradas de volatilidade e objetivos. Se qualquer abordagem específica não mostra promessa com saídas simples, então vá em frente. Torturar os dados com muitas saídas diferentes para obtê-lo para "trabalhar" provavelmente irá levar a uma otimização excessiva e, portanto, um desapontamento na negociação ao vivo.
# 6 Revise resultados de longo e curto comércio separadamente.
Sempre olhe para um "longo apenas" trades e "Short Only" negociações na avaliação de um sistema de comércio. É assim que se pode ver como o sistema funciona em diferentes tipos de tendências de mercado.
# 7 Não otimize entradas e saia separadamente.
Embora às vezes seja verdade que os mercados às vezes se comportam de forma diferente no caminho do que eles estão a caminho, e um poderia definitivamente otimizar para obter resultados históricos melhores nessa base, essa abordagem é mais próxima da sobre otimização. Uma vez que o objetivo é perto de desenvolvimento de pós de degradação da estratégia comercial, use sempre sinais de imagem espelhada para qualquer lado do mercado. Como aludido acima, seja cauteloso dos sistemas comerciais "longos" ou "curtos", onde a aparência do sucesso pode depender em grande parte de uma tendência secular de muito longo prazo, mais do que o próprio sistema.
# 8 Revise o comprimento do registro de pista várias maneiras.
Uma métrica muito negligenciada - talvez a métrica mais negligenciada na avaliação do sistema - é a frequência com que um sistema de negociação tem uma posição no mercado longo ou curto.
O excesso de otimização é a queda das estratégias de negociação baseadas em regras e não é fácil de evitar. Ao seguir os posts de guia acima, pode-se eliminar muitas decepções potenciais. Sem dúvida, estas postagens de guia tornam mais difícil desenvolver um teste histórico de aparência decente e é precisamente o que eles pretendem fazer. Se alguém pode seguir estas postagens de guia, qualquer sistema comercial terá uma chance muito maior de sobrevivência ao tomar a estratégia de negociação ao vivo.

Arquitetura do sistema de comércio algorítmico.
Anteriormente, neste blog, escrevi sobre a arquitetura conceitual de um sistema de negociação algorítmico inteligente, bem como os requisitos funcionais e não funcionais de um sistema de negociação algorítmica de produção. Desde então, criei uma arquitetura de sistema que, acredito, poderia satisfazer esses requisitos arquitetônicos. Nesta publicação, descreverei a arquitetura seguindo as diretrizes dos padrões ISO / IEC / IEEE 42018 e padrão de descrição da arquitetura de engenharia de software. De acordo com este padrão, uma descrição de arquitetura deve:
Contém várias visualizações arquitetônicas padronizadas (por exemplo, em UML) e Mantenha a rastreabilidade entre decisões de design e requisitos arquitetônicos.
Definição de arquitetura de software.
Ainda não há consenso quanto ao que é uma arquitetura do sistema. No contexto deste artigo, é definido como a infra-estrutura dentro da qual os componentes do aplicativo que satisfazem os requisitos funcionais podem ser especificados, implantados e executados. Os requisitos funcionais são as funções esperadas do sistema e seus componentes. Os requisitos não funcionais são medidas através das quais a qualidade do sistema pode ser medida.
Um sistema que satisfaça plenamente seus requisitos funcionais ainda pode não atender às expectativas se os requisitos não funcionais forem deixados insatisfeitos. Para ilustrar este conceito, considere o seguinte cenário: um sistema de negociação algorítmico que você acabou de comprar / construir faz excelentes decisões de negociação, mas é completamente inoperacional com os sistemas de gestão e contabilidade de risco das organizações. Esse sistema atenderia às suas expectativas?
Arquitetura conceitual.
Uma visão conceitual descreve conceitos e mecanismos de alto nível que existem no sistema no mais alto nível de granularidade. Nesse nível, o sistema de negociação algorítmica segue uma arquitetura orientada a eventos (EDA) dividida em quatro camadas e dois aspectos arquitetônicos. Para cada camada e referência de aspecto arquiteturas e padrões são usados. Padrões arquitetônicos são estruturas comprovadas e genéricas para alcançar requisitos específicos. Os aspectos arquitetônicos são preocupações transversais que abrangem múltiplos componentes.
Arquitetura orientada a eventos - uma arquitetura que produz, detecta, consome e reage a eventos. Os eventos incluem movimentos do mercado em tempo real, eventos ou tendências complexas e eventos comerciais, e. enviando um pedido.
Este diagrama ilustra a arquitetura conceitual do sistema de negociação algorítmica.
Arquiteturas de referência.
Para usar uma analogia, uma arquitetura de referência é semelhante aos planos para uma parede de suporte de carga. Esta impressão azul pode ser reutilizada para projetos de construção múltipla independentemente do edifício que está sendo construído, pois satisfaz um conjunto de requisitos comuns. Da mesma forma, uma arquitetura de referência define um modelo contendo estruturas genéricas e mecanismos que podem ser usados ​​para construir uma arquitetura de software concreta que satisfaça requisitos específicos. A arquitetura para o sistema de negociação algorítmica usa uma arquitetura baseada em espaço (SBA) e um controlador de exibição de modelo (MVC) como referências. São também utilizadas boas práticas, como o armazenamento de dados operacionais (ODS), o padrão de transformação e carregamento de extratos (ETL) e um data warehouse (DW).
Controle de exibição de modelo - um padrão que separa a representação de informações da interação do usuário com ela. Arquitetura baseada em espaço - especifica uma infra-estrutura onde as unidades de processamento acopladas vagamente interagem entre si através de uma memória associativa compartilhada chamada espaço (mostrado abaixo).
Visão estrutural.
A visão estrutural de uma arquitetura mostra os componentes e subcomponentes do sistema de negociação algorítmica. Ele também mostra como esses componentes são implantados em infra-estrutura física. Os diagramas UML utilizados nesta visão incluem diagramas de componentes e diagramas de implantação. Abaixo está a galeria dos diagramas de implantação do sistema de negociação algorítmico geral e as unidades de processamento na arquitetura de referência SBA, bem como diagramas de componentes relacionados para cada uma das camadas.
Diagrama de componentes de processamento de comerciantes / eventos automatizados Fonte de dados e diagrama de componente de camada de pré-processamento Diagrama de componente de interface de usuário baseado em MVC.
Táticas arquitetônicas.
De acordo com o instituto de engenharia de software, uma tática arquitetônica é um meio de satisfazer um requisito de qualidade, manipulando algum aspecto de um modelo de atributo de qualidade através de decisões de design arquitetônico. Um exemplo simples usado na arquitetura do sistema de negociação algorítmica é 'manipular' um armazenamento de dados operacional (ODS) com um componente de consulta contínua. Este componente analisaria continuamente o ODS para identificar e extrair eventos complexos. As seguintes táticas são usadas na arquitetura:
O padrão do disruptor nas filas de eventos e pedidos Memória compartilhada para as filas de eventos e pedidos Linguagem de consulta contínua (CQL) na filtragem de dados ODS com o padrão de design do filtro em dados recebidos Algoritmos de evitação de congestionamentos em todas as conexões de entrada e saída Gerenciamento de filas ativas (AQM ) e notificação de congestionamento explícito Recursos de computação de mercadorias com capacidade de atualização (escalável) Redundância ativa para todos os pontos de falha únicos Indicação e estruturas de persistência otimizadas no ODS Programe backup de dados regulares e scripts de limpeza para ODS Histórico de transações em todos os bancos de dados Súmrios para todos Ordens para detectar falhas Anotar eventos com timestamps para ignorar eventos "obsoletos". Regras de validação de pedidos, por exemplo, quantidades de comércio máximo Componentes de comerciante automatizado usam um banco de dados em memória para análise Autenticação em dois estágios para interfaces de usuário conectando-se à ATs Criptografia em interfaces de usuário e conexões ao padrão de design ATs Observer para que o MVC gerencie visualizações.
A lista acima é apenas algumas decisões de design que identifiquei durante o projeto da arquitetura. Não é uma lista completa de táticas. À medida que o sistema está sendo desenvolvido, táticas adicionais devem ser empregadas em múltiplos níveis de granularidade para atender aos requisitos funcionais e não funcionais. Abaixo estão três diagramas que descrevem o padrão de design do disruptor, o padrão de design do filtro e o componente de consulta contínua.
Visão comportamental.
Essa visão de uma arquitetura mostra como os componentes e camadas devem interagir um com o outro. Isso é útil ao criar cenários para testar projetos de arquitetura e para entender o sistema de ponta a ponta. Essa visão consiste em diagramas de seqüência e diagramas de atividades. Diagramas de atividades que mostram o processo interno do sistema de negociação algorítmica e como os comerciantes devem interagir com o sistema de negociação algorítmica são mostrados abaixo.
Tecnologias e estruturas.
O passo final na concepção de uma arquitetura de software é identificar potenciais tecnologias e estruturas que poderiam ser utilizadas para realizar a arquitetura. Como princípio geral, é melhor aproveitar as tecnologias existentes, desde que satisfaçam adequadamente os requisitos funcionais e não funcionais. Uma estrutura é uma arquitetura de referência realizada, e. JBoss é uma estrutura que realiza a arquitetura de referência JEE. As seguintes tecnologias e frameworks são interessantes e devem ser consideradas na implementação de um sistema de negociação algorítmico:
CUDA - NVidia tem uma série de produtos que suportam modelagem de finanças computacionais de alto desempenho. Pode-se conseguir até 50x melhorias no desempenho ao executar simulações Monte Carlo na GPU em vez da CPU. Rio Apache - Rio é um kit de ferramentas usado para desenvolver sistemas distribuídos. Ele foi usado como uma estrutura para a construção de aplicativos com base no padrão SBA Apache Hadoop - no caso de registro invasivo ser um requisito, então o uso do Hadoop oferece uma solução interessante para o problema dos grandes dados. O Hadoop pode ser implantado em um ambiente em cluster que suporta tecnologias CUDA. AlgoTrader - uma plataforma de negociação algorítmica de código aberto. O AlgoTrader poderia ser implantado no lugar dos componentes do comerciante automatizado. FIX Engine - um aplicativo autônomo que aceita os protocolos do Financial Information Exchange (FIX), incluindo FIX, FAST e FIXatdl.
Embora não seja uma tecnologia ou uma estrutura, os componentes devem ser criados com uma interface de programação de aplicativos (API) para melhorar a interoperabilidade do sistema e seus componentes.
Conclusão.
A arquitetura proposta foi projetada para satisfazer requisitos muito genéricos identificados para sistemas de negociação algorítmica. Geralmente, os sistemas de negociação algorítmica são complicados por três fatores que variam de acordo com cada implementação:
Dependências em sistemas empresariais e de intercâmbio externos Requisitos não funcionais desafiadores e restrições arquitetônicas em evolução.
Por conseguinte, a arquitetura de software proposta deve ser adaptada caso a caso para satisfazer requisitos organizacionais e regulatórios específicos, bem como para superar restrições regionais. A arquitetura do sistema de negociação algorítmica deve ser vista como apenas um ponto de referência para indivíduos e organizações que desejam projetar seus próprios sistemas de negociação algorítmica.
Para uma cópia completa e fontes usadas, baixe uma cópia do meu relatório. Obrigado.
História anterior.
Requisitos do sistema de negociação algorítmica.
Próxima História.
Otimização de portfólio usando otimização de enxertia de partículas.
Excelente visão geral, e um bom começo na arquitetura. Sua conclusão foi adequada, e apontou por que os sistemas de software de negociação algorítmica requerem back-testing e ajustes constantes para mantê-los relevantes. Boa leitura!
1 de fevereiro de 2018.
Quando os dados de commodities ou renda fixa são imprecisos ou lentos em receber, os modelos podem ter dificuldade em calcular especialmente no espaço de um evento Black Swann.
Muito obrigado por este artigo. Estive pensando em AI em finanças desde o final da década de 90 e, finalmente, as tecnologias e as APIs estão comumente disponíveis. Seu artigo e blog são uma ótima ajuda para fazer esses primeiros passos para tornar realidade os sonhos dos anos anteriores. Muito obrigado e boa sorte em seus novos empreendimentos!
Mantenha-me atualizado no seu progresso. Estou muito interessado. Obrigado.
Envie um comentário.
Cancelar resposta.
Siga a Turing Finance.
Turing Finance Mailing List.
Amigos da Turing Finance.
Quantocracy é o melhor agregador de blog de finanças quantitativas com links para novas análises postadas todos os dias.
NMRQL é o fundo hedge quantitativo de que sou parte. Usamos a aprendizagem de máquinas para tentar vencer o mercado.

Комментарии

Популярные сообщения из этого блога

Download de livros de scalping forex

Livros sobre indicadores técnicos. O que significam os indicadores técnicos? Quanto eles são úteis para você? Quais são os princípios básicos que você deve saber? Como usá-los? Como implementar o melhor método de cálculo? Indicadores de negociação de Bill Williams. De acordo com Bill Williams, para alcançar o sucesso no campo comercial, um comerciante deve conhecer a estrutura exata e completa do mercado. Isso pode ser alcançado através da análise do mercado em cinco dimensões e levando em consideração certos indicadores Forex. Osciladores de Forex. O que é Oscillator e por que precisamos disso? Este é um índice de análise técnica que é usado para prever o comportamento do mercado Forex. O valor do oscilador flutua no intervalo limitado, enquanto os limites mais baixos e mais altos dessa faixa correspondem aos estados de "overbought" e "oversold" do mercado. Os instrumentos de análise de gráficos podem ser aplicados aos osciladores. Indicadores de Tendências Forex. ...

Exemplo de estratégias de negociação de alta freqüência

Exemplo de estratégias de negociação de alta freqüência Obter através da App Store Leia esta publicação em nosso aplicativo! Onde posso encontrar alguns exemplos de algoritmos de negociação de alta frequência ou stat arborativos além de negociação básica de livros didáticos? tem vários algoritmos de nome. Eu entendo que a maioria dos algoritmos HFT são proprietários, mas estou procurando exemplos de estratégias HFT (mesmo as que não ganham mais dinheiro) apenas para entender o que é. Haim Bodek trabalhou para Goldman e UBS e depois teve sua própria empresa comercial. Ele começou a Consultar em estratégias HFT e foi mencionado em Dark Pools por Scott Patterson. Confira a introdução da estratégia '0+'. Como afirmou uma resposta anterior, ninguém dará uma estratégia vencedora. O Guia do Heretic para Finanças Globais: Hacking the Future of Money. Aventuras Anárquicas em Artes, Ativismo, Antropologia e Economia Alternativa. Quarta-feira, 17 de junho de 2015. Surrealismo algorítmico...

Ets revisão do sistema de negociação

O Sistema de Comércio de Emissões da UE (EU ETS) O Sistema de Comércio de Emissões da UE explicou. O sistema de comércio de emissões da UE (EU ETS) é uma pedra angular da política da UE para combater as alterações climáticas e a sua ferramenta chave para reduzir as emissões de gases com efeito de estufa de forma rentável. É o primeiro mercado de carbono do mundo e continua sendo o maior. opera em 31 países (todos os 28 países da UE, mais a Islândia, o Liechtenstein e a Noruega) limita as emissões de mais de 11 mil instalações de energia pesada (centrais eléctricas e instalações industriais) e as companhias aéreas que operam entre esses países cobre cerca de 45% dos gases de efeito estufa da UE emissões. Para uma visão geral detalhada, veja: Um sistema "cap and trade". O EU ETS trabalha no princípio do "capital e do comércio". Um limite é fixado na quantidade total de certos gases de efeito estufa que podem ser emitidos por instalações cobertas pelo sistema. A tampa ...