Type/to search
8
Follow
1363
Followers
Da negociação quantitativa à gestão de ativos - desenvolvimento de estratégia CTA para retornos absolutos
Original
Created 2019-06-26 10:27:41  Updated 2023-10-30 20:30:50
 5
 7717

img

Prefácio

Por que estudar este curso?
O que você ganhou estudando este curso? Primeiro de tudo, este curso é baseado em linguagens de programação JavaScript e Python. Linguagem é apenas uma tecnologia, e eventualmente ainda temos que aplicar essa tecnologia a uma indústria. A negociação quantitativa é um setor emergente que atualmente está em um estágio de rápido desenvolvimento e tem uma enorme demanda por talentos.

Por meio do estudo sistemático deste curso, você pode ter uma compreensão mais profunda do campo de negociação quantitativa. Se você é um aluno que está se preparando para entrar no campo de negociação quantitativa, também será útil para você. Se você é um investidor de ações ou entusiasta de investimentos futuros, então o Trading quantitativo pode auxiliar totalmente seu trading subjetivo. Ao desenvolver estratégias de trading, você pode lucrar no mercado financeiro e expandir seus canais e plataformas de investimento e gestão financeira.

Antes disso, deixe-me falar sobre minha experiência pessoal em trading. Não sou formado em finanças, mas em estatística. Ele começou a se envolver em trading subjetivo de ações quando era estudante. Mais tarde, por acaso, ele se tornou um praticante de trading quantitativo de um fundo de private equity doméstico, principalmente envolvido em pesquisa e desenvolvimento de estratégia.

Estou no mercado de trading há mais de dez anos e desenvolvi vários tipos de estratégias. Minha filosofia de investimento é: controle de risco acima de tudo, foco em retornos absolutos. O título do nosso curso é: Da negociação quantitativa à gestão de ativos – Desenvolvimento de estratégia CTA para retornos absolutos.

1. A lógica de ganhar dinheiro com estratégias de CTA de futuros

1.1 Compreendendo o CTA do Futures

Algumas pessoas podem perguntar o que é CTA? O que exatamente é CTA? CTA é chamado de consultor de negociação de commodities no exterior e geralmente é chamado de gestor de investimentos no país. O CTA tradicional reúne os fundos de um grande número de investidores, depois os confia a instituições de investimento profissionais e, finalmente, investe em futuros de índices de ações, futuros de commodities e futuros de títulos do tesouro por meio de consultores de negociação (ou seja, CTAs).

Mas, na verdade, à medida que o mercado global de futuros continua a crescer e se desenvolver, o conceito de CTA também está em constante expansão, e seu escopo excede em muito os futuros tradicionais. Ele não pode apenas investir no mercado futuro, mas também investir no mercado de taxas de juros, mercado de ações, mercado de câmbio, mercado de opções, etc. Desde que este produto tenha uma certa quantidade de dados históricos, a estratégia CTA correspondente pode ser desenvolvido com base nesses dados históricos.

Antes da década de 1980, a tecnologia de negociação eletrônica não era muito madura. Naquela época, a maioria dos traders julgava a tendência futura de futuros de commodities desenhando manualmente indicadores técnicos como indicadores Williams, KDJ, RSI, MACD, CCI, etc. Mais tarde, alguns traders criaram fundos CTA especiais para ajudar clientes a gerenciar ativos. Foi somente com a popularização da negociação eletrônica na década de 1980 que os fundos CTA, no verdadeiro sentido da palavra, começaram a aparecer.

Mudanças na Escala de Gestão de Fundos CTA
img
Unidade: Bilhões de dólares americanos

Se observarmos o gráfico acima, especialmente com o aumento da negociação quantitativa, o tamanho dos fundos globais de CTA aumentou de US\( 130,6 bilhões em 2005 para mais de US\) 300 bilhões em 2015. Além disso, a estratégia CTA também se tornou uma das estratégias de investimento mais populares dos fundos de hedge globais.

O desempenho dos fundos CTA também aumentou junto com sua escala. Vamos dar uma olhada no Barlake CTA Index na figura abaixo. O Barlake CTA Index é um benchmark representativo da indústria para consultores globais de negociação de commodities. Do final de 1979 até o final de 2016, o retorno acumulado do Barlake CTA Fund Index foi de até 28,95 vezes, com um retorno anualizado de 9,59%, um índice de Sharpe de 0,37 e um drawdown máximo de 15,66%.

Porque no portfólio de alocação de ativos, as estratégias de CTA geralmente mantêm correlação extremamente baixa com outras estratégias. Conforme mostrado no círculo vermelho na figura abaixo, durante o mercado de ações global de 2000 a 2002 e a crise global das hipotecas subprime em 2008, o Barlake CTA Fund Index não apenas não caiu, mas também obteve retornos positivos. Quando as crises ocorrem em nos mercados de ações e títulos, a CTA pode proporcionar lucros sólidos. Além disso, também podemos ver que o nível de lucro do Barclays Commodity CTA Index desde 1980 sempre foi maior que o do S&P 500, e seu drawdown também é muito menor que o do S&P 500.

img

O desenvolvimento do CTA no meu país ocorreu apenas na última década, mas o momento é muito forte. Isso se deve principalmente ao ambiente de negociação relativamente aberto de futuros de commodities nacionais, baixo limite de capital de negociação, sistema de margem que permite posições longas e curtas -way trading e baixas taxas de transação. , a arquitetura técnica da bolsa é mais avançada do que a de ações e é mais fácil negociar no sistema, etc.

Desde 2010, os fundos CTA existem principalmente na forma de fundos de private equity. À medida que as políticas domésticas gradualmente abrem o escopo de investimento das contas especiais de fundos, os fundos CTA começam a existir na forma de contas especiais de fundos. Seus métodos operacionais mais transparentes e abertos também se tornaram uma ferramenta necessária para alocação de ativos para mais investidores.

img

Conforme mostrado na figura acima, seja em termos de dificuldade de começar, limite de capital, método de execução da estratégia de negociação e encaixe da API, a estratégia CTA também é mais adequada para traders individuais do que outras estratégias de negociação. Os contratos futuros domésticos são muito pequenos. Por exemplo, um lote de milho ou farelo de soja pode ser negociado por alguns milhares de yuans, com quase nenhum limite de capital. Além disso, como algumas estratégias de CTA vêm da análise técnica tradicional, é relativamente fácil em comparação para outras estratégias. .

img

O processo de design da estratégia CTA também é relativamente simples. Primeiro, os dados históricos são processados ​​preliminarmente e, em seguida, inseridos no modelo quantitativo. O modelo quantitativo inclui estratégias de negociação formadas por modelagem matemática, design de programação e outras ferramentas, e gera sinais de negociação calculando e analisar esses dados. Claro, no desenvolvimento real, não é tão simples quanto mostrado na imagem acima. Isso é apenas para dar a todos um conceito geral.

1.2 Tipos de estratégia de CTA de futuros

Da perspectiva das estratégias de negociação, as estratégias CTA também são diversificadas: podem ser estratégias de tendência ou estratégias de arbitragem; podem ser estratégias de médio e longo prazo em grandes ciclos ou estratégias de curto prazo dentro de um dia; a lógica da estratégia pode ser baseada em análise técnica ou fundamentos. Análise de superfície; pode ser negociação subjetiva ou negociação sistemática.

Existem diferentes métodos de classificação para estratégias de CTA. De acordo com o método de negociação, ele pode ser dividido em: negociação subjetiva e negociação sistemática. O desenvolvimento de estratégias de CTA no exterior é relativamente avançado, e a estratégia de CTA de negociação sistemática atingiu quase 100%. De acordo com o método de análise, ele pode ser dividido em: análise fundamental e análise técnica. De acordo com a fonte de renda, ela pode ser dividida em: negociação de tendências e negociação de swing.

Em geral, em todo o mercado de negociação, as estratégias de tendência representam cerca de 70% das estratégias de CTA, as estratégias de reversão à média representam cerca de 25% e as estratégias de contra-tendência ou reversão de tendência representam cerca de 5%. Entre elas, a estratégia de tendência, que representa a maior proporção, pode ser dividida em: negociação de alta frequência, negociação intradiária, negociação de médio e curto prazo e negociação de médio e longo prazo, de acordo com o período de retenção.

Estratégia de criação de mercado de alta frequência
Atualmente, existem duas estratégias de negociação de alta frequência no mercado: uma é a estratégia de criação de mercado de alta frequência e a outra é a estratégia de arbitragem de alta frequência. A estratégia de market making é fornecer liquidez no mercado de negociação. Ou seja, em um mercado de negociação com market makers, se alguém quiser comprar ou vender, o market maker deve garantir que sua ordem possa ser executada. Se não houver liquidez suficiente no mercado e a ordem não puder ser executada, o formador de mercado deverá comprar e vender contrapartes de outras pessoas.

Estratégias de arbitragem de alta frequência
Arbitragem de alta frequência é a negociação de duas ações altamente correlacionadas ou ETFs e combinações de ETFs. Com base no método de cálculo do ETF, o mesmo método pode ser usado para calcular o preço esperado de um ETF. O preço do índice ETF pode ser subtraído do preço esperado do ETF para obter uma diferença de preço. Normalmente, essa diferença de preço operará dentro de um canal de preço. Se a diferença de preço romper os canais superior e inferior, você pode negociar essa diferença de preço e esperar para que a diferença de preço retorne para obter lucros com isso.

Estratégias intradiárias
Se seguirmos o significado literal, desde que as posições não sejam mantidas durante a noite, isso pode ser chamado de estratégia de day trading. Como o período de retenção da negociação intradiária é relativamente curto, geralmente após entrar no mercado, não é possível obter lucro imediatamente e sairá do mercado rapidamente. Portanto, esse método de negociação apresenta menor risco de mercado. No entanto, como o mercado muda rapidamente em um curto período de tempo, as estratégias intradiárias geralmente têm requisitos mais altos para os traders.

Estratégias de médio e longo prazo
Em teoria, quanto maior o período de retenção, maior a capacidade da estratégia e menor a relação risco-retorno. Especialmente em transações institucionais, como a capacidade de estratégias de curto prazo é limitada e grandes fundos não conseguem entrar e sair do mercado em um curto período de tempo, mais estratégias de médio e longo prazo serão alocadas. Normalmente, o período de espera é de vários dias, meses ou até mais.

Dados de estratégia de CTA
Em termos gerais, as estratégias de CTA usam dados de minuto, hora e diários como objetos de pesquisa, incluindo preço de abertura, preço mais alto, preço mais baixo, preço de fechamento, volume de negociação, etc. Apenas um pequeno número de estratégias de CTA usa dados de tick. Por exemplo, em- dados de profundidade, como preço de compra, preço de venda, volume de compra, volume de venda, etc. em dados L2.

img

Quando se trata das ideias básicas das estratégias de CTA, a primeira coisa que pensamos são os indicadores técnicos tradicionais, porque há mais materiais de referência públicos a esse respeito, a lógica geralmente é mais simples e a maioria deles é baseada em princípios estatísticos. Por exemplo, os vários indicadores técnicos com os quais todos estão familiarizados: MA, SMA, EMA, MACD, KDJ, RSI, BOLL, W&R, DMI, ATR, SAR, BIAS, OBV e assim por diante.

Existem também alguns modelos clássicos de negociação no mercado que podem ser usados ​​como referência e melhorados, incluindo: combinação de médias móveis múltiplas, DualThrust, R-Breaker, Método de Negociação Turtle, Método de Negociação em Grade, etc.

Todas as opções acima são estratégias de negociação baseadas em análise técnica tradicional. O processo é extrair fatores ou condições de compra e venda com vantagens probabilísticas com base em dados históricos e conceitos de negociação corretos, e assumir que o mercado ainda terá esse padrão no futuro. Por fim, use código. Implemente estratégias de negociação e automatize totalmente sua negociação. Abrir uma posição, obter lucro, interromper perdas, adicionar posições, reduzir posições, etc., geralmente não requer intervenção humana. Na verdade, é uma estratégia de comprar alto e vender baixo, aproveitando o coeficiente de autocorrelação positivo da série temporal de preços.

A maior vantagem da estratégia CTA é que ela pode obter retornos absolutos independentemente de o mercado atual estar subindo ou caindo, especialmente quando o mercado está mudando rapidamente entre mercados de alta e baixa, ou quando a tendência do mercado é obviamente suave. A vantagem de essa estratégia é muito grande. Em suma, há uma tendência. No lucro há. No entanto, se o mercado estiver em um estado volátil ou a tendência não for óbvia, essa estratégia pode resultar em comprar nas máximas e vender nas mínimas, movendo-se constantemente para frente e para trás para interromper as perdas.

1.3 Princípios de lucro das estratégias de CTA de futuros

O motivo pelo qual as estratégias de futuros CTA podem render dinheiro se deve principalmente aos seguintes motivos:

  1. Os movimentos de preços são reflexivos e sempre continuam na forma de uma tendência. Quando os investidores observam os preços subindo, eles compram, fazendo com que os preços subam ainda mais. O mesmo vale para a queda dos preços. Como os investidores se comportam de forma mais irracional, às vezes vemos que os preços sobem para um nível anormal quando sobem e caem para um nível anormal quando caem.
  2. Cada investidor tem uma tolerância assimétrica para a taxa de lucros e perdas e tem uma tolerância diferente ao risco. A maioria dos investidores de varejo prefere escolher um método de negociação mais conservador, seguindo tendências, e é mais provável que o mercado se mova em uma tendência.
  3. A formação de preços é determinada por transações, e as transações são conduzidas por pessoas. No entanto, a natureza humana é difícil de mudar, e é por isso que padrões fixos aparecem repetidamente. A estratégia é eficaz quando testada em dados históricos. Isso indica que pode ser eficaz no futuro.

Outra característica do trading de acompanhamento de tendências é que você perde uma pequena quantia de dinheiro quando não há mercado e ganha muito dinheiro quando o mercado chega. No entanto, todos que já fizeram trading sabem que o mercado está em um estado volátil na maioria das vezes. do tempo, e somente em um pequeno período de tempo é uma tendência. Citações. Portanto, a estratégia de seguir tendências tem uma taxa de ganho menor ao negociar, mas, no geral, o lucro e a perda de cada transação são relativamente grandes.

Como as estratégias de acompanhamento de tendências têm retornos instáveis, muitas instituições de investimento criarão um portfólio de investimentos usando diversas variedades e estratégias, que também incluirão uma certa quantidade de estratégias de reversão. A estratégia de reversão é que a série temporal de preços tem um coeficiente de autocorrelação negativo, o que significa vender alto e comprar baixo.

Correlação entre CTAs e ativos tradicionais
img

Se observarmos o gráfico acima, em teoria, quando confrontados com várias mudanças nos preços de mercado ao mesmo tempo, múltiplas estratégias com estilos diferentes ou baixas correlações produzirão sinais de negociação que às vezes são iguais e às vezes diferentes. À medida que várias curvas de rendimento se sobrepõem, os retornos gerais se complementam, e a curva de rendimento se torna mais plana, reduzindo assim a volatilidade dos retornos.

Dos pontos de vista acima, pode-se concluir que, em vez de desenvolver uma estratégia de nível mestre, é melhor desenvolver múltiplas subestratégias medíocres. Então, como controlar essas estratégias? Aqui podemos nos referir ao algoritmo de floresta aleatória em machine learning. Floresta aleatória não é um algoritmo independente, é uma estrutura de tomada de decisão que inclui múltiplas árvores de decisão. É equivalente à estratégia pai acima da subestratégia da árvore de decisão. Organize e controle grupos de políticas filhas por meio de políticas pais.

Em seguida, precisamos elaborar uma estratégia mestre. Podemos avaliar a liquidez, a lucratividade e a estabilidade de várias commodities em todo o mercado futuro de commodities, filtrar portfólios futuros de commodities com baixa volatilidade e, então, conduzir a neutralidade da indústria. Por meio da seleção diversificada de indústria, a volatilidade geral pode ser ainda mais reduzida. Finalmente, o portfólio multi-variedade de futuros de commodities real é construído por meio de correspondência de valor de mercado para negociação.

Cada produto também pode ser configurado com estratégias de parâmetros múltiplos. Você pode escolher uma combinação de parâmetros que tenha um bom desempenho de backtest. Quando a tendência do mercado é óbvia, estratégias de parâmetros múltiplos geralmente têm desempenho consistente, o que é equivalente a adicionar posições. Quando o mercado está em um mercado volátil, estratégias de múltiplos parâmetros podem ser usadas para aumentar o desempenho. As estratégias geralmente se comportam de forma inconsistente, então cada uma vai longa ou curta para proteger riscos, o que é equivalente a reduzir posições. Isso pode reduzir ainda mais a taxa máxima de retorno do portfólio, mantendo a taxa geral de retorno inalterada.

2. Caso de estratégia CTA Classic Futures

Newton disse uma vez: Se consigo enxergar mais longe que os outros, é porque estou sobre ombros de gigantes.

As estratégias de CTA disponíveis publicamente no mercado incluem estratégia de média móvel, estratégia de Bandas de Bollinger, Método de Negociação de Tartaruga, estratégia de momentum, estratégia de arbitragem, etc. Todas as estratégias de negociação quantitativa têm uma característica, que é que elas morrerão na luz. Uma vez que a estratégia se torne pública, ela gradualmente se tornará ineficaz. Mas isso não afeta nosso aprendizado dessas estratégias nem nossa exploração de sua essência, para que possamos encarar os problemas da perspectiva de quem está sobre os ombros de gigantes.

2.1 Análise de fundamentos futuros (estoque, base, preço)

A análise fundamental não precisa se preocupar com tendências de preço de curto prazo. Ela acredita que o valor eventualmente será refletido no preço. É mais sobre analisar os fatores por trás do preço e julgar quanto essa variedade vale. Geralmente, é adotado um método de análise de cima para baixo: de fatores macro, fatores de variedade e outros fatores.

img

Se olharmos para a imagem acima, há muitos fatores que afetam os preços das commodities, até dezenas de itens no total. Se decompusermos ainda mais, há dezenas a mais, e esses dados estão mudando constantemente. Está além da capacidade de investidores individuais de varejo obter quantidades tão grandes de dados, muito menos conduzir análises objetivas.

Na verdade, a análise fundamental de futuros de commodities não significa analisar todos os fatores. Precisamos apenas entender os elementos centrais da análise fundamental para encontrar padrões a partir das informações complexas.

Fatores macro
Dados macroeconômicos são complexos e mutáveis. Todos os dias e a todo momento, muitos dados econômicos são divulgados por políticos, bancos centrais e bancos de investimento em vários países, tanto oficiais quanto não oficiais. Além de crises políticas e econômicas, a análise macro é um bom material para conversa, mas não muito prático. Peter Lynch, um famoso especialista americano em gestão de fundos, certa vez expressou sua opinião: "Não gasto mais do que quinze minutos por ano analisando tendências econômicas".

Fatores de Variedade
Na análise fundamental, a análise de produtos analisa principalmente prêmios e descontos, relações de oferta e demanda, estoques de commodities, lucros da indústria, etc. Pode-se dizer que dominar a análise de fatores de produtos futuros de commodities pode basicamente determinar a maioria das tendências de mercado.

Amigos que já negociaram futuros sabem que os futuros de commodities nacionais podem ser simplesmente divididos em: produtos industriais e produtos agrícolas. Os métodos de análise para produtos industriais e agrícolas são diferentes. Explicaremos a partir dos dois aspectos de oferta e demanda. Para produtos industriais, a oferta é relativamente estável. A menos que haja um grande avanço tecnológico, é improvável que a capacidade de produção aumento no curto prazo. Há grandes mudanças ao longo do tempo, então o fator que afeta os preços dos produtos industriais é principalmente a demanda. A demanda por produtos agrícolas é relativamente estável. No longo prazo, há mudanças na demanda por produtos agrícolas, mas no curto prazo, a demanda por produtos agrícolas tende a ser estável. Portanto, o fator que afeta o preço dos produtos agrícolas é principalmente fornecimento.

Portanto, de acordo com as leis da economia, é a relação de oferta e demanda que, em última análise, determina o preço de uma commodity. Em teoria, desde que possamos obter os dados de oferta e demanda, podemos julgar o preço futuro da commodity. Para produtos industriais, dados de oferta são relativamente fáceis de obter, mas dados de demanda são difíceis de obter. Para produtos agrícolas, dados de demanda são relativamente fáceis de obter, mas dados de oferta são difíceis de obter.

Na verdade, podemos ir além e fazer subtração. O resultado mútuo de oferta e demanda no mercado econômico é o estoque. Podemos usar dados de estoque para julgar a força do relacionamento entre oferta e demanda do mercado. Se o estoque de uma determinada mercadoria for muito alto, isso significa que o poder de oferta do mercado é maior que a demanda, e o preço da mercadoria cairá se as condições externas permanecerem inalteradas. Se o estoque de uma determinada mercadoria estiver muito baixo, isso significa que a força da demanda do mercado é maior que a oferta, e o preço da mercadoria logo aumentará se as condições externas permanecerem inalteradas.

Além de analisar os estoques de commodities, é preciso analisar também a diferença de preços entre o mercado à vista e o mercado futuro, que é o chamado basis. Se o preço futuro for maior que o preço à vista, chamamos isso de prêmio; se o preço futuro for menor que o preço à vista, chamamos isso de desconto. De acordo com o sistema de entrega de futuros, na data de entrega de futuros, o preço futuro deve ser igual ao preço à vista.

img

Independentemente de ser um prêmio ou um desconto, devido às restrições do sistema de entrega de futuros, em teoria o preço futuro na data de entrega deve ser igual ao preço à vista. À medida que a data de entrega se aproxima, o preço à vista e o preço futuro tendem a ser consistentes: um é o retorno do futuro ao preço à vista, o outro é o retorno do preço à vista ao preço futuro.

Com base nos princípios acima, podemos usar o estoque e a base para determinar simultaneamente os preços futuros. Se o estoque de uma mercadoria estiver baixo e se o preço futuro for muito menor que o preço à vista, podemos concluir que a demanda no mercado à vista é maior que a oferta, e a probabilidade de aumentos futuros no preço à vista é alta. À medida que a data de entrega se aproxima, os preços futuros aumentarão para corresponder ao preço à vista, e a probabilidade de os preços futuros aumentarem no futuro é maior.

Por fim, determinamos a direção mais provável dos preços futuros por meio do estoque e da base, mas não há pontos de compra e venda mais precisos, então a análise técnica é necessária para fornecer sinais claros de entrada e saída. Toda a estrutura da análise fundamental é: estoque baixo + grande desconto + sinal de alta da análise técnica = comprado; estoque alto + grande prêmio + sinal de baixa da análise técnica = vendido.

2.2 Regras de negociação de tartarugas

Quando se trata de estratégias de negociação, temos que falar sobre as representativas Regras de Negociação da Tartaruga. As Regras de Negociação da Tartaruga vêm de um dos experimentos mais famosos da história da negociação, quando o especulador de commodities Richard Dennis queria descobrir se grandes traders nascem ou são feitos. Para isso, em 1983, ele recrutou 13 pessoas e lhes ensinou os conceitos básicos de negociação de futuros, bem como seus próprios métodos e princípios de negociação. Esses alunos são chamados de "tartarugas marinhas".

Nos quatro anos seguintes, os Turtles alcançaram um retorno composto anual médio de 80%. Dennis também demonstrou que, usando um sistema e regras simples, pessoas com pouca ou nenhuma experiência em negociação podem se tornar excelentes traders. No entanto, algumas Tartarugas vendem as Regras de Negociação de Tartarugas no site para obter lucro. Para impedir esse comportamento, dois Turtles originais, Curtis Faith e Arthur Maddock, decidiram disponibilizar as Regras de Negociação das Turtles ao público gratuitamente em um site.

Depois que a verdade veio à tona, as pessoas descobriram que as Regras de Negociação da Tartaruga adotaram um Canal Donchian otimizado e usaram o indicador ATR para gerenciamento de posições. Após décadas de testes históricos, tornou-se um método de negociação que investidores de varejo comuns podem usar para ganhar dinheiro facilmente, e ainda é eficaz para certos produtos.

Princípios Básicos da Turtle

  • Obtenha vantagem: encontre uma estratégia de negociação que tenha um valor esperado positivo porque ela gerará retornos positivos no longo prazo.
  • Gerencie riscos: controle os riscos e mantenha sua posição, caso contrário, você pode não viver para ver o dia em que criará resultados.
  • Compromisso inabalável: somente implementando sua estratégia de forma inabalável você poderá realmente alcançar resultados sistemáticos.
  • Simplicidade e clareza: a longo prazo, sistemas simples são mais resilientes que os complexos.

Então, vamos dar uma olhada no que as Regras de Negociação de Tartarugas realmente dizem?

  1. Mercados - o que comprar e vender, essencialmente, em quais mercados negociar. As Tartarugas eram negociantes de futuros e só escolhiam mercados com grandes volumes de negociação e alta liquidez, porque escolher mercados com baixos volumes de negociação aumentaria o risco de perder dinheiro. O deslizamento extra ao sair do mercado também fará com que você perca muitas oportunidades de tendência.
  2. Tamanho da posição - Quanto comprar ou vender é uma parte muito importante de toda a estratégia, mas a maioria das pessoas geralmente ignora ou trata isso incorretamente. As Regras de Negociação da Tartaruga usam o ATR, ou indicador Average True Range, para calcular posições de abertura, adicionar sinais e sinais de stop-loss. Este é um design muito inteligente, que tem como objetivo ajustar o tamanho da posição de acordo com a volatilidade absoluta do mercado. Quando a volatilidade do mercado é forte, o tamanho da posição é reduzido, e quando a volatilidade do mercado é fraca, o tamanho da posição é aumentado . Primeiro define uma unidade, a fórmula desta unidade é: (ativos totais*1%)/ATR. A posição inicial é 1 unidade. Mesmo que o declínio do produto naquele dia atinja o nível ATR, a perda naquele dia pode ser controlada dentro de 1% do total de ativos. Se o preço subir 0,5 unidade, a posição longa será aumentada em 1 unidade, até um máximo de 4 unidades.
  3. Entrando no mercado - A entrada da Tartaruga no mercado se baseia no Canal Donchian. Quando o preço sobe acima do preço mais alto das 20 ou 55 linhas K anteriores, ela entra no mercado para fazer longs. Quando o preço cai abaixo do menor preço das 20 ou 55 linhas K anteriores, ele entra no mercado para fazer posições longas. , basta entrar no mercado e vender. Entre na operação quando o sinal aparecer, sem esperar pelo fechamento ou pela próxima linha K.
  4. Stop loss - No longo prazo, transações sem stop loss não serão bem-sucedidas, mas a maioria dos traders mantém posições perdedoras na esperança de que o mercado se recupere. As Turtles tinham regras rígidas sobre quando sair de uma posição perdedora. Se uma posição longa fosse mantida e o preço caísse em 2 unidades, a posição longa seria fechada com um stop loss. Se você mantiver uma posição vendida e o preço subir em 2 unidades, a posição vendida será fechada com um stop loss.
  5. Take profit - O take profit da Turtle significa perder muitos lucros flutuantes, o que também é a parte que muitos traders acham difícil de aceitar. Se você estiver mantendo uma posição longa e o preço cair abaixo da faixa inferior do Canal Donchian de 10 dias, feche todas as posições longas; se você estiver mantendo uma posição curta e o preço subir acima da faixa superior do Canal Donchian de 10 dias, feche todas as posições longas. Canal Donchian, feche todas as posições curtas.

A partir disso, podemos ver que, embora as Regras de Negociação da Tartaruga pareçam simples, na verdade, elas formaram o protótipo de um sistema de negociação real. Elas cobrem todos os aspectos de um sistema de negociação completo e não deixam espaço para os traders. Há espaço para imaginação subjetiva e tomada de decisão, que permite extrair as vantagens da operação programada do sistema. Incluindo: regras de entrada e saída, gestão de fundos e controle de riscos, etc.

A maior vantagem do Turtle Trading Method é que ele nos ajuda a estabelecer um método de negociação eficaz. É uma estratégia que combina abertura de lote, stop-profit e stop-loss dinâmicos e acompanhamento de tendências de mercado, especialmente o uso do valor e posição do ATR gestão. Vale a pena aprender o conceito. Claro, também há um problema comum com estratégias de acompanhamento de tendências, que é a obtenção de lucros não realizados. Os lucros flutuantes obtidos com a busca pela alta provavelmente serão perdidos devido à queda acentuada subsequente. Ele é muito forte em grandes tendências, mas tem um desempenho ruim em um mercado volátil.

3. Desenvolvimento prático de estratégias futuras de CTA

3.1 Desenvolvimento de estratégia de tendência de CTA com base na linguagem Mai

No final do século passado, um método de negociação mágica começou a se tornar popular no campo de investimento financeiro nos Estados Unidos. Depois que milhares de pessoas o praticaram, as pessoas descobriram que esse método era eficaz e tinha grande valor prático. Ao mesmo tempo , foi reconhecido por muitos especialistas em investimentos. É reconhecido por traders profissionais e ainda pode ser perfeitamente aplicado a quase todos os campos de investimento financeiro, seja câmbio, ouro, ações, futuros, petróleo bruto ou índices e títulos. Isto é o método da operação do caos.

A palavra caos se refere originalmente à descrição do estado caótico do universo. A ideia é que o resultado é inevitável, mas não pode ser calculado devido ao conhecimento existente, porque o próprio cálculo também está mudando o resultado, e o máximo ou mínimo o resultado pode aparecer no final, mas não há inevitabilidade. resultado. Isso é muito semelhante à negociação de mercado, onde os participantes alteram o mercado à medida que o analisam e compram e vendem operações. O mercado é eternamente variável. Quando os participantes aprendem sobre uma nova forma de mercado, o mercado também aprende que ela é reconhecida pelos participantes, e então ocorre a mutação. E definitivamente tenderá a sofrer mutação em uma direção desconhecida para os participantes. Ele tem sabedoria suficiente para impedir que os participantes capturem seus padrões de mudança. Em outras palavras, o mercado não é estável, e a compreensão do passado do mercado não pode representar o futuro.

O método operacional de caos é um conjunto completo de ideias de investimento, estratégias de negociação e sinais de entrada e saída inventados por Bill Williams. Atualmente, muitos investidores internacionais usam métodos de operação de caos para participar de transações de mercado. Devido ao desenvolvimento lento do mercado financeiro do meu país e ao fato de que a teoria do caos é uma ideia relativamente nova, há poucas pessoas na China que estudam métodos de operação de caos. Como o método de operação do caos é uma estratégia de negociação altamente universal que pode ser aplicada a quase todos os campos de investimento financeiro, incluindo ações, títulos, futuros, câmbio e moedas digitais, este curso usa uma versão simplificada da estratégia do caos como ponto de partida. . Melhore o interesse e o retorno dos investimentos de todos.

Como o nome sugere, a base teórica do método de operação do caos é a teoria do caos, que foi proposta pelo meteorologista Edward Lorenz e é uma das maiores descobertas científicas do final do século XX. Foi ele quem propôs o famoso "efeito borboleta". Bill Williams aplicou criativamente a teoria do caos ao campo de investimento financeiro e a combinou com geometria fractal, dinâmica não linear e outras disciplinas para criar uma série de indicadores de análise técnica muito eficazes.

Todo o método de operação do caos é composto por cinco dimensões (indicadores técnicos):

  • Jacaré

  • O Fractal

  • O Momento

  • Aceleração

  • A Linha de Equilíbrio

    img

Vamos olhar para a imagem acima. A Linha Alligator é um conjunto de linhas de equilíbrio que usam geometria fractal e dinâmica não linear. Sua essência é a média móvel ponderada exponencialmente estendida, que é um tipo de média móvel, mas o método de cálculo é um pouco mais complicado do que a média móvel comum. Alguns. A seguir, vamos ver como definir a linha Alligator na língua Mai:

// 参数 N1:=11; N2:=21; // 定义价格中线 N3:=N1+N2; N4:=N2+N3; HL:=(H+L)/2; // 鳄鱼线 Y^^SMA(REF(HL,N3),N4,1); R:=SMA(REF(HL,N2),N3,1); G:=SMA(REF(HL,N1),N2,1);

Primeiro, definimos dois parâmetros externos N1 e N2, e então calculamos o HL médio do preço mais alto e do preço mais baixo com base nos parâmetros externos. Então, calculamos o HL médio com parâmetros diferentes respectivamente. Para beijo de lábios, é o pequeno ciclo da linha média. Para fazer a média novamente, os dentes são a média do período médio da linha média, e a mandíbula é a média do período grande da linha média. Nessa estratégia, usamos as mandíbulas.

O conceito de fractal é muito vividamente definido no Método de Operação do Caos. Podemos usar uma analogia: abra a palma da mão com os dedos voltados para cima. O dedo médio é o fractal superior, o dedo mínimo e o anelar à esquerda, e o indicador dedo e polegar à direita representam a área não lesionada. Linha K de nova alta. Um fractal básico é composto por essas 5 linhas K. Então você pode definir um fractal com o seguinte código:

// 分形 TOP_N:=BARSLAST(REF(H,2)=HHV(H,5))+2; BOTTOM_N:=BARSLAST(REF(L,2)=LLV(L,5))+2; TOP:=REF(H,TOP_N); BOTTOM:=REF(L,BOTTOM_N); MAX_YRG^^MAX(MAX(Y,R),G); MIN_YRG^^MIN(MIN(Y,R),G); TOP_FRACTAL^^VALUEWHEN(H>=MAX_YRG,TOP); BOTTOM_FRACTAL^^VALUEWHEN(L<=MIN_YRG,BOTTOM);

Depois de calcular a linha e o fractal do Alligator, podemos escrever uma estratégia simples de operação de caos com base nessas duas condições, usando um conjunto de médias móveis ponderadas exponencialmente como preço de referência para calcular os indicadores da linha e do fractal do Alligator. É claro que a estratégia original da operação de caos é mais complicada. O código é o seguinte:

// 如果当前无多单,并且收盘价升破上分形,并且上分形在鳄鱼线上方时,多头开仓 BKVOL=0 AND C>=TOP_FRACTAL AND TOP_FRACTAL>MAX_YRG,BPK(1); // 如果当前无空单,并且收盘价跌破下分形,并且下分形在鳄鱼线下方时,空头开仓 SKVOL=0 AND C<=BOTTOM_FRACTAL AND BOTTOM_FRACTAL<MIN_YRG,SPK(1); // 如果收盘价跌破鳄鱼的下巴时,多头平仓 C<Y,SP(BKVOL); // 如果收盘价升破鳄鱼的下巴时,空头平仓 C>Y,BP(SKVOL);

Para facilitar o entendimento, incluí comentários detalhados no código. Podemos simplesmente listar a lógica de negociação desta estratégia da seguinte forma:

  • Abra uma posição longa: Se não houver nenhuma ordem longa no momento e o preço de fechamento romper o fractal superior, e o fractal superior estiver acima da linha Alligator.
  • Abra uma posição vendida: se não houver nenhuma ordem vendida no momento e o preço de fechamento cair abaixo do fractal inferior, e o fractal inferior estiver abaixo da linha do Alligator.
  • Sair da posição comprada: Se o preço de fechamento cair abaixo da mandíbula do Jacaré.
  • Sair da posição vendida: Se o preço de fechamento ultrapassar a mandíbula do jacaré.

A seguir, vamos dar uma olhada nos resultados do backtest dessa estratégia simples de operação de caos. Para tornar o backtest mais próximo do ambiente em tempo real, a taxa de transação é definida como o dobro da taxa de câmbio, e o deslizamento de 2 saltos é adicionado para abertura e fechamento de posições. O tipo de dados para backtesting é índice de vergalhão, o tipo de negociação é vergalhão principal contínuo e a posição de abertura é fixa em 1 lote. Abaixo está um relatório preliminar de desempenho do backtest no nível de 1 hora.

img
img
img

A julgar pela curva de capital e pelos dados de desempenho do backtest, a estratégia tem um bom desempenho e a curva geral de capital está constantemente ascendente. No entanto, as características do mercado de vergalhões mudaram desde o final de 2016, da tendência unilateral anterior de alta volatilidade para uma ampla gama de flutuações. A julgar pela curva de capital, os lucros têm sido obviamente fracos desde 2017.

Em suma, a essência do método de operação do caos é encontrar o ponto de virada. Você não precisa se preocupar com o andamento do mercado, ou se é um rompimento verdadeiro ou falso. Se você romper o fractal, poderá entrar o mercado diretamente. Nunca tente prever o mercado, mas seja um observador e seguidor.

3.2 Desenvolvimento de estratégia de arbitragem CTA baseada na linguagem JavaScript

Em seu livro "A Alquimia das Finanças", escrito em 1987, Soros apresentou uma proposição importante: Acredito que os preços de mercado estão sempre errados no sentido de que são tendenciosos em relação ao futuro. Ele acredita que a hipótese de eficiência de mercado é apenas uma suposição teórica. Na verdade, os participantes do mercado nem sempre são racionais e, em todos os momentos, é impossível para os participantes obterem e interpretarem objetivamente todas as informações. Além disso, mesmo que o mesmo Informação, o feedback de cada um é diferente. Em outras palavras, o preço em si já inclui as expectativas errôneas dos participantes do mercado, então os preços de mercado estão sempre errados em essência. Esta pode ser uma fonte de lucro para os arbitradores.

Com base nos princípios acima, sabemos que em um mercado futuro ineficiente, os impactos de mercado nos contratos de entrega em diferentes períodos nem sempre são sincronizados, e sua precificação não é completamente eficaz. Então, com base nos preços dos contratos de entrega do mesmo objeto de negociação em períodos diferentes, se houver uma grande diferença de preço entre os dois preços, você pode comprar e vender contratos futuros de períodos diferentes ao mesmo tempo para conduzir a arbitragem entre períodos.

Assim como os futuros de commodities, as moedas digitais também têm uma combinação de contratos de arbitragem entre períodos associados a elas. Por exemplo, na bolsa OkEX, existem: ETC Semanal, ETC Quinzenal e ETC Trimestral. Por exemplo, suponha que a diferença de preço entre o ETC semanal e o ETC trimestral permaneça em torno de 5 por um longo período. Se o spread atingir 7 em um determinado dia, esperamos que ele retorne a 5 em algum momento no futuro. Então você pode vender ETC semanalmente e comprar ETC trimestralmente para reduzir o spread. vice-versa.

Embora essa diferença de preço exista, a arbitragem manual geralmente envolve muitas incertezas devido à operação manual demorada, à baixa precisão e ao impacto das mudanças de preço. O charme da arbitragem quantitativa está em capturar oportunidades de arbitragem por meio de modelos quantitativos e formular estratégias de negociação de arbitragem, bem como colocar ordens de negociação automaticamente nas bolsas por meio de algoritmos programados, de modo a capturar oportunidades de forma rápida e precisa e obter lucros de forma eficiente e estável.

Este curso lhe ensinará como usar a plataforma de negociação quantitativa Inventor e o contrato futuro ETC na bolsa OkEX na negociação de moeda digital e usar uma estratégia de arbitragem simples para demonstrar como capturar oportunidades de arbitragem instantânea e aproveitar todas as oportunidades para ver Obtenha lucros enquanto protegendo possíveis riscos.

Criando uma estratégia de arbitragem de criptomoeda entre períodos
Dificuldade: Normal
Ambiente estratégico

  • Assunto da transação: Ethereum Classic (ETC)
  • Dados de diferença de preço: ETC semanal - ETC trimestral (teste de cointegração omitido)
  • Ciclo de negociação: 5 minutos
  • Correspondência de posição: 1:1
  • Tipo de transação: mesmo produto entre períodos

Estratégia Lógica

  • Condições de abertura de spread longo: se a conta corrente não tiver posições e o spread for menor que o boll track inferior, opere longo no spread. Ou seja: comprar ETC para a semana e vender ETC para o trimestre.
  • Condições para abrir uma posição de spread curto: Se a conta corrente não tiver posições e o spread for maior que o limite superior do bolívar, venda o spread curto. Ou seja: vender ETC na semana e comprar ETC no trimestre.
  • Condições para fechar um spread longo: Se a conta corrente tiver uma posição longa semanal em ETC e uma posição curta trimestral em ETC, e o spread for maior que o middle track do boll, o spread longo será fechado. Ou seja: vender ETC na semana e comprar ETC no trimestre.
  • Condições para fechar um spread curto: Se a conta corrente mantiver uma posição curta para ETC nesta semana e uma posição longa para ETC no trimestre, e o spread for menor que o caminho médio do boll, o spread curto será fechado. Ou seja: comprar ETC para a semana e vender ETC para o trimestre.

O acima é uma descrição simples da lógica da estratégia de arbitragem entre períodos de moeda digital. Então, como você implementa suas ideias no programa? Tentamos construir a estrutura primeiro na Plataforma de Negociação Quantitativa do Inventor.

function Data() {} // 基础数据函数 Data.prototype.mp = function () {} // 持仓函数 Data.prototype.boll = function () {} // 指标函数 Data.prototype.trade = function () {} // 下单函数 Data.prototype.cancelOrders = function () {} // 撤单函数 Data.prototype.isEven = function () {} // 处理单只合约函数 Data.prototype.drawingChart = function () {} // 画图函数 function onTick() { var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象 var accountStocks = data.accountData.Stocks; // 账户余额 var boll = data.boll(dataLength, timeCycle); // 计算boll技术指标 data.trade(); // 计算交易条件下单 data.cancelOrders(); // 撤单 data.drawingChart(boll); // 画图 data.isEven(); // 处理持有单个合约 } //入口函数 function main() { while (true) { // 进入轮询模式 onTick(); // 执行onTick函数 Sleep(500); // 休眠0.5秒 } }

Imagine como é o nosso processo de transação na negociação de supervisores? Não há nenhuma diferença essencial na negociação de sistemas, ela nada mais é do que: obter dados, calcular dados, colocar ordens e processar após colocar ordens. O mesmo é verdade no programa. Primeiro, o programa executará a função principal na linha 20. Esta é uma convenção. Quando o programa conclui o pré-processamento da estratégia de negociação (se houver), ele entrará em um modo de loop infinito, ou seja, um modo de Polling redondo. No modo de polling, a função onTick será executada repetidamente.

Então, na função onTick, temos o processo de negociação em negociação subjetiva: primeiro, obtenha os dados básicos do preço, depois obtenha o saldo da conta, depois calcule o indicador, depois comece a calcular as condições de negociação e faça um pedido e, finalmente, o processamento após a colocação o pedido, incluindo: Cancelar pedidos, desenhar imagens e processar contratos individuais.

Ao comparar as ideias estratégicas e os processos de negociação, você pode facilmente construir uma estrutura estratégica. Toda a estratégia pode ser simplificada em três etapas:

  • Processamento pré-transação.
  • Obter e calcular dados.
  • Faça um pedido e cuide do acompanhamento.

Após a estrutura da estratégia de negociação ser criada, você precisa preencher o código de detalhes necessário na estrutura da estratégia com base no processo de negociação real e nos detalhes da transação.

1. Processamento pré-transação

1. Declare as variáveis ​​globais necessárias

  • Declare um objeto de gráfico para configurar o gráfico
    var chart = {}
  • Chame a função Chart para inicializar o gráfico
    var ObjChart = Chart ( chart )
  • Declare uma matriz vazia para armazenar a sequência de diferença de preço
    var bars = []
  • Declarar uma variável para registrar o registro de data e hora dos dados históricos
    var oldTime = 0

2. Configurar parâmetros externos da estratégia

var tradeTypeA = "this_week"; // 套利A合约 var tradeTypeB = "quarter"; // 套利B合约 var dataLength = 10; //指标周期长度 var timeCycle = 1; // K线周期 var name = "ETC"; // 币种 var unit = 1; // 下单量

3. Defina funções de processamento de dados

  • Função de dados básica: Dados ( )
    Crie um construtor Data e defina suas propriedades internas. Inclui: dados de conta, dados de posição, registro de data e hora de dados da linha K, preço de compra/venda de contrato A/B de arbitragem e spreads de arbitragem futura/reversa.
function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约 this.accountData = _C(exchange.GetAccount); // 获取账户信息 this.positionData = _C(exchange.GetPosition); // 获取持仓信息 var recordsData = _C(exchange.GetRecords); //获取K线数据 exchange.SetContractType(tradeTypeA); // 订阅套利A合约 var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据 exchange.SetContractType(tradeTypeB); // 订阅套利B合约 var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据 this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间 this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价 this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价 this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价 this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价 // 正套价差(合约A卖一价 - 合约B买一价) this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price; // 反套价差(合约A买一价 - 合约B卖一价) this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price; }
  • Obter função de posição: mp ( )
    Percorrer todo o array de posições e retornar o número de posições do contrato e direção especificados. Se não houver nenhuma, retornar falso
Data.prototype.mp = function (tradeType, type) { var positionData = this.positionData; // 获取持仓信息 for (var i = 0; i < positionData.length; i++) { if (positionData[i].ContractType == tradeType) { if (positionData[i].Type == type) { if (positionData[i].Amount > 0) { return positionData[i].Amount; } } } } return false; }
  • Funções de linha K e indicadoras: boll ( )
    Sintetize uma nova sequência de K-line com base nos dados de dispersão de arbitragem direta/reversa. E retorna os dados do trilho superior, do trilho do meio e do trilho inferior calculados pelo indicador boll.
Data.prototype.boll = function (num, timeCycle) { var self = {}; // 临时对象 // 正套价差和反套价差中间值 self.Close = (this.basb + this.sabb) / 2; if (this.timeA == this.timeB) { self.Time = this.time; } // 对比两个深度数据时间戳 if (this.time - oldTime > timeCycle * 60000) { bars.push(self); oldTime = this.time; } // 根据指定时间周期,在K线数组里面传入价差数据对象 if (bars.length > num * 2) { bars.shift(); // 控制K线数组长度 } else { return; } var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标 return { up: boll[0][boll[0].length - 1], // boll指标上轨 middle: boll[1][boll[1].length - 1], // boll指标中轨 down: boll[2][boll[2].length - 1] // boll指标下轨 } // 返回一个处理好的boll指标数据 }
  • Função de ordem: trade ( )
    Passe o nome do contrato do pedido e o tipo de pedido, depois faça um pedido pelo preço de consideração e retorne o resultado após fazer o pedido. Como é necessário colocar duas ordens em direções diferentes ao mesmo tempo, o preço de compra/venda é convertido dentro da função de acordo com o nome do contrato da ordem.
Data.prototype.trade = function (tradeType, type) { exchange.SetContractType(tradeType); // 下单前先重新订阅合约 var askPrice, bidPrice; if (tradeType == tradeTypeA) { // 如果是A合约下单 askPrice = this.askA; // 设置askPrice bidPrice = this.bidA; // 设置bidPrice } else if (tradeType == tradeTypeB) { // 如果是B合约下单 askPrice = this.askB; // 设置askPrice bidPrice = this.bidB; // 设置bidPrice } switch (type) { // 匹配下单模式 case "buy": exchange.SetDirection(type); // 设置下单模式 return exchange.Buy(askPrice, unit); case "sell": exchange.SetDirection(type); // 设置下单模式 return exchange.Sell(bidPrice, unit); case "closebuy": exchange.SetDirection(type); // 设置下单模式 return exchange.Sell(bidPrice, unit); case "closesell": exchange.SetDirection(type); // 设置下单模式 return exchange.Buy(askPrice, unit); default: return false; } }
  • Função de cancelamento de pedido: cancelOrders()
    Obtenha uma lista de todos os pedidos não atendidos e cancele-os um por um. E se houver uma ordem não atendida, ele retorna falso, e se não houver nenhuma ordem não atendida, ele retorna verdadeiro.
Data.prototype.cancelOrders = function () { Sleep(500); // 撤单前先延时,因为有些交易所你懂的 var orders = _C(exchange.GetOrders); // 获取未成交订单数组 if (orders.length > 0) { // 如果有未成交的订单 for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组 exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单 Sleep(500); //延时0.5秒 } return false; // 如果取消了未成交的单子就返回false } return true; //如果没有未成交的订单就返回true }
  • Manipulando a manutenção de um único contrato: isEven()
    Ao lidar com uma situação de perna única na negociação de arbitragem, simplesmente fechamos todas as posições para lidar com isso. Claro, você também pode mudar para um método de pedido de acompanhamento.
Data.prototype.isEven = function () { var positionData = this.positionData; // 获取持仓信息 var type = null; // 转换持仓方向 // 如果持仓数组长度余2不等于0或者持仓数组长度不等于2 if (positionData.length % 2 != 0 || positionData.length != 2) { for (var i = 0; i < positionData.length; i++) { // 遍历持仓数组 if (positionData[i].Type == 0) { // 如果是多单 type = 10; // 设置下单参数 } else if (positionData[i].Type == 1) { // 如果是空单 type = -10; // 设置下单参数 } // 平掉所有仓位 this.trade(positionData[i].ContractType, type, positionData[i].Amount); } } }
  • Função de desenho: drawingChart ( )
    Chame o método ObjChart.add() para desenhar os dados de mercado e indicadores necessários no gráfico: trilha superior, trilha do meio, trilha inferior e spread positivo/negativo.
Data.prototype.drawingChart = function (boll) { var nowTime = new Date().getTime(); ObjChart.add([0, [nowTime, boll.up]]); ObjChart.add([1, [nowTime, boll.middle]]); ObjChart.add([2, [nowTime, boll.down]]); ObjChart.add([3, [nowTime, this.basb]]); ObjChart.add([4, [nowTime, this.sabb]]); ObjChart.update(chart); }

4. Na função de entrada main(), execute o código de pré-processamento de pré-transação. Este código é executado apenas uma vez após o programa iniciar. incluir:

  • Filtrar informações menos importantes no consoleSetErrorFilter ( )
  • Defina a moeda digital a ser negociadaexchange.IO ( )
  • Limpe o gráfico desenhado anteriormente antes do programa iniciarObjChart.reset ( )
  • Limpe as informações da barra de status anterior antes do programa iniciarLogProfitReset ( )

Após definir o pré-processamento de pré-negociação acima, passaremos para a próxima etapa, entraremos no modo de pesquisa e executaremos repetidamente a função onTick(). E defina o tempo de espera quando o Sleep() fizer a pesquisa, porque algumas APIs de exchanges de criptomoedas têm um limite de acesso integrado dentro de um determinado período de tempo.

function main() { // 过滤控制台中不是很重要的信息 SetErrorFilter("429|GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout|Futures_OP"); exchange.IO("currency", name + '_USDT'); //设置要交易的数字货币币种 ObjChart.reset(); //程序启动前清空之前绘制的图表 LogProfitReset(); //程序启动前清空之前的状态栏信息 while (true) { // 进入轮询模式 onTick(); // 执行onTick函数 Sleep(500); // 休眠0.5秒 } }

2. Obter e calcular dados

  1. Obtenha objetos de dados básicos, saldos de contas e dados de indicadores boll para uso na lógica de negociação.
function onTick() { var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象 var accountStocks = data.accountData.Stocks; // 账户余额 var boll = data.boll(dataLength, timeCycle); // 获取boll指标数据 if (!boll) return; // 如果没有boll数据就返回 }

3. Faça um pedido e acompanhe

  1. De acordo com a lógica da estratégia acima, execute operações de compra e venda. Primeiro, ele determina se as condições de preço e indicador foram atendidas, depois determina se as condições de posição foram atendidas e, finalmente, executa a função de ordem de negociação ( ).
// 价差说明 // basb = (合约A卖一价 - 合约B买一价) // sabb = (合约A买一价 - 合约B卖一价) if (data.sabb > boll.middle && data.sabb < boll.up) { // 如果sabb高于中轨 if (data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单 data.trade(tradeTypeA, "closebuy"); // 合约A平多 } if (data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单 data.trade(tradeTypeB, "closesell"); // 合约B平空 } } else if (data.basb < boll.middle && data.basb > boll.down) { // 如果basb低于中轨 if (data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单 data.trade(tradeTypeA, "closesell"); // 合约A平空 } if (data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单 data.trade(tradeTypeB, "closebuy"); // 合约B平多 } } if (accountStocks * Math.max(data.askA, data.askB) > 1) { // 如果账户有余额 if (data.basb < boll.down) { // 如果basb价差低于下轨 if (!data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单 data.trade(tradeTypeA, "buy"); // 合约A开多 } if (!data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单 data.trade(tradeTypeB, "sell"); // 合约B开空 } } else if (data.sabb > boll.up) { // 如果sabb价差高于上轨 if (!data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单 data.trade(tradeTypeA, "sell"); // 合约A开空 } if (!data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单 data.trade(tradeTypeB, "buy"); // 合约B开多 } } }
  1. Após a realização do pedido, é necessário lidar com situações anormais, como pedidos não atendidos e manutenção de um único contrato. e desenhar gráficos.
data.cancelOrders(); // 撤单 data.drawingChart(boll); // 画图 data.isEven(); // 处理持有单个合约

Acima, criamos uma estratégia simples de arbitragem interperíodo de moeda digital em pouco mais de 200 linhas. O código completo é o seguinte:

// 全局变量 // 声明一个配置图表的 chart 对象 var chart = { __isStock: true, tooltip: { xDateFormat: '%Y-%m-%d %H:%M:%S, %A' }, title: { text: '交易盈亏曲线图(详细)' }, rangeSelector: { buttons: [{ type: 'hour', count: 1, text: '1h' }, { type: 'hour', count: 2, text: '3h' }, { type: 'hour', count: 8, text: '8h' }, { type: 'all', text: 'All' }], selected: 0, inputEnabled: false }, xAxis: { type: 'datetime' }, yAxis: { title: { text: '价差' }, opposite: false, }, series: [{ name: "上轨", id: "线1,up", data: [] }, { name: "中轨", id: "线2,middle", data: [] }, { name: "下轨", id: "线3,down", data: [] }, { name: "basb", id: "线4,basb", data: [] }, { name: "sabb", id: "线5,sabb", data: [] }] }; var ObjChart = Chart(chart); // 画图对象 var bars = []; // 存储价差序列 var oldTime = 0; // 记录历史数据时间戳 // 参数 var tradeTypeA = "this_week"; // 套利A合约 var tradeTypeB = "quarter"; // 套利B合约 var dataLength = 10; //指标周期长度 var timeCycle = 1; // K线周期 var name = "ETC"; // 币种 var unit = 1; // 下单量 // 基础数据 function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约 this.accountData = _C(exchange.GetAccount); // 获取账户信息 this.positionData = _C(exchange.GetPosition); // 获取持仓信息 var recordsData = _C(exchange.GetRecords); //获取K线数据 exchange.SetContractType(tradeTypeA); // 订阅套利A合约 var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据 exchange.SetContractType(tradeTypeB); // 订阅套利B合约 var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据 this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间 this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价 this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价 this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价 this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价 // 正套价差(合约A卖一价 - 合约B买一价) this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price; // 反套价差(合约A买一价 - 合约B卖一价) this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price; } // 获取持仓 Data.prototype.mp = function (tradeType, type) { var positionData = this.positionData; // 获取持仓信息 for (var i = 0; i < positionData.length; i++) { if (positionData[i].ContractType == tradeType) { if (positionData[i].Type == type) { if (positionData[i].Amount > 0) { return positionData[i].Amount; } } } } return false; } // 合成新K线数据和boll指标数据 Data.prototype.boll = function (num, timeCycle) { var self = {}; // 临时对象 // 正套价差和反套价差中间值 self.Close = (this.basb + this.sabb) / 2; if (this.timeA == this.timeB) { self.Time = this.time; } // 对比两个深度数据时间戳 if (this.time - oldTime > timeCycle * 60000) { bars.push(self); oldTime = this.time; } // 根据指定时间周期,在K线数组里面传入价差数据对象 if (bars.length > num * 2) { bars.shift(); // 控制K线数组长度 } else { return; } var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标 return { up: boll[0][boll[0].length - 1], // boll指标上轨 middle: boll[1][boll[1].length - 1], // boll指标中轨 down: boll[2][boll[2].length - 1] // boll指标下轨 } // 返回一个处理好的boll指标数据 } // 下单 Data.prototype.trade = function (tradeType, type) { exchange.SetContractType(tradeType); // 下单前先重新订阅合约 var askPrice, bidPrice; if (tradeType == tradeTypeA) { // 如果是A合约下单 askPrice = this.askA; // 设置askPrice bidPrice = this.bidA; // 设置bidPrice } else if (tradeType == tradeTypeB) { // 如果是B合约下单 askPrice = this.askB; // 设置askPrice bidPrice = this.bidB; // 设置bidPrice } switch (type) { // 匹配下单模式 case "buy": exchange.SetDirection(type); // 设置下单模式 return exchange.Buy(askPrice, unit); case "sell": exchange.SetDirection(type); // 设置下单模式 return exchange.Sell(bidPrice, unit); case "closebuy": exchange.SetDirection(type); // 设置下单模式 return exchange.Sell(bidPrice, unit); case "closesell": exchange.SetDirection(type); // 设置下单模式 return exchange.Buy(askPrice, unit); default: return false; } } // 取消订单 Data.prototype.cancelOrders = function () { Sleep(500); // 撤单前先延时,因为有些交易所你懂的 var orders = _C(exchange.GetOrders); // 获取未成交订单数组 if (orders.length > 0) { // 如果有未成交的订单 for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组 exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单 Sleep(500); //延时0.5秒 } return false; // 如果取消了未成交的单子就返回false } return true; //如果没有未成交的订单就返回true } // 处理持有单个合约 Data.prototype.isEven = function () { var positionData = this.positionData; // 获取持仓信息 var type = null; // 转换持仓方向 // 如果持仓数组长度余2不等于0或者持仓数组长度不等于2 if (positionData.length % 2 != 0 || positionData.length != 2) { for (var i = 0; i < positionData.length; i++) { // 遍历持仓数组 if (positionData[i].Type == 0) { // 如果是多单 type = 10; // 设置下单参数 } else if (positionData[i].Type == 1) { // 如果是空单 type = -10; // 设置下单参数 } // 平掉所有仓位 this.trade(positionData[i].ContractType, type, positionData[i].Amount); } } } // 画图 Data.prototype.drawingChart = function (boll) { var nowTime = new Date().getTime(); ObjChart.add([0, [nowTime, boll.up]]); ObjChart.add([1, [nowTime, boll.middle]]); ObjChart.add([2, [nowTime, boll.down]]); ObjChart.add([3, [nowTime, this.basb]]); ObjChart.add([4, [nowTime, this.sabb]]); ObjChart.update(chart); } // 交易条件 function onTick() { var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象 var accountStocks = data.accountData.Stocks; // 账户余额 var boll = data.boll(dataLength, timeCycle); // 获取boll指标数据 if (!boll) return; // 如果没有boll数据就返回 // 价差说明 // basb = (合约A卖一价 - 合约B买一价) // sabb = (合约A买一价 - 合约B卖一价) if (data.sabb > boll.middle && data.sabb < boll.up) { // 如果sabb高于中轨 if (data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单 data.trade(tradeTypeA, "closebuy"); // 合约A平多 } if (data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单 data.trade(tradeTypeB, "closesell"); // 合约B平空 } } else if (data.basb < boll.middle && data.basb > boll.down) { // 如果basb低于中轨 if (data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单 data.trade(tradeTypeA, "closesell"); // 合约A平空 } if (data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单 data.trade(tradeTypeB, "closebuy"); // 合约B平多 } } if (accountStocks * Math.max(data.askA, data.askB) > 1) { // 如果账户有余额 if (data.basb < boll.down) { // 如果basb价差低于下轨 if (!data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单 data.trade(tradeTypeA, "buy"); // 合约A开多 } if (!data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单 data.trade(tradeTypeB, "sell"); // 合约B开空 } } else if (data.sabb > boll.up) { // 如果sabb价差高于上轨 if (!data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单 data.trade(tradeTypeA, "sell"); // 合约A开空 } if (!data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单 data.trade(tradeTypeB, "buy"); // 合约B开多 } } } data.cancelOrders(); // 撤单 data.drawingChart(boll); // 画图 data.isEven(); // 处理持有单个合约 } //入口函数 function main() { // 过滤控制台中不是很重要的信息 SetErrorFilter("429|GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout|Futures_OP"); exchange.IO("currency", name + '_USDT'); //设置要交易的数字货币币种 ObjChart.reset(); //程序启动前清空之前绘制的图表 LogProfitReset(); //程序启动前清空之前的状态栏信息 while (true) { // 进入轮询模式 onTick(); // 执行onTick函数 Sleep(500); // 休眠0.5秒 } }

A negociação de arbitragem originou-se da estratégia de negociação de ações do Morgan Stanley. Seu conceito é: as flutuações da diferença de preço de dois produtos altamente correlacionados se conformam ao "processo pipoca", ou seja, a diferença de preço retorna constantemente à média da posição que se desvia da média histórica , e então Outro desvio da média.

A partir disso, podemos lucrar comprando barato e vendendo caro com base na diferença de preço. Então, de acordo com o princípio do desvio padrão em estatística, as Bandas de Bollinger são compostas de um trilho do meio e trilhos superior e inferior calculados pelo desvio padrão para formam três malhas. É muito útil em negociações de arbitragem de spread.

Após os testes, descobriu-se que se a estratégia for seguida, sem considerar as taxas de manuseio e os custos de impacto, embora o lucro não seja muito alto, o lucro geral é relativamente estável. Vale ressaltar que, por se tratar de arbitragem estatística, existe o risco de a diferença de preço aumentar na direção oposta, e devemos considerar a questão do stop loss ao projetá-la. Em segundo lugar, também precisamos prestar atenção ao custo do impacto. Quando a liquidez dos dois contratos envolvidos na transação diminui, isso terá um impacto significativo nos retornos, e os investidores devem evitá-lo conforme apropriado.

4. Iteração avançada do desenvolvimento da estratégia de CTA

4.1 Evitando as armadilhas das estratégias de CTA futuras

Nas duas últimas aulas, escrevemos uma estratégia de tendência na linguagem Mai e uma estratégia de arbitragem em JavaScript, e não encontramos nenhum problema no backtesting da estratégia. No entanto, a negociação quantitativa não se trata apenas de escrever um programa e negociá-lo diretamente quando o backtesting for bem-sucedido.
Na verdade, o backtesting é apenas uma simulação de uma estratégia, que é usada apenas para avaliar o desempenho da estratégia em dados históricos, permitindo que os traders avaliem e abandonem rapidamente algumas estratégias de negociação.

Em muitos casos, estratégias que parecem ótimas em backtesting frequentemente falham em atender aos padrões de backtest em trading real. Há muitas razões, algumas das quais estão além do controle do trader, mas algumas das falhas são devido a erros comuns ou potenciais .

Dados estáticos vs. dados dinâmicos
Quando fazemos análise quantitativa, precisamos primeiro ter um conceito de dados estáticos e dados dinâmicos. No backtesting, usamos dados históricos estáticos. Os preços de cada K-line estão completos, e cada sinal de negociação pode ser 100% vendido. Mas os dados no mercado real são dinâmicos. Por exemplo, se o preço mais alto for maior que o preço mais alto dentro de 1 hora após a abertura, então compre. No entanto, se a linha K atual não tiver sido concluída, então o preço mais alto é dinâmico e o sinal de negociação pode piscar para frente e para trás . Essa situação indica que a estratégia utiliza funções futuras para determinar as condições para transações de compra e venda.

Função futura
O que é uma função futura? Vejamos primeiro como a Enciclopédia Baidu explica isso: se uma quantidade depende de outra quantidade, como a quantidade A e a quantidade B, e uma mudança em B causa uma mudança em A, então A é uma função de B. Se B é uma função posterior quantidade, A é Para uma quantidade anterior, A muda com B, e A é a função futura de B. Todo mundo pode ficar confuso.

Em termos simples, é uma função que faz referência a dados futuros, como usar o preço de amanhã para prever o preço de amanhã. Se um indicador técnico contém uma função futura, seu sinal é incerto. Frequentemente, um sinal de negociação é emitido no momento, mas quando a próxima linha K aparece, o sinal desaparece ou muda de posição.

O preço de fechamento é uma função futura. Antes que a última K-line seja concluída, o preço de fechamento está sempre mudando. Você deve esperar até que a K-line seja concluída para determinar o preço de fechamento. Como o preço de fechamento em si é uma função do futuro, todos os indicadores técnicos baseados no preço de fechamento também são funções do futuro.

Portanto, se um indicador técnico usa um preço de fechamento confirmado como dado básico, e os sinais de compra e venda não mudam, não importa quanto tempo tenha passado, pode-se dizer que esse indicador técnico não faz referência a uma função futura. No entanto, os dados básicos que ele usa são o preço de fechamento que ainda não foi confirmado, então este indicador técnico se refere à função futura, e os sinais de compra e venda podem mudar em aplicações reais.

Preços Passados
A função future usa preços futuros, mas também pode usar preços passados. Esse é um problema que muitos novatos tendem a ignorar. Para ilustrar melhor essa questão no futuro, vamos dar um exemplo: se o preço mais alto atual for maior que o preço mais alto dentro de 1 hora após a abertura, compre pelo preço de abertura. Obviamente, não há nada de errado com as condições desse sinal de compra e venda, mas o preço usado para abrir a ordem é o preço passado.

No backtest, a estratégia é normal, porque o mecanismo de backtest baseado em dados estáticos pode concluir a transação 100% do tempo, desde que haja um sinal de compra. No entanto, no mercado real, quando o preço mais alto é maior que o maior preço dentro de 1 hora após a abertura. Neste momento, você certamente não pode mais usar o preço de abertura anterior para fazer pedidos.

Vácuo de preço
O chamado vácuo de preço se refere ao preço exibido no gráfico K-line, mas o preço não pode ser negociado no mercado real. Ele é dividido principalmente nas seguintes situações:

  1. Qualquer pessoa que já tenha feito trading sabe que é difícil comprar quando o preço atinge seu limite superior, e é difícil vender quando o preço atinge seu limite inferior. No entanto, é possível negociar no backtest.
  2. O mecanismo de correspondência da bolsa é: prioridade de preço e prioridade de tempo. Alguns produtos geralmente têm uma quantidade enorme de pedidos. Se você fizer um pedido para comprar ou vender em tempo real, você deve esperar atrás dos pedidos de outras pessoas e esperar até que os pedidos de outras pessoas sejam executados antes de poder concluir a transação. Em alguns casos, o o preço pode ter mudado antes que você possa concluir a transação. Entretanto, durante o backtesting, se sua estratégia for abrir ordens, a transação será concluída em tempo hábil, o que é diferente do ambiente de negociação real.
  3. Se você estiver usando uma estratégia de arbitragem, o lucro do backtest será muito alto, porque cada vez que você faz o backtest, você assume que agarrou essas diferenças de preço. Na realidade, muitos spreads não estão disponíveis, ou apenas uma perna está disponível. Em geral, aquele que não for favorável à sua direção será negociado primeiro, então você precisa preencher a outra perna imediatamente. Neste momento, o deslizamento já ocorreu. Não é 1 ou 2 pontos, mas a própria estratégia de arbitragem ganha dinheiro com a diferença de preço desses pontos. Essa situação não pode ser simulada em backtesting. O lucro real não é tão bom quanto o do backtest.
  4. Embora os eventos cisne negro não sejam comuns, eles ainda têm um grande impacto na negociação quantitativa. Por exemplo, no evento cisne negro do franco suíço, o gráfico mostra que há abertura alta e fechamento baixo. Na verdade, no extremo condições de mercado do dia, O preço no meio é um vácuo, um grande número de ordens de stop-loss causa tumultos, a liquidez é zero e as transações são muito difíceis, mas os stop-loss podem ser alcançados no backtesting.
    img

Sobreajuste
Overfitting é um erro comum cometido por iniciantes em trading quantitativo. O que é overfitting? Vamos dar um exemplo simples: ao fazer provas na escola, algumas pessoas usam a tática de fazer muitas perguntas e memorizar cada pergunta. Se as perguntas forem ligeiramente alteradas durante o exame, ele não conseguirá respondê-las. Porque ele decorou a abordagem de cada questão de uma forma muito complicada, mas não abstraiu as regras gerais.
img

Como mostrado na imagem acima, desde que um modelo seja complexo o suficiente, ele pode se adaptar perfeitamente aos dados. O mesmo é verdade para overfitting em trading quantitativo. Se sua estratégia for complexa e tiver muitos parâmetros externos, então no backtest de dados históricos limitados, sempre haverá um ou vários parâmetros que podem se encaixar perfeitamente na estratégia. Em linha com as condições históricas do mercado .

No entanto, no futuro, as mudanças de preço podem exceder as limitações da sua estratégia. Na verdade, a essência do desenvolvimento da estratégia de negociação quantitativa é o processo de combinar dados locais não aleatórios de uma grande quantidade de dados aparentemente aleatórios. Portanto, precisamos usar estatísticas. Como podemos usar conhecimento para evitar essa armadilha?

Uma solução de compromisso é usar dados dentro e fora da amostra. Divida todos os dados em duas partes, use os dados da amostra como conjunto de treinamento e seja responsável pelo backtest dos dados. Os dados fora da amostra são usados ​​como um conjunto de teste para verificação. Se houver poucos dados históricos, você também pode usar o método de teste cruzado.

Se você descobrir que os dados fora da amostra não apresentam um bom desempenho, mas acha uma pena descartar o modelo ou não está disposto a admitir que seu modelo não é bom e continua a otimizar o modelo na saída -da-amostra até que ele tenha o mesmo desempenho nos dados fora da amostra, então quem sai prejudicado no final é o seu dinheiro de verdade.

Viés de sobrevivência
O viés de sobrevivência pode ser explicado pelos seguintes exemplos:

  1. Se você ficar no lugar certo, até os porcos podem voar.
  2. Todas as avaliações de paraquedas vendidos online são positivas, porque não há pessoas que tenham problemas com seus paraquedas.
  3. Repórteres entrevistaram pessoas no ônibus para ver se elas tinham comprado passagens, porque aqueles que não podiam comprar passagens não conseguiam entrar no ônibus.
  4. A mídia promove a possibilidade de ganhar na loteria, porque a mídia não promoverá ativamente pessoas que não ganharam na loteria.

A partir dos exemplos acima, podemos ver que as informações que as pessoas geralmente recebem foram, na verdade, rastreadas, o que faz com que uma grande quantidade de dados ou amostras sejam ignoradas seletivamente. O resultado é que as conclusões baseadas no viés do sobrevivente se desviaram do tempo real. Então, na negociação quantitativa, também precisamos considerar se o resultado do backtest é devido à sorte. Em muitos casos, o resultado do backtest pode ser o melhor desempenho em todo o backtest. Preste atenção à imagem a seguir:
img

A imagem à esquerda é uma estratégia de negociação muito boa, com uma boa curva de capital e sem grandes perdas, o que pode gerar retornos de lucro estáveis. Mas, por favor, olhe para a imagem à direita, ela é simplesmente a que tem melhor desempenho entre essas centenas de backtests de negociação. Por outro lado, quando olhamos para o mercado financeiro, sempre há mais estrelas do que estrelas de longa duração. Se a estratégia do trader estiver alinhada com as condições de mercado, então as condições de mercado de cada ano podem criar um lote de estrelas, mas é raro ver uma estrela que pode ter vida longa por mais de três anos consecutivos. Uma pessoa aniversariante com lucros estáveis.

Impacto de custo
A menos que você esteja colocando uma ordem pendente, você pode sofrer deslizamento de preço ao negociar. Para produtos negociados ativamente, o preço bid e o preço ask são geralmente de um ponto de diferença. Para produtos negociados menos ativamente, o spread pode ser maior. Toda vez que você quiser negociar ativamente, você precisa de pelo menos um spread, ou até mais. No entanto, no backtesting, não precisamos considerar a questão da transação. Enquanto houver um sinal, a transação pode ser concluída. Portanto, para simular o ambiente de negociação real, pelo menos um slippage deve ser adicionado.

Especialmente para estratégias com uma frequência de negociação relativamente alta, ao testar a estratégia, se o slippage não for incluído, a curva de capital sempre será inclinada para cima. Uma vez que um slippage razoável é adicionado, ele imediatamente se transformará em uma perda. Além disso, esse fenômeno não é causado apenas pelo problema de spread. Em um ambiente de negociação real, problemas como atraso de rede, sistemas de software e hardware e resposta do servidor também precisam ser considerados.

Capacidade Política
A mesma estratégia pode ter efeitos muito diferentes, ou até mesmo completamente opostos, em mercados eficientes e ineficientes. Por exemplo, em mercados ineficientes como o mercado de ações doméstico, futuros de commodities e moedas digitais estrangeiras, a capacidade das estratégias de alta frequência em si não é muito grande devido à pequena base de volume de negociação. Se mais pessoas as usarem, haverá não haverá margem de lucro, e mesmo as estratégias originais de alta frequência não serão lucrativas. Uma estratégia lucrativa se transforma em uma deficitária. Mas em um mercado de câmbio eficiente, há espaço para muitos tipos diferentes de estratégias de alta frequência.

Os itens acima são os problemas e armadilhas que podem surgir durante o desenvolvimento e uso da estratégia. Para um desenvolvedor de sistema de negociação experiente, o backtesting é essencial. Porque ele pode dizer se uma ideia estratégica pode ser verificada como eficaz em transações históricas. Mas muitas vezes o backtesting não significa lucratividade futura. Como há muitas armadilhas no backtesting, você não vai entendê-lo a menos que gaste dinheiro para aprender algumas lições. E essas lições são aprendidas com dinheiro real. Este curso pode pelo menos ajudar você a evitar muitos desvios e armadilhas quantitativas.

4.2 Estabelecendo o gerenciamento de posição ideal

Em Reminiscences of a Stock Operator, há um episódio interessante: Old Turkey (originalmente chamado de Partridge), que trabalhava na mesma empresa de valores mobiliários do protagonista Livermore, sempre fazia grandes compras e vendas. Sempre que alguém sugeria que ele o vendesse depois obtendo lucro e depois comprá-lo de volta quando o preço das ações recuar. O Velho Peru sempre diz com seriedade: Não, você sabe, este é um mercado em alta!

Até Livermore finalmente suspirou: Não há nada de bom em prever a tendência corretamente. No mercado, você sempre pode encontrar muitas pessoas que foram otimistas em um mercado de alta e pessimistas em um mercado de baixa. Mas eles são sempre bons em barganhar com o mercado, tentando comprar no ponto mais baixo e vender no ponto mais alto. Assim como o peru velho, aqueles que realmente ganham muito dinheiro são aqueles que veem o mercado corretamente e seguram suas posições firmemente. Esta também é a coisa mais difícil de aprender. Isso não envolve apenas a seleção de alvos e tempo, mas também uma questão mais importante: qual o tamanho da posição (risco) que deve ser mantida (assumida)?

Os traders fracassados ​​têm todos um pensamento unilateral. Ao negociar, as pessoas gananciosas só olham para os benefícios e não para os riscos, enquanto as pessoas tímidas só olham para os riscos e não para os benefícios. Aqueles que são gananciosos e tímidos esquecem dos riscos quando o mercado está subindo. Esqueça os ganhos no caminho para baixo. Mas os traders bem-sucedidos consideram tanto o risco quanto a recompensa, ou seja, para cada dólar ganho, eles assumem vários dólares de risco. Então o indicador para medir retorno e risco é a relação retorno-risco.

Muitas pessoas sabem que quanto maior o lucro, maior o risco, ou seja, o retorno é proporcional ao risco. Na opinião de algumas pessoas, a relação entre retorno e risco deveria ser a seguinte, com o eixo horizontal representando a porcentagem de risco e o eixo vertical representando a porcentagem de lucro:
img

Entretanto, em transações reais, retornos e riscos estão longe de ser tão simples quanto uma linha reta entre dois pontos, pelo menos eles nem sempre se movem linearmente. O risco real é a perda máxima que você pode incorrer abaixo do retorno esperado, que é o que chamamos de volatilidade máxima. Embora às vezes a perda flutuante máxima não seja necessariamente igual à perda de fechamento dos resultados da transação, a perda flutuante máxima é real.

A partir disso, podemos saber que a relação lucro-risco na figura acima não é uma representação verdadeira. Em um ambiente de negociação real, a relação lucro-risco deve ser como mostrado na figura abaixo:
img

Vamos olhar a figura acima. A curva amarela representa a flutuação do valor líquido sob diferentes riscos. À medida que o retorno esperado continua a se expandir, o risco também está se expandindo gradualmente. Se definirmos a falência em 0,5, o que significa que a perda máxima chega a 50%, então esta é uma estratégia de negociação fracassada. Embora o retorno final dessa estratégia seja positivo, ela na verdade faliu no meio do caminho.

Mesmo que sua estratégia seja uma estratégia de expectativa positiva, ela ainda irá à falência devido ao gerenciamento incorreto da posição. Então, dessa perspectiva, quanto comprar ou vender é mais importante do que quando comprar ou vender. Como gerenciar posições cientificamente se tornou uma questão fundamental em transações financeiras. Então, antes de tentar resolver esse problema, vamos ver como fazer apostas cientificamente em jogos de azar.
img

Vamos pegar o cara ou coroa como exemplo. Supondo que os dois lados de uma moeda tenham o mesmo peso, se a parte da frente aparecer, o lucro é de 2 yuans, e se a parte de trás aparecer, a perda é de 1 yuan. Obviamente, isso é um jogo de expectativa positiva, com uma taxa de vitória de 50% e uma perda de 2 yuans. Aí vem a pergunta: agora você tem 100 yuans, então como pode fazer apostas repetidamente para fazer com que 100 yuans cheguem a 1 milhão de yuans o mais rápido possível.

Se não pensarmos bem, pensaremos que, como o lucro de cada aposta é de 50%,*2-50%*1, que é 50%. Para realizar rapidamente o lucro máximo, você deve investir o máximo de capital possível em cada jogo. A aposta deve ser de 100%.

Mas é obviamente irracional investir 100% do capital em cada jogo de azar, porque se você perder apenas uma vez, o capital irá embora, mesmo que a possibilidade seja muito pequena. Porque se você apostar muitas vezes, é provável que perca dinheiro.

Alguém pode perguntar: já que uma aposta de 100% não é razoável, que tal uma aposta de 90% ou menos? Na verdade, para resolver esse problema, podemos fazer um experimento para simular esse jogo de azar e ver quais são os resultados de cada aposta. Conforme mostrado na imagem a seguir:

img

Da figura, podemos ver que quando reduzimos gradualmente a posição de 90%, 80%, 70%, 60% e 50%, os resultados da mesma aposta são completamente diferentes. Amigos cuidadosos podem já ter Percebe-se que à medida que a posição diminui gradualmente, os fundos finais aumentam gradualmente.

Alguém pode perguntar, é melhor apostar menor a cada vez, como 10%? Você não pode calcular cada taxa de aposta, certo? Esse é o problema que a famosa fórmula de Kelly foi criada para resolver. Em estatística, a fórmula de Kelly pode maximizar a taxa de crescimento de longo prazo de uma estratégia com apostas repetidas esperadas positivas, calculando a taxa de aposta ideal em cada aposta.

Além disso, assumindo que o principal e a aposta podem ser infinitamente divididos, usar a fórmula de Kelly tornará impossível a falência em qualquer aposta. Especialmente na aplicação real de transações financeiras, é uma estratégia de gerenciamento de posição que combina ataque e defesa. Vamos dar uma olhada em como a fórmula de Kelly é calculada, observe a imagem a seguir:

img

  • f é a taxa de aposta ótima do principal existente
  • b é a probabilidade, que também pode ser chamada de razão de lucros e perdas na negociação.
  • p é a taxa de sucesso
  • q é a taxa de falha

Então podemos usar a fórmula de Kelly para calcular o exemplo de jogo nesta classe. Com um capital inicial de 100 yuans, se a taxa de vitória for de 50% e as probabilidades forem de 2, qual taxa de aposta deve ser usada para tornar o capital o mais lucrativo? A velocidade mais rápida chega a 1 milhão de yuans. Usando a fórmula de Kelly, o processo de cálculo é:

(0.5*(2+1) -1)/2=0.25

Uma taxa de vitória de 50% é 0,5, multiplicado pelas probabilidades 2 mais 1, depois subtraído por 1 e finalmente dividido por 2. O resultado é 0,25, o que significa que em cada aposta, 25% do principal é usado para apostar. pode atingir 1 milhão de yuans na velocidade mais rápida. Podemos simulá-lo manualmente com base nos resultados do cálculo para ver se está correto.

img

A imagem acima é o resultado da simulação manual. Por favor, olhe para a última linha. Para a mesma aposta, após mais de 100 rodadas, 25% das posições atingiram 1 milhão de yuans primeiro. Os resultados de 90%, 80%, 70% e 60% das posições são negativos, o que demonstra plenamente que mesmo uma estratégia de negociação com uma expectativa positiva irá à falência devido à gestão incorreta da posição.

Também podemos ver que 50% das posições não perderão nem ganharão no final, o que também está de acordo com o resultado da lei dos grandes números. Para ilustrar melhor o problema, uma posição de 10% também foi adicionada durante a simulação manual. Embora o resultado final tenha sido um retorno positivo, o efeito foi várias ordens de magnitude pior do que o da posição de 25%.

Você viu o poder da fórmula de Kelly. Se você escolher uma posição principal de 10% na aplicação real, então em mais de 100 apostas, seu principal se tornará mais de 30.000. Embora o lucro seja enorme, no entanto, comparado com o resultado de uma posição principal de 25%, é equivalente a não ganhar dinheiro. Este é o poder do conhecimento.

Se você quer usar a fórmula de Kelly para ganhar dinheiro na vida, você precisa atender às condições de aplicação da fórmula de Kelly. Não há dúvidas de que essa aposta deve vir do mercado financeiro. Especialmente na negociação quantitativa, por meio de testes retrospectivos de dados históricos, a taxa de vitória e as probabilidades correspondentes podem ser calculadas aproximadamente.

Claro que a aplicação real da fórmula de Kelly em transações financeiras não é tão simples. Ainda há muitos detalhes a serem tratados, como o custo dos fundos em transações alavancadas, a incapacidade de separar fundos e posições em transações reais e a diferença entre taxa de vitória e posição em transações. As probabilidades estão mudando dinamicamente, etc. Mas não importa o que aconteça, a fórmula de Kelly nos mostra como estabelecer o melhor método de gerenciamento de posição.

Related Recommendations
Comment
All comments (3)

    学习学习

    4 years ago

    学习

    5 years ago

    学习

    6 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)