Índice
Capítulo 1 Noções básicas de negociação quantitativa
1.1 O que é negociação quantitativa?
resumo
A negociação quantitativa, como produto da combinação de ciência e máquinas, está mudando o cenário do mercado financeiro moderno. Agora, muitos investidores voltaram sua atenção para esse campo. Como minimizar riscos e obter os melhores retornos possíveis? Este também é o propósito desta série de cursos. Como primeiro artigo, explicaremos brevemente "O que é negociação quantitativa".
Visão geral
Quando muitas pessoas ouvem o termo “negociação quantitativa”, elas pensam que é algo de alto nível e que as tornará ricas da noite para o dia. A era da inteligência artificial, acompanhada pelo surgimento de tecnologias avançadas como aprendizado profundo, big data e computação em nuvem, deu a ela uma cor misteriosa. Parece que, desde que a negociação quantitativa seja usada, uma estratégia de negociação "perfeita" pode ser construída.
De fato, até certo ponto, a negociação quantitativa se tornou um mito. Deixando de lado a negociação, "quantificação" é, na verdade, o uso de computadores, estatísticas, matemática e outros métodos, por meio de um sistema de investimento científico, para encontrar um conjunto de sistemas de sinais de negociação esperados. Este sistema de sinais nos dirá quando e a que preço devemos comprar e vender.
O desenvolvimento da negociação quantitativa
Voltando à fonte, a pessoa que primeiro usou métodos quantitativos para analisar mudanças de dados e descobrir os padrões de flutuações de preços de mercado não foi o holandês, o berço das ações, nem o britânico que promoveu as finanças modernas, nem os americanos que coexistem com as finanças desde a fundação do país, mas um francês.
Já no século XVIII, Jules Regnault, um corretor assistente francês, propôs a teoria moderna das mudanças no preço das ações. Mais tarde, ele publicou o livro "Probability Calculation and the Philosophy of Stock Trading", no qual ele elaborou a lei dos altos e baixos do mercado (distribuição normal) e descobriu: "O desvio do preço é proporcional à raiz quadrada do tempo", e finalmente alcançou o sucesso na negociação por meio de decisões de investimento racionais e quantitativas.
Hoje em dia, na era da Internet + big data + computação em nuvem + inteligência artificial, a negociação quantitativa também se desenvolveu rapidamente. Canary Wharf, em Londres, antigamente o centro financeiro global, há muito tempo se tornou um centro para empresas de TI. Os principais bancos de investimento do mundo também estão cultivando suas próprias equipes quantitativas, tentando entrar na guerra financeira de "quem tiver o modelo ganha o mundo". Essas equipes de TI que desenvolvem modelos de negociação também são chamadas de Quant Teams. Em termos de escala, os Estados Unidos, que começaram antes, já têm um grande número de fundos de hedge quantitativos fortes.
Em contraste, na China, tanto os equipamentos de hardware quanto as capacidades de pesquisa de investimento ainda estão em estágios iniciais. No entanto, mais e mais instituições e investidores profissionais perceberam os benefícios do trading quantitativo e participaram desse campo. Especialmente à medida que a supervisão se torna cada vez mais rigorosa e a eficiência do mercado melhora gradualmente, o trading quantitativo tem um espaço maior para crescimento.
Características da negociação quantitativa
Verificação científica: Imagine que, uma vez que você tenha um sistema de negociação, se você usar um sistema de negociação simulado para testar sua eficácia, isso pode custar uma quantidade enorme de tempo. Se você testá-lo diretamente com um sistema de negociação real, você pode perder dinheiro real. No entanto, a função de backtesting na negociação quantitativa pode ser usada para testar o sistema de negociação de forma científica por meio de uma grande quantidade de dados históricos. Deixe que os dados falem sobre o que funciona e o que não funciona, em vez de apenas seguir a multidão.
Objetivo e preciso: No trading, nosso verdadeiro inimigo somos nós mesmos. Gerenciar nossa mentalidade é mais fácil dizer do que fazer. Fraquezas humanas como ganância, medo e sorte serão ampliadas várias vezes no mercado de trading. O trading quantitativo pode nos ajudar a superar essas fraquezas e tomar melhores decisões no trading.
Oportuno e eficiente: Na negociação subjetiva, a velocidade de reação das pessoas não pode ser mais rápida do que a dos computadores, e a força física e a energia das pessoas não podem operar 24 horas por dia. No mercado de negociação, onde as oportunidades são passageiras, a negociação quantitativa pode substituir completamente a negociação subjetiva, encontrar oportunidades de negociação e rastrear as mudanças de mercado de maneira oportuna e rápida.
Controle de Risco: A negociação quantitativa não só pode explorar padrões históricos que podem ser repetidos no futuro a partir de dados históricos, mas esses padrões históricos também são estratégias com maior probabilidade de vitória. Você também pode criar uma variedade de portfólios de investimentos diferentes para reduzir riscos sistêmicos e suavizar a curva de financiamento.
Quais são as estratégias clássicas de negociação para negociação quantitativa?
Estratégia de abertura de fuga
A primeira meia hora após a abertura pode frequentemente determinar a tendência do dia. Esta estratégia usa se o preço é uma linha positiva ou negativa dentro de meia hora após a abertura como o padrão para julgar a tendência do dia. Se for uma linha positiva, abra uma posição de compra; se for uma linha negativa, abra uma posição de venda e feche a posição alguns minutos antes do fechamento. Esta é uma estratégia de negociação muito simples.
Estratégia do Canal Donchian
Figura 1-1 Diagrama de estratégia do canal Donchian
A estratégia do Canal Donchian pode ser considerada a ancestral do trading intraday. Suas regras são: comprar se o preço atual for maior que o preço mais alto das N K-lines anteriores, e vender se o preço atual for menor que o preço mais baixo das N K-lines anteriores. As famosas Regras de Negociação de Tartarugas usam uma versão modificada da estratégia do Canal Donchian.
Estratégia de arbitragem entre períodos
Arbitragem entre períodos é o tipo mais comum de transação de arbitragem. Ela é baseada nos preços de contratos com diferentes meses de entrega para o mesmo produto de negociação. Se houver uma grande diferença de preço entre os dois preços, você pode comprar e vender contratos futuros de diferentes períodos ao mesmo tempo para conduzir arbitragem entre períodos. Suponha que a diferença de preço entre o contrato principal e o contrato principal secundário permaneça em torno de -50~50 por um longo tempo. Se o spread atingir 70 em um determinado dia, esperamos que ele retorne a 50 em algum momento no futuro. Então você pode vender o contrato principal e comprar o contrato principal secundário ao mesmo tempo para reduzir a diferença de preço. vice-versa.
Resumir
Acima, apresentamos brevemente os conceitos relevantes de negociação quantitativa a partir dos aspectos de sua definição, desenvolvimento, características e estratégias clássicas de negociação.
Entender a negociação quantitativa é um trampolim importante no caminho para se tornar um Quant. Por fim, desejo que todos possam enriquecer no mercado em baixa e concretizar a realização do conhecimento o mais rápido possível! Lembre-se, você está a apenas um mercado em alta de distância da liberdade financeira!
Próxima Seção Prévia
Quais são as diferenças entre negociação quantitativa e negociação tradicional? Na negociação real, devemos escolher negociação tradicional ou negociação quantitativa? Na próxima seção, responderemos a essas duas perguntas para entender melhor a negociação quantitativa.
Trabalho de casa
- Descreva brevemente o que é negociação quantitativa em uma frase?
- Quais são as características da negociação quantitativa?
1.2 Por que escolher negociação quantitativa
resumo
Muitas pessoas usam programação de estratégias complexas como ponto de partida ao discutir negociação quantitativa, inadvertidamente lançando um véu de mistério sobre a negociação quantitativa. Nesta seção, tentaremos fazer um "esboço" simples de negociação quantitativa em linguagem fácil de entender para desvendar seu mistério. Acredito que até mesmo um novato sem conhecimento básico pode entendê-lo facilmente.
A diferença entre negociação quantitativa e negociação subjetiva
A negociação subjetiva dá mais atenção à análise humana e ao senso de mercado. Mesmo que sinais de compra e venda apareçam, as ordens serão colocadas seletivamente. As pessoas preferem perder o mercado do que cometer erros. Os sentimentos humanos são complexos, mutáveis e não confiáveis. Uma vez que a maioria dos traders experimenta perdas consecutivas, eles tendem a mudar para outro método. É altamente aleatório e facilmente perturbado por ganhos e perdas, dificultando a obtenção de lucros estáveis.
A negociação quantitativa desenvolve estratégias consistentes de compra e venda por meio da compreensão das transações. No trading, trate todas as tendências igualmente e lide com a abertura e o fechamento de posições de forma sistemática. É melhor cometer erros do que perder. Ela também conta com um sistema de avaliação completo, que determina para qual tipo de mercado e produtos a estratégia é mais adequada por meio de backtesting de dados históricos, e alcança lucratividade ao combinar múltiplas estratégias e produtos.
Em suma, a negociação subjetiva é a base da negociação quantitativa, e a negociação quantitativa é o refinamento da negociação subjetiva. Negociação subjetiva é mais como praticar artes marciais. Se você pode ter sucesso no final depende principalmente do seu talento. Algumas pessoas podem não atingir a iluminação depois de dez anos, enquanto outras podem atingir a iluminação em um dia. Negociação quantitativa é mais como fitness. Contanto que você trabalhe duro, você pode construir músculos mesmo se não tiver talento.
A negociação quantitativa é melhor que a negociação subjetiva?
Um trader subjetivo bem-sucedido é, em certo sentido, também um trader quantitativo. Porque um trader subjetivo bem-sucedido deve ter seu próprio conjunto de regras e métodos, ou seja, um sistema de negociação. Uma negociação subjetiva bem-sucedida deve ser baseada em disciplina e regras de negociação, e a parte de execução das regras de negociação é, na verdade, a parte quantitativa da negociação subjetiva.
Pelo contrário, um trader quantitativo bem-sucedido também deve ser um excelente trader subjetivo, porque o desenvolvimento de estratégias de negociação quantitativa é, na verdade, a cristalização da filosofia de negociação de uma pessoa. Se a percepção e a compreensão do mercado estiverem erradas desde o início, será difícil que as estratégias de negociação desenvolvidas gerem lucros a longo prazo.
Portanto, da perspectiva da lucratividade, o fator-chave que determina se um trader pode ter sucesso é a filosofia de negociação, não se é uma negociação subjetiva ou quantitativa. Trading quantitativo pode parecer altissonante na superfície, mas sua essência de lucro não é diferente do trading subjetivo em essência. Eles são como os dois lados de uma coisa, que são opostos e unificados.
Mas é inegável que a negociação quantitativa tem muitas vantagens em termos de ferramentas de negociação.
Revisão mais rápida: Se você quiser testar uma estratégia de negociação, precisa calcular uma grande quantidade de dados históricos. A negociação quantitativa pode calcular os resultados em poucos minutos. Essa velocidade é muitas vezes mais rápida do que a negociação subjetiva.
Mais científico:Para avaliar se uma estratégia é boa, confiamos em dados (como índice de Sharpe, taxa máxima de redução, retorno anualizado), em vez de charlatões egoístas.
Mais oportunidades:Existem milhares de produtos de negociação no mundo. É impossível monitorar o mercado ao mesmo tempo para negociação subjetiva, mas a negociação quantitativa pode monitorar todo o mercado em tempo real, sem perder nenhuma oportunidade de negociação e aumentando a lucratividade.
A negociação quantitativa pode realmente dar dinheiro?
Claro que você pode, mas é difícil manter isso por muito tempo. Se você ganha dinheiro ou não, isso não depende do trading quantitativo em si, ele é apenas uma ferramenta. O trading quantitativo simplesmente implementa ideias de trading de forma programada, regular e quantificada. O programa apenas substitui a execução. A parte difícil é ganhar dinheiro de forma estável a longo prazo, porque o mercado é um jogo e muda dinamicamente, e as ideias de negociação também devem mudar com o mercado.
Riscos da negociação quantitativa
A negociação quantitativa também tem riscos. Por quê? Porque a negociação quantitativa consiste em descobrir padrões em dados históricos e formar estratégias de negociação. No entanto, o mercado financeiro é um sistema ecológico, e suas leis e natureza humana são um processo dinâmico interativo. Na análise final, ainda é um mercado humano. As leis do mercado serão afetadas pela natureza humana, e a ganância e o medo na natureza humana mudarão com as mudanças no mercado. Existem muito poucas leis imutáveis no mercado. Não importa quão poderosa seja a estratégia de negociação, é difícil lidar com mudanças tão repentinas nas leis.
Resumir
A partir da explicação acima, podemos ver que a negociação quantitativa não é um método de negociação exclusivo, é apenas uma ferramenta de negociação para nos ajudar a analisar a lógica de negociação e melhorar as estratégias de negociação. Seja você um investidor de valor ou um investidor técnico, e esteja investindo em ações, títulos, commodities ou opções, tudo pode ser quantificado. Em comparação com os traders que tomam decisões com base na experiência pessoal, as armas nas mãos dos traders quantitativos são as evidências de mercado e a racionalidade.
Próxima Seção Prévia
A quantificação é apenas um método de negociação, a estratégia é apenas um transportador de ideias de negociação, e o programa executa cada processo de negociação. A próxima seção o levará pelo ciclo de vida completo da negociação quantitativa, que incluirá: concepção de estratégia, construção de modelo, backtesting e ajuste, negociação de simulação, negociação real, monitoramento de estratégia, etc.
Trabalho de casa
- Qual é a diferença mais importante entre negociação quantitativa e negociação subjetiva?
- Quais são as vantagens da negociação quantitativa em comparação à negociação subjetiva?
1.3 O que você precisa para se preparar para a negociação quantitativa?
resumo
Um ciclo de vida completo de negociação quantitativa não é apenas a estratégia de negociação em si. Ele consiste em pelo menos seis links, incluindo: concepção de estratégia, construção de modelo, backtesting e ajuste, negociação de simulação, negociação real, monitoramento de estratégia, etc.
Pensamento estratégico
Primeiro, para fazer negociação quantitativa, você deve primeiro retornar ao mercado de negociação, observar mais os preços no mercado, entender as leis das flutuações do mercado, tentar inferir a lógica de cada transação e, finalmente, resumir a estratégia de negociação. Não há atalho aqui. Você pode precisar ler livros clássicos de investimento, ou continuar a negociar e aprender com seus fracassos.
Para iniciantes em negociação quantitativa, a melhor maneira de desenvolver estratégias de negociação no início é imitar. Use diretamente os indicadores de análise técnica existentes para construir a lógica da estratégia e escrever as regras de compra e venda, para que você possa obter uma estratégia simples. Suponha que sua estratégia de negociação seja esta: comprar se o preço for maior que o preço médio dos últimos 10 dias e vender se o preço for menor que o preço médio dos últimos 10 dias. Então sua arquitetura é a seguinte (conforme mostrado abaixo):

Figura 1-2 Exemplo de estratégia de negociação
É claro que, à medida que você acumula experiência em estratégia e forma seus próprios métodos de negociação, suas escolhas lógicas se tornarão cada vez mais diversas, e você avançará para uma negociação quantitativa mais sistemática. Se você consegue ser um trader com pensamento quantitativo, seja no mercado de ações ou de futuros, isso é uma bênção, porque essa pessoa tem lucratividade sustentada e estável, não importa em qual mercado de negociação esteja.
Construindo o modelo
Em segundo lugar, você precisa dominar uma ferramenta de negociação quantitativa para escrever estratégias de negociação e concretizar suas ideias de negociação. Qualquer software comumente usado no mercado pode ser usado. Mas se você quer ser um trader quantitativo de alto nível, você precisa aprender
Conheça uma linguagem de computador. Recomendo Python porque é a linguagem autoritativa para computação científica.
Ele também fornece vários pacotes de análise de código aberto, processamento de arquivos, rede, bancos de dados, etc.
Se sua habilidade de programação for fraca, o que é considerado o ponto fraco da maioria dos iniciantes, é recomendável usar uma linguagem de programação visual relativamente simples ou linguagem Mai, que pode aumentar seu interesse em aprender negociação quantitativa e permitir que você se concentre em estratégias e conclua o desenvolvimento de estratégias de forma eficiente. Conforme mostrado abaixo: Usando a linguagem Mai, desenvolva uma estratégia de negociação conforme mencionado acima. Clique duas vezes na imagem para ver comentários detalhados no código da estratégia.

Figura 1-3 Página de desenvolvimento de estratégia de negociação
O código de estratégia na figura acima é demonstrado usando a linguagem Mai da ferramenta quantitativa do inventor. Ele integra muitos módulos funcionais que podem ser usados diretamente e suporta funções de backtesting e negociação real. É uma boa maneira de começar rapidamente.
Backtesting e ajuste
Então, depois de escrever o modelo de estratégia, o próximo passo é fazer o backtest da estratégia, bem como filtrar e otimizar os parâmetros. Você pode usar diferentes parâmetros para testar a estratégia e observar o índice de Sharpe, o drawdown máximo, o retorno anualizado, etc. Ao depurar e modificar continuamente a estratégia, eventualmente obteremos uma estratégia de negociação quantitativa completa.
Por exemplo, tomamos os dados históricos de 2017 como dados dentro da amostra e os dados históricos de 2018 como dados fora da amostra. Primeiro, usamos os dados de 2017 para otimizar vários conjuntos de parâmetros com bom desempenho e, em seguida, usamos esses parâmetros para otimizar os dados de 2018.
Teste retrospectivo de dados. Em termos gerais, os resultados de backtest fora da amostra não são tão bons quanto os resultados de backtest dentro da amostra. No entanto, se os resultados fora da amostra e dentro da amostra forem muito diferentes, então a estratégia é quase ineficaz e é necessário observar e analisar para determinar as razões do fracasso da estratégia.
Suponhamos que descobrimos que a estratégia falha devido a dados fora da amostra e que certas condições extremas de mercado levam a grandes perdas; então, podemos adicionar uma condição de stop loss fixa para evitar esse risco; se descobrirmos que a estratégia falha devido a muitas transações, podemos restringir um pouco a lógica de negociação e reduzir a frequência de negociação.
Deve-se notar que se a lógica de negociação em si estiver errada no começo, será difícil obter uma estratégia lucrativa, não importa o quanto você a modifique. Neste momento, você precisa reexaminar seu pensamento estratégico. Além disso, na otimização de parâmetros, quanto mais grupos de parâmetros disponíveis, melhor, indicando que a estratégia tem ampla aplicabilidade. No backtest, estratégias com poucas negociações podem sofrer de viés de sobrevivência. Se o resultado do backtest for uma curva de fundo super rentável
Em muitos casos, sua lógica está errada.
Negociação Simulada
Então, quando você obtiver uma estratégia com lógica de negociação correta e lucrativa tanto dentro quanto fora da amostra, não se apresse em negociar em uma conta real. Especialmente para iniciantes, é necessário executar uma conta simulada por pelo menos 3 meses. Se for uma estratégia overnight de média ou baixa frequência, será necessário um tempo de negociação simulado maior.
Em um mercado simulado completamente desconhecido no futuro, observe o desempenho da estratégia na negociação simulada, verifique cuidadosamente se o sinal de backtest é consistente com o sinal de negociação simulado e se há um desvio entre o preço quando a ordem é colocada e o preço quando a transação é concluída. Se o desempenho for consistente com as expectativas, isso significa que a estratégia é eficaz.
Transações em disco
Finalmente, depois de testar a estratégia por um longo tempo, é hora de colocá-la em prática. É claro que também devemos permanecer vigilantes e nos proteger contra condições extremas de mercado durante a negociação quantitativa. Na negociação real, as expectativas de uma estratégia geralmente são descontadas, e atingir 50% das expectativas é considerado qualificado.
Monitoramento de Políticas
Por fim, preciso lembrar a todos que, conforme a negociação progride, também devemos observar a eficácia da estratégia. Quando descobrimos que a estratégia tem perdas além das expectativas, devemos reavaliar a estratégia. Como as características do mercado mudarão, as estratégias que formulamos agora são voltadas principalmente para características passadas do mercado. Quando as características do mercado mudam, o modelo estratégico deve ser ajustado em tempo hábil, ou a estratégia deve ser temporariamente suspensa.
Resumir
Neste artigo, explicamos o processo completo de negociação quantitativa. Em suma, se você é um investidor com experiência de mercado, o que vai te segurar são os fundamentos da linguagem de computador. Você pode começar com a linguagem visual ou a linguagem Mai, treinar-se nesta plataforma, construir estratégias e, então, gradualmente, recorrer à negociação quantitativa de ponta em Python.
Se você é um estudante de ciências e engenharia ou um profissional de TI com fortes habilidades de programação, o que vai atrapalhar você será a experiência em investimento de mercado. Não subestime esse ponto. Como um investidor quantitativo qualificado, ambos os tipos de conhecimento são indispensáveis.
Próxima Seção Prévia
O núcleo de todo o ciclo de vida da negociação quantitativa ainda é a estratégia de negociação. Na próxima seção, elaboraremos os elementos de uma estratégia de negociação completa sob a perspectiva da estrutura da estratégia de negociação. Isso ajudará você a construir sua estratégia de negociação de forma mais abrangente e levar a negociação quantitativa a um novo patamar!
Trabalho de casa
- Tente escrever a estratégia de negociação nesta seção usando a linguagem Mai.
- Qual é o indicador de desempenho mais importante no backtesting de negociação quantitativa?
1.4 Quais são os elementos de uma estratégia completa?
resumo
Uma estratégia completa é, na verdade, uma variedade de regras que os traders definem para si mesmos. Ela cobre todos os aspectos da transação e não deixa espaço para a imaginação subjetiva dos traders. A estratégia dará uma resposta para cada decisão de compra e venda. Inclui pelo menos seleção de estratégia, seleção de produto, gestão de capital, colocação de ordens, resposta a condições extremas de mercado, mentalidade de negociação, etc.
Seleção de Estratégia
Da perspectiva dos fundos de hedge, as estratégias de negociação tradicionais podem ser divididas em negociação de tendências, negociação de pares, negociação de cesta, negociação orientada por eventos, negociação de alta frequência, estratégias de opções, etc., conforme mostrado na figura abaixo. É claro que a maneira como as estratégias são categorizadas não é fixa.

Figura 1-4 Classificação da estratégia de negociação
Para iniciantes em trading quantitativo, você não precisa se preocupar com tantos termos e conceitos. Basta começar do mais simples passo a passo. Se eu recomendasse apenas uma estratégia de negociação quantitativa para iniciantes, seria a negociação de tendências, porque ela é simples e eficaz. Acredito que mesmo que você não aprenda sistematicamente conhecimentos financeiros, você ainda pode fazer boas negociações. E essa estratégia já existe há muito tempo, nas primeiras estratégias de negociação pública, e ainda é eficaz em vários mercados hoje porque a natureza humana é difícil de mudar.
O que comprar e vender
Qualquer pessoa que já tenha feito trading deve saber que cada variedade tem sua própria personalidade. Algumas variedades têm uma personalidade muito "quente", com boa liquidez, grandes flutuações e alta volatilidade; algumas variedades têm uma personalidade muito "dócil", flutuando dentro de uma certa faixa durante todo o ano e têm baixa volatilidade.
Portanto, ao escolher produtos de trading, você deve ter o conceito de volatilidade. Produtos com alta volatilidade podem frequentemente desenvolver facilmente uma boa tendência. Para futuros de commodities, se for uma estratégia de rastreamento de tendências, tente escolher produtos industriais. Em termos de atributos de produtos, produtos industriais tendem a ter maior volatilidade do que produtos agrícolas.
Diferentes estratégias se adaptam a diferentes condições de mercado, e escolher os produtos de negociação certos é um começo muito crítico para o grande projeto de negociação de futuros. Em sentido absoluto, não existem variedades absolutamente boas ou absolutamente ruins. Dependendo do seu estilo de investimento e tolerância ao risco, você precisa fazer ajustes correspondentes aos seus próprios padrões.
Quanto comprar e vender
É fácil perder dinheiro em negociações, mas é difícil ganhar dinheiro. Quando os fundos da conta perdem 50%, um lucro de 100% é necessário para recuperar a perda. Mesmo que você consiga lucrar 100% muitas vezes, você só precisa perder 100% uma vez para perder tudo. Portanto, uma estratégia de negociação madura deve incluir gestão de dinheiro.
Para facilitar o entendimento de todos, a estratégia de média móvel da seção anterior também é usada aqui. De fato, muitas estratégias de negociação criadas com indicadores técnicos tradicionais geralmente têm uma taxa máxima de rebaixamento de mais de 50% ou até mais. Mas uma estratégia muito arriscada e completamente impraticável?
Obviamente que não, a taxa máxima de saque pode ser completamente controlada por meio da gestão de fundos. Se a posição for reduzida pela metade, o risco geral também será reduzido pela metade, e a taxa máxima de drawdown se tornará 30%. Se a posição for reduzida pela metade novamente, a taxa máxima de drawdown se tornará 15%. No final, obtemos uma estratégia com uma taxa máxima de drawdown controlada em torno de 15%. Este é um método simples e rudimentar de gestão de dinheiro. Muitas pessoas sabem que não podem operar com uma posição completa, mas não sabem por que não podem operar com uma posição completa. A resposta está aqui.
Quando comprar e vender
Um bom ponto de compra é metade do sucesso, pois permite que você saia rapidamente da área de custos. Mas ninguém pode lhe dizer que começar deste ponto é certo e começar daquele ponto é errado. Abrir uma posição não é o cerne da negociação. O cerne da negociação é como otimizar a posição o máximo possível após abrir uma posição.
Seja uma estratégia de curto ou longo prazo, o que importa não é quem mantém a posição por mais tempo, mas a relação risco-retorno. Em outras palavras, o resultado final que afeta o desempenho da estratégia é como sair e quando realizar lucros. Os métodos de saída podem ser divididos em dois tipos: saída stop loss e saída take profit. Essas duas partes são necessárias para qualquer sistema de negociação e também são divisores de águas importantes que determinam o sucesso ou o fracasso de uma estratégia de negociação.
Como comprar e vender
1. Tipo e método de realização de um pedido:
Existem muitos tipos e métodos de colocação de ordens, como: usar ordens de limite de fila, preço de contraparte, preço mais recente, sobrepreço, preço limite superior, preço limite inferior, comprar primeiro preço, comprar segundo preço, vender primeiro preço, vender segundo preço ou usar o preço da fila primeiro e depois o sobrepreço, colocar ordens em lotes ou dividir ordens grandes em ordens pequenas ou simplesmente colocar todas as ordens diretamente.
2. Cancelar um pedido
Se a ordem não for executada, você deve continuar esperando ou cancelar a ordem? A condição de cancelamento é baseada no tempo. Por exemplo, se não houver nenhuma transação em 10 segundos, e o preço estiver a 10 saltos de distância do preço quando a ordem foi colocada, você deve continuar esperando, cancelar a ordem ou acompanhar a ordem.
3. Pedidos de acompanhamento
Quando uma ordem não é executada, se deve dar seguimento à ordem. Se você perseguir uma ordem, você deve persegui-la com base no preço mais recente, no preço da contraparte ou no limite de preço? Se a ordem perseguida ainda não foi executada, você deve continuar a persegui-la?
4. Limite de preço
O que devo fazer se o sinal de ordem aparecer no preço limite superior ou inferior? Se deve entrar na fila para execução nos preços limite superior e inferior e o que fazer se nenhuma execução for feita.
5. Chamada de Leilão
Você deve participar do leilão de abertura e como participar.
6. Negociação noturna
Para alguns futuros de commodities, a negociação noturna acontece das 21:00 às 02:30 do dia seguinte. Durante esse período, você pode escolher se quer fazê-la manualmente ou pelo computador.
7. Grandes festivais
Você precisa manter suas posições antes dos feriados extralongos durante os grandes festivais? Como controlar os riscos caso seja retido.
Condições extremas de mercado
-
Grandes flutuações de preços em um curto período de tempo
Como lidar com situações como limites de preços instantâneos, limites de preços contínuos, ordens erradas, estouros de preços no mercado cisne negro, etc. -
Risco de liquidez
Se a contraparte não tiver o volume de ordens que você deseja, mas você precisar concluir a transação a tempo, especialmente quando a liquidez dos contratos não principais for muito baixa, as ordens que você fizer puderem facilmente causar um impacto no mercado e o deslizamento for grande, como você deve lidar com isso? -
Mudanças nas regras de variedades
Produtos de futuros de commodities são adicionados à negociação noturna, a taxa de margem é aumentada e a taxa de manuseio é aumentada. Estratégias de curto prazo, em particular, serão muito sensíveis a essas mudanças. -
Riscos do ambiente de negociação
Por exemplo: como responder quando ocorrem quedas repentinas de energia, interrupções na Internet, falhas de computador, falhas de software, suspensão de transferências bancárias de futuros, desastres naturais, etc.
A probabilidade da situação acima ocorrer é muito pequena, ou quase impossível. Mas se isso pode acontecer, acontecerá. É necessário fazer essas suposições e tomar precauções.
Construção Psicológica
As três principais emoções psicológicas comuns na negociação são ganância, medo e sorte. Os investidores precisam de um forte sistema de psicologia de negociação para controlar e até mesmo utilizar as três emoções acima em diferentes estágios.
Antes de negociar, você deve ter uma expectativa geral para o futuro, incluindo expectativas de mercado e expectativas psicológicas para o produto. As expectativas de mercado referem-se a uma meta clara para a posição do mercado e direção futura, e as expectativas do produto referem-se às oportunidades de negociação e ao status de risco do produto em sua posição atual. Sem a base psicológica acima, nada pode ser alcançado.
Todo o processo de negociação real é um processo de análise, correção e execução contínuas. Não há muito tempo gasto em negociação, mas mais tempo gasto em rastreamento e paciência. Este é um processo que examina de forma abrangente a mentalidade e testa a natureza humana. Todos os hábitos dos traders serão totalmente exibidos e ampliados durante o processo de trading. Somente aprendendo e resumindo constantemente experiências e lições, e continuando a ganhar experiência, podemos superar o pensamento comum e as fraquezas psicológicas da natureza humana.
Resumir
Para resumir, a chamada estratégia de negociação é, na verdade, assim. Ela tem seu lado perfeito e seu lado incompleto. Quando medimos se uma estratégia de negociação é razoável, não podemos olhar apenas para seu lado perfeito ou seu lado incompleto. Devemos analisar de forma abrangente a integridade da estratégia.
Finalmente, com base nas características da estratégia, combinadas com sua própria personalidade e situação financeira, meça se a estratégia é adequada para você. Se for adequada para você, você deve avaliar completamente a probabilidade de segui-la e planejar o pior resultado com antecedência. Se você pensou no pior cenário, então a possibilidade de executá-lo é relativamente alta.
Lembre-se, na negociação, a confiança vem do seu reconhecimento sincero, e a confiança vem da filosofia de negociação correta!
Próxima Seção Prévia
Este é o último artigo do primeiro capítulo. No próximo capítulo, explicaremos mais detalhadamente as ferramentas quantitativas de trading, incluindo: uma introdução geral às ferramentas quantitativas, como configurar um sistema quantitativo de trading, explicações comuns de API e como escrever estratégias em um sistema quantitativo.
Trabalho de casa
- As estratégias de negociação de tendências devem escolher produtos de alta volatilidade ou produtos de baixa volatilidade?
- Quais são os tipos de ordens de negociação?
Capítulo 2 Introdução às Ferramentas Quantitativas
2.1 Introdução geral às ferramentas quantitativas
resumo
No capítulo anterior, aprendemos sobre os conceitos relevantes da negociação quantitativa e adquirimos uma compreensão básica da negociação quantitativa. Então, quais são as ferramentas para negociação quantitativa no mercado? Como devemos escolher de acordo com nossas necessidades?
Software comercial e de código aberto
Ferramentas de negociação quantitativa doméstica geralmente podem ser divididas em duas categorias: software de código aberto e software comercial. O chamado software de código aberto pode ser entendido como um software cujo código-fonte é aberto e pode ser baixado diretamente para uso; software comercial geralmente se refere ao software de código fechado mantido e operado por empresas comerciais, que geralmente são pagas.
Software quantitativo de código aberto
Primeiro de tudo, o software de código aberto tem grande flexibilidade e é completamente gratuito. Os usuários podem basicamente usar este software para implementar qualquer função, seja estratégias de negociação de média ou baixa frequência, estratégias de arbitragem ou estratégias de opções, que podem ser alcançadas por meio de módulos personalizados. Como os usuários controlam o código-fonte do software e podem entender cada canto do software, ele é mais confiável e seguro.
Embora o software de código aberto tenha muitas vantagens, ele não é muito amigável para iniciantes em trading quantitativo. Você precisa aprender sistematicamente uma linguagem de programação padrão, como Python, Java ou C++. Do começo ao desistir, a dificuldade pode ser imaginada. Às vezes, depurar bugs pode fazer você duvidar da sua vida. E, diferentemente do software comercial, há um serviço de atendimento técnico dedicado para responder às suas perguntas instantaneamente. Você não só não sentirá uma sensação de realização neste momento, como também ficará desencorajado de continuar aprendendo.
Portanto, de uma perspectiva de aprendizado, é recomendado que iniciantes em negociação quantitativa comecem passo a passo, começando com o software comercial mais simples. Embora seja pago, se a estratégia for lucrativa, a taxa de software é apenas uma fração do lucro. Além disso, o software comercial geralmente é mantido por uma equipe, e sua maturidade é definitivamente muito mais forte do que o software de código aberto.
Software Quantitativo Empresarial
Existem dezenas de softwares comerciais para negociação quantitativa na China, como: Interactive Broker, que é profissional, abrangente e tem muitos produtos; APAMA, que pode lidar com grandes quantidades de dados simultâneos e é adequado para negociação de alta frequência; SPT, que suporta interface C++ e tem boa eficiência de execução; Nuggets Quantitative, que se concentra na execução de transações e controle de risco; e MC, TB e MQ para traders individuais. Na figura abaixo, conduzimos uma avaliação abrangente das principais plataformas quantitativas domésticas e também fizemos uma certa classificação da dificuldade das ferramentas quantitativas. Os leitores podem escolher de acordo com sua situação real.

Figura 2-1 Avaliação abrangente das principais plataformas quantitativas nacionais
Embora os acima sejam softwares comerciais, eles também usam linguagens de programação padrão ou linguagens de script. Em vez de fazer isso, é melhor usar diretamente software de código aberto que seja gratuito e seguro. É recomendado que iniciantes usem diretamente a Plataforma Quantitativa FMZ Inventor, o site é www.fmz.com. Como um trampolim para aprender negociação quantitativa.
Conheça o inventor das ferramentas de negociação quantitativa
As ferramentas quantitativas do inventor são amigáveis para novatos. Mesmo que você não tenha conhecimento básico, você pode experimentar o charme da análise quantitativa com base nas ferramentas nela. Esta ferramenta foi projetada para negociação de alta frequência e tem requisitos rigorosos de desempenho e segurança. Dê suporte a estratégias de alta frequência, estratégias de arbitragem e estratégias de tendência. E integra o processo completo de desenvolvimento de estratégia, testes, otimização, simulação e negociação real. Além disso, ele oferece suporte tanto à linguagem Mai, simples e fácil de usar, quanto a linguagens avançadas de negociação quantitativa, como Python e C++, o que significa uma troca perfeita após um aprendizado. E somente a negociação real é cobrada 0,125 yuan/hora, o que reduz seus custos de software durante o estágio de aprendizado. Ao mesmo tempo, você pode fazer negociação simulada de graça.
Dando o primeiro passo em direção à quantificação: usando ferramentas quantitativas
Ferramentas quantitativas são muito fáceis de usar. Você só precisa entrar no site e clicar nele para criar sua própria estratégia quantitativa. Você pode fazer login no site oficial da Inventor Quantitative Tool, registrar-se e fazer login, e clicar no centro de controle para usá-lo (como mostrado abaixo). É semelhante ao TikTok atualmente popular. Após registrar-se e fazer login, você pode postar seus próprios vídeos curtos e, após fazer login na ferramenta quantitativa, pode criar sua própria estratégia de negociação quantitativa.

Figura 2-2 Página principal da plataforma de negociação quantitativa FMZ
Haverá uma área de função centralizada para programar ferramentas quantitativas. A área de função inclui principalmente (conforme mostrado abaixo). O centro de controle no canto superior esquerdo é a função principal da ferramenta quantitativa. Depois de clicar nele, você pode escrever estratégias de negociação e backtesting de estratégia, definir a bolsa para produtos de negociação, criar um custodiante para gerenciar robôs de estratégia e criar robôs de negociação quantitativa específicos. Quanto ao uso específico das funções, nós as apresentaremos em detalhes em artigos subsequentes. No momento, estamos apenas fazendo trabalho preliminar.

Figura 2-3 Página de gerenciamento após efetuar login na plataforma de negociação quantitativa FMZ
Amigos que são novos em pesquisa quantitativa não precisam ficar desanimados por não entender códigos e programação. Para diminuir o limite para os usuários, a comunidade oficial produziu muitos tutoriais em vídeo para ajudar iniciantes em negociação quantitativa a começar rapidamente; ao mesmo tempo, o Strategy Square agrega milhares de estratégias de negociação oficiais e de terceiros, gratuitas e abertas para todos copiarem e aprenderem.
Além disso, amostras de estratégia clássicas também são configuradas na interface de edição de estratégia. Você pode usar diretamente o código de estratégia clicando nele e experimentar facilmente o processo central de toda a negociação quantitativa. Até mesmo usuários novatos podem aprender imediatamente e segui-lo!
Antes da negociação com dinheiro real, a negociação simulada também é uma etapa indispensável. A negociação simulada desta ferramenta está em conformidade com as regras de câmbio e é completamente gratuita. O tempo, preço, volume de pedidos, etc. incluídos na simulação são correspondidos com o mercado real em tempo real, o que é altamente consistente com a negociação real. Melhore muito a eficiência da verificação de estratégia.
Resumir
Seja software de código aberto ou software comercial, não há distinção entre bom e ruim, e não há ferramenta de negociação quantitativa perfeita. Cada ferramenta tem seu próprio foco. O mais importante é escolher a ferramenta que se adapta a você de acordo com suas necessidades. O software comercial exige pagamento, tem serviços melhores e assim por diante, e pode ser mais adequado para iniciantes que estão entrando neste setor. Se você está neste setor há muito tempo e acumulou muita experiência, ou precisa implementar estratégias de negociação mais complexas, o software de código aberto é uma escolha melhor.
Próxima Seção Prévia
Como usar as ferramentas? Assim como quando compramos um novo celular e precisamos fazer configurações simples de inicialização quando o ligamos pela primeira vez, as ferramentas quantitativas também precisam de configurações e ajustes básicos. Na próxima seção, nós o guiaremos passo a passo para configurar a ferramenta de negociação quantitativa Inventor. Abra a primeira porta para a negociação quantitativa, incluindo: adicionar bolsas, adicionar custodiantes, criar estratégias de negociação, criar robôs quantitativos, etc. Depois de concluir a configuração básica, você pode escrever oficialmente sua primeira estratégia quantitativa.
Trabalho de casa
- Quais são as duas principais categorias de ferramentas de negociação quantitativa?
- Quais são as linguagens de programação quantitativa comumente usadas?
2.2 Como configurar o Inventor Quantitative Trading System
resumo
Ao desenvolver estratégias quantitativas de trading, a primeira coisa a fazer é configurar as ferramentas de trading. O que é configuração? Na verdade, são apenas configurações. Nesta seção, mostraremos como configurar uma bolsa, criar uma estratégia de negociação e criar um robô de negociação quantitativa, todos pré-requisitos necessários para a negociação quantitativa.
A configuração é dividida em configuração de negociação de simulação de aprendizado de nível de entrada e configuração de negociação em tempo real. Nesta categoria, focamos principalmente em futuros de commodities nacionais. Outros tipos de investimento quantitativo não são recomendados ou introduzidos devido a condições nacionais específicas, mas o processo operacional é o mesmo, apenas o processo de configuração é diferente.
Adicionar uma bolsa
Adicionar uma exchange é o primeiro passo em todo o processo de configuração. Veja a figura abaixo para o processo específico. Nesta etapa, precisamos enfatizar que adicionar uma exchange não é difícil para aqueles que não têm certeza de qual exchange pertencem. É recomendável simular o aprendizado primeiro.

Figura 2-4 Registro da plataforma de negociação quantitativa FMZ e adição de etapas de troca
Configuração da Bolsa de Futuros de Commodities (Ao Vivo)
Nossa negociação quantitativa em tempo real foca principalmente em produtos de negociação de futuros domésticos. Atualmente, os principais objetos de serviço do Inventor Quantitative também são bolsas de futuros domésticas. Para amigos que fazem câmbio estrangeiro, o Inventor Quantitative pode ser usado como uma plataforma de aprendizado, porque a negociação quantitativa de câmbio estrangeiro já apareceu em plataformas como MT5, mas é mais profissional.
Os problemas que precisam ser observados na configuração em tempo real são os seguintes: como as ferramentas quantitativas do inventor oferecem suporte a vários mercados de negociação, ao configurar futuros de commodities, você deve primeiro selecionar "futuros tradicionais" na etapa 1; na etapa 2, você precisa preencher a conta de futuros e a senha fornecidas a você pela empresa de futuros onde você abriu uma conta.
A ferramenta quantitativa do inventor adota o protocolo CTP e oferece suporte a todas as empresas de futuros nacionais. Ao configurar o mercado real, não haverá falha de link, a menos que a conta e a senha estejam erradas. Portanto, os iniciantes devem prestar atenção para verificar a conta e a senha claramente.

Figura 2-5 A plataforma de negociação quantitativa FMZ adiciona bolsa de futuros
Configuração de Commodity Futures Exchange (Simulação)
Para amigos que são novos em futuros de commodities, sugiro que simulem a negociação por um período de tempo primeiro, porque no processo de desenvolvimento de estratégias de negociação quantitativa, testes, depuração e otimização contínuos são necessários. Assim como ao dirigir, você certamente passará alguns meses aprendendo em uma autoescola no começo, e então poderá pegar a estrada depois de passar no teste e obter sua carteira de motorista.
Aqui, recomendamos usar a negociação simulada SimNow. SimNow é uma plataforma de negociação de simulação financeira especialmente criada pela Shangqi Technology para investidores. Este produto simula as regras de negociação e liquidação de várias bolsas e atualmente oferece suporte ao negócio de futuros de commodities de várias bolsas de futuros nacionais. Para o processo específico, consulte a figura abaixo.

Figura 2-6 Página de gerenciamento da plataforma de negociação quantitativa FMZ após o login
Escrita de estratégia
A biblioteca de estratégias é onde os códigos são armazenados, o que equivale ao nosso depósito de estratégias de negociação quantitativa. Ele é dividido principalmente em duas funções: escrita de estratégia e backtesting de simulação. A área de escrita de estratégia é nossa principal área de trabalho para desenvolver estratégias no futuro (conforme mostrado abaixo). Muitos iniciantes costumam ficar bloqueados por vários códigos e acham muito difícil. Na verdade, contanto que você preste um pouco de atenção, você pode aprender esses códigos. Não tenha nenhum fardo psicológico. A área de backtesting de simulação pode ser usada para depurar estratégias durante o processo de desenvolvimento de estratégias, bem como para testar estratégias após o desenvolvimento da estratégia ser concluído. Explicaremos isso em detalhes nos capítulos seguintes.

Figura 2-7 Etapas para criar uma política
Criando um robô de negociação quantitativa
Um robô de trading quantitativo é o executor de uma estratégia de trading. Uma vez que a estratégia é criada, crie um robô que pode automaticamente ajudar você a executar toda lógica de trading no código da estratégia, assim como abrir e fechar posições, retirar ordens e outras operações de compra e venda. As etapas específicas para criar um robô de negociação quantitativa são as seguintes: Primeiro, etapa ①: Na página do centro de controle, clique em "Robô", clique em "Criar Robô" Etapa ②: Dê um nome personalizado ao robô. Etapa 3: Clique no sinal “+” para adicionar uma plataforma de negociação. Etapa 4: Clique em "Criar robô"

Figura 2-8 Etapas para criar um robô
Resumir
No processo acima, exceto pela primeira etapa de seleção de negociação real e simulação, as etapas subsequentes de escrita de estratégia e criação de robôs de negociação são etapas unificadas. Toda a ferramenta quantitativa foi configurada, o robô de negociação já está em execução e realizará operações de compra e venda de acordo com as condições específicas da estratégia. Há três etapas para configurar a negociação quantitativa: adicionar uma bolsa e preencher a senha da sua conta de futuros; escrever uma estratégia de negociação; e criar um robô de negociação quantitativa em tempo real. Não é simples?
Próxima Seção Prévia
Embora a negociação quantitativa possa ser alcançada em apenas três etapas simples, você pode descobrir que adicionar bolsas e criar robôs de negociação quantitativa são fáceis. No entanto, implementar uma estratégia de negociação viável não é tão fácil. Na próxima seção, mostraremos a você as APIs mais usadas em negociação quantitativa para prepará-lo para escrever uma estratégia de negociação viável. Porque não importa que tipo de ferramenta de negociação quantitativa seja usada, ela é inseparável da interface da API, que é uma função importante para a realização de estratégias de negociação quantitativa.
Trabalho de casa
- Tente adicionar uma troca.
- Tente escrever a estratégia de negociação nesta seção.
2.3 Explicação da API comum
resumo
Quando se trata de programação, não podemos evitar API. Para muitas pessoas que não são de TI, o que exatamente é API? API ≈ Não entendo. Nesta seção, explicaremos em linguagem simples o que é API e apresentaremos as APIs comumente usadas em ferramentas quantitativas para inventores.
O que é uma API?
Se você pesquisar online, obterá os seguintes resultados: API (Application Programming Interface) é um conjunto de funções predefinidas que visa fornecer aos aplicativos e desenvolvedores a capacidade de acessar um conjunto de rotinas baseadas em determinado software ou hardware sem precisar acessar o código-fonte ou entender os detalhes do mecanismo de funcionamento interno. Então, para simplificar, o que exatamente é uma API?
De fato, no nosso dia a dia, temos muitos cenários semelhantes a APIs. Por exemplo, quando você vai a um restaurante para comer, você só precisa olhar o menu e pedir a comida, sem precisar saber como ela é feita. Os nomes dos pratos no menu são as APIs específicas, e o menu é a documentação da API.
O que é API em negociação quantitativa?
Se você precisa saber o preço de abertura do produto atual hoje, não precisa saber como obtê-lo. Você só precisa escrever "OPEN" no editor de código e usá-lo diretamente. "OPEN" é a API do preço de abertura na linguagem Mai.
API de linguagem Mai comumente usada
Antes de explicar a API da linguagem Mai, vamos dar uma olhada na estrutura de código comum e seus componentes funcionais. Isso ajudará você a entender melhor a API. Veja o exemplo abaixo:

Figura 2-9 Exemplo de idioma Mai
Conforme mostrado no código acima:
O AA roxo é uma variável. Uma variável é uma quantidade que pode mudar, assim como a álgebra que aprendemos no ensino fundamental. Se o preço de abertura for atribuído a AA, então AA é o preço de abertura; se o preço mais alto for atribuído a AA, então AA é o preço mais alto. Claro, AA é apenas um nome personalizado, você também pode defini-lo como BB.
O “:=” verde significa atribuição, o que significa atribuir o valor do lado direito do “:=” à variável do lado esquerdo.
O código laranja é a API da linguagem Mai do Inventor Quantitative Tool. Note que OPEN na primeira linha é a API para obter o preço de fechamento, que pode ser usado diretamente; MA na segunda linha é a API para obter a média móvel, que requer que dois parâmetros sejam passados, ou seja, você precisa informar ao Inventor Quantitative Tool que tipo de média móvel você precisa: se você quiser obter uma média móvel de 50 períodos calculada com base no preço de abertura, você pode escrevê-la como: MA(OPEN,50); note que há uma vírgula em inglês entre os dois parâmetros.
O “//” amarelo é um símbolo de comentário, e os caracteres chineses azuis atrás dele são o conteúdo do comentário. Eles são para você ler sozinho, e são usados para indicar o que a linha de código significa. O programa não processa comentários quando está em execução. Observe que antes do caractere de comentário, cada linha de código deve ter um ponto e vírgula em inglês no final da linha.
Com o entendimento básico da estrutura do código, apresentaremos algumas linguagens comumente usadas abaixo, e também usaremos essas linguagens com frequência no futuro.
ABERTO——Obtenha o preço de abertura da última linha K
Exemplo: AA: =ABERTO; Obtenha o preço de abertura da última linha K e atribua o resultado a AA
ALTO——Obtenha o preço mais alto da mais recente linha K
Exemplo: AA: =ALTO; Obtenha o preço mais alto da última linha K e atribua o resultado a AA
BAIXO——Obtenha o menor preço da mais recente linha K
Exemplo: AA: =LOW; Obtenha o menor preço da última linha K e atribua o resultado a AA
FECHAR——Obtenha o último preço de fechamento da linha K. Quando a linha K intradiária não tiver terminado, obtenha o último preço
Exemplo: AA: =CLOSE; Obtenha o preço de fechamento da última linha K e atribua o resultado a AA
VOL——Obtenha o volume de transações mais recente da K-line
Exemplo: AA: =VOL; Obtenha o volume de transação mais recente da linha K e atribua o resultado a AA
REF(X,N) - Faz referência ao valor de X N ciclos atrás.
Exemplo: REF(CLOSE,1); Obtenha o preço de abertura da linha K anterior
MA(X,N)——Encontre a média móvel simples de X em N períodos
Exemplo: MA(CLOSE,10); //Obtenha a média móvel de 10 períodos da última linha K
CROSSUP(A,B)——Quando A cruza B de baixo para cima, retorna 1 (Sim), caso contrário, retorna 0 (Não)
Exemplo: CROSSUP(CLOSE,MA(C,10)) // O preço de fechamento cruza a média de preços de 10 períodos
CROSSDOWN(A,B)——Quando A cruza B de cima, retorna 1 (Sim), caso contrário, retorna 0 (Não)
Exemplo: CROSSDOWN(CLOSE,MA(C,10)) // O preço de fechamento cruza abaixo do preço médio de 10 períodos
BK——Comprar posição de abertura
Exemplo: CLOSE>MA(CLOSE,5),BK; //O preço de fechamento é maior que a média móvel de 5 períodos, posição de compra
SP——Vender para fechar posição
Exemplo: CLOSE<MA(CLOSE,5),SP; // O preço de fechamento é menor que a média móvel de 5 períodos, venda e feche a posição
SK——Vender posição de abertura
Exemplo: CLOSE<MA(CLOSE,5),SK; //o preço de fechamento é menor que a média móvel de 5 períodos, vender posição
BP——Comprar para fechar
Exemplo: CLOSE>MA(CLOSE,5),BP; //O preço de fechamento é maior que a média móvel de 5 períodos, compre e feche a posição
BPK——Compre para fechar uma posição e compre para abrir uma posição (reverso longo)
Exemplo: CLOSE>MA(CLOSE,5),BPK; // O preço de fechamento é maior que a média móvel de 5 períodos, feche a posição vendida e depois compre para abrir uma nova posição.
SPK——Vender para fechar uma posição e vender para abrir uma posição (venda a descoberto)
Exemplo: CLOSE<MA(CLOSE,5),SPK; // O preço de fechamento é menor que a média móvel de 5 períodos, feche a posição comprada e depois venda a posição aberta.
FECHAMENTO——Fechar todas as posições, recomendado para uso no modelo de aumento e diminuição de posição. Exemplo: CLOSEOUT; fechar todas as posições em todas as direções.
APIs de linguagem JavaScript comumente usadas
Antes de explicar a API da linguagem JavaScript, vamos dar uma olhada na estrutura de código comum e seus componentes funcionais. Isso ajudará você a entender melhor a API. Veja o exemplo abaixo:

Figura 2-10 Exemplo de código JavaScript
Conforme mostrado no código acima:
Criar uma variável na linguagem JavaScript é frequentemente chamado de "declarar" a variável. No código vermelho, usamos a palavra-chave var para declarar uma variável, e o nome da variável está no código laranja: “aa”.
Em JavaScript, o sinal de igual é usado para atribuir valores, ou seja, o valor do lado direito de "=" é atribuído à variável do lado esquerdo.
O código ciano "exchange" é o objeto exchange. O exchange aqui se refere à empresa de futuros que você definiu. Este é um formato fixo, o que significa que quando você chama a API da linguagem JavaScript, você deve especificar o objeto exchange.
O código verde é a API JavaScript. Quando a chamamos, estamos, na verdade, chamando a função no objeto exchange. Observe o ponto após o código azul, que também é um formato fixo. A função aqui é a mesma que aprendemos no ensino fundamental. Se a função não exigir parâmetros, use parênteses vazios; se a função precisar passar parâmetros, escreva os parâmetros dentro dos parênteses.
Depois de entender a estrutura básica e os princípios do código por meio de exemplos, mostraremos diversas APIs da linguagem JavaScript que você usará com frequência no futuro.
SetContractType("Código do produto")——Defina o tipo de contrato, ou seja, qual produto você deseja negociar
Exemplo: exchange.SetContractType("rb1905"); //Defina o tipo de transação como "Contrato de vergalhão 1905"
GetTicker——Obter dados de Tick
Exemplo: exchange.GetTicker(); //Obter dados do Tick
GetRecords——Obter dados da linha K
Exemplo: exchange.GetRecords(); //Obter dados da linha K
Comprar
Exemplo: exchange.Buy(5000, 1); //Compre um lote a 5000 yuans
Vender——Comprar
Exemplo: exchange.Sell(5000, 1); //Vender um lote por 5.000 yuans
GetAccount——Obter informações da conta
Exemplo: exchange.GetAccount(); //Obter informações da conta
GetPosition——Obter informações de posição
Exemplo: exchange.GetPosition(); //Obter informações de posição
SetDirection——Defina o tipo de ordem longo ou curto
Exemplo:
exchange.SetDirection("buy"); //Defina o tipo de ordem para comprar para abrir uma posição longa
exchange.SetDirection("closebuy"); //Defina o tipo de ordem para vender para fechar posições longas
exchange.SetDirection("sell"); //Defina o tipo de ordem para vender para abrir uma posição curta
exchange.SetDirection("closesell"); //Defina o tipo de ordem para comprar para fechar posições curtas
Log - Produzir uma mensagem no log
Exemplo: Log("hello, world"); // Saída "hello world" no log
Sleep - Pausar o programa por um período de tempo
Exemplo: Sleep(1000); //Pausa o programa por 1 segundo
Alguns de vocês podem ter dúvidas: como lembrar de tantas APIs acima? Na verdade, você não precisa memorizar tudo isso. O site oficial do Inventor Quant tem um conjunto detalhado de documentação de API. Assim como consultar um dicionário, quando você precisar, basta consultá-lo. Não se deixe intimidar pelos códigos e outros conteúdos com os quais você está familiarizado pela primeira vez. O que queremos é organizar nossas próprias estratégias por meio dessas linguagens. Lembre-se de que a tecnologia nunca é o limite da quantificação. Se você tem uma boa estratégia é a chave para se você pode ir a longo prazo no mercado quantitativo.
Resumir
As acima são as APIs mais comumente usadas em negociação quantitativa, que basicamente incluem: obter dados, calcular dados, colocar ordens de compra e venda, que são suficientes para lidar com uma estratégia de negociação quantitativa simples. Claro, se você quiser escrever uma estratégia mais complexa, você precisa ir ao site oficial do Inventor Quantitative Tool para obtê-la.
Trabalho de casa
- Tente escrever uma declaração em língua Mai de que a média móvel de 5 períodos cruza a média móvel de 10 períodos.
- Tente usar GetAccount em JavaScript para obter as informações da sua conta e imprimi-las no log usando Log.
Próxima Seção Prévia
Programar é como montar blocos de Lego, APIs são como as várias partes dos blocos, e o processo de programação é juntar as várias partes de Lego em um brinquedo completo. Na próxima seção, vou mostrar a você como usar a API da linguagem Mai para montar uma estratégia de negociação quantitativa completa.
2.4 Como escrever estratégias no Sistema Quantitativo do Inventor
resumo
Depois de estudar as seções anteriores, você pode finalmente começar a escrever estratégias de negociação quantitativa. Este será o passo mais importante para você passar da negociação manual para a negociação quantitativa. Na verdade, não é tão misterioso assim. Escrever uma estratégia nada mais é do que transformar suas ideias em código. Esta seção implementará uma estratégia de negociação quantitativa do zero e familiarizará você com a forma de escrever estratégias no Sistema Quantitativo do Inventor.
Preparar
Primeiro, abra o site oficial do Inventor Quantitative Tool e clique em "Strategy Library" e "New Strategy" por sua vez. Deve-se notar que antes de começar a escrever o código, você precisa selecionar a linguagem Mai ou a linguagem JavaScript no menu suspenso de linguagem de programação. Claro, a plataforma também suporta Python, C++ e linguagem visual.
Ideias estratégicas
No capítulo anterior, apresentamos uma estratégia para romper a média móvel. Ou seja: se o preço for maior que a média dos últimos 10 dias, compre; se o preço for menor que a média dos últimos 10 dias, venda. Entretanto, embora o preço possa refletir diretamente o status do mercado, haverá muitos sinais falsos de rompimento; então, precisamos atualizar e melhorar essa estratégia.
Primeiro, selecione uma média móvel de período maior para determinar a direção da tendência, que tenha filtrado pelo menos quase metade dos sinais de rompimento falso. Embora a média móvel de período grande seja lenta, ela será mais estável; então, para aumentar ainda mais a taxa de sucesso de entrada, adicione outra condição de que essa média móvel de período grande seja pelo menos ascendente; finalmente, use a relação de posição relativa de preço, média móvel de curto prazo e média móvel de longo prazo para formar uma estratégia de negociação completa.
Estratégia Lógica
Com as ideias e pensamentos estratégicos acima, podemos tentar construir a lógica da estratégia. A lógica aqui não é pedir que você calcule as leis do movimento celeste; não é tão complicado. Nada mais é do que expressar ideias estratégicas anteriores em palavras.
Abertura de posição longa: Se não houver uma posição atual e o preço de fechamento for maior que a média móvel de curto prazo, e o preço de fechamento for maior que a média móvel de longo prazo, e a média móvel de curto prazo for maior que a média móvel de longo prazo, e a média móvel de longo prazo estiver subindo.
Abra uma posição curta: Se não houver uma posição atual e o preço de fechamento for menor que a média móvel de curto prazo, e o preço de fechamento for menor que a média móvel de longo prazo, e a média móvel de curto prazo for menor que a média móvel de longo prazo, e a média móvel de longo prazo estiver caindo.
Fechamento de posição longa: Se você atualmente mantém uma ordem longa e o preço de fechamento é menor que a média móvel de longo prazo, ou a média móvel de curto prazo é menor que a média móvel de longo prazo, ou a média móvel de longo prazo está diminuindo.
Fechamento de posição curta: Se você atualmente mantém uma ordem curta e o preço de fechamento é maior que a média móvel de longo prazo, ou a média móvel de curto prazo é maior que a média móvel de longo prazo, ou a média móvel de longo prazo está subindo.
O acima é a parte lógica de toda a estratégia quantitativa de trading. Se convertermos a versão de texto da lógica da estratégia em código, ela incluirá três etapas: obter condições de mercado, calcular indicadores e colocar ordens de compra e venda.
Estratégia de Linguagem
O primeiro passo é obter as informações de mercado. Nesta estratégia de negociação quantitativa, precisamos apenas obter o preço de fechamento. Na linguagem Mai, a API para obter o preço de fechamento é: CLOSE. Ou seja, você só precisa escrever CLOSE no código para obter o preço de fechamento da última linha K.
Depois vêm os indicadores de cálculo. Nesta estratégia de negociação quantitativa, usamos um total de 2 tecnologias, a saber: média móvel de curto prazo e média móvel de longo prazo. Assumimos que a média móvel de curto prazo é uma média móvel de 10 períodos e a média móvel de longo prazo é uma média móvel de 50 períodos. Então, como usamos o código para representar a média móvel de 10 períodos e a média móvel de 50 períodos? Veja a figura a seguir:

Figura 2-11 Código de estratégia de linguagem Mai
Na negociação manual, podemos ver rapidamente se a média móvel de 50 períodos está subindo ou descendo, mas como expressamos isso em código? Pense nisso cuidadosamente, para julgar se a média móvel está subindo, não é que o valor da média móvel de 50 períodos da linha K atual é maior que o valor da média móvel de 50 períodos da linha K anterior, e o valor da média móvel de 50 períodos da linha K anterior é maior que o valor da média móvel de 50 períodos da linha K anterior? O oposto é verdadeiro, o que significa que a média móvel está caindo. Então, no código, deveria ser assim:

Figura 2-12 Código de média móvel de julgamento de idioma Mai
Note o código rosa-avermelhado “AND” nas linhas 8 e 9 na figura acima. Ele significa “e” na língua Mai. Por exemplo, a 9ª linha é traduzida para o chinês como: Se a média móvel de 50 períodos da linha K atual for maior que a média móvel de 50 períodos da linha K anterior, e a média móvel de 50 períodos da linha K anterior for maior que a média móvel de 50 períodos da linha K anterior, então o valor é calculado como "sim"; caso contrário, o valor é calculado como "não" e o resultado é atribuído a "MA50_ISUP".
O último passo é colocar ordens de compra e venda. Você só precisa chamar a API de ordens da ferramenta quantitativa do inventor após o código de lógica de compra e venda para executar as operações de compra e venda. Veja a figura a seguir:

Figura 2-13 Código de transação de compra e venda do idioma Mai
Observe o código rosa-avermelhado “OR” nas linhas 13 e 14 na imagem acima. Ele significa “ou” na língua Mai. Por exemplo, a linha 13 é traduzida para o chinês como: Se o preço de fechamento da linha K atual for menor que a média móvel de 50 períodos da linha K atual, ou a média móvel de 10 períodos da linha K atual for menor que a média móvel de 50 períodos da linha K atual, o valor é calculado como "sim" e uma ordem é colocada imediatamente; caso contrário, é calculado como "não" e nada é feito.
Atenção: "AND" e "OR" são operadores lógicos na língua Mai:
"E" significa que quando todas as condições são "sim", a condição final é "sim";
"OU" significa que, entre todas as condições, enquanto qualquer uma delas for "sim", a condição final será "sim".
Resumir
O acima é todo o processo de escrever estratégias de negociação em linguagem Mai na Inventor Quantitative Tool. Há apenas três etapas no total: de ter uma ideia de estratégia, a conceber a estratégia e descrever a lógica em palavras, e finalmente implementar a estratégia de negociação completa com código. Embora seja uma estratégia simples, o processo de implementação específico é semelhante ao de uma estratégia mais complexa, exceto que o algoritmo e a estrutura de dados da estratégia são diferentes. Portanto, desde que você entenda e domine o processo de estratégia quantitativa nesta seção, você pode usar a linguagem Mai para realizar pesquisas de estratégia quantitativa e praticar as ferramentas quantitativas do inventor, conforme necessário.
Trabalho de casa
- Tente implementar as estratégias desta seção você mesmo.
- Com base na estratégia desta seção, adicione as funções stop-profit e stop-loss.
Próxima Seção Prévia
No desenvolvimento de estratégias quantitativas de trading, as linguagens de programação são como armas e equipamentos. Uma boa linguagem de programação pode ajudar você a obter o dobro do resultado com metade do esforço. Por exemplo, há mais de uma dúzia de linguagens mais comumente usadas no setor de negociação quantitativa, incluindo Python, C++, Java, C#, EasyLanguage, Mai Language, etc. Qual arma devo escolher para entrar no campo de batalha? Na próxima seção, apresentaremos essas linguagens de programação comuns e as características de cada uma delas.
Capítulo 3 Linguagem de programação simples para implementar estratégias de negociação
3.1 Avaliação horizontal de linguagens de programação de negociação quantitativa
resumo
No Capítulo 1 e Capítulo 2, aprendemos os fundamentos da negociação quantitativa e como usar as ferramentas quantitativas do inventor. Neste capítulo, implementaremos a estratégia de negociação em detalhes. Se você quer fazer bem o seu trabalho, primeiro precisa afiar suas ferramentas. Para implementar estratégias de negociação, você deve primeiro dominar uma linguagem de programação. Esta seção apresenta primeiro as principais linguagens de programação em negociação quantitativa, bem como as características de cada linguagem de programação.
O que é uma linguagem de programação
Antes de aprender uma linguagem de programação, você deve primeiro entender o conceito de "linguagem de programação". Linguagem de programação é uma linguagem que tanto humanos quanto computadores podem entender. É um código de comunicação padronizado. O propósito da linguagem de programação é usar a linguagem humana para controlar computadores e dizer aos computadores o que queremos fazer. Os computadores podem executar instruções de acordo com linguagens de programação, e também podemos escrever códigos para emitir instruções aos computadores.
Assim como nossos pais nos ensinaram a falar quando éramos jovens, eles também nos ensinaram a entender o que os outros dizem. Depois de um longo período de influência e autoestudo, aprendemos a falar sem perceber e conseguimos entender o que outras crianças diziam. Existem muitos idiomas, incluindo chinês, inglês, francês, etc. Por exemplo:
Olá Mundo
Olá Mundo
Bonjour tout le monde (Bom dia a todos)
Se você usar uma linguagem de programação para exibir "Olá Mundo" na tela do computador, ficaria assim:
Linguagem C: puts("Olá Mundo");
Linguagem Java: System.out.println("Olá Mundo");
Linguagem Python: print("Olá Mundo")
Podemos ver que as linguagens de computador têm suas próprias regras específicas, e há muitas linguagens. Essas regras de linguagem são as classificações de linguagem de programação que precisamos explicar a você hoje. Em cada classificação, precisamos apenas lembrar as regras mais básicas e comumente usadas, e podemos usar essas linguagens de programação para nos comunicar com computadores e deixar que os computadores executem estratégias correspondentes de acordo com nossas instruções.
Classificação de linguagem de programação
Para facilitar sua referência e comparação, e para selecionar a linguagem de programação de negociação quantitativa mais adequada para você, classificaremos as seis linguagens de programação mais comumente usadas, a saber, Python, Matlab/R, C++, Java/C#, EasyLanguage e linguagem visual (conforme mostrado abaixo).

Figura 3-1 Avaliação da linguagem de programação
Nós os classificamos com base em seu escopo funcional, velocidade de execução, escalabilidade e dificuldade de aprendizagem. A pontuação está entre 1 e 5. Por exemplo, uma pontuação de 5 em termos de alcance funcional significa que a função é poderosa, e uma pontuação de 1 significa que a função é menor. (Como mostrado acima) A linguagem visual e a EasyLanguage são fáceis de aprender e muito adequadas para iniciantes; Python é poderoso e tem fortes capacidades de expansão, tornando-o adequado para desenvolver estratégias de negociação mais complexas; C++ tem maior velocidade de negociação e é mais adequado para traders de alta frequência.
Entretanto, a avaliação de cada linguagem de programação visa principalmente sua aplicação no campo da negociação quantitativa e contém elementos subjetivos pessoais. Você também pode criticar na seção de comentários ou expor suas opiniões para discussão. A seguir, começaremos a introduzir essas linguagens de programação uma por uma.
Linguagem visual
A programação visual tem uma longa história e não é nova. Este conceito de programação "o que você vê é o que você obtém", equipado com vários módulos de controle, pode construir lógica de código e design de estratégia de negociação completo simplesmente arrastando e soltando. O processo é muito semelhante a blocos de construção.

Figura 3-2 Interface de linguagem de programação visual
Como mostrado acima, o mesmo programa pode ser concluído com apenas algumas linhas de código na programação visual da Plataforma de Negociação Quantitativa do Inventor. Isso reduz muito o limite para programação, o que é uma ótima experiência operacional, especialmente para traders que não têm conhecimento de programação.
Como a estratégia de implementação subjacente dessa linguagem visual é convertida para C++, ela tem pouco impacto na velocidade de execução do programa. Entretanto, sua funcionalidade e escalabilidade são relativamente fracas, e não é possível desenvolver estratégias de negociação excessivamente complexas ou sofisticadas.
Linguagem Fácil
A chamada EasyLanguage se refere a uma linguagem de programação exclusiva de alguns softwares comerciais de negociação quantitativa. Embora essas linguagens também tenham alguns recursos orientados a objetos, elas são principalmente baseadas em scripts em suas aplicações. Em termos de sintaxe, também é muito próximo da nossa linguagem natural. Para iniciantes em trading quantitativo, usar EasyLanguage como ponto de entrada é uma escolha melhor. Por exemplo: a língua Mai na plataforma de negociação quantitativa do inventor.
Esta linguagem de script não tem problema em fazer backtesting de estratégia e trading real em seu software específico, mas é frequentemente limitada em termos de escalabilidade. Por exemplo, desenvolvedores de estratégia não podem chamar APIs externas. Além disso, em termos de velocidade de execução, essa linguagem de script é executada em sua própria máquina virtual, e sua otimização de desempenho não é tão boa quanto Java/C#, por isso é mais lenta.
Python
No Stackoverflow, o número de visitas às principais linguagens de programação permaneceu praticamente inalterado nos últimos anos, com apenas Python mostrando uma tendência de crescimento. Python pode ser usado para desenvolvimento de sites, aprendizado de máquina, aprendizado profundo, análise de dados, etc. Devido à sua flexibilidade e abertura, ela se tornou a linguagem mais comum. O mesmo é verdade no campo do investimento quantitativo. Atualmente, a maioria das plataformas quantitativas domésticas são baseadas em Python.
As estruturas de dados básicas, listas e dicionários do Python são muito poderosos e podem basicamente atender às necessidades de representação de dados. Se você precisa de uma estrutura de dados mais rápida e abrangente, é recomendado usar NumPy e SciPy. Essas duas bibliotecas são basicamente chamadas de bibliotecas padrão para computação científica Python.
Para engenharia financeira, uma biblioteca mais direcionada é o Pandas, que tem duas estruturas de dados, Series e DataFrame, e é muito adequada para processar séries temporais.
Em termos de velocidade, Python está no meio, mais lento que C++ e mais rápido que EasyLanguage, principalmente porque Python é uma linguagem dinâmica e sua velocidade é média quando executada em Python puro. No entanto, você pode usar o Cython para otimizar estaticamente algumas funções para se aproximarem da velocidade do C++.
Como uma linguagem de colagem, Python é o número um indiscutível em termos de desempenho de expansão. Além de poder se conectar a outras linguagens extensivamente, a API de expansão também é projetada para ser muito fácil de usar. Em termos de dificuldade de aprendizado, Python tem sintaxe simples, código altamente legível e é fácil de começar.
Matlab/R
Em seguida, vêm Matlab e R. Essas duas linguagens são usadas principalmente para análise de dados. Os autores da linguagem fizeram muitos designs sintáticos para operações científicas. Suas características são que eles naturalmente suportam operações de negociação quantitativa. No entanto, seu escopo de aplicação é relativamente limitado e geralmente é usado para análise de dados e backtesting de estratégias. Para desenvolvimento de sistemas de negociação e algoritmos de estratégia, sua usabilidade e estabilidade são relativamente baixas.
Além disso, sua velocidade de execução e escalabilidade são relativamente baixas porque Matlab e R são executados em máquinas virtuais de linguagem exclusiva. Em termos de desempenho, suas máquinas virtuais são muito piores que Java e C#. Mas como sua sintaxe é mais próxima de expressões matemáticas, elas são relativamente mais fáceis de aprender.
C++
C++ é uma linguagem de programação de propósito geral que oferece suporte a vários modelos de programação, como programação procedural, abstração de dados, programação orientada a objetos, programação genérica e padrões de design. Você pode usar C++ para implementar todas as funções que deseja alcançar, mas a maior desvantagem de uma linguagem tão poderosa é que ela é muito difícil de aprender, como modelos, ponteiros, vazamentos de memória, etc.
Atualmente, C++ ainda é a linguagem de programação preferida para negociações de grande volume e alta frequência. O motivo é simples. Como as características da linguagem C++ são mais fáceis de abordar o computador subjacente, ela é a ferramenta mais eficaz para desenvolver sistemas de execução e backtesting de alto desempenho que processam grandes quantidades de dados.
Java/C#
Java/C# são linguagens estáticas que rodam em máquinas virtuais. Comparado com C++, não há erro de array out-of-bounds, nenhum coredump, as exceções lançadas podem localizar com precisão o local do código de erro, elas têm seu próprio mecanismo automático de coleta de lixo, não há necessidade de se preocupar com vazamentos de memória, etc. Portanto, em termos de dificuldade de aprendizado de sintaxe, elas também são mais fáceis que C++. Em termos de velocidade de execução, como todas as suas máquinas virtuais têm sua própria função JIT para compilação em tempo de execução, sua velocidade fica atrás apenas do C++.
Entretanto, em termos de funcionalidade, não é possível otimizar o sistema de negociação subjacente como C++. Em termos de desempenho de expansão, ele é mais fraco que o C++ porque sua expansão precisa passar pela ponte do C, e essas duas linguagens são executadas em máquinas virtuais, então, ao expandir módulos funcionais, é necessário cruzar uma camada extra de parede para conseguir isso.
Resumir
Mas, novamente, a linguagem de programação quantitativa não é importante, o que importa é a ideia. Não há absolutamente nenhum problema em usar a linguagem quantitativa Mai e a linguagem de visualização do inventor como um trampolim para a entrada quantitativa. Para melhorar após a entrada, você precisa tentar e explorar constantemente em combinação com diferentes condições de mercado. Pode-se dizer que as ideias determinam a saída e a visão determina o reino.
"Crie sua estratégia, negocie suas ideias." Dessa perspectiva, o cerne da negociação quantitativa ainda é a negociação de ideias. Como um trader quantitativo, você não só precisa dominar a sintaxe básica e as funções da plataforma de escrita de estratégias, mas também precisa vivenciar os conceitos de negociação em combate real. A quantificação é apenas uma ferramenta e um meio para refletir diferentes conceitos de negociação.
Trabalho de casa
- Quais são as vantagens da linguagem Python para negociação quantitativa?
- Tentar escrever algumas APIs comumente usadas usando a linguagem Mai do inventor?
Próxima Seção Prévia
Acredito que com a introdução acima às linguagens de programação, você deve saber como escolher. Nos próximos capítulos, aprenderemos o desenvolvimento de estratégias de negociação quantitativa de forma direcionada de acordo com a classificação das linguagens de programação.
3.2 Guia de início rápido para a linguagem Mai
resumo
O que é a língua Mai? A chamada linguagem Mai é um conjunto de bibliotecas de funções programadas, estendidas a partir dos primeiros indicadores técnicos de ações. Os algoritmos são encapsulados em funções, e os usuários só precisam chamar as funções linha por linha, como se estivessem brincando com blocos de construção, para implementar a lógica da estratégia.
Ele adota o modo de construção de "sintaxe pequena, função grande", o que melhora muito a eficiência da escrita. Estratégias que exigem mais de 100 frases em outras línguas geralmente podem ser escritas em apenas uma dúzia de frases na Língua Mai. Em conjunto com a biblioteca de funções estatísticas financeiras e a estrutura de dados das ferramentas quantitativas do inventor, ele também pode oferecer suporte a alguma lógica de negociação complexa.
Estratégia completa
Para ajudar você a entender rapidamente o conhecimento essencial desta seção, antes de apresentar o Início Rápido da Linguagem Quantitativa de Micro-ondas do Inventor, você deve primeiro ter uma compreensão preliminar dos conceitos desta seção. Ainda usamos a média móvel de longo prazo de 50 dias e a média móvel de curto prazo de 10 dias como casos básicos e revisamos o caso de estratégia completo mencionado no capítulo anterior:
Abertura de posição longa: Se não houver uma posição atual e o preço de fechamento for maior que a média móvel de curto prazo, e o preço de fechamento for maior que a média móvel de longo prazo, e a média móvel de curto prazo for maior que a média móvel de longo prazo, e a média móvel de longo prazo estiver subindo.
Abra uma posição curta: Se não houver uma posição atual e o preço de fechamento for menor que a média móvel de curto prazo, e o preço de fechamento for menor que a média móvel de longo prazo, e a média móvel de curto prazo for menor que a média móvel de longo prazo, e a média móvel de longo prazo estiver caindo.
Fechamento de posição longa: Se você atualmente mantém uma ordem longa e o preço de fechamento é menor que a média móvel de longo prazo, ou a média móvel de curto prazo é menor que a média móvel de longo prazo, ou a média móvel de longo prazo está diminuindo.
Fechamento de posição curta: Se você atualmente mantém uma ordem curta e o preço de fechamento é maior que a média móvel de longo prazo, ou a média móvel de curto prazo é maior que a média móvel de longo prazo, ou a média móvel de longo prazo está subindo.
Se estiver escrito em código de idioma Mai, ficará assim:

Figura 3-3 Exemplo completo da linguagem Mai
Para escrever uma estratégia de negociação quantitativa completa, geralmente são necessárias várias etapas: aquisição de dados, cálculo de dados, cálculo lógico, colocação de ordens, etc. Conforme mostrado na figura acima, em todo o código, apenas uma API é usada para obter dados básicos, que é "CLOSE" na primeira e segunda linhas; depois, a primeira à nona linhas são a parte de cálculo de dados; e, finalmente, a décima primeira à décima quarta linhas são a parte de cálculo lógico e colocação de pedidos.
Observe que o código roxo é uma variável; na primeira à nona linha, o verde ":=" é um operador de atribuição, e os dados no lado direito do operador de atribuição são atribuídos à variável no lado esquerdo após o cálculo; o código laranja é a API, por exemplo, na primeira linha, chamar MA (média móvel) requer a passagem de dois parâmetros, que podem ser entendidos como configurações, ou seja, ao chamar MA, você precisa definir o tipo de MA; o rosa-avermelhado "AND" e "OR" são operadores lógicos, que são usados principalmente para conectar vários cálculos lógicos, etc. Com os conceitos básicos de conhecimento acima, vamos começar a aprender os conceitos básicos detalhados da língua Mai.
Dados básicos
Dados básicos (preço de abertura, preço mais alto, preço mais baixo, preço de fechamento, volume de negociação) são uma parte indispensável da negociação quantitativa. Para obter os dados básicos mais recentes na estratégia, você só precisa chamar a API da ferramenta quantitativa do inventor. Se você quiser obter dados históricos básicos, você pode usar "REF", como: REF (CLOSE, 1) para obter o preço de fechamento de ontem.
Variações
Uma variável é um número que pode ser alterado. O nome de uma variável pode ser entendido como um código. Sua nomenclatura suporta caracteres chineses, letras, números e traços, mas o comprimento deve ser controlado dentro de 31 caracteres. Nomes de variáveis não podem ser repetidos entre si, nomes de parâmetros ou nomes de funções (API), e cada instrução deve terminar com ponto e vírgula. Se você quiser adicionar seus próprios comentários de idioma depois de escrever, use “//” no final. Ele precisa ser escrito em letras maiúsculas no método de entrada de meia largura. Conforme mostrado na figura a seguir:

Figura 3-4 Tipo de dados de idioma Mai
Atribuição de Variável
Atribuição de variável é atribuir o valor no lado direito do operador de atribuição à variável no lado esquerdo. Existem 4 tipos de operadores de atribuição, que podem controlar se o valor é exibido no gráfico e definir a posição de exibição. As fontes verdes na figura abaixo são operadores de atribuição, a saber, “:”, “:=”, “^^” e “..”. Os comentários de código na figura explicam seus significados em detalhes.

Figura 3-5 Atribuição de variável de idioma Mai
Tipo de dados
Na linguagem Mai, há muitos tipos de dados, entre os quais os mais comumente usados são o tipo numérico, o tipo string e o tipo booleano. Tipos numéricos são números, incluindo inteiros, decimais, números positivos e negativos, etc., como: 1, 2, 3, 1,1234, 2,23456...; tipos de string podem ser entendidos como texto, chinês, inglês e números podem ser strings, como: 'Inventor Quantification', 'CLOSEPRICE', '6000', e tipos de string devem ser colocados em ponto e vírgula em inglês; o tipo booleano é o mais simples, tem apenas dois valores "sim" e "não", como: 1 representa verdadeiro para "sim" e 0 representa falso para "não".
Operador relacional
Operadores relacionais, como o nome sugere, são operadores usados para comparar o relacionamento entre dois valores. Eles são iguais a, maiores que, menores que, maiores que ou iguais a, menores que ou iguais a e diferentes de, conforme mostrado abaixo:

Figura 3-6 Operadores de linguagem Mai
Operador lógico
Operações lógicas podem conectar instruções Booleanas separadas em um todo. As mais comumente usadas são "AND" e "OR". Suponha que existam dois valores do tipo booleano, a saber, "o preço de fechamento é maior que o preço de abertura" e "o preço de fechamento é maior que a média móvel". Podemos combiná-los em um valor booleano, como: "o preço de fechamento é maior que o preço de abertura e (E) o preço de fechamento é maior que a média móvel", "o preço de fechamento é maior que o preço de abertura ou (OU) o preço de fechamento é maior que a média móvel".

Figura 3-7 Operação lógica da linguagem Mai
Atenção a todos:
"E" significa que quando todas as condições são "sim", a condição final é "sim";
"OU" significa que, entre todas as condições, enquanto qualquer uma delas for "sim", a condição final será "sim".
“AND” pode ser escrito como “&&” e “OR” pode ser escrito como “||”.
Operador de aritmética
Operadores aritméticos comumente usados na língua Mai ("+", "-",*”, “/”) não é diferente da matemática aprendida na escola primária, como mostrado abaixo:

Figura 3-8 Operações aritméticas na língua Mai
Prioridade
Se houver um 100*Para a expressão (10-1)/(10+5), qual etapa o programa calcula primeiro? A matemática do ensino médio nos diz: ① Se for uma operação do mesmo nível, geralmente é calculada da esquerda para a direita. ② Se houver adição e subtração, bem como multiplicação e divisão, calcule primeiro a multiplicação e a divisão, depois a adição e a subtração. ③Se houver colchetes, calcule primeiro o conteúdo dos colchetes. ④ Se estiver em conformidade com as leis de operação, as leis de operação podem ser usadas para simplificar o cálculo. A prioridade da linguagem Mai é a mesma mostrada abaixo:

Figura 3-9 Prioridade das operações aritméticas na linguagem Mai
Modo de execução
Na linguagem Mai da ferramenta quantitativa do inventor, há dois modos para execução da estratégia do programa, a saber: modo de preço de fechamento e modo de preço em tempo real. O modo de preço de fechamento significa que o sinal atual da linha K é estabelecido e a transação da ordem é executada imediatamente quando a próxima linha K começa. O modo de preço em tempo real significa que, assim que o sinal atual da linha K for estabelecido, a transação da ordem será executada imediatamente.
Estratégias intradiárias
Se for uma estratégia intradiária, quando você precisar fechar a posição no final do dia de negociação, precisará usar a função de tempo "TIME". Esta função é exibida em formato de quatro dígitos quando está acima do segundo período e abaixo do período do dia, a saber: HHMM (1450-14:50). Observação: ao usar a função TIME como condição para fechar uma posição no final da negociação, é recomendável que a condição de abertura também tenha um limite de tempo correspondente. Conforme mostrado abaixo:

Figura 3-10 Função de tempo do idioma do microfone
Classificação do modelo

Figura 3-11 Classificação do modelo de linguagem Mai
Existem dois tipos de classificação de modelos na linguagem Mai, a saber: modelo sem filtragem e modelo com filtragem. Na verdade, isso é muito fácil de entender: o modelo sem filtragem permite sinais contínuos de abertura ou fechamento, que podem realizar as funções de adicionar e reduzir posições. O modelo de filtragem não permite sinais contínuos de abertura ou fechamento. Ou seja, quando um sinal de abertura aparece, sinais de abertura subsequentes serão filtrados até que um sinal de fechamento apareça. A ordem dos sinais no modelo sem filtragem é: abrir-fechar-abrir-fechar-abrir.....
Resumir
O acima é uma introdução rápida à linguagem Mai. Após aprendê-la, você pode programar estratégias quantitativas de trading. Se precisar escrever estratégias mais complexas, você pode consultar a documentação da API da linguagem Mai da ferramenta quantitativa do Inventor ou consultar diretamente o serviço oficial de atendimento ao cliente para escrever estratégias de negociação quantitativas para você.
Próxima Seção Prévia
Day trading também é um modelo de negociação. Este método não mantém posições durante a noite, então o risco de volatilidade do mercado é menor. Uma vez que condições desfavoráveis de mercado ocorram, ajustes podem ser feitos a tempo. Depois de aprender a introdução à língua Mai nesta seção, na próxima seção mostraremos como escrever uma estratégia de negociação quantitativa intradiária viável.
Trabalho de casa
- Tente usar a ferramenta quantitativa Inventor para escrever uma API na linguagem Mai para obter dados básicos.
- Quais são as maneiras de exibir atribuições de variáveis em um gráfico?
3.3 Como implementar estratégias na língua Mai
resumo
No artigo anterior, explicamos a premissa de implementação de estratégias de negociação a partir dos aspectos de introdução à linguagem Mai, sintaxe básica, método de execução de modelo, classificação de modelo, etc. Neste artigo, daremos continuidade ao conteúdo do artigo anterior e ajudaremos você a concretizar uma estratégia de negociação quantitativa intradiária viável passo a passo a partir dos módulos de estratégia e indicadores técnicos comumente usados.
Módulo de Política
Pense nisso, como você constrói um robô usando peças de Lego? Não é possível montá-lo peça por peça, de cima para baixo ou de baixo para cima. Qualquer pessoa com um pouco de bom senso sabe que a cabeça, os braços, as pernas, as asas, etc. devem ser colocados juntos separadamente e depois combinados em um robô completo. É o mesmo ao escrever programas. Escreva as funções necessárias em módulos de estratégia e, então, combine os módulos de estratégia em uma estratégia de negociação quantitativa completa. Abaixo listarei alguns módulos de estratégia comumente utilizados:
Aumento de fase
O aumento do estágio é calculado calculando a porcentagem da diferença entre o preço de fechamento da linha K atual e o preço de fechamento dos períodos N anteriores. Por exemplo, para calcular o aumento dos últimos 10 períodos da linha K, o código pode ser escrito como:

Figura 3-12 Crescimento do estágio da língua Mai
Novos máximos
Para definir uma nova máxima, precisamos calcular se a linha K atual é maior que o preço mais alto em N períodos. Por exemplo, para calcular se a linha K atual é maior que o preço mais alto entre as últimas 10 linhas K, o código pode ser escrito como:

Figura 3-13 A língua Mai atinge um novo recorde
Grande volume de vantagem
Um ataque ascendente de grande volume pode ser entendido como aumento de preços e um aumento acentuado no volume de negociação. Por exemplo: se o preço de fechamento de uma K-line for 1,5 vezes o preço de fechamento das 10 K-lines anteriores, isso significa que ele aumentou 50% em 10 dias; o volume de negociação excede 5 vezes a média das últimas 10 K-lines. Pode ser escrito em código como:

Figura 3-14 O volume de Maiyuyu aumenta
Acabamento estreito
Consolidação de faixa estreita significa que os preços permanecem dentro de uma determinada faixa ao longo de um período de tempo recente. Por exemplo: se a diferença entre o preço mais alto em 10 períodos e o preço mais baixo em 10 períodos, dividido pelo preço de fechamento da linha K atual, for menor que cerca de 0,05. Pode ser escrito em código como:

Figura 3-15 Faixa estreita da linguagem do trigo
Arranjo de alta da média móvel
O arranjo de alta das médias móveis é dividido em arranjo de alta e arranjo de baixa. A linha K é organizada para cima com suporte sob as médias móveis 5-10-20-30-60, o que é um arranjo de alta. O arranjo de alta significa que a tendência do mercado é uma forte tendência ascendente. Pode ser escrito em código como:

Figura 3-16 Arranjo de alta da média móvel da língua Mai
Máximas anteriores e suas localizações
Para obter o ponto alto anterior e a localização desse ponto alto, você pode obtê-lo diretamente por meio da API da Ferramenta Quantitativa do Inventor. Isso pode ser escrito em código:

Figura 3-17 O ponto alto anterior da língua Mai
Brecha
Um gap é uma situação em que os preços mais altos e mais baixos de duas K-lines não estão conectados. É composto de duas K-lines. O gap é um preço de referência para pontos de suporte e pressão futuros. Quando ocorre uma lacuna, pode-se supor que uma aceleração da tendência na direção da lacuna original tenha começado. Isso pode ser escrito em código:

Figura 3-18 Lacuna linguística Mai
Indicadores técnicos comuns
Média Móvel

Figura 3-19 Gráfico de média móvel
Do ponto de vista estatístico, a média móvel é a média aritmética dos preços diários e é uma trajetória de preços com tendência. O sistema de média móvel é uma ferramenta técnica comumente usada pela maioria dos analistas. Do ponto de vista técnico, é um fator que afeta o preço psicológico dos analistas técnicos e o fator de tomada de decisão de compra e venda. É uma boa ferramenta de referência para analistas técnicos. A ferramenta quantitativa do inventor suporta muitos tipos diferentes de médias móveis, conforme mostrado na figura a seguir:

Figura 3-20 Cálculo de vários indicadores da língua Mai
Canal BOLL

Figura 3-21 Diagrama do canal BOLL
O BOLL, também conhecido como indicador de Bandas de Bollinger, também usa princípios estatísticos para primeiro calcular a faixa intermediária com base na média móvel de N dias e, em seguida, calcular as faixas superior e inferior com base no desvio padrão. Quando o canal BOLL se torna mais estreito, significa que o preço está gradualmente retornando à média. Quando o canal BOLL muda de estreito para largo, significa que o mercado começa a mudar. Se o preço cruzar a trilha superior, indica que o poder de compra está aumentando. Se o preço cruzar a trilha inferior, indica que o poder de venda está aumentando.
Entre todos os indicadores técnicos, o método de cálculo do BOLL é um dos mais complicados, que introduz o conceito de desvio padrão nas estatísticas e envolve o cálculo da linha média (MB), linha superior (UP) e linha inferior (DN). O método de cálculo é o seguinte:

Figura 3-22 Cálculo da Banda de Bollinger da Língua Mai
Indicador MACD
O indicador MACD usa médias móveis rápidas (curto prazo) e lentas (longo prazo) e seus sinais de convergência e separação, e realiza uma operação de suavização dupla. O MACD, que é desenvolvido com base no princípio da média móvel, eliminou o defeito da média móvel que frequentemente envia sinais falsos e manteve o efeito da média móvel. Portanto, o indicador MACD tem as características de tendência, estabilidade e estabilidade da média móvel. É um indicador de análise técnica usado para julgar o momento de comprar e vender ações e prever a alta e a queda dos preços das ações. O método de cálculo é o seguinte:

Figura 3-24 Indicador MACD da Língua Mai
Os acima são os módulos de estratégia mais comumente usados no desenvolvimento de estratégias quantitativas de negociação. Claro, há muito mais do que estes. Por meio dos exemplos de módulos acima, você também pode implementar vários dos módulos de negociação mais comumente usados em sua negociação subjetiva. Os métodos são todos universais. Em seguida, começaremos a escrever uma estratégia viável de negociação quantitativa intradiária.
Escrita de estratégia
No mercado à vista de câmbio estrangeiro, houve uma vez uma estratégia de negociação de avanço amplamente divulgada, que é a estratégia HANS123. Ela usa seus simples avanços de ponto alto e baixo de linhas N K após a abertura como o critério para disparar sinais de negociação. Este também é um modo de negociação com entrada antecipada.
Estratégia Lógica
Esteja pronto para entrar no mercado 30 minutos após a abertura do mercado;
Trilha superior = ponto alto 30 minutos após a abertura;
Trilha inferior = 30 minutos de baixa após a abertura;
Quando o preço romper a faixa superior, compre e abra uma posição;
Quando o preço cair abaixo da faixa inferior, abra uma posição de venda.
Estratégia de negociação intradiária, feche posições antes do fechamento do mercado;
Código de estratégia

Figura 3-25 Código de estratégia de linguagem Mai
Resumir
Acima, aprendemos o conceito de módulos de estratégia e, por meio de vários casos de módulos de estratégia comumente usados, nos familiarizamos com os métodos de programação das ferramentas quantitativas do inventor. Pode-se dizer que aprender a escrever módulos de estratégia e melhorar o pensamento lógico de programação são etapas-chave na negociação quantitativa avançada. Por fim, usamos as ferramentas quantitativas do inventor para implementar as estratégias de negociação comumente usadas na negociação à vista de câmbio estrangeiro.
Próxima Seção Prévia
Alguns amigos podem se sentir confusos e incapazes de entender os códigos densamente compactados. Não se preocupe, já pensamos em tudo isso para você. Na Inventor Quantitative Tool, há também uma linguagem de programação mais adequada para usuários novatos. É a programação visual. Como o nome sugere, o que você vê é o que você obtém. Vamos esperar por isso juntos!
Trabalho de casa
- Tente implementar vários módulos de negociação que você usa com mais frequência em negociações subjetivas.
- Tente implementar o algoritmo do indicador KDJ usando a linguagem Mai na ferramenta quantitativa do inventor.
3.4 Início rápido com programação visual
resumo
Muitos traders subjetivos estão interessados em trading quantitativo. Eles estão cheios de confiança no começo. No entanto, depois de aprender a sintaxe básica, operações de dados, estruturas de dados, controle lógico, etc. de linguagens de programação tradicionais, eles geralmente ficam desanimados ou desistem depois de olhar para os códigos longos e complexos. Neste momento, linguagens de programação visual podem ser mais adequadas para você começar.
Estratégia completa
Para ajudar todos a entender rapidamente o conhecimento-chave desta seção, antes de apresentar a rápida introdução à Linguagem de Programação Visual Quantitativa do Inventor, vamos primeiro dar uma olhada em como é a estratégia escrita na linguagem visual? E tenha uma compreensão preliminar dos conceitos de substantivos nesta seção. Vamos pegar o exemplo mais simples de entrar em uma posição comprada quando o preço de fechamento é maior que a média móvel de 50 períodos, e entrar em uma posição vendida quando o preço de fechamento é menor que a média móvel de 50 períodos:
Abertura de posição longa: Se não houver posição atual e o preço de fechamento for maior que a média móvel de 50 períodos.
Abra uma posição curta: Se não houver posição atual e o preço de fechamento for menor que a média móvel de 50 períodos.
Fechamento de posição longa:Se você atualmente mantém uma posição longa e o preço de fechamento é menor que a média móvel de 50 períodos.
Fechamento de posição curta:Se você atualmente mantém uma ordem curta e o preço de fechamento é maior que a média móvel de 50 períodos.
Se a estratégia acima for escrita em uma linguagem visual, ela ficaria assim (como mostrado abaixo):

Figura 3-26 Interface de linguagem visual
Conforme mostrado na figura acima, todo o processo de design da estratégia é: definir o tipo de mercado, obter a matriz de K-line, obter a média de 50 períodos da K-line anterior, obter o preço de fechamento da K-line anterior, obter a matriz de posição, determinar o status da posição, determinar se o preço de fechamento é maior ou menor que a média móvel e executar a abertura ou o fechamento.
Aqui precisamos prestar atenção ao conceito de "array". Array é uma das estruturas de dados importantes para toda linguagem de programação. Matrizes são como contêineres que podem armazenar uma série de valores. Por exemplo, chamar a API para obter a matriz K-line retorna o seguinte resultado:

Figura 3-27 Matriz de linhas K
O código na figura acima é um array de K-lines. O array contém três dados no total, a saber, os dados do K-line anterior, os dados do K-line anterior e os dados do K-line atual. Se atribuirmos esta matriz a uma variável "arr", se quisermos obter os últimos dados desta matriz (os dados da linha raiz K), podemos escrevê-la assim (como mostrado na 4ª e 5ª linhas da figura abaixo):

Figura 3-28 Referência de matriz
Podemos usar apenas a segunda maneira de escrever (linha 5), porque na realidade existem centenas ou milhares de dados de K-linhas, e novas K-linhas estão constantemente aumentando. Então você pode primeiro obter o comprimento do array. "arr.length" significa obter o comprimento do array e então subtrair "1", que são os dados da última linha K. Se você quiser obter os dados da linha K anterior, subtraia "2".
Pessoas cuidadosas podem descobrir que esses dados estão entre "{}". Pelos nomes em inglês, você pode saber aproximadamente que eles correspondem a: tempo, preço de abertura, preço mais alto, preço mais baixo, preço de fechamento e volume de negociação. Se você quiser obter o preço de fechamento da linha K anterior, basta adicionar "." e o valor necessário no final, consulte as linhas 8 a 10 na figura abaixo.

Figura 3-29 Referência de matriz
Por que usar uma linguagem de programação visual?
Com os conceitos acima, vamos primeiro usar Java para escrever um programa que emita "hello, world" para experimentar a programação tradicional, como mostrado abaixo:

Figura 3-30
Um programa que apenas exibe uma string "olá, mundo!" requer apenas 5 linhas de código. Acredito que a maioria dos iniciantes só conhece as palavras em inglês "hello, world" entre parênteses e não tem ideia de por onde começar com o resto. Portanto, é uma escolha melhor começar com programação visual do que ficar no prejuízo.
O que é programação visual?
A programação visual tem uma longa história e não é nova. Este conceito de programação "o que você vê é o que você obtém", equipado com vários módulos de controle, pode construir lógica de código e design de estratégia de negociação completo simplesmente arrastando e soltando. O processo é muito semelhante a blocos de construção.

Figura 3-31
Como mostrado acima, o mesmo programa pode ser concluído com apenas uma linha de código na programação visual do Blockly. Isso reduz muito o limite para programação, o que é uma ótima experiência operacional, especialmente para traders que não têm conhecimento de programação.
Quais são as características da linguagem de programação visual
Blockly não é um brinquedo de programação, é um editor genuíno, não um sistema operacional disfarçado de editor. Ele suporta muitos elementos básicos de programação, como variáveis, funções, arrays e blocos facilmente expansíveis e personalizáveis. Você pode usá-lo para concluir tarefas complexas de programação. O design é muito consistente com a filosofia Unix: fazer uma coisa.
O inventor da programação visual quantitativa também foi percebido por meio da ferramenta de visualização em blocos lançada pelo Google. O design é semelhante ao Scratch lançado pelo MIT, com limite realmente zero (como mostrado abaixo).

Figura 3-32
Na interface de programação visual do Inventor Quant, centenas de módulos de negociação comumente usados são incorporados. Mais módulos de negociação serão adicionados no futuro para dar suporte às novas ideias e novos aplicativos dos traders. Eles serão desenvolvidos e mantidos em conjunto pelos desenvolvedores.
Embora a sintaxe seja simples, ela não sacrifica o desempenho. Ele pode quase atender ao desenvolvimento da maioria das estratégias de negociação quantitativas simples. Em termos de funcionalidade e velocidade, não é inferior às linguagens de programação convencionais, como Python e JavaScript. No futuro, ele oferecerá suporte a aplicações financeiras logicamente complexas.
Como usar
Escreva um programa Olá, Mundo
Execute e imprima "hello, world"
Resumir
Acima, começamos com uma estratégia de visualização completa, depois apresentamos a introdução e as características da linguagem de visualização e, finalmente, apresentamos como usar a linguagem de visualização na ferramenta Inventor Quant e escrevemos um exemplo "olá, mundo". No entanto, precisamos lembrar a todos que, como uma introdução à negociação quantitativa, a programação visual é um bom trampolim, mas atualmente apenas interfaces de API limitadas estão abertas na Inventor Quantitative Tool. Para negociação quantitativa, é melhor usá-la como uma ferramenta auxiliar para ajudar você a resolver a lógica da estratégia.
Próxima Seção Prévia
Não há diferença entre os fundamentos da programação visual e as linguagens de programação de alto nível, e alguns aspectos são até universais. Depois que você aprender programação visual, estará um passo mais perto de aprender programação de alto nível. Na próxima seção, nos aprofundaremos no aprendizado avançado de programação visual, incluindo como usar a linguagem visual para escrever módulos de negociação quantitativa comumente usados na Ferramenta Quantitativa Inventor e como desenvolver uma estratégia completa de negociação intradiária.
Trabalho de casa
- Na interface de programação visual do Inventor Quant, use a API e entenda o que elas significam.
- Use linguagem visual para obter o último preço de abertura e registrá-lo no log.
3.5 Como implementar estratégias usando linguagem visual
resumo
No artigo anterior, aprendemos sobre a introdução e os recursos da linguagem de programação visual, o exemplo "olá, mundo" e a escrita de estratégias na ferramenta de negociação quantitativa do inventor, e explicamos os pré-requisitos para implementar estratégias de negociação. Neste artigo, daremos continuidade ao artigo anterior, começando pelos módulos de estratégia e indicadores técnicos comumente usados e, em seguida, pela lógica da estratégia, para ajudar todos a concretizar uma estratégia completa de negociação intradiária passo a passo.
Módulo de Política
Aumento de fase
O aumento do estágio é calculado calculando a porcentagem da diferença entre o preço de fechamento da linha K atual e o preço de fechamento dos períodos N anteriores. Por exemplo, para calcular o aumento dos últimos 10 períodos da linha K, o código pode ser escrito como:

Figura 3-36
Do código acima, podemos ver que a maneira como o computador executa requer um loop lógico completo. Por exemplo, para calcular a taxa de crescimento dos últimos 10 períodos de K-line, ela precisa ser dividida nas seguintes etapas:
Primeiro, o computador precisa saber claramente qual produto você quer negociar. Por exemplo, o exemplo acima é metanol, então defina o código do contrato como: "MA888". Após definir o código do contrato, você pode obter os dados da linha K do contrato.
Com os dados da linha K, você pode obter dados detalhados de qualquer linha K a partir desses dados da linha K.
Para calcular o aumento periódico, você deve primeiro obter os preços de fechamento de duas K-lines, por exemplo: o preço de fechamento da K-line anterior e o preço de fechamento da 11ª K-line anterior a ela.
Por fim, com base nos preços de fechamento dessas duas linhas K, calcule a taxa de aumento do estágio. Cada uma das estratégias a seguir tem as características de tais loops lógicos e atributos condicionais. Uma vez que você entenda essa lógica, a programação visual se tornará muito mais fácil.
Grande volume de vantagem
Um ataque ascendente de grande volume pode ser entendido como aumento de preços e um aumento acentuado no volume de negociação. Por exemplo: se o preço de fechamento de uma K-line for 1,5 vezes o preço de fechamento das 10 K-lines anteriores, isso significa que ele aumentou 50% em 10 dias; o volume de negociação excede 5 vezes a média das últimas 10 K-lines. Pode ser escrito em código como:

Figura 3-37
Brecha
Um gap é uma situação em que os preços mais altos e mais baixos de duas K-lines não estão conectados. É composto de duas K-lines. O gap é um preço de referência para pontos de suporte e pressão futuros. Quando ocorre uma lacuna, pode-se supor que uma aceleração da tendência na direção da lacuna original tenha começado. Isso pode ser escrito em código:

Figura 3-38
Indicadores técnicos comuns
Média móvel EMA
Do ponto de vista estatístico, a média móvel é a média aritmética dos preços diários e é uma trajetória de preços com tendência. O sistema de média móvel é uma ferramenta técnica comumente usada pela maioria dos analistas. Do ponto de vista técnico, é um fator que afeta o preço psicológico dos analistas técnicos e o fator de tomada de decisão de compra e venda. É uma boa ferramenta de referência para analistas técnicos. A ferramenta quantitativa do inventor suporta muitos tipos diferentes de médias móveis, conforme mostrado na figura a seguir:

Figura 3-39
Indicador MACD
O indicador MACD usa médias móveis rápidas (curto prazo) e lentas (longo prazo) e seus sinais de convergência e separação, e realiza uma operação de suavização dupla. O MACD, que é desenvolvido com base no princípio da média móvel, eliminou o defeito da média móvel que frequentemente envia sinais falsos e manteve o efeito da média móvel. Portanto, o indicador MACD tem as características de tendência, estabilidade e estabilidade da média móvel. É um indicador de análise técnica usado para julgar o momento de comprar e vender ações e prever a alta e a queda dos preços das ações. O método de cálculo é o seguinte:

Figura 3-40
Indicador KDJ
O indicador KDJ combina as vantagens do conceito de momentum, indicadores de força e fraqueza e média móvel, e é usado para medir o grau de variação dos preços das ações em relação à faixa de preço normal. Não apenas o preço de fechamento é levado em consideração, mas também os preços mais altos e mais baixos recentes, o que evita a fraqueza de considerar apenas o preço de fechamento e ignorar a verdadeira volatilidade. O método de cálculo é o seguinte:

Figura 3-41
Escrita de estratégia
O mentor de Warren Buffett, Benjamin Graham, mencionou certa vez um modelo de negociação de equilíbrio dinâmico entre ações e títulos em seu livro "O Investidor Inteligente".
Este modelo de negociação é muito simples:
Invista 50% do seu dinheiro em fundos de ações e os 50% restantes em fundos de títulos. Ou seja, ações e títulos representam metade cada.
Rebalanceie os ativos uma vez em intervalos fixos ou com base em mudanças de mercado para restaurar a proporção de ativos de ações em relação aos ativos de títulos para o nível inicial de 1:1. Essa é toda a lógica da estratégia, incluindo quando comprar e vender, e quanto comprar e vender. Simples o suficiente!
Neste método, a volatilidade dos fundos de títulos é na verdade muito pequena, muito menor do que a volatilidade das ações, então os títulos são usados como uma "âncora de referência" aqui, ou seja, usando títulos para medir se as ações subiram muito. Ainda é aumento muito pequeno.
Se o preço das ações subir, o valor de mercado das ações será maior que o valor de mercado do título. Quando a relação de valor de mercado dos dois exceder o limite definido, a posição total será reajustada, as ações serão vendidas e o título será comprado para fazer com que a relação entre o valor de mercado das ações e o título seja restaurada ao valor original de 1:1.
Pelo contrário, se o preço das ações cair, o valor de mercado das ações será menor que o valor de mercado do título. Quando a relação de valor de mercado dos dois exceder o limite definido, a posição total será reajustada para comprar ações e vender títulos para fazer com que a relação entre o valor de mercado de ações e títulos seja restaurada ao valor original de 1:1.
Assim, o equilíbrio dinâmico entre a proporção de ações e títulos é suficiente para desfrutar dos frutos do crescimento das ações e reduzir a volatilidade dos ativos. Como pioneiro do investimento em valor, Graham nos forneceu uma boa idéia.
Estratégia Lógica
De acordo com o valor atual do BTC, o saldo da conta será de ¥ 5.000 em dinheiro e 0,1 BTC, ou seja, a proporção inicial de dinheiro para o valor de mercado do BTC é de 1:1.
Se o preço do BTC subir para ¥ 6.000, ou seja, o valor de mercado do BTC for maior que o saldo da conta e a diferença entre eles exceder o limite definido, então (6.000-5.000)/6.000/2 moedas serão vendidas. Isso significa que o BTC se valorizou e o dinheiro pode ser trocado de volta.
Se o preço do BTC cair para ¥4000, ou seja, o valor de mercado do BTC for menor que o saldo da conta e a diferença entre eles exceder o limite definido, compre (5000-4000)/4000/2 moedas. Isso significa que o BTC se desvalorizou, então compre BTC de volta.
Dessa forma, não importa se o BTC se valoriza ou se desvaloriza, o saldo da conta e o valor de mercado do BTC são sempre mantidos iguais. Se o BTC se desvalorizar, compre uma parte e, quando ele subir novamente, venda uma parte, como um saldo.
Condições de compra: Se o valor de mercado da posição atual menos o saldo disponível atual for menor que 5% negativo do saldo disponível atual, abra uma posição de compra.
Condições de venda:Se o valor de mercado da posição atual menos o saldo disponível atual for maior que 5% do saldo disponível atual, feche a posição e venda.
Pré-requisitos
- Mercado atual
- Ativos correntes
- Valor total de mercado das moedas
- Diferença de ativos
Construção de estratégias
Estratégia de autoria visual Etapa 1
Calculamos os quatro pré-requisitos para a estratégia de negociação e os atribuímos às suas respectivas variáveis. Com a programação visual, os blocos de código se parecem com isto. Como mostrado abaixo

Figura 3-42
Vale ressaltar que o valor total de mercado da moeda é o valor total de mercado do número atual de moedas mantidas, e seu método de cálculo é multiplicar o número total atual de moedas mantidas pelo preço atual mais recente. A diferença de ativos é o valor total de mercado da moeda menos o saldo disponível atual.
Estratégia de autoria visual Etapa 2
Depois que os pré-requisitos e as condições necessárias forem atribuídos, você precisa escrever a lógica da transação. Isso não é tão complicado quanto você imagina. Nada mais é do que expressar a lógica da estratégia acima na forma de blocos de código.
Ou seja, se a diferença patrimonial for menor que 5% do saldo negativo disponível, compre; se a diferença patrimonial for maior que 5% do saldo disponível, venda. Conforme mostrado abaixo:

Figura 3-43
A estratégia inteira parece ter sido escrita, mas você deve saber que o programa é executado de cima para baixo e para após a execução. Entretanto, nossa estratégia de negociação não é executar as condições de negociação uma vez, mas executá-las repetidamente.
Em outras palavras, o programa precisa verificar constantemente se as condições da estratégia foram atendidas. Se sim, execute a compra ou venda; caso contrário, continue verificando. Neste momento, você precisa usar outra instrução de loop, conforme mostrado abaixo:

Figura 3-44
Backtesting de estratégia
Não há diferença essencial entre estratégias de visualização e estratégias escritas em outras linguagens de programação. Elas também suportam testes de dados históricos com múltiplos períodos e níveis de precisão. Claro, elas também suportam negociação em tempo real de futuros de commodities nacionais e estrangeiras e moedas digitais. A seguir estão as informações de backtest da estratégia:

Figura 3-45
Neste ponto, uma estratégia de negociação completa é concluída. Para cuidar daqueles que querem tirar vantagem de nós, esta estratégia foi compartilhada no Strategy Square e pode ser copiada e estudada diretamente.
Conclusão
A regra das 10.000 horas sempre existe, mas para traders sem conhecimento básico, é impossível gastar 10.000 horas para reingressar no setor. Então você precisa ter uma escada, e para traders sem nenhuma base de programação, a programação visual do Inventor Quant é uma escada para entrada rápida.
Com a programação visual, você não precisa se lembrar de sintaxe e nomes de métodos, você pode simplesmente navegar pelos módulos de função e encontrar o que deseja. Essa também é a intenção original do inventor do quantitativo, que é ajudar mais iniciantes quantitativos a diminuir o limite de entrada e aumentar seu interesse na negociação quantitativa, para que todos possam se tornar um trader quantitativo!
No entanto, dito isso, não há absolutamente nenhum problema com a programação visual como um trampolim para o aprendizado quantitativo, mas ela também tem suas próprias limitações, como a incapacidade de desenvolver estratégias de negociação excessivamente complexas e sofisticadas. Mas isso não afeta seu primeiro passo na negociação quantitativa!
Próxima Seção Prévia
Da perspectiva do profissionalismo da negociação quantitativa, tanto a linguagem Mai quanto a linguagem visual são apenas linguagens de transição para entrar no mundo da negociação quantitativa. Suas características de linguagem determinam suas limitações no desenvolvimento de estratégias de negociação quantitativa, e algumas estratégias complexas dificilmente serão implementadas. Então, na próxima seção, ensinaremos JavaScript, que é uma linguagem de programação formal de alto nível e a única maneira de você avançar para negociação quantitativa avançada.
Trabalho de casa
- Tente implementar o indicador Bandas de Bollinger usando linguagem visual.
- Tente usar o módulo de negociação nesta seção para concluir uma estratégia de negociação.
Capítulo 4 Implementando estratégias de negociação em linguagens de programação tradicionais
4.1 Introdução rápida à linguagem JavaScript
resumo
Como uma futura estrela do trading quantitativo, é impossível para você aprender apenas uma linguagem simples. Embora a linguagem Mai e a linguagem de visualização das ferramentas quantitativas do inventor possam ajudá-lo a começar, elas têm muitas limitações no desenvolvimento de estratégias devido às suas características de linguagem. Portanto, se você deseja se firmar na negociação quantitativa, precisa aprender uma linguagem de programação formal.
Por que aprender JavaScript
Comparado com linguagens visuais, o JavaScript tem melhor desempenho e eficiência de execução. E em termos de desenvolvimento de estratégia, JavaScript é muito mais flexível do que linguagens visuais. Por exemplo, se você quer desenvolver uma estratégia de arbitragem, você não pode usar uma linguagem visual porque ela tem módulos limitados e não suporta estratégias do tipo arbitragem, enquanto JavaScript pode facilmente fazer o trabalho.
Além disso, JavaScript é mais conciso e elegante do que linguagens visuais. Por exemplo, 10 linhas de código em uma linguagem visual podem ser escritas em 5 linhas em JavaScript. De certa forma, a linguagem visual é apenas uma versão em texto do JavaScript, e a execução e a lógica do seu código são quase as mesmas do JavaScript. Se você aprender uma linguagem visual, aprender JavaScript será muito fácil.
Introdução ao JavaScript
JavaScript é uma linguagem de programação formal de alto nível. É adequada como uma linguagem introdutória para aprender programação e também como uma linguagem de trabalho para desenvolvimento diário. É uma das linguagens de computador mais promissoras e promissoras da atualidade e ainda tem uma posição dominante inabalável no lado dos navegadores. Embora seja famoso pelo desenvolvimento de páginas da web, ele também é usado em muitos ambientes sem navegador, como servidores, PCs, dispositivos móveis, etc. Claro, ele também pode fazer negociações quantitativas!
Estratégia completa
Para ajudar você a entender rapidamente o conhecimento essencial desta seção, antes de apresentar a introdução rápida à linguagem JavaScript quantizada do inventor, você deve primeiro ter uma compreensão preliminar dos conceitos desta seção. Vamos pegar a estratégia mais simples de média móvel dupla como exemplo:
Abertura de posição longa: Se não houver posição atual e a média móvel de 5 períodos for maior que a média móvel de 20 períodos.
Abra uma posição curta: Se não houver posição atual e a média móvel de 5 períodos for menor que a média móvel de 20 períodos.
Fechamento de posição longa:Se você atualmente mantém uma posição longa e a média móvel de 5 períodos é menor que a média móvel de 20 períodos.
Fechamento de posição curta: Se você atualmente mantém uma posição curta e a média móvel de 5 períodos é maior que a média móvel de 20 períodos.
Se escrito em JavaScript, ficaria assim:

Figura 4-1
O código na figura acima é uma estratégia de negociação quantitativa completa escrita em JavaScript. Ele pode ser executado em tempo real e fazer pedidos automaticamente. Em termos de quantidade de código, esta linguagem é mais simples que a linguagem visual. O processo de design de toda a estratégia consiste em: definir tipos de mercado, obter dados da linha K, obter informações de posição, calcular a lógica da transação e colocar ordens de compra e venda.
Identificador
Tudo em JavaScript (variáveis, nomes de funções e operadores) diferencia maiúsculas de minúsculas, o que significa que o nome da variável test e o nome da variável Test são duas variáveis diferentes. O primeiro caractere de um identificador (nome de uma variável, função, propriedade, parâmetro de função) deve ser uma letra, um sublinhado (_), o cifrão ($) e os seguintes caracteres também podem ser números, conforme mostrado na figura a seguir:

Figura 4-2
Comentários
Os comentários incluem comentários de linha única e comentários em nível de bloco. Comentários de linha única começam com duas barras, e comentários em bloco começam com uma barra e um asterisco (/) e termina com um asterisco e uma barra (/) conforme mostrado abaixo:

Figura 4-3
Declarações
Cada declaração termina com um ponto e vírgula; embora não seja obrigatório, recomendamos que você nunca o omita. Adicionar ponto e vírgula pode aumentar o desempenho do código em alguns casos, conforme mostrado na figura a seguir:

Figura 4-4
Variações
Variáveis podem armazenar qualquer tipo de dado. Ao criar uma variável, use o operador var seguido pelo nome da variável. Ao definir uma variável, você também pode definir seu valor. Depois que uma variável é criada, você não precisa usar o operador var para definir o valor da variável novamente, conforme mostrado abaixo:

Figura 4-5
dados
JavaScript tem um total de 5 tipos de dados, a saber: Undefined, Null, Boolean, Number e String, conforme mostrado na figura a seguir:

Figura 4-6
Indefinido tem apenas um valor, o especial "indefinido", que representa um valor que ainda não foi definido. Por exemplo, se apenas definirmos uma variável e não definirmos um valor para ela, o valor da variável será "indefinido".
Null tem apenas um valor, o especial "null", que representa um valor definido como vazio. Por exemplo, se primeiro criarmos uma variável e depois definirmos o valor da variável como "nulo", o valor retornado pela variável será "nulo".
Boolean tem dois valores, "true" e "false". "true" representa verdadeiro e "false" representa falso. Observe que tanto "true" quanto "false" são letras minúsculas.
Número é o tipo de número, incluindo: números positivos, números negativos, inteiros, decimais, etc. Além disso, "NaN" também é um número especial que indica especificamente a situação em que nenhum valor é retornado, por exemplo: 1 dividido por 0 retorna "NaN".
Você pode entender String como texto, incluindo chinês e inglês, e pode construir uma string usando aspas simples ou duplas. Por exemplo: "fmz" ou "quantização do inventor".
Objeto
Você pode pensar em um objeto como um contêiner para armazenar vários dados, nos quais os atributos e valores correspondem entre si. Você pode criar este contêiner primeiro por meio do novo operador. Você também pode adicionar propriedades e métodos ao objeto criado, conforme mostrado na figura a seguir:

Figura 4-7
Grupo
Um array também é um contêiner para armazenar vários dados, mas os elementos no contêiner são organizados em ordem da esquerda para a direita. O primeiro elemento é 0, o segundo elemento é 1, e assim por diante. Além disso, os arrays JavaScript podem armazenar qualquer tipo de dado, conforme mostrado abaixo:

Figura 4-8
função
Funções em JavaScript são essencialmente as mesmas funções que aprendemos no ensino médio. Você pode pensar nisso como o que é passado e o que é produzido através do cálculo da função, como mostrado na figura a seguir:

Figura 4-9
Operador
JavaScript tem vários operadores, nomeadamente operadores aritméticos, operadores de comparação e operadores lógicos. Entre eles, os operadores aritméticos são operações matemáticas de adição, subtração, multiplicação e divisão. Os operadores de comparação podem comparar se dois valores são menores que ou menores que. Os principais operadores lógicos são: AND lógico, OR lógico e NOT lógico. Conforme mostrado na figura a seguir:

Figura 4-10
Vale ressaltar que: "&&" é um AND lógico, que significa "e". “||” é um OR lógico, que significa “ou”. "!" é uma negação lógica, que significa "não":
“&&” significa que quando todas as condições forem “verdadeiras”, a condição final será “verdadeira”;
“||” significa que entre todas as condições, enquanto qualquer uma delas for “verdadeira”, a condição final será “verdadeira”.
Prioridade
Se houver um 100*Para a expressão (10-1)/(10+5), qual etapa o programa calcula primeiro? A matemática do ensino médio nos diz: ① Se for uma operação do mesmo nível, geralmente é calculada da esquerda para a direita. ② Se houver adição e subtração, bem como multiplicação e divisão, calcule primeiro a multiplicação e a divisão, depois a adição e a subtração. ③Se houver colchetes, calcule primeiro o conteúdo dos colchetes. ④ Se estiver em conformidade com as leis de operação, as leis de operação podem ser usadas para simplificar o cálculo. O mesmo vale para a prioridade da linguagem JavaScript, conforme mostrado abaixo:

Figura 4-11
Declarações condicionais
Muitas vezes, ao escrever código, você precisará executar ações diferentes para decisões diferentes. Você pode usar instruções condicionais em seu código para realizar essa tarefa. Em JavaScript, podemos usar as seguintes instruções condicionais:
declaração if - Use esta declaração para executar código somente se uma condição especificada for verdadeira
instrução if...else - executa o código se uma condição for verdadeira e executa outro código se a condição for falsa
Instrução if...else if....else - Use esta instrução para selecionar um dos vários blocos de código para executar
instrução switch - Use esta instrução para selecionar um dos vários blocos de código para executar
Declaração If
Esta instrução executa o código somente se uma condição especificada for verdadeira. Por favor, use letras minúsculas se. Usar letras maiúsculas (SE) gerará um erro de JavaScript! Conforme mostrado na figura a seguir:

Figura 4-12#
Declaração if...else
Quando a condição é verdadeira, o código é executado, e quando a condição é falsa, outro código é executado, conforme mostrado na figura a seguir:

Figura 4-13
para laço
Às vezes, precisamos obter os dados da linha K dos últimos dias, e precisamos obtê-los do array da linha K em sequência de acordo com a posição dos dados da linha K. Então é muito conveniente usar um loop for, como mostrado na figura a seguir:

Figura 4-14
Enquanto Laço
Todos nós sabemos que o mercado está mudando constantemente. Se você quiser obter o array K-line mais recente, você tem que continuar executando o mesmo código repetidamente. Então use o loop whilex. Enquanto a condição especificada for verdadeira, o loop sempre pode obter o array K-line mais recente.

Figura 4-15
instrução break e instrução continue
O loop tem uma pré-condição. Somente quando a pré-condição for "true" o loop começará a fazer algo repetidamente, e o loop não terminará até que a pré-condição seja "false". Entretanto, a instrução break pode sair imediatamente do loop durante a execução do loop; a instrução continue pode interromper um determinado loop e então continuar o próximo loop. Conforme mostrado na figura a seguir:

Figura 4-16
declaração de retorno
A instrução return encerra a execução de uma função e retorna o valor da função. A declaração return só pode aparecer em um corpo de função. Se aparecer em qualquer outro lugar no código, causará um erro de sintaxe!

Figura 4-17
Estrutura de estratégia CTA
Na Inventor Quantitative Tool, é muito conveniente escrever estratégias em JavaScript. O oficial construiu um conjunto de frameworks de estratégia padrão, como mostrado na figura a seguir:

Figura 4-18
Conforme mostrado no código acima, esta é uma estrutura de estratégia padrão. Exceto pelo "código de produto de futuros de commodities" que pode ser alterado, todo o resto está em um formato fixo. A maior vantagem de usar a estrutura para escrever estratégias é que você só precisa escrever a lógica da estratégia. Outras questões como aquisição de mercado, processamento de pedidos, etc. são todas tratadas pela estrutura. Isso permite que você se concentre no desenvolvimento da estratégia.
Resumir
O acima é uma rápida introdução à linguagem JavaScript. Após aprendê-la, você pode programar estratégias quantitativas de trading. Se precisar escrever estratégias mais complexas, consulte a documentação da API da linguagem JavaScript da Inventor Quantitative Tool.
Próxima Seção Prévia
Day trading também é um modelo de negociação. Este método não mantém posições durante a noite, então o risco de volatilidade do mercado é menor. Uma vez que condições desfavoráveis de mercado ocorram, ajustes podem ser feitos a tempo. Depois de aprender a linguagem JavaScript nesta seção, na próxima seção mostraremos como escrever uma estratégia de negociação quantitativa intradiária viável.
Trabalho de casa
- Tente usar a linguagem JavaScript na Ferramenta Quantitativa do Inventor para obter dados históricos da linha K.
- Tente escrever o código da estratégia no início desta seção e adicione comentários.
4.2 Como implementar negociação de estratégia usando linguagem JavaScript
resumo
No artigo anterior, explicamos os pré-requisitos para implementar estratégias de negociação a partir dos aspectos de introdução à linguagem JavaScript, sintaxe básica, estrutura de estratégia CTA, etc. Neste artigo, daremos continuidade ao conteúdo do artigo anterior e ajudaremos você a implementar uma estratégia de negociação quantitativa intradiária viável passo a passo a partir dos módulos de estratégia e indicadores técnicos comumente usados.
Introdução à estratégia
As Bandas de Bollinger também são chamadas de Canais de Bollinger, abreviadas como BOLL em inglês. É um dos indicadores técnicos mais comumente usados e foi inventado por John Bollinger na década de 1980. Em teoria, os preços sempre flutuam dentro de uma certa faixa em torno do valor. Com base nessa fundação teórica, as Bandas de Bollinger introduziram o conceito de "canal de preço".
O método de cálculo consiste em usar princípios estatísticos para primeiro calcular o "desvio padrão" do preço ao longo de um período de tempo e, em seguida, adicionar/subtrair 2 vezes o desvio padrão da média móvel para encontrar o "intervalo de confiança" do preço. Sua forma básica é um canal de faixa composto por três linhas de trilhos (trilho do meio, trilho superior e trilho inferior). A faixa do meio é o custo médio do preço, e as faixas superior e inferior representam a linha de pressão e a linha de suporte do preço, respectivamente.
Devido à adoção do conceito de desvio padrão, a largura da Banda de Bollinger será ajustada dinamicamente de acordo com as flutuações de preços recentes. Quando a volatilidade é pequena, as Bandas de Bollinger se tornam mais estreitas; quando a volatilidade é grande, as Bandas de Bollinger se tornam mais largas. Quando o canal BOLL se torna mais estreito, significa que o preço está gradualmente retornando à média. Quando o canal BOLL muda de estreito para largo, significa que o mercado começa a mudar. Se o preço cruzar a trilha superior, indica que o poder de compra aumentou. Se o preço cruzar a trilha inferior, indica que o poder de venda aumentou.
Método de cálculo do indicador Bandas de Bollinger
Entre todos os indicadores técnicos, o método de cálculo das Bandas de Bollinger é um dos mais complicados, que introduz o conceito de desvio padrão nas estatísticas e envolve o cálculo da linha média (MB), linha superior (UP) e linha inferior (DN). O método de cálculo é o seguinte:
Trilha do meio = Média Móvel Simples em N períodos de tempo
Trilha superior = Faixa intermediária + K × desvio padrão de N períodos de tempo
Trilho inferior = Faixa intermediária − Desvio padrão de K × N períodos de tempo

Figura 4-19
Estratégia Lógica
Há muitas maneiras de usar as Bandas de Bollinger. Elas podem ser usadas sozinhas ou em combinação com outros indicadores. Neste tutorial, usaremos o método mais simples de utilização das Bandas de Bollinger. Ou seja: quando o preço rompe a trilha superior de baixo para cima, ou seja, rompe a linha de pressão superior, acreditamos que a força de alta está ficando mais forte, uma onda de tendência de alta foi formada e um sinal de abertura de compra é gerado; quando o preço cai abaixo da trilha inferior de cima para baixo, ou seja, cai abaixo da linha de suporte, acreditamos que a força de baixa está ficando mais forte, uma onda de tendência de queda foi formada e um sinal de abertura de venda é gerado.

Figura 4-20
Se, após abrir uma posição de compra, o preço cair de volta para a faixa intermediária das Bandas de Bollinger, acreditamos que a força de alta está enfraquecendo, ou a força de baixa está se fortalecendo, e um sinal de venda e fechamento é gerado; se, após abrir uma posição de venda, o preço subir de volta para a faixa intermediária das Bandas de Bollinger, acreditamos que a força de baixa está enfraquecendo, ou a força de alta está se fortalecendo, e um sinal de compra e fechamento é gerado.
Condições de negociação
Abertura de posição longa: Se não houver posição, e o preço de fechamento for maior que a faixa superior, e o horário não for 14:45
Abra uma posição curta:Se não houver posição, e o preço de fechamento for menor que a faixa inferior, e o horário não for 14:45
Fechamento de posição longa:Se você mantiver uma ordem longa e o preço de fechamento for menor que o preço médio ou o horário for 14:45
Fechamento de posição curta:Se você tiver uma ordem curta e o preço de fechamento for maior que o preço médio, ou o horário for 14:45
Implementação do código de estratégia
Para implementar uma estratégia, primeiro precisamos considerar quais dados precisamos? Por meio de qual API obtê-lo? Então como calcular a lógica da transação? Por fim, quais métodos são usados para fazer pedidos e negociar? Em seguida, vamos implementá-lo passo a passo:
Etapa 1: Use a estrutura de estratégia CTA
O chamado framework de estratégia CTA é um framework padrão lançado oficialmente pela Inventor Quantitative. Usando esse framework, você não precisa se preocupar com as questões triviais do desenvolvimento de estratégias quantitativas de negociação e pode se concentrar diretamente na lógica de programação de negociação. Por exemplo, se você não usar essa estrutura, ao fazer um pedido, você precisa considerar a transferência mês a mês, os preços de compra e venda do pedido, o cancelamento do pedido ou o acompanhamento quando o pedido não for executado, etc.

Figura 4-21
A imagem acima é a estrutura da estratégia CTA usando as ferramentas quantitativas do inventor. Este é um formato de código fixo, e todos os códigos de lógica de transação são escritos a partir da linha 3. Durante o uso, exceto pelo código da variedade (amarelo claro), nenhuma outra alteração é necessária.
Vale ressaltar que o código do produto na figura acima é "rb000/rb888", o que significa que os dados do sinal usam "rb000", os dados da transação usam "rb888" e a mudança de mês é automática. Claro, você também pode especificar um código de produto específico, como o código de produto "rb1910", o que significa que tanto os dados de sinal quanto os dados de transação usam "rb1910".
A FMZ tem uma biblioteca JavaScript interna de negociação de commodities futuras. Você pode usá-la em seu código simplesmente clicando na referência na interface de edição de estratégia:

Etapa 2: Obtenha vários dados
Pense bem: quais dados você precisa? A partir da nossa lógica de negociação estratégica, descobrimos que: primeiro precisamos obter o status da posição atual, depois comparar a relação entre o preço de fechamento e as faixas superior, média e inferior do indicador Bandas de Bollinger e, finalmente, determinar se o mercado está prestes a fechar. Então vamos pegar esses dados.
Obter dados de linha K
O primeiro passo é obter o array K-line e o preço de fechamento do K-line anterior, porque somente com o array K-line o indicador Bandas de Bollinger pode ser calculado. É assim que fica no código:

Figura 4-22
Conforme mostrado na figura acima:
Linha 4: Obtenha a matriz K-line, que é um formato fixo.
Linha 5: Filtre o comprimento da linha K, porque o parâmetro que usamos para calcular o indicador Bandas de Bollinger é 20. Quando a linha K é menor que 20, o indicador Bandas de Bollinger não pode ser calculado. Portanto, precisamos filtrar o comprimento da K-line aqui. Se houver menos de 20 K-lines, retornaremos diretamente e continuaremos esperando pela próxima K-line.
Linha 6: A partir da matriz de K-lines obtida, primeiro obtenha o objeto da K-line anterior e, em seguida, obtenha o preço de fechamento do objeto. Obtenha o segundo ao último elemento de uma matriz, que é o comprimento da matriz menos 2 (r[r.length - 2]); Os elementos no array K-line são todos objetos, que contêm o preço de abertura, o preço mais alto, o preço mais baixo, o preço de fechamento, o volume de negociação e o tempo. Para obter o preço de fechamento, basta adicionar "." e o nome do atributo no final (r[r.length - 2].Close)。
Obter dados de tempo da linha K
Como estamos usando uma estratégia intraday, precisamos fechar a posição antes do mercado fechar, então precisamos determinar se a linha K atual está próxima do fechamento do mercado. Se estiver, fechamos a posição. Se não estiver, podemos abrir a posição. O código é o seguinte:

Figura 4-23
Conforme mostrado na figura acima:
Linha 8: Obtenha o atributo timestamp da linha K atual e crie um objeto de tempo (new Date(timestamp)).
Linha 9: Calcule as horas e os minutos com base no objeto de tempo e determine se o horário da linha K é 14:45.
Obter dados de posição
As informações de posição são uma condição muito importante em estratégias quantitativas de trading. Quando as condições de trading são atendidas, também é necessário determinar se deve ser feita uma ordem com base no status da posição e no número de posições. Por exemplo: quando as condições para abrir uma posição de compra forem atendidas, se você tiver uma posição, não precisará colocar uma ordem novamente; se não tiver uma posição, poderá colocar uma ordem. É assim que fica no código:

Figura 4-24
Conforme mostrado na figura acima:
Linha 11: Obtenha o status da posição atual. Se houver várias ordens, o valor será 1; se houver ordens curtas, o valor será -1; se não houver posições, o valor será 0.
Obtenha dados de Bandas de Bollinger
Em seguida, você precisa calcular os valores das faixas superior, média e inferior do indicador Bandas de Bollinger. Então você precisa primeiro obter o conjunto de Bandas de Bollinger e, depois, obter os valores das bandas superior, média e inferior do conjunto. Na Inventor Quantitative Tool, é muito simples obter o array Bollinger Band. Você pode chamar diretamente a API Bollinger Band. A parte difícil é obter os valores das trilhas superior, média e inferior, porque o array Bollinger Band é um array bidimensional.
O array bidimensional é realmente muito fácil de entender. É um array dentro de um array. Então a ordem de aquisição é: primeiro pegue o array especificado no array, e então pegue o elemento especificado do array especificado, como mostrado na figura a seguir:

Figura 4-25
Conforme mostrado na figura abaixo, as linhas 13 a 19 utilizam código para obter os valores dos trilhos superior, médio e inferior das Bandas de Bollinger. Entre elas, a linha 13 usa diretamente a API da ferramenta quantitativa do inventor para obter diretamente a matriz de Bandas de Bollinger; as linhas 14 a 16 obtêm primeiro a matriz de trilhos superior, a matriz de trilhos do meio e a matriz de trilhos inferior na matriz bidimensional, respectivamente; as linhas 17 a 19 obtêm os valores de trilhos superior, trilhos do meio e trilhos inferior da Banda de Bollinger da linha K anterior da matriz de trilhos superior, trilhos do meio e trilhos inferior, respectivamente.

Figura 4-26
Etapa 3: Faça um pedido
Com os dados acima, você pode escrever a lógica de negociação e o código para colocar ordens. O formato também é muito simples. O mais comumente usado é a "instrução if", que pode ser descrita em palavras como: se a condição 1 e a condição 2 forem atendidas, faça um pedido; se a condição 3 ou a condição 4 forem atendidas, faça um pedido. Conforme mostrado na figura a seguir:

Figura 4-27
Na imagem acima, as linhas 21 a 24 são a lógica de negociação e os códigos de colocação de ordens. De cima para baixo, elas são: fechar longo, fechar curto, abrir longo, abrir curto.
Tomando a abertura de uma posição longa (linha 23) como exemplo, esta é uma "instrução if". Se apenas uma linha de código for executada nesta instrução, as chaves "{}" podem ser omitidas. Esta declaração é traduzida em texto como: Se a posição atual for 0, e o preço de fechamento for maior que a faixa superior, e o tempo da linha K não for 14:45, então "retorne 1"
Pessoas cuidadosas podem descobrir que há "retorno 1" e "retorno -1" nessas linhas. Este é um formato fixo, o que significa: se for uma compra, escreva "retorno 1"; se for uma venda, escreva "retorno -1". Abrir uma posição longa e fechar uma posição curta são ambas compras, então escreva "retorno 1"; abrir uma posição curta e fechar uma posição longa são ambas vendas, então escreva "retorno -1".
Código de estratégia completo
Neste ponto, um código de estratégia completo foi escrito. Se a estrutura de negociação, dados de negociação, lógica de negociação, colocação de ordens, etc. forem escritos separadamente, não seria muito simples? O seguinte é o código inteiro desta estratégia:

Figura 4-28
Há dois pontos a serem observados: tente (mas não necessariamente) escrever a lógica da estratégia de modo que, quando a condição da linha K raiz for atendida, a próxima ordem da linha K seja colocada, ou quando a condição da linha K anterior for atendida, a ordem da linha K raiz seja colocada. Dessa forma, os resultados do backtest não serão muito diferentes dos resultados reais. Você não precisa escrever dessa forma, mas deve prestar atenção se a lógica da estratégia está correta. Em termos gerais, a lógica de fechar uma posição deve ser escrita antes da lógica de abrir uma posição. O propósito de fazer isso é tornar a lógica da estratégia o mais consistente possível com suas expectativas. Por exemplo: se a lógica da estratégia alcançar a posição reversa, a regra da posição reversa é fechar a posição primeiro e depois abrir uma nova posição. Em vez de abrir uma nova posição primeiro e depois fechá-la. Se escrevermos a lógica de fechamento diretamente antes da lógica de abertura, esse problema não ocorrerá.
Resumir
Acima, aprendemos cada etapa do desenvolvimento de uma estratégia completa de negociação quantitativa intradiária, incluindo: introdução à estratégia, método de cálculo do indicador de Bandas de Bollinger, lógica da estratégia, condições de compra e venda, implementação do código de estratégia, etc. Por meio deste caso de estratégia, você não apenas pode se familiarizar com o método de programação da ferramenta quantitativa do inventor, mas também adaptá-lo a diferentes estratégias com base neste modelo.
Estratégias quantitativas de trading nada mais são do que resumos de experiências ou sistemas subjetivos de trading. Se anotarmos as experiências ou sistemas usados em trading subjetivo antes de escrever estratégias, e então traduzi-los em códigos um por um, você descobrirá que escrever estratégias será muito mais fácil. Experimente!
Próxima Seção Prévia
No desenvolvimento de estratégias quantitativas de negociação, se você puder escolher apenas uma linguagem de programação, então, sem hesitação, você deve escolher Python. Da aquisição de dados ao backtesting de estratégia para negociação, Python cobriu toda a cadeia de negócios. Ela ocupa uma posição importante no campo do investimento quantitativo financeiro. No próximo curso, aprenderemos o conhecimento básico da linguagem Python.
Trabalho de casa
- Tente usar o conhecimento desta seção para implementar uma estratégia de média móvel dupla.
- Tente implementar o algoritmo do indicador KDJ usando a linguagem JavaScript na ferramenta quantitativa Inventor.
4.3 Introdução rápida à linguagem Python
resumo
No desenvolvimento de estratégias quantitativas de negociação, se você puder escolher apenas uma linguagem de programação, então, sem hesitação, você deve escolher Python. Da aquisição de dados ao backtesting de estratégia para negociação, Python cobriu toda a cadeia de negócios. Ocupa uma posição importante no campo do investimento financeiro quantitativo. Neste curso, aprenderemos o conhecimento básico da linguagem Python.
Por que aprender tantas linguagens de programação?
Olhando para os cursos anteriores, aprendemos um total de: linguagem Mai, linguagem visual, linguagem JavaScript, incluindo a linguagem Python a ser aprendida nesta seção. Alguns amigos podem ter perguntas. Estou aqui para aprender negociação quantitativa, por que tenho que aprender tantas linguagens de programação?
Na verdade, cada linguagem de programação tem suas próprias características de linguagem, e não há distinção entre linguagens boas e ruins. Depende mais de qual linguagem de programação sua estratégia é mais adequada e se essa linguagem de programação combina com você. Então, há um ditado que diz que você só saberá se tentar. É por isso que dedicamos tanto espaço para falar sobre linguagens de programação. Se você quer fazer seu trabalho bem, primeiro precisa afiar suas ferramentas.
Ao mesmo tempo, também estamos comprometidos em abrir a porta para a pesquisa quantitativa para todos e popularizar o conhecimento de várias linguagens de programação. A pesquisa quantitativa não é tão misteriosa e fora de alcance quanto imaginamos. Acredito que a pesquisa quantitativa se tornará popular e acessível ao público em geral no futuro.
Por que escolher Python para negociação quantitativa
O processo de negociação quantitativa nada mais é do que adquirir dados, analisar e calcular dados, processar dados, etc. Em termos de análise de dados, nenhuma outra linguagem pode ser tão boa em cálculos e manter o desempenho quanto Python. Especialmente no processamento de dados de análise de séries temporais (K-line são dados de séries temporais), Python tem a vantagem de ser mais simples e conveniente. Além disso, comparado a outras linguagens de programação, Python é mais conciso e fácil de aprender. Ler um bom programa Python é como ler inglês.
Cinco razões para escolher Python
1. A aplicação quantitativa é extensa:
Tanto a Quantopian nos Estados Unidos quanto a Inventor Quant na China podem usar a linguagem Python.
2. Fácil de aprender:
A filosofia de design do Python é centrada no usuário e é uma linguagem interpretada fácil de depurar.
3. Livre e de código aberto:
Sem custo de uso, compartilhamento de código-fonte aberto e maior eficiência de aprendizado e uso.
4. Biblioteca rica:
Processamento de dados, computação de dados, visualização, análise estatística, análise técnica, aprendizado de máquina...
5. Interface do aplicativo:
Interfaces para aquisição, armazenamento, chamada e colocação de ordens com base em informações de mercado em tempo real das principais plataformas.
Estratégia completa
Para ajudar você a entender rapidamente o conhecimento essencial desta seção, antes de apresentar a introdução rápida à linguagem JavaScript quantizada do inventor, você deve primeiro ter uma compreensão preliminar dos conceitos desta seção. Vamos pegar a estratégia mais simples de média móvel dupla como exemplo:
Abertura de posição longa: Se não houver posição atual e a média móvel de 5 períodos for maior que a média móvel de 20 períodos.
Abra uma posição curta: Se não houver posição atual e a média móvel de 5 períodos for menor que a média móvel de 20 períodos.
Fechamento de posição longa:Se você atualmente mantém uma posição longa e a média móvel de 5 períodos é menor que a média móvel de 20 períodos.
Fechamento de posição curta: Se você atualmente mantém uma posição curta e a média móvel de 5 períodos é maior que a média móvel de 20 períodos.
Se escrito em Python, ficaria assim:

Figura 4-29
O código na figura acima é uma estratégia de negociação quantitativa completa escrita em Python. Ele pode ser executado em tempo real e fazer pedidos automaticamente. Em termos de quantidade de código, Python é melhor que JavaScript, porque não usamos a estrutura de negociação CTA.
No entanto, o processo de design de toda a estratégia é quase o mesmo: definir tipos de mercado, obter dados da linha K, obter informações de posição, calcular a lógica de negociação e colocar ordens de compra e venda. Em outras palavras, embora a sintaxe de programação seja diferente, a lógica da estratégia escrita é a mesma, então, a seguir, vamos aprender a sintaxe básica do Python!
Seleção de versão
Existem duas versões do Python, a saber: Python2 e Python3. Houve uma vez uma piada que dizia que Python é como uma arma de dois canos, mas você só pode usar um cano para disparar balas por vez, mas você nunca saberá qual é mais preciso. Então, se você é novo em Python, é recomendável aprender Python 3 diretamente porque é o mais recente e foi mantido pela comunidade Python. Nossos cursos também são ministrados em Python 3.
Identificador
O identificador é o nome da variável, como teste, teste, teste10,demonstração, etc. Tudo em Python (variáveis, nomes de funções e operadores) diferencia maiúsculas de minúsculas, o que significa que o nome da variável test e o nome da variável Test são duas variáveis diferentes. O primeiro caractere de um identificador (nome de uma variável, função, propriedade, parâmetro de função) deve ser uma letra, um sublinhado (), os caracteres que o seguem também podem ser números, conforme mostrado na figura a seguir:

Figura 4-30
Comentários
Um comentário é uma tradução ou explicação de uma linha de código. As regras são muito simples e incluem comentários de linha única e comentários de nível de bloco. Um comentário de linha única começa com um sinal de cerquilha (#), e um comentário em bloco começa com três aspas simples (''') ou três aspas duplas (""") e termina com três aspas simples (''') ou três aspas duplas ("""), conforme mostrado na figura a seguir:

Figura 4-31
Linhas e recuos
A característica mais marcante do Python é o uso de recuo para indicar blocos de código, sem a necessidade de chaves {}. O número de espaços para recuo é variável, mas instruções no mesmo bloco de código devem conter o mesmo número de espaços para recuo. Conforme mostrado abaixo: Neste caso, o programa reportará um erro. Mesmo que a condição if seja verdadeira, "True" não será emitido, porque o Python detectará automaticamente se a sintaxe do código está correta antes que o código seja executado. Se o formato do código estiver incorreto, o programa não será executado. O motivo é que a 5ª linha de código não tem um formato de recuo de código unificado. O recuo de quatro espaços é um formato fixo para Python e todos precisam estar familiarizados com ele.

Figura 4-32
Variações
Variáveis podem armazenar qualquer tipo de dado. Simplesmente escrever o nome da variável é criar a variável. No entanto, ao criar uma variável, você precisa definir o valor da variável ao mesmo tempo, caso contrário, o programa relatará um erro. O lado esquerdo do operador de sinal de igual (=) é um nome de variável, e o lado direito do operador de sinal de igual (=) é o valor armazenado na variável. Conforme mostrado na figura abaixo: name2 é o nome da variável e "inventor quantification" é o valor da variável. Se você não definir um novo valor para name2, o valor de name2 sempre será "quantificação do inventor".

Figura 4-33
dados
Python tem seis tipos de dados, três dos quais são imutáveis e três são mutáveis. Como o nome indica, uma vez que dados imutáveis são criados, seu valor não pode ser alterado e seu endereço na memória é único; dados mutáveis são uma referência a um endereço na memória e, se seu valor for alterado, seu endereço de memória permanecerá inalterado.
Dados imutáveis (3): Número, String, Tupla;
Dados mutáveis (3): Lista, Dicionário, Conjunto.

Figura 4-34
Números
Os tipos numéricos do Python suportam int (inteiro), float (ponto flutuante), bool (booleano) e complex (número complexo). A função interna type() pode ser usada para consultar o tipo de objeto ao qual uma variável se refere. Conforme mostrado abaixo:

Figura 4-35
Operador
Como na maioria das linguagens, a matemática em Python é simples. Sejam operadores aritméticos, operadores de comparação ou operadores lógicos, todos eles são iguais aos que aprendemos na escola. Entre eles, os operadores aritméticos são operações matemáticas de adição, subtração, multiplicação e divisão. Os operadores de comparação podem comparar se dois valores são menores que ou menores que. Os principais operadores lógicos são: AND lógico, OR lógico e NOT lógico. [Você pode falar brevemente sobre as strings comumente usadas em estratégias de negociação?] Por exemplo, em nossas estratégias de negociação, a string mais comumente usada é o código do produto, como: "rb1910", "MA1910".

Figura 4-36
Vale ressaltar que "e" é um AND lógico, que significa "e". "ou" é um OU lógico, que significa "qualquer um". "!" é uma negação lógica, que significa "não":
"e" significa que quando todas as condições são "verdadeiras", a condição final é "verdadeira";
"ou" significa que entre todas as condições, enquanto qualquer uma delas for "verdadeira", a condição final será "verdadeira".
Prioridade
Se houver um 100*Para a expressão (10-1)/(10+5), qual etapa o programa calcula primeiro? A matemática do ensino médio nos diz: ① Se for uma operação do mesmo nível, geralmente é calculada da esquerda para a direita. ② Se houver adição e subtração, bem como multiplicação e divisão, calcule primeiro a multiplicação e a divisão, depois a adição e a subtração. ③Se houver colchetes, calcule primeiro o conteúdo dos colchetes. ④ Se estiver em conformidade com as leis de operação, as leis de operação podem ser usadas para simplificar o cálculo. A prioridade da linguagem Mai é a mesma mostrada abaixo:

Figura 4-37
Booleano
Booleano representa verdadeiro ou falso e geralmente é usado em julgamentos condicionais e instruções de loop. Python define duas constantes "True" e "False" para representar verdadeiro e falso. De fato, qualquer objeto pode ser convertido para o tipo booleano e também pode ser usado diretamente para julgamento condicional, conforme mostrado na figura a seguir:

Figura 4-38
Estribo
Strings são texto. Strings, como "if1905", são frequentemente usadas ao definir códigos de produtos. Strings em Python são colocadas entre aspas simples ' ou aspas duplas ". O sinal de mais + é o operador de concatenação de strings. Você pode obter um caractere em uma string com base no valor do índice, conforme mostrado abaixo:

Figura 4-39
Lista
Lista é o tipo de dado mais frequentemente usado em Python. Você pode pensar em uma lista como um contêiner, exceto que os elementos no contêiner são organizados em ordem da esquerda para a direita. O primeiro elemento é 0, o segundo elemento é 1, e assim por diante. Além disso, as listas do Python podem armazenar qualquer tipo de dado, conforme mostrado abaixo:

Figura 4-40
função
Funções em Python são essencialmente as mesmas funções que aprendemos no ensino médio. Você pode pensar nisso como o que é passado e o que é produzido através do cálculo da função, como mostrado na figura a seguir:

Figura 4-41
Declaração if
Se afirmações aparecem frequentemente em nossas vidas, por exemplo: Se chover hoje, segurarei um guarda-chuva. Ou seja, a instrução executará o código somente quando a condição especificada for Verdadeira. Observe que preste atenção ao formato de recuo do código, caso contrário, um erro do Python será gerado! Conforme mostrado na figura a seguir:

Figura 4-42
declaração if...else
As instruções If...else também são instruções comumente usadas, por exemplo: Se chover hoje, segurarei um guarda-chuva; caso contrário, não segurarei um guarda-chuva. A instrução else é uma extensão da instrução if, ou seja, o código após else será executado somente quando a condição especificada for False. Conforme mostrado na figura a seguir:

Figura 4-43
Declaração elif
Como o Python não suporta instruções switch, ele só pode usar instruções elif para implementar múltiplos julgamentos condicionais. Por exemplo: se for uma linha positiva, estarei otimista; caso contrário, se for uma linha negativa, estarei pessimista; caso contrário, esperarei para ver. Conforme mostrado na figura a seguir:

Figura 4-44
para laço
Às vezes, precisamos obter os dados da linha K dos últimos dias, e precisamos obtê-los do array da linha K em sequência de acordo com a posição dos dados da linha K. Então é muito conveniente usar um loop for, como mostrado na figura a seguir:

Figura 4-45
Enquanto Laço
Todos nós sabemos que o mercado está mudando constantemente. Se você quiser obter o array K-line mais recente, você tem que continuar executando o mesmo código repetidamente. Então use o loop whilex. Enquanto a condição especificada for verdadeira, o loop sempre pode obter o array K-line mais recente.

Figura 4-46
instrução break e instrução continue
O loop tem uma pré-condição. Somente quando a pré-condição for "true" o loop começará a fazer algo repetidamente, e o loop não terminará até que a pré-condição seja "false". Entretanto, a instrução break pode sair imediatamente do loop durante a execução do loop; a instrução continue pode interromper um determinado loop e então continuar o próximo loop. Conforme mostrado na figura a seguir:

Figura 4-47
declaração de retorno
A instrução return encerra a execução de uma função e retorna o valor da função. A declaração return só pode aparecer em um corpo de função. Se aparecer em qualquer outro lugar no código, causará um erro de sintaxe!

Figura 4-48
Estrutura de estratégia
Você pode entender a arquitetura da estratégia como um formato fixo da estratégia. A ferramenta quantitativa do inventor adota um modo de votação. A seguir está uma arquitetura clássica de estratégia de futuros de commodities.
As linhas 4 a 7 são as principais funções de entrada de todo o programa, ou seja, o computador começa a executar o código da linha 4; então ele executa diretamente a linha 5 e entra em um loop infinito; então a função lógica de estratégia (onTick) e a função sleep (Sleep) são executadas no loop infinito; a função onTick é o código na linha 1, e você pode escrever a lógica de estratégia na linha 2; sabemos que no loop, a velocidade de execução do programa é muito rápida, então usar a função sleep (Sleep) pode pausar o programa por um tempo. O código a seguir Sleep(500) significa que ele dorme por 500 milissegundos toda vez que o loop é concluído.

Figura 4-49
Resumir
O acima é uma rápida introdução à linguagem Python. Embora seja apenas um conhecimento básico simples, ainda não é problema usá-lo para escrever uma estratégia de negociação quantitativa simples. Se precisar escrever estratégias mais complexas, você pode consultar a documentação da API da linguagem Python da Ferramenta Quantitativa Inventor.
Próxima Seção Prévia
Entre as estratégias de tendências no campo da análise técnica, a média móvel e o rompimento de canal são, sem dúvida, as duas principais escolas. Embora o objetivo seja capturar a tendência dos movimentos de preços, as filosofias de negociação e as características de risco dessas duas estratégias são completamente diferentes. Depois de aprender a introdução à linguagem Python nesta seção, na próxima seção mostraremos como escrever uma estratégia de negociação quantitativa para rompimento de canal.
Trabalho de casa
- Tente usar a linguagem Python na ferramenta quantitativa do Inventor para obter dados históricos da linha K.
- Tente escrever o código da estratégia no início desta seção e adicione comentários.
4.4 Como implementar negociação de estratégia usando a linguagem Python
resumo
No artigo anterior, aprendemos a introdução, a sintaxe básica, a estrutura de estratégia, etc. da linguagem Python. Embora o conteúdo seja chato, é uma habilidade essencial para você implementar sua estratégia de negociação e você deve aprendê-la. Neste artigo, atacaremos enquanto o ferro está quente e continuaremos com o conhecimento básico de Python do artigo anterior. Começaremos com uma estratégia simples, aprenderemos enquanto usamos e ajudaremos todos a realizar uma estratégia de negociação quantitativa viável passo a passo.
Introdução à estratégia
Entre muitas estratégias de negociação, a estratégia do Canal Donchian deve ser uma das estratégias de avanço mais clássicas. Era bem conhecida já em 1970. Naquela época, uma empresa estrangeira conduziu testes de simulação e pesquisa sobre estratégias de negociação de programas convencionais. Os resultados mostraram que, entre todos os testes de estratégia, a estratégia do Canal Donchian foi a mais bem-sucedida.
Mais tarde, o treinamento de trader "Tartaruga" mais famoso da história do trading ocorreu nos Estados Unidos, o que levou a um enorme sucesso. Naquela época, os métodos de negociação das "Tartarugas" eram mantidos em segredo, mas mais de dez anos depois, quando as "Regras de Negociação das Tartarugas" foram tornadas públicas, as pessoas descobriram que as "Tartarugas" estavam usando uma versão melhorada do Canal Donchian. estratégia.
Estratégias de negociação de ruptura são adequadas para negociar produtos com tendências relativamente suaves. O método de negociação de ruptura mais comum é usar a relação de posição relativa entre preço e suporte e resistência para determinar pontos de compra e venda de negociação específicos. A estratégia do Canal Donchian nesta seção é baseada neste princípio.
Regras da estratégia do canal Donchian
O Canal Donchian é um indicador de tendência e sua aparência e sinais são um pouco semelhantes ao indicador Bandas de Bollinger. Mas o canal de preços da Donchian é construído com base nos preços mais altos e mais baixos dentro de um determinado período de tempo. Por exemplo: calcule o valor máximo do preço mais alto das últimas 50 linhas K para formar a trilha superior; calcule o valor mínimo do preço mais baixo das últimas 50 linhas K para formar a trilha inferior.
Este indicador consiste em três curvas de cores diferentes. O padrão são os preços mais altos e mais baixos dentro de 20 períodos para mostrar a volatilidade dos preços de mercado. Quando o canal é estreito, significa que a volatilidade do mercado é pequena. Por outro lado, um canal largo significa que a volatilidade do mercado é relativamente grande.
Se o preço subir acima da faixa superior, é um sinal de compra; inversamente, se o preço cair abaixo da faixa inferior, é um sinal de venda. Como as linhas superior e inferior do canal são calculadas usando os preços mais altos e mais baixos, em circunstâncias normais, os preços raramente sobem e descem abaixo das linhas superior e inferior do canal ao mesmo tempo. Na maioria dos casos, os preços se movem unilateralmente ao longo da faixa superior ou inferior, ou entre as faixas superior e inferior.
Método de cálculo do canal Donchian
Na Inventor Quantitative Tool, o método de cálculo do Canal Donchian é muito simples. Você pode usá-lo diretamente para obter o preço mais alto ou o preço mais baixo dentro do período especificado, conforme mostrado na figura abaixo: a 5ª linha é para obter o valor máximo do preço mais alto de 50 períodos, e a 6ª linha é para obter o valor mínimo do preço mais baixo de 50 períodos.

Figura 4-50
Estratégia Lógica
Há muitas maneiras de usar o Canal Donchian. Ele pode ser usado sozinho ou em combinação com outros indicadores. Neste curso usaremos o método mais simples. Ou seja, quando o preço rompe a trilha superior de baixo para cima, ou seja, rompe a linha de pressão superior, acreditamos que a força de alta está ficando mais forte, uma onda de alta do mercado foi formada e um sinal de abertura de compra é gerado; quando o preço cai de cima para baixo e rompe a faixa inferior, ou seja, quando cai abaixo da linha de suporte, acreditamos que o lado curto está ficando mais forte, uma tendência de baixa foi formada e uma abertura de venda o sinal é gerado.

Figura 4-51
Se o preço cair de volta para o meio do Canal Donchian após a abertura de uma posição longa, acreditamos que os touros estão enfraquecendo ou os ursos estão se fortalecendo, e um sinal de liquidação é gerado; se o preço cair de volta para o meio trilha do Canal Donchian após uma posição curta ser aberta, acreditamos que os touros estão enfraquecendo ou os ursos estão se fortalecendo, e um sinal de liquidação é gerado; Quando ele sobe de volta para a trilha do meio do Canal Donchian, acreditamos que a força dos ursos está enfraquecendo, ou a força dos touros está se fortalecendo, e um sinal de compra para fechamento é gerado.
Condições de negociação
Abertura de posição longa: Se não houver posição e o preço de fechamento for maior que a faixa superior
Abra uma posição curta: Se não houver posição e o preço de fechamento for menor que a faixa inferior
Fechamento de posição longa:Se você mantiver uma ordem longa e o preço de fechamento for menor que o preço médio
Fechamento de posição curta:Se você mantiver uma ordem curta e o preço de fechamento for maior que o preço médio
Implementação do código de estratégia
O primeiro passo para implementar uma estratégia é obter dados, porque dados são um pré-requisito para uma estratégia de negociação. Imagine quais dados precisamos? E como obter esses dados? Em seguida, projetamos a lógica de negociação com base nesses dados; por fim, colocamos ordens de compra e venda de acordo com a lógica de negociação. As etapas específicas são as seguintes:
Etapa 1: use a biblioteca de negociação
Você pode pensar na biblioteca de trading como um módulo funcional. A vantagem de usar a biblioteca de trading é que ela permite que você se concentre em escrever lógica de estratégia. Por exemplo: quando usamos a biblioteca de negociação, ao abrir e fechar posições, podemos usar diretamente a API de ordens na biblioteca de negociação; mas se não usarmos a biblioteca de negociação, ao abrir e fechar posições, precisamos obter o preço de mercado, considerar o problema de colocar ordens, mas elas não serem executadas, considerar o problema de cancelar ordens, etc.

Figura 4-52
A imagem acima é a estrutura da estratégia CTA usando as ferramentas quantitativas do inventor. Este é um formato de código fixo, e todos os códigos de lógica de transação são escritos a partir da linha 4. Nenhuma modificação é necessária em nenhum outro lugar.
A biblioteca de modelos do JavaScript é integrada, o Python precisa copiar e salvar este modelo: https://www.fmz.com/strategy/24288. Em seguida, clique em Referência na página de edição de políticas. Claro, você também pode completar a estratégia sem usar a biblioteca de modelos.
Etapa 2: Obtenha vários dados
Pense bem: quais dados você precisa? A partir da nossa lógica de negociação estratégica, descobrimos que: primeiro precisamos obter o status da posição atual, depois comparar a relação entre o preço de fechamento e as faixas superior, média e inferior do indicador Bandas de Bollinger e, finalmente, determinar se o mercado está prestes a fechar. Então vamos pegar esses dados.
Obter dados de linha K
O primeiro passo é obter o array K-line e o preço de fechamento atual do K-line. Somente com o array K-line podemos chamar a API para obter o preço mais alto ou mais baixo de N períodos. É assim que fica no código:

Figura 4-53
Conforme mostrado na figura acima:
Linha 4: Obtenha a matriz K-line, que é um formato fixo.
Linha 5: Filtra o comprimento da K-line. Como calculamos o preço mais alto ou mais baixo de N períodos, o parâmetro usado é 50. Quando o número de K-lines é menor que 50, ele não pode ser calculado. Portanto, precisamos filtrar o comprimento da linha K aqui. Se houver menos de 50 linhas K, pule este loop e continue esperando pela próxima linha K.
Linha 6: Usamos o código “records[len(records) - 1]" primeiro obtém os últimos dados do array K-line, ou seja, os últimos dados K-line. Esses dados são um objeto, que contém: preço de abertura, preço mais alto, preço mais baixo, preço de fechamento, volume de negociação, tempo e outros dados. Como é um objeto, podemos usar diretamente ".Close" para obter o último preço de fechamento K-line.
Obter dados de posição
As informações de posição são uma condição muito importante em estratégias quantitativas de trading. Quando as condições de trading são atendidas, também é necessário determinar se deve ser feita uma ordem com base no status da posição e no número de posições. Por exemplo: quando as condições para abrir uma posição de compra forem atendidas, se você tiver uma posição, não precisará colocar uma ordem novamente; se não tiver uma posição, poderá colocar uma ordem. Desta vez, encapsulamos diretamente as informações de posição em uma função, e podemos usá-las apenas chamando esta função:

Figura 4-54
Conforme mostrado na figura acima:
Esta é uma função que obtém informações de posição. Se for uma posição curta, retorna 0; se for uma posição longa, retorna 1; se for uma posição curta, retorna -1. Observe o código acima:
Linha 2: Crie uma função chamada mp, que não tem parâmetros.
Linha 3: Obtenha a matriz de posição, que é um formato fixo.
Linha 4: Determina o comprimento do array de posições. Se seu comprimento for igual a , deve ser uma posição vazia, então retorna 0
Linha 6: Use um loop for para começar a percorrer o array. A lógica a seguir é muito simples. Se você mantiver uma posição longa, ele retornará 1; se você mantiver uma posição curta, ele retornará -1.
Linha 18: Chame a função mp que acabamos de escrever para obter as informações de posição.
Obtenha os preços mais altos e mais baixos das últimas 50 linhas K
Na Ferramenta Quantitativa do Inventor, você pode obtê-lo diretamente usando as funções "TA.Highest" e "TA.Lowest" sem precisar escrever os cálculos lógicos você mesmo. E os resultados retornados pelas funções "TA.Highest" e "TA.Lowest" são valores específicos e não matrizes. Isso é muito conveniente. Não só isso, o oficial tem centenas de funções indicadoras incorporadas.

Figura 4-55
Conforme mostrado na figura acima:
Linha 19: Chame a função "TA.Highest" para obter o valor máximo do preço mais alto em 50 períodos
Linha 20: Chame a função "TA.Lowest" para obter o valor mínimo do menor preço em 50 períodos
Linha 21: Calcular o valor médio com base no valor máximo do preço mais alto em 50 períodos e no valor mínimo do preço mais baixo em 50 períodos
Etapa 3: Faça um pedido
Com os dados acima, você pode escrever a lógica de negociação e o código para colocar ordens. O formato também é muito simples. O mais comumente usado é a "instrução if", que pode ser descrita em palavras como: se a condição 1 e a condição 2 forem atendidas, faça um pedido; se a condição 3 ou a condição 4 forem atendidas, faça um pedido.

Figura 4-56
Conforme mostrado na figura acima:
Linha 22: Use a biblioteca de transações, que é um formato fixo
Linhas 23 e 24: Esta é uma declaração para fechar uma posição longa, que usa os "operadores de comparação" e "operadores lógicos" que aprendemos antes. Isso significa que se você atualmente mantém uma posição longa e o preço de fechamento é menor do que o preço médio, todas as posições serão fechadas.
Linhas 25 e 26: Esta é uma declaração para fechar uma ordem curta, que usa os "operadores de comparação" e "operadores lógicos" que aprendemos antes. Isso significa que se você atualmente mantém uma ordem curta e o preço de fechamento é maior do que o do meio, todas as posições serão fechadas.
Linha 27: Determine o status da posição atual. Se a posição for curta, prossiga para a próxima etapa.
Linhas 28 e 29: Determine se o preço de fechamento é maior que a trilha superior. Se o preço de fechamento subir acima da trilha superior, compre para abrir uma posição.
Linhas 30 e 31: Determine se o preço de fechamento é menor que a faixa inferior. Se o preço de fechamento cair abaixo da faixa inferior, venda e abra uma posição.
Resumir
Acima, aprendemos cada etapa do desenvolvimento de uma estratégia de negociação quantitativa completa usando Python, incluindo: introdução à estratégia, método de cálculo do canal Donchian, lógica da estratégia, condições de compra e venda, implementação do código da estratégia, etc. Esta seção é apenas uma estratégia simples, como um ponto de partida. Há mais de um método. Você pode sobrepor diferentes métodos de negociação de acordo com seu próprio sistema de negociação para formar sua própria estratégia quantitativa de negociação.
Próxima Seção Prévia
No desenvolvimento de estratégias de negociação quantitativa, da perspectiva da velocidade de execução da linguagem de programação, se perguntarmos qual linguagem é a mais rápida, ela só pode ser C++. Especialmente no campo de derivativos e negociação de alta frequência, C++ tem especificidade de linguagem única e vantagens em cálculos numéricos. Sua velocidade pode ser aumentada em várias ordens de magnitude em comparação com JavaScript e Python. Se você quer se desenvolver no campo de derivativos e negociação de alta frequência no futuro, este será um curso que você não pode perder.
Trabalho de casa
- Comece copiando e implementando as estratégias desta seção.
- Tente adicionar um indicador de média móvel à estratégia nesta seção para reduzir a frequência de transações.
Capítulo 5 Estratégia Backtesting, Depuração e Melhoria
5.1 A importância e as armadilhas do backtesting
resumo
O backtesting é a maior diferença entre o trading quantitativo e o trading tradicional. Com base em dados reais de mercado que ocorreram na história, ele simula rapidamente o acionamento de sinais de estratégia e transações correspondentes para obter relatórios de desempenho e outros dados ao longo de um período de tempo. É um dos componentes mais importantes do desenvolvimento de estratégias para ações nacionais e estrangeiras, futuros de commodities, câmbio e outros mercados.
A importância do backtesting
Nos capítulos anteriores, aprendemos os fundamentos das principais linguagens de programação e ensinamos como usar esses fundamentos de programação para escrever algumas estratégias de negociação simples. Pode-se dizer que já passamos da metade do caminho da longa marcha. No entanto, uma vez que uma estratégia é escrita, ela não pode ser colocada em prática diretamente. Ela ainda requer backtesting contínuo - depuração - backtesting - depuração - e assim por diante, até que a estratégia possa implementar completamente o conteúdo do modelo e rodar suavemente.
Da perspectiva da lógica quantitativa de trading, as estratégias são, na verdade, baseadas em uma série de cognições e suposições sobre o mercado. O backtesting pode determinar eficientemente se essas suposições são válidas e estáveis. Quais perdas podem ocorrer durante períodos historicamente instáveis e como ajudar na tomada de decisões para evitar essas perdas.
Além disso, da perspectiva da operação de negociação quantitativa, o backtesting pode ajudar a detectar bugs na lógica da estratégia, como funções futuras, roubo de preço, ajuste múltiplo, etc. Forneça evidências confiáveis de que a estratégia pode ser usada em negociações reais.
- Verifique a precisão dos sinais de negociação.
- Verifique a lógica da transação e se suas ideias são viáveis.
- Descubra falhas no seu sistema de negociação e melhore sua estratégia original.
Portanto, a importância do backtesting é restaurar o processo de negociação real da forma mais realista possível por meio de dados históricos, verificar a eficácia da estratégia, evitar pagar um preço alto por estratégias erradas e nos ajudar a filtrar, melhorar e otimizar as estratégias de negociação.
Armadilhas do Backtesting
Sinal de armadilha de backtesting piscando:
As estratégias de negociação são testadas com base em dados históricos estáticos. Os dados reais da transação são dinâmicos. Por exemplo: se o preço mais alto for maior que o preço de fechamento de ontem, então compre para abrir uma posição. Na negociação real, se a linha K ainda não tiver sido concluída, o preço mais alto será dinâmico e o sinal de negociação poderá piscar para frente e para trás. Durante o backtesting, o mecanismo de backtesting pode simular transações correspondentes com base em dados históricos estáticos.
Armadilha de backtesting de função futura:
A função futura usa preços futuros, o que significa que as condições atuais podem ser modificadas no futuro. A função futura também pode causar flashes de sinal. Portanto, qualquer função tem as características de uma função futura, como a "função ziguezague".
Conforme mostrado na figura abaixo: A função ZigZag indica os pontos de virada de picos e vales. Ela pode ajustar seu valor de acordo com o último preço em tempo real. No entanto, se o preço atual mudar, o resultado calculado pela função ZigZag também mudará. Se uma função com uma função futura for usada, o sinal de ordem atual poderá ser estabelecido e a ordem poderá ser colocada, mas o sinal poderá não ser estabelecido depois de um tempo.

Figura 5-1
Armadilha de Backtesting: Roubo de Preço
O chamado roubo de preços se refere ao uso de preços passados para negociar. Por exemplo: se o preço mais alto for maior que um preço fixo, compre pelo preço de abertura. Essa condição é roubo de preços, porque no mercado real, quando o preço mais alto é maior que um determinado preço, o preço já está uma certa distância acima do preço de abertura e, neste momento, não pode ser comprado pelo preço de abertura. Mas no backtest, há um sinal de compra e a transação pode ser concluída.
Há outra situação. Se o preço saltar mais alto e abrir mais alto do que o preço fixo definido pela estratégia, a transação pode ser concluída no preço fixo durante o backtesting, mas esse preço fixo obviamente não está disponível no mercado real.
Armadilha de Backtesting: Preços de Transação Impossíveis
Existem várias situações em que os preços não podem ser negociados:
Primeiro: na negociação real, geralmente você não pode comprar quando o preço atinge o limite superior, e vice-versa. No entanto, é possível negociar no backtest.
O segundo tipo: O mecanismo de correspondência de câmbio é: prioridade de preço e prioridade de tempo. Algumas variedades geralmente têm ordens enormes no mercado. Se você fizer uma ordem de compra ou venda durante uma negociação real, precisará esperar que a espessura do mercado seja preenchida antes que a transação possa ser concluída, ou mesmo não possa ser concluída. Entretanto, durante o backtesting, ordens pendentes de compra e venda podem ser executadas.
O terceiro tipo: se for uma estratégia de arbitragem, o lucro do backtesting será muito alto, porque toda vez durante o backtesting, presume-se que essas diferenças de preço foram aproveitadas. Na realidade, muitos spreads não podem ser agarrados, ou apenas uma perna é agarrada. Em termos gerais, aquele que não for favorável à sua direção será executado primeiro, então você precisa preencher a outra perna imediatamente. Neste momento, o deslizamento não é mais de 1 ou 2 pontos, e a própria estratégia de arbitragem ganha o spread desses poucos pontos. Esta situação não pode ser simulada em backtesting. O lucro real não é tão bom quanto o do backtest.
O quarto tipo: evento cisne negro. Conforme mostrado no círculo vermelho na figura abaixo, no evento cisne negro do câmbio do franco suíço, embora haja preços de abertura, preços mais altos, preços mais baixos e preços de fechamento na superfície, na verdade, nas condições extremas de mercado do dia, o preço no meio é um vácuo, um grande número de ordens de stop-loss causou debandada, a liquidez era zero e as transações eram muito difíceis, mas os stop losses podiam ser alcançados no backtesting.

Figura 5-2
Armadilha do Backtesting: Overfitting
Toda vez que vejo a imagem abaixo, sinto: Hahahaha... Pela imagem abaixo, você pode ver que um modelo absurdo, desde que seja complexo o suficiente, pode se adaptar perfeitamente aos dados.

Figura 5-3
Para negociação quantitativa, o backtesting é baseado em dados históricos, mas as amostras de dados históricos são limitadas. Se a estratégia de negociação tiver muitos parâmetros ou a lógica de negociação for muito complicada, a estratégia de negociação será excessivamente adaptada aos dados históricos.
O processo de modelagem de estratégias quantitativas é essencialmente um processo de encontrar dados locais não aleatórios a partir de uma grande quantidade de dados aparentemente aleatórios. Sem a ajuda do conhecimento estatístico, é fácil cair na armadilha do overfitting.
Então, não se engane. Se você descobrir que os dados fora da amostra não apresentam um bom desempenho e achar uma pena descartar o modelo ou não estiver disposto a admitir que seu modelo não é bom e continuar a otimizar o modelo nos dados fora da amostra até que ele tenha um desempenho tão bom, então, no final, será seu dinheiro arduamente ganho que será prejudicado.
Armadilha do Backtesting: Viés do Sobrevivente
Há uma piada popular em Wall Street: Suponha que haja 1.000 macacos participando de investimentos no mercado. No primeiro ano, 500 macacos que perderem para o mercado serão eliminados. No segundo ano, metade dos macacos foi eliminada novamente, restando 250 macacos. No final do terceiro ano, restavam 125 macacos.

Figura 5-4
No nono ano, restava apenas um macaco. Então você olha para ele, para a esquerda e para a direita, e ele parece familiar. Finalmente, quando vi a capa de uma revista financeira, de repente me lembrei: "Ah, esse não é o Buffett!"
Claro que isso é só uma brincadeira, mas você já pensou que se houver 1.000 gestores de fundos, depois de 10 anos, cerca de 10 gestores de fundos terão desempenho superior ao do mercado por 10 anos consecutivos? Mas isso pode ser determinado pela aleatoriedade e sorte, e não tem nada a ver com as habilidades dos gestores de fundos.
Assim como o desempenho do backtest no lado esquerdo da imagem abaixo, acredito que a maioria dos investidores ficará surpresa. Essa estratégia de investimento teve um desempenho muito sólido, quase sem quedas significativas.

Figura 5-5
Espere um minuto, como mostra a imagem à direita, a situação real é lá dentro. Acontece que a curva de backtest à esquerda é simplesmente a de melhor desempenho entre muitos backtests. Ou seja, no backtest da esquerda, há muitas situações com desempenho ainda pior.
Armadilha do Backtesting: Custo de Impacto
Em um ambiente de negociação real, os preços estão constantemente flutuando. Quando você vê uma oportunidade de negociação e faz uma ordem, o preço pode ter mudado. Portanto, o problema de deslizamento é inevitável, seja em negociações subjetivas ou quantitativas.
No entanto, o backtesting é baseado em dados estáticos e é difícil simular um ambiente de negociação real. Por exemplo: o preço da ordem é de compra a 1050, mas o preço real da transação pode ser 1051. Há muitas razões para esse fenômeno, tais como: vácuo de liquidez em condições extremas de mercado, atrasos na rede, sistemas de software e hardware, resposta do servidor, etc.
Backtesting sem deslizamento
Conforme mostrado na figura acima, este é um backtest sem slippage. A curva de capital parece melhor, mas há uma diferença entre o preço de transação real em trading real e o preço de transação ideal do backtest de estratégia. Portanto, para reduzir esse erro, ao fazer o backtest da estratégia, você pode definir 2 pontos de deslizamento para aumentar o preço de compra ou diminuir o preço de venda.
Backtesting com Slippage
Conforme mostrado na figura acima, para a mesma estratégia, se o resultado do backtest for significativamente diferente do resultado do backtest sem deslizamento após adicionar o deslizamento de 2 saltos, isso significa que essa estratégia precisa ser melhorada ou substituída por uma nova. Especialmente para estratégias com uma frequência de negociação relativamente alta, adicionar um deslizamento de 1 a 2 saltos durante o backtest pode deixar o backtest mais próximo do ambiente de negociação real.
Resumir
Alguns amigos podem perguntar: já que pode haver tantos problemas na negociação quantitativa, como devo provar que minha estratégia está correta? Na verdade, a resposta é muito simples. Antes de implementar a estratégia na prática, você deve primeiro simular a transação por um período de tempo. Se o preço da transação simulada for quase o mesmo que o preço da transação durante o backtest, então isso prova que não há problema com a estratégia, pelo menos não há problema com a lógica da estratégia.
Em qualquer caso, o backtesting é essencial para um desenvolvedor de sistema de negociação experiente. 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. Acredito que ler este artigo pode pelo menos ajudar você a evitar muitos desvios e armadilhas quantitativas.
Trabalho de casa
- O que é overfitting e como evitá-lo?
- Quais são alguns exemplos de preconceito de sobrevivência na vida real?
5.2 Como fazer backtesting de negociação quantitativa
resumo
A significância e importância do backtesting estão além de dúvidas. Ao conduzir backtesting quantitativo, deve-se tentar manter a estratégia no ambiente histórico real tanto quanto possível. Se os detalhes no ambiente histórico forem ignorados, todo o backtest quantitativo pode ser inválido. Este artigo explicará como fazer backtesting de negociação quantitativa.
Backtesting é equivalente à reprodução de dados. Ele reproduz dados históricos da linha K e simula regras de negociação reais para comprar e vender, e finalmente resume o índice de Sharpe, a taxa máxima de drawdown, a taxa de retorno anualizada, a curva de capital e outros dados dentro de um período de tempo. Atualmente, existem muitos softwares que podem realizar backtesting, como o Wenhua Finance, que tem uma gama completa de produtos, o VNPY, que pode ser personalizado de forma flexível, e assim por diante.
Como um software comercial de negociação quantitativa, o Inventor Quant vem com um mecanismo de backtesting de alto desempenho e adota uma estrutura de backtesting for-loop (sondagem) para cálculos vetorizados, o que é mais rápido. Ele também unifica os códigos para backtesting e negociação real, resolvendo parcialmente o dilema de “backtesting fácil, negociação real difícil”.
Introdução à interface de backtesting
Vamos tomar a Estratégia de Linguagem Mai do Inventor Quantitative como exemplo e abrir o site oficial da Ferramenta de Negociação Quantitativa do Inventor (www.fmz.com). Clique em Centro de Controle, Biblioteca de Estratégias, Selecione uma Estratégia, Simule Backtest e entre na seguinte página:

Figura 5-8
Na interface de configuração do backtest, você pode personalizá-lo de acordo com suas necessidades reais. Por exemplo: defina o tempo de backtest, o período da linha K, o tipo de dados (dados de nível de simulação ou dados de nível em tempo real. Em comparação, o backtest de dados de nível de simulação é mais rápido, enquanto o backtest de dados de nível em tempo real é mais preciso). Além disso, você também pode definir a taxa de backtesting e os fundos iniciais da conta, etc.
Clique na Biblioteca de Negociação da Linguagem Mai, a primeira é a aba Configurações de Negociação. A estratégia da Linguagem Mai na Ferramenta de Negociação Quantitativa do Inventor tem dois métodos de execução de backtest, a saber: modelo de preço de fechamento e modelo de preço em tempo real. O modelo de preço de fechamento significa que o modelo é executado somente após a conclusão da linha K atual, e a transação é executada quando a próxima linha K começa. O modelo de preço em tempo real significa que o modelo é executado uma vez toda vez que o preço muda, e a transação é executada imediatamente quando o sinal de negociação é estabelecido. Conforme mostrado abaixo:

Figura 5-9
O tamanho do lote de abertura padrão se refere ao número de posições abertas e fechadas durante o backtesting, e o tamanho máximo da ordem de transação única é o número máximo de posições de abertura e fechamento confiadas ao mecanismo de backtesting em uma única transação. Há um desvio entre o preço de transação real e o preço de transação predefinido. Esse desvio geralmente se move em uma direção desfavorável ao trader, resultando em perdas adicionais na transação, então é necessário adicionar slippage. Os futuros de commodities domésticas geralmente adicionam 1 a 2 saltos, ou até mais, para simular um ambiente de negociação real.
Preencha o tipo de contrato a ser testado na opção de futuros, como rb000 ou rb888. A opção real é usada principalmente para negociações reais, e as configurações padrão podem ser mantidas no backtesting. Se o progresso de recuperação automática for clicado como verdadeiro, quando a estratégia parar o robô durante a operação em tempo real, reiniciar o robô restaurará automaticamente a posição anterior do sinal sem recalculá-lo. O número padrão de tentativas de pedidos é 20. Se um pedido falhar, o sistema tentará fazê-lo novamente. O intervalo de pesquisa da rede é o intervalo de tempo no qual o robô executa o código de estratégia.

Figura 5-10
A opção de negociação à vista é principalmente para negociação de moeda digital, e você pode manter as configurações padrão no backtest. Você pode especificar o volume de transação única, o volume mínimo de transação, a precisão da moeda de precificação, a precisão do produto da transação, as taxas de manuseio, o tempo de sincronização da conta, o intervalo de estatísticas de lucros e perdas, etc. Além disso, para trocas de moeda digital individuais, você também pode definir a alavancagem múltipla e outras configurações relacionadas.

Figura 5-11
Backtesting de estratégia
Antes do backtesting, primeiro determine sua estratégia de negociação. Aqui, tomamos a estratégia do termostato como exemplo. Esta estratégia adotará uma estratégia de tendência em um mercado de tendência e uma estratégia volátil em um mercado volátil com base nas condições de mercado. O código fonte é o seguinte (você também pode baixá-lo diretamente do site oficial do Strategy Square do Inventor Quantitative):

Figura 5-12
Na interface de backtesting de simulação, após configurar as configurações de backtesting, basta clicar no botão Iniciar Backtesting, e os resultados do backtesting serão exibidos imediatamente após algumas dezenas de segundos. No log de backtest, são registrados o número de segundos que o backtest levou, o número total de logs e o número de transações. As informações da conta imprimem os resultados finais de desempenho do backtesting da estratégia: lucro e prejuízo médios, lucro e prejuízo da posição, margem, taxas de manuseio e retornos estimados, etc.

Figura 5-13
A coluna de informações de status registra o tipo de transação, o volume da posição, o preço da posição, o preço mais recente, o tipo do último sinal, os preços mais altos e mais baixos após a posição ser mantida, o número e a hora da atualização e as informações de capital. Além disso, o rótulo de lucros e perdas flutuantes mostra a curva de capital detalhada da conta, bem como indicadores de desempenho comumente usados: rendimento, rendimento anualizado, índice de Sharpe, volatilidade anualizada e taxa máxima de redução, que podem basicamente atender às necessidades da maioria dos usuários.
Entre eles, o indicador de desempenho mais importante é o índice de Sharpe. É um indicador abrangente que leva em consideração tanto o retorno quanto o risco. É também um importante indicador de referência para medir um produto de fundo. Em termos leigos, significa quanto risco você assume para cada dólar que ganha. Portanto, quanto maior o índice de Sharpe, melhor.
Como o nome sugere, a volatilidade anualizada é a volatilidade diária multiplicada pelo número de dias de negociação por ano. Ela mede o risco de um fundo, mas definitivamente não é o risco total. Por exemplo, a Estratégia A tem uma volatilidade maior, mas tem flutuado para cima com uma boa taxa de retorno, enquanto a Estratégia B tem uma volatilidade menor, mas tem permanecido estável. Podemos dizer que a Estratégia B é melhor que a Estratégia A? Conforme mostrado na figura a seguir, a estratégia A:

Figura 5-14
Por fim, na coluna de informações de log, o status de correspondência de cada transação durante o backtest é registrado em detalhes, incluindo o horário específico da transação, troca, compra e venda, tipos de abertura e fechamento, o preço da transação correspondido pelo mecanismo de backtest, quantidade da transação e informações impressas, etc.

Figura 5-15
Após o Backtesting
Muitas vezes, mesmo na maioria dos casos, os resultados do backtesting estarão longe das suas expectativas. Afinal, uma estratégia que gere lucros estáveis, sustentados e de longo prazo não é fácil de obter. Ela requer sua capacidade de entender o mercado.
Se o backtest da sua estratégia resultar em prejuízo, não desanime, isso é normal. Primeiro, verifique se a lógica da estratégia está escrita incorretamente, se parâmetros extremos são usados, se há muitas condições de abertura e fechamento, etc. Se necessário, você também pode reexaminar sua estratégia e filosofia de negociação de outra perspectiva.
Se os resultados do backtest da sua estratégia forem muito bons, a curva de capital for perfeita e o índice de Sharpe exceder 1 ou até mais. Não fique muito feliz ainda. Quando você encontra esse tipo de situação, na maioria das vezes é por causa do uso de funções futuras, roubo de preço, overfitting ou falha em definir slippage, etc. Você pode usar dados fora da amostra e negociação real simulada para eliminar esses problemas.
Resumir
O texto acima é uma introdução a todo o processo de backtesting de toda a estratégia de negociação, que pode ser considerada especificada em cada detalhe. Vale ressaltar que o backtesting de dados históricos é, afinal, um ambiente ideal onde todos os riscos são conhecidos. Portanto, o melhor momento para testar a estratégia é passar por um mercado de alta ou baixa, e o número de transações efetivas não deve ser menor que 100 vezes, para evitar o viés de sobrevivência parcial.
O mercado está sempre mudando e evoluindo. Uma estratégia que tem bom desempenho em backtesting histórico não necessariamente tem bom desempenho no futuro. A estratégia não pode apenas lidar com riscos conhecidos no ambiente de backtesting, mas também precisa lidar com riscos desconhecidos no futuro. Portanto, é muito necessário aumentar a resistência ao risco e a universalidade da estratégia.
Trabalho de casa
- Tente copiar a estratégia desta seção e faça um backtest do relatório de desempenho
- Com base na sua própria experiência de negociação, tente melhorar e otimizar as estratégias desta seção
5.3 Como entender o relatório de desempenho do backtesting de estratégia
resumo
Quando nosso backtest de estratégia estiver concluído, a ferramenta de negociação quantitativa Inventor exibirá vários indicadores de desempenho e gráficos de curva de lucro na página da web. No entanto, talvez porque não estejamos familiarizados com a interpretação e o conteúdo desses indicadores, não somos capazes de julgar com precisão se uma estratégia é boa ou ruim. Este artigo começará com os principais conceitos de indicadores para ajudar todos a entender o relatório de desempenho de backtesting da estratégia e distinguir os prós e contras da estratégia. Claro, a maioria das ferramentas quantitativas de trading tem esse tipo de relatório de desempenho de backtest, e o conteúdo é similar. Depois que você tiver aprendido o conteúdo desta seção, ele também será aplicável mesmo se você mudar para outra ferramenta de trading.
Avaliação objetiva e completa
Seja o registro de dados de negociação reais ou o relatório de back-testing usando dados históricos, a qualidade do modelo é avaliada por meio de estatísticas sobre as condições de negociação.
A questão principal é: quais dados estatísticos são necessários para comparação? Vejamos um exemplo: Conforme mostrado na figura abaixo, supondo que os dois conjuntos de dados a seguir sejam obtidos no teste durante o mesmo período de tempo, podemos determinar qual modelo tem melhor desempenho?

Figura 5-16
A resposta é não. A unilateralidade do sistema de avaliação levará o sistema de negociação quantitativa a um beco sem saída.
O sistema de negociação deve ser capaz de passar por testes históricos antes de poder ser colocado em uso. Um sistema de negociação que não passe por testes históricos dificilmente gerará lucros em negociações reais a longo prazo. O backtesting histórico é um pré-requisito necessário para colocar um sistema de negociação em negociação real.
Um sistema de negociação que pode passar no backtesting histórico não é necessariamente um bom sistema de negociação, mas se não puder passar no backtesting histórico, definitivamente não é um bom sistema de negociação. De modo geral, precisamos analisar relatórios de desempenho sob as perspectivas de estabilidade, sustentabilidade e se eles atendem às expectativas.

Figura 5-17
Conforme mostrado na figura acima, qualquer um que tenha sido exposto a trading quantitativo pode ter visto esses termos longos e obscuros de dados de desempenho de backtest. Entre esses dados de desempenho, muitos são até mesmo contraditórios. Muitos iniciantes em análise quantitativa ficam confusos sobre em quais dados focar.
Os termos dos indicadores de desempenho na imagem acima podem geralmente ser divididos em várias categorias: índices de desempenho, análise de ciclo, várias curvas, análise de negociação extrema, etc. Mesmo da perspectiva dos produtos de fundos, a maioria deles é apenas uma exibição de resultados de cálculos de backtest, que têm pouca importância na aplicação prática, como: requisito de capital da conta, renda de retenção, limite de confiança, etc. Talvez você só precise se concentrar nas coisas importantes. Abaixo selecionarei os mais importantes entre os indicadores de desempenho de backtest para uma explicação detalhada.
Indicadores importantes de desempenho
Redução Máxima
A fórmula de cálculo do drawdown máximo é como acima. Para o modelo, o drawdown máximo é um indicador de risco muito importante, que é ainda mais importante do que a volatilidade. O drawdown máximo visto no backtest também representa, de certa forma, a pior situação possível que pode ocorrer depois que você abre uma posição.
Do ponto de vista matemático, se o capital perder 20%, os fundos restantes precisam ter um lucro de 25% para restaurar a escala de capital original. Se a perda for de 50%, os fundos restantes precisam ter um lucro de 100% para restaurar a escala de capital antes da perda.
Então não há dúvidas de que quanto maior a perda, menor a possibilidade de recuperação da escala de capital inicial e maior a dificuldade. O espaço de lucro ascendente para fundos é ilimitado, mas o espaço de perda descendente é limitado, e a possibilidade de atingir o fundo do poço é maior.
Não importa como seja definido, pelo menos esses dois pontos são o entendimento predominante atual:
- Quanto menor o recuo máximo, melhor;
- O drawdown é diretamente proporcional ao risco. Quanto maior o drawdown, maior o risco, e quanto menor o drawdown, menor o risco.
Índice de retorno-risco ajustado (RAROC)
Muitas pessoas não estão familiarizadas com esse conceito. Na verdade, a taxa de retorno-risco ajustada é o divisor de águas entre jogadores profissionais e amadores. Esta também é uma ferramenta de avaliação muito boa para bancos de investimento, grandes fundos e traders profissionais, além de ser um padrão de avaliação comum no campo financeiro global.
Em investimentos, não devemos apenas olhar para os lucros, mas também considerar quanto risco foi assumido para obtê-los. Em termos gerais, o risco e o retorno de um ativo são proporcionais. Isso significa que quando o modelo está liderando o grupo em termos de rendimento e progredindo rapidamente, pode haver riscos ocultos por trás de sua glória que ainda não surgiram.
Por exemplo, as condições de abertura e fechamento ou o aumento e diminuição de posições no modelo podem ter retornos maiores quando o mercado está subindo, mas quando ocorre um declínio, as perdas serão multiplicadas, resultando em perdas enormes. Além disso, subidas e descidas têm impactos assimétricos consideráveis.
Muitos traders quantitativos experientes estão dispostos a sacrificar alguns retornos para reduzir o risco. Neste caso, retornos ajustados ao risco são mais valiosos para referência. Portanto, no backtesting, um modelo com alto risco e alta volatilidade não é necessariamente um bom modelo, mesmo que tenha altos retornos.
Os depósitos são seguros, mas o rendimento anual é de apenas 2%. O mercado pode fazer você ganhar 50% em poucos dias, ou pode fazer você perder 50% em poucos dias. Depois de tantos anos de trading, tenho um conceito muito importante: encarar os riscos. Riscos e retornos nunca existem isoladamente. Trading é como ir ao mar para pescar. É impossível para você pescar, mas não quer arcar com os riscos do mar. Ser muito conservador e muito radical são, na verdade, dois extremos. O mesmo vale para a criação de modelos estratégicos.
Número de transações
Você não pode usar alguns meses de desempenho de backtest para provar o modelo. Se houver poucos dados de backtest, os resultados do backtest podem ser acidentais, ou os parâmetros são acidentais, ou as condições de mercado são acidentais, etc. Além disso, dados históricos mais longos também podem filtrar algum viés de sobrevivência.
Em termos gerais, para ações e commodities nacionais, os dados devem ser testados por mais de 5 anos, e para produtos recém-listados, são necessários pelo menos 3 anos de teste. Para produtos ou commodities listados anteriormente, como ouro e o índice do dólar americano no mercado internacional, pelo menos um ciclo de alta e baixa deve ser testado, o que geralmente deve durar mais de 10 a 15 anos. O período de backtesting deve ser longo o suficiente para que os resultados do backtesting sejam confiáveis. Para produtos que não atendem a esse requisito, o valor R deve ser ponderado adequadamente ao abrir uma posição para reduzir proativamente a exposição ao risco.
Lucro médio
O indicador de lucro médio parece comum, mas na verdade é muito importante. Seu cálculo também é muito simples: Lucro Líquido / Número de Transações. Não é exagero dizer que é um espelho que pode detectar aqueles desempenhos de backtest que parecem brilhantes na superfície. Conforme mostrado na figura abaixo, se essa estratégia pode render dinheiro, ela é anormal:

Figura 5-18

Figura 5-19
Se você observar o desempenho do backtest dessa estratégia, poderá ter uma pergunta: não seria uma pena não usar uma estratégia quase perfeita? Espere um minuto! Observe atentamente o lucro médio na segunda imagem, que é de apenas 17, o que significa que o lucro médio de cada transação é de apenas 17 yuans.
Tome a maioria dos produtos do mercado futuro com um salto de 10 yuans como exemplo. Qualquer um que tenha feito trading real entenderá o que isso significa. No trading real, mesmo um salto, até mesmo dez ou oito saltos são possíveis. Dois saltos e três saltos são comuns.
Taxa de vitória
A taxa de vitória nunca existe sozinha, ou não é realista falar sobre o problema apenas com base na taxa de vitória. Se você usar o modelo certo no mercado certo, não é surpreendente atingir uma taxa de vitória de 80%, mas isso não significa nada.
O preço sobe ou desce, caso contrário, ele permanece o mesmo. Se o tempo for longo o suficiente, você descobrirá que a probabilidade de os preços subirem e descerem é de 50% cada. Não importa que tipo de modelo de estratégia você use, se a taxa de vitória exceder 50% durante o backtesting, você deve ter cuidado. Do ponto de vista matemático e físico, isso é impossível.
Curva de patrimônio detalhada
Como diz o ditado, uma imagem vale mais que mil palavras. A curva de patrimônio detalhada começa do momento da primeira entrada até o momento da última barra do gráfico. É uma curva de patrimônio em tempo real para negociação. É em tempo real porque leva em conta o lucro e a perda flutuantes em cada barra.

Figura 5-20
A curva de patrimônio detalhada reflete as mudanças no valor líquido da conta e é a ferramenta de avaliação mais intuitiva. Ela permite que se tenha uma ideia aproximada do status de perda e lucro da estratégia e da volatilidade/suavidade do lucro e da perda em um piscar de olhos. No entanto, esta imagem do relatório de desempenho da estratégia não vale apenas mil palavras, mas também confunde milhões de crentes. Além disso, nunca olhe para a curva de fechamento do patrimônio líquido.
Taxa de Retorno Anualizada
Retorno anualizado é um indicador controverso. Algumas pessoas acham que é para leigos verem e não tem valor de referência. Em primeiro lugar, obter lucro é um pré-requisito para que o modelo seja selecionado, ou seja, o retorno do modelo em si deve ter um valor esperado positivo.

Figura 5-21
Você pode ter inúmeros retornos de 100%, mas só pode ter um 100% no máximo. A diferença entre a taxa de retorno anualizada e a taxa de retorno real (taxa de retorno do período de retenção) pode ser muito grande, às vezes até maior do que podemos imaginar.
Resumir
Finalmente, uma coisa precisa ser explicada. O desempenho perfeito de backtesting não existe. Além dos problemas com os dados de teste em si, os usuários do modelo podem enfrentar mais armadilhas. Tudo, desde a otimização de parâmetros até o design da transação, pode ser diferente da operação real.
Mais importante, questões emocionais no nível de execução são o fator X para colocar o modelo em produção. Negociações reais não podem ser executadas em um ambiente de "vácuo emocional". O fenômeno fat-tail é algo sobre o qual todo trader programático deve estar sempre vigilante.
Trabalho de casa
- Liste os indicadores de desempenho que você considera mais importantes no backtesting
- Tente calcular o indicador da razão de Sharpe
5.4 Por que os testes fora da amostra são necessários
resumo
Na seção anterior, focamos em vários indicadores de desempenho importantes para ensinar você a entender o relatório de desempenho do backtesting de estratégia. Na verdade, escrever uma estratégia que pode render dinheiro por meio de backtesting não é a coisa mais difícil. O que é mais difícil é como avaliar se essa estratégia continua sendo eficaz em negociações reais. Então hoje vou explicar a vocês o que são testes fora da amostra e sua importância.
Backtesting não é o mesmo que negociação real
Muitos iniciantes quantitativos se convencem facilmente de suas estratégias de negociação com base em um relatório de desempenho aparentemente bom ou em uma curva de capital de um backtest e estão prontos para mostrar seus talentos no mercado. É certo que esse resultado de backtest pode corresponder perfeitamente a um determinado estado de mercado que eles observaram, mas quando essa estratégia de negociação for colocada em combate real por um longo período de tempo, eles descobrirão que essa estratégia não é realmente eficaz.
Tenho visto muitas estratégias de negociação que têm uma taxa de sucesso de mais de 50% quando testadas. Com uma taxa de vitória tão alta, a relação lucro e perda ainda pode ser superior a 1:1. No entanto, quando essas estratégias são colocadas em prática, elas basicamente resultam em perdas. Há muitos motivos para perdas, um deles é que, no backtest, há poucas amostras de dados, o que leva ao viés dos dados.
No entanto, negociar é algo muito complicado. Olhando para trás, é extremamente claro, mas se voltarmos ao começo, ainda estamos em prejuízo. Isso envolve o problema raiz da quantificação: as limitações dos dados históricos. Portanto, se você usar apenas dados históricos limitados para testar sua estratégia de negociação, será difícil evitar o problema de "dirigir olhando pelo espelho retrovisor".
O que é teste fora da amostra?
Como podemos fazer o melhor uso de dados limitados para testar cientificamente estratégias de negociação quando os dados são limitados? A resposta é o teste fora da amostra. Ao fazer backtesting, os dados históricos são divididos em duas seções de acordo com a sequência temporal. A primeira seção de dados é usada para otimização de estratégia e é chamada de conjunto de treinamento, enquanto a segunda seção de dados é usada para testes fora da amostra e é chamada de conjunto de teste.
Se sua estratégia for sempre eficaz, então otimize os melhores parâmetros nos dados do conjunto de treinamento e aplique esses parâmetros aos dados do conjunto de teste para backtesting. Idealmente, os resultados do backtest devem ser semelhantes aos do conjunto de treinamento, ou dentro de uma faixa razoável. Isso mostra que essa estratégia é relativamente eficaz.
Entretanto, se uma estratégia tem um bom desempenho no conjunto de teste, mas um desempenho ruim no conjunto de teste, ou varia muito, e o mesmo é verdadeiro para outros parâmetros, então a estratégia pode ter viés de acomodação de dados.
Por exemplo, suponha que você queira fazer um backtest de barras de aço de futuros de commodities, e há cerca de 10 anos de dados sobre barras de aço (2009-2019). Então você pode usar os dados de 2009 a 2015 como o conjunto de treinamento, e os dados de 2015 a 2019 como o conjunto de teste. Por exemplo, para uma estratégia de média móvel dupla, os melhores grupos de parâmetros no conjunto de treinamento são (média móvel de 15 períodos e média móvel de 90 períodos), (média móvel de 5 períodos e média móvel de 50 períodos), (média móvel de 10 períodos e média móvel de 100 períodos)... Então, colocamos esses grupos de parâmetros no conjunto de teste para backtesting e comparamos os relatórios de desempenho do backtest e as curvas de capital do conjunto de treinamento e do conjunto de teste para determinar se sua diferença está dentro de uma faixa razoável.
Se você não usar testes fora da amostra e usar diretamente dados de 2009 a 2019 para fazer o backtest da estratégia, os resultados podem ser um bom relatório de desempenho de backtest e curva de capital devido ao ajuste de dados históricos. No entanto, esses resultados de backtest são de pouca importância para a negociação real e não têm papel de orientação, especialmente para estratégias com mais parâmetros.
Teste avançado fora da amostra
Além de dividir os dados históricos em duas partes e realizar backtesting dentro e fora da amostra, há uma opção melhor, que são os métodos de backtesting recursivo e cross-backtesting. Especialmente quando há poucos dados históricos, como futuros de petróleo bruto e futuros de maçã que foram listados recentemente, esses dois métodos podem ser usados para testar o modelo de forma abrangente usando dados limitados.
Princípios básicos de teste de indução: treine o modelo com um período anterior de dados históricos mais longos e teste o modelo com dados subsequentes relativamente mais curtos, e depois mova continuamente a janela de dados para trás, repetindo os passos de treinamento e teste.
Dados de treinamento: 2000 a 2001, dados de teste: 2002;
Dados de treinamento: 2001 a 2002, dados de teste: 2003;
Dados de treinamento: 2002 a 2003, dados de teste: 2004;
Dados de treinamento: 2003 a 2004, dados de teste: 2005;
Dados de treinamento: 2004 a 2005, dados de teste: 2006;
... e assim por diante...
Por fim, os resultados dos testes de 2002, 2003, 2004, 2005, 2006... foram estatísticos para avaliar integralmente o desempenho da estratégia.
O princípio do teste recursivo pode ser explicado intuitivamente, como mostra a figura a seguir:

Figura 5-22
Os gráficos acima mostram duas maneiras de fazer o teste de indução.
A primeira é que, em cada teste, os dados são mais curtos e o número de testes é maior.
Segundo tipo: dados de teste mais longos e menos testes em cada teste.
Em aplicações práticas, o comprimento dos dados de teste pode ser alterado e vários testes podem ser realizados para determinar a estabilidade do modelo ao lidar com dados não estacionários. O princípio básico da validação cruzada é dividir todos os dados em N partes iguais, usar N-1 partes para treinamento a cada vez e usar as partes restantes para testes.
Dividindo os anos de 2000 a 2003 em quatro partes, o processo de verificação cruzada é o seguinte:
Dados de treinamento: 2001-2003, dados de testes: 2000;
Dados de treinamento: 2000-2002, dados de testes: 2003;
Dados de treinamento: 2000, 2001, 2003, dados de testes: 2002;
4, dados de treinamento: 2000, 2002, 2003, dados de testes: 2001;

Figura 5-23
Como mostrado na figura acima: a maior vantagem do cross-checking é o aproveitamento de dados limitados, e cada dado de treinamento também é um dado de teste. Mas também há desvantagens óbvias quando o cross-checking é aplicado ao teste de modelos de estratégia:
Quando os dados de preços não são estáveis, os resultados dos testes de modelos tendem a não ser confiáveis. Por exemplo, usar os dados de 2008 para treinar e testar com os dados de 2005. É muito provável que o ambiente de mercado de 2008 tenha mudado muito em relação a 2005 e, portanto, os resultados dos testes de modelos não sejam confiáveis.
2 - Tal como no primeiro parágrafo, no teste de cruzamento, não é lógico usar o modelo de treinamento de dados mais recente e o modelo de teste de dados mais antigo.
Além disso, quando se verifica um modelo de estratégia de quantificação, tanto a verificação recorrente quanto a verificação cruzada enfrentam problemas de sobreposição de dados.
Quando se desenvolve um modelo de estratégia de negociação, a maior parte dos indicadores técnicos é baseada em dados históricos de certa duração. Por exemplo, se usarmos um indicador de tendência e calcularmos os dados históricos dos últimos 50 dias, e o indicador for calculado no dia de negociação seguinte, os dados dos 50 dias anteriores a esse dia de negociação, então os dados dos dois indicadores serão os mesmos por 49 dias, o que levará a mudanças pouco visíveis no indicador a cada dois dias adjacentes.

Figura 5-24
A duplicação de dados pode ter os seguintes efeitos:
A variação lenta dos resultados do modelo de previsão leva a uma variação lenta da posição, que é o que chamamos de atraso do indicador.
2. Alguns valores estatísticos não estão disponíveis para testes de resultados de modelos, devido à correlação de sequências causada por dados duplicados, tornando os resultados de alguns testes estatísticos não confiáveis.
Uma boa estratégia de negociação deve ser capaz de ser lucrativa no futuro. Além de testar objetivamente as estratégias de negociação, os testes fora da amostra também podem economizar tempo de forma eficiente para os traders quantitativos. Na maioria dos casos, é muito perigoso adotar diretamente os parâmetros ideais de todas as amostras e colocá-los em combate real.
Se todos os dados históricos antes do momento da otimização paramétrica forem diferenciados, divididos em dados dentro da amostra e dados fora da amostra, primeiro usando dados dentro da amostra para otimização de parâmetros e depois usando dados fora da amostra para testes fora da amostra, esse erro pode ser excluído, ao mesmo tempo em que a estratégia de otimização pode ser aplicada no futuro mercado.
Resumir
Tal como acontece com o comércio, nunca podemos atravessar o tempo e tomar uma decisão correta para nós mesmos sem cometer um erro. Se houver a mão de Deus ou a capacidade de atravessar o futuro, então, sem testes, o comércio direto on-line também pode ser cheio de dinheiro. E eu, um ser mortal, devo testar nossas estratégias nos dados históricos.
Entretanto, mesmo com uma enorme quantidade de dados históricos, eles parecem extremamente escassos quando confrontados com o futuro vasto, infinito e imprevisível. Portanto, o sistema de negociação desenvolvido de baixo para cima com base na história acabará afundando com o tempo. Porque a história não pode esgotar o futuro. Portanto, um sistema completo de negociação de expectativas positivas deve ser apoiado por seus princípios e lógica internos.
“Confie, mas verifique” — Presidente Reagan
Trabalho de casa
- Quais fenômenos na vida real são viés de sobrevivência?
- Use as ferramentas quantitativas do inventor para fazer backtest tanto dentro da amostra quanto fora da amostra e comparar suas diferenças.
5.5 Otimização e otimização da estratégia de negociação
resumo
A essência da estratégia de negociação é a generalização e conclusão das regras de mercado. Quanto mais profundo for seu entendimento do mercado e maior for sua capacidade de expressar ideias com código, mais próxima sua estratégia estará do mercado. Esta seção continuará explicando como otimizar suas estratégias de negociação e fazer os preparativos finais para sua negociação real.
Otimize a entrada e a saída
A maioria das estratégias de rastreamento de tendências usa rupturas ou indicadores técnicos para capturar tendências de mercado. Normalmente, os métodos de entrada e saída desses sinais são menos oportunos. Se a estratégia usar um modelo de preço de fechamento, o ponto de entrada será no preço de abertura da próxima linha K. Portanto, o melhor momento de entrada para romper essa linha K será perdido, e uma grande quantidade de lucro será perdida.
Portanto, uma maneira eficaz é usar preços em tempo real mais vantajosos na implementação da estratégia e colocar ordens imediatamente quando os sinais aparecem. Dessa forma, quando o sinal for estabelecido, você poderá entrar no mercado imediatamente e não perderá lucros. Mas nem todos os preços em tempo real são melhores que os preços de fechamento. Isso depende da estratégia de negociação. Para algumas estratégias com lógica de negociação simples, a diferença entre o preço em tempo real e o preço de fechamento é relativamente pequena. Entretanto, o modelo de preço de fechamento não consegue lidar com uma lógica de negociação mais detalhada, então é necessário usar o preço em tempo real.
Optimização de parâmetros
A otimização de parâmetros pode tornar as estratégias de negociação quantitativa mais próximas dos dados históricos e alcançar melhor desempenho de backtesting. Por exemplo: usamos uma estratégia de média móvel dupla em contratos de vergalhões, mas quais duas médias móveis são as melhores? Em seguida, você pode usar a função de ajuste de parâmetros na ferramenta quantitativa do inventor para encontrar automaticamente os dois melhores parâmetros de média móvel.
Conforme mostrado na figura abaixo, tomando a estratégia de média móvel dupla como exemplo, ela é em si uma instância multidimensional. Se desenharmos os resultados do backtest de cada parâmetro como um ponto (observe a figura abaixo), então cada parâmetro é uma dimensão dessa estratégia e, finalmente, todas as combinações de parâmetros constroem essa forma de superfície multidimensional complexa (como uma montanha).

Figura 5-25
Conforme mostrado acima, este é um gráfico de desempenho de estratégia de parâmetro duplo. Conforme os parâmetros mudam, a taxa final de retorno também muda significativamente, e a superfície é fortemente distorcida, formando "picos" e "vales" de diferentes alturas. Normalmente, o primeiro lugar no resultado da otimização é o ponto mais alto de toda a superfície. Entretanto, da perspectiva da sensibilidade dos parâmetros, objetividade, etc., às vezes esse resultado pode não ser o "ótimo". Porque o mercado está em constante mudança.
Portanto, o princípio importante da otimização de parâmetros é escolher platôs de parâmetros em vez de ilhas de parâmetros. O chamado platô de parâmetros se refere à existência de uma faixa de parâmetros mais ampla dentro da qual a estratégia pode atingir um bom desempenho. Geralmente, forma uma distribuição normal com o centro do planalto. A chamada ilha de parâmetros significa que a estratégia terá um bom desempenho somente quando o valor do parâmetro estiver dentro de uma faixa muito pequena. Quando o parâmetro se desvia desse valor, o desempenho da estratégia se deteriorará significativamente.

Figura 5-26
Platô de Parâmetros
Tomando a figura acima como exemplo, uma boa distribuição de parâmetros de estratégia deve ser um platô de parâmetros. Mesmo quando as configurações de parâmetros desviam, a lucratividade da estratégia ainda pode ser garantida. Esses parâmetros são altamente estáveis, o que pode tornar a estratégia mais universal ao encontrar diversas condições de mercado em futuras operações reais.

Figura 5-27
Ilhas de Parâmetros
Tomando a figura acima como exemplo, se o desempenho do backtest mostrar ilhas de parâmetros, quando os parâmetros mudarem ligeiramente, a lucratividade da estratégia será bastante reduzida. Tais parâmetros são frequentemente difíceis de lidar com as condições de mercado em constante mudança em transações reais devido à sua baixa universalidade.
Portanto, se o desempenho dos parâmetros próximos for muito pior do que o do parâmetro ótimo, então esse parâmetro ótimo pode ser o resultado de um sobreajuste, que pode ser matematicamente considerado como uma solução singular em vez da solução máxima buscada. Do ponto de vista matemático, singularidades são instáveis. Em condições futuras de mercado incertas, uma vez que as características do mercado mudam, os parâmetros ótimos podem se tornar os piores parâmetros.
Adicionar filtro
Muitas estratégias de tendência podem captar bem a tendência e obter retornos ricos quando o mercado tende. No entanto, a longo prazo, o resultado final é um pequeno lucro ou uma perda. Qual é o problema?
O motivo é que a estratégia continua negociando repetidamente em um mercado volátil, e a maioria das negociações voláteis são perdas ou pequenos lucros. O mercado está em um mercado volátil cerca de 70% do tempo. Pequenas perdas contínuas de longo prazo levam à perda de todos os lucros anteriores.

Figura 5-28
A solução é adicionar filtros. Há muitos tipos de filtros no mercado, incluindo filtros de lucro e perda, filtros de valor de risco, filtros de padrão de tendência, filtros de indicadores técnicos, etc. Por exemplo, adicionar um filtro de média móvel de grande período pode reduzir o número de transações em um mercado volátil e filtrar metade das transações errôneas.
Suavizando a curva de financiamento
A quantificação busca um método de lucro estável e sustentável, que é o que a maioria dos traders quer ver. Ninguém quer ganhar 50% este ano, perder 30% no ano que vem e ganhar 40% no ano seguinte. Eles preferem aceitar um retorno anual de 20%, mas ele pode durar mais de dez anos. É isso que o investimento quantitativo pode fazer. Porque o investimento quantitativo é um modelo de negociação com desempenho sustentável.
Para alcançar uma curva de capital suave, é necessário construir um portfólio de investimentos com múltiplas estratégias, múltiplas variedades, múltiplos ciclos e múltiplos parâmetros. Mas quanto mais não é necessariamente melhor. Há um efeito marginal decrescente aqui. Quanto mais você adiciona ao portfólio no começo, melhor a diversificação. No entanto, quando a estratégia atinge uma certa ordem de magnitude, o efeito de retornos decrescentes da diversificação começa a aparecer. A vantagem de uma combinação é a diversificação. Embora a taxa geral de retorno não seja a mais alta, ela é a mais estável.
Desista da busca pelo Santo Graal
Muitos traders consideram se a negociação quantitativa pode encontrar o Santo Graal. Alguns traders até entram no mercado com suas chamadas estratégias perfeitas após um simples backtest. Espero vencer todas as batalhas e me tornar um quant profissional capaz de superar todos os obstáculos.
Mas existe um Santo Graal? Na verdade é muito simples, a resposta é não. Na verdade, não é difícil entender. Se esse mercado realmente tem regras, então pessoas com QIs mais altos, educação superior e trabalho mais duro serão capazes de descobrir as regras. Quer usem análise matemática, monopólio de informação ou outros métodos de análise, eles acabarão ganhando a maior parte do dinheiro no mercado. A longo prazo, essas pessoas monopolizarão o mercado de negociação até que o mercado não possa mais operar normalmente.
Resumir
Se o tempo de negociação for longo o suficiente, qualquer um poderá enfrentar diversas tendências de mercado durante o processo de negociação, e é improvável que essas tendências se repitam exatamente. Como um trader quantitativo, além de examinar e otimizar corretamente suas próprias estratégias de negociação, você também precisa monitorar continuamente as condições de mercado e melhorar continuamente suas estratégias em resposta às mudanças do mercado.
Ao mesmo tempo, você também deve perceber que lucros e perdas vêm da mesma fonte. Perdas são parte de toda a estratégia de negociação. Mesmo a melhor estratégia de negociação pode experimentar uma série de drawdowns. Quando há uma perda em cada negociação, suas regras e estratégias de negociação não devem ser questionadas. Pelo menos não mude sua estrutura lógica estratégica facilmente, a menos que sua estrutura lógica esteja errada desde o início.
Trabalho de casa
- Construir um portfólio de investimentos com base nas características da sua própria estratégia e backtest usando as ferramentas quantitativas do inventor
- Tente otimizar sua estratégia de negociação quantitativa com base no conteúdo desta seção
5.6 Desenvolva o pensamento probabilístico e melhore seu padrão de negociação
resumo
Negociar é uma ciência e uma arte. Existem muitos métodos de negociação, seja investimento em valor, análise técnica, pontos críticos de eventos, hedge de arbitragem, etc., eles parecem ser logicamente rigorosos na superfície e fazem sentido na teoria. Mas, na realidade, elas são frequentemente contraditórias. Às vezes, o rigor da ciência não consegue explicar a imaginação selvagem da arte.
Embora vários métodos de negociação tenham diferentes pontos de partida, todos os caminhos levam a Roma. A vantagem do investimento em valor é que uma margem de segurança pode ser definida para flutuações de preço com base no valor; a vantagem da análise técnica é que as três principais suposições tornam a transação científica.
No entanto, todos eles têm uma característica comum: eles só conseguem fazer previsões aproximadas sobre análises de preços futuros, mas não previsões precisas. Mesmo que a análise fundamental seja combinada com a análise técnica, ela não pode resolver o problema de melhorar a "precisão", então a negociação é um jogo de probabilidade do começo ao fim.
Jogos de azar
Na verdade, negociar não é apenas um jogo de probabilidade. Na vida de uma pessoa, tudo, desde pequenas coisas como atravessar a rua (o sinal está verde, é seguro atravessar a rua agora?) e que tipo de amigos fazer (esse amigo é confiável?); até coisas grandes como que tipo de carreira seguir (o trading profissional é realmente uma boa carreira?) e com quem se casar (seremos felizes juntos?), são todos jogos de probabilidade de avaliação de riscos e retornos. Como não temos a capacidade de prever o futuro, toda vez que fazemos algo, não importa o quão confiantes estejamos, sempre há risco e não podemos ter 100% de certeza.
Um motivo importante pelo qual muitas pessoas cometem erros nas negociações é a falta de pensamento probabilístico e o fato de serem muito emocionais em vez de racionais ao negociar. Emocionalidade é, na verdade, nosso instinto primitivo. No mercado, esses instintos primitivos podem estimular muitas fraquezas humanas e amplificá-las exponencialmente. É por isso que a maioria das pessoas chega ao mercado e acaba fracassando.
Motivos para falha da transação
Razão 1: Por causa da natureza humana
A grande maioria das pessoas tem uma fraqueza: gostam de tirar vantagem de pequenas vantagens e têm medo de sofrer pequenas perdas. Uma vez que há um pequeno lucro no mercado, eles o sacam imediatamente e saem do mercado com lucros; uma vez que há uma perda, eles mantêm a posição perdedora em uma tentativa de recuperar seu dinheiro por acaso. Como resultado, pequenas perdas lentamente se acumulam em grandes perdas.
Os preços sobem ou descem, ou permanecem os mesmos. No longo prazo, sem considerar taxas de transação e slippage, a probabilidade de ganhar ou perder dinheiro é de aproximadamente 50%. Portanto, o método de negociação da maioria das pessoas se torna uma estratégia de expectativa negativa com lucros limitados e riscos ilimitados. O extrato de liquidação da transação deve ser assim: pequeno lucro>>......>>pequeno lucro>>grande perda.
Na vida real, isso é muito semelhante ao pensamento das pessoas pobres e ao pensamento das pessoas ricas. Pessoas pobres são avessas ao risco e têm medo de perder dinheiro. Gosto de empregos que proporcionem renda estável e busco estabilidade. Mesmo que você não tenha certeza absoluta sobre fazer algo, você nunca deve fazê-lo. Superficialmente, não parece haver nada de errado em fazer isso, mas há enormes oportunidades e riscos por trás disso.
Os ricos estão mais dispostos a correr riscos, sabendo que risco e retorno são sempre proporcionais. Apenas risco gera oportunidade. Eles avaliam riscos racionalmente e fazem apostas corajosas quando os riscos são controláveis.
Motivo 2: Gosto de ganhar dinheiro rápido
Uma instituição estrangeira fez uma estatística que mostrou que, no longo prazo, o retorno anualizado sobre os ativos líquidos da maioria dos setores dificilmente ultrapassará 15%. Pelo contrário, muitos investidores de varejo sentem-se envergonhados de cumprimentar os outros se obtiverem um lucro de 15% no mercado. As pessoas gostam de ganhar dinheiro rápido, então elas se envolvem em negociações pesadas e de curto prazo.
Posição Pesada
Posições pesadas, alta alavancagem e alocação de capital são muito tentadoras, mas também muito perigosas. Se você tiver sucesso, você será bem-sucedido; se você falhar, você estará condenado. Se você tiver uma estratégia de negociação com uma taxa de vitória de 50% e operar com uma posição total e margem de negociação, se tiver sorte, poderá ganhar mais de dez vezes consecutivas, e também é possível que sua riqueza mude de uma mudança quantitativa para uma mudança qualitativa.
Mas se você cometer um erro apenas uma vez, tudo será zerado. Mesmo que você opere apenas com uma posição pesada, sem nenhuma alocação de capital, há o risco de sua conta ir a zero, porque você não pode garantir que não sofrerá perdas por mais de uma dúzia de vezes consecutivas na próxima situação de mercado. Mesmo negociações intensas podem transformar uma estratégia de negociação originalmente esperada em uma estratégia com ganhos e perdas desiguais.
Curto prazo
A única arte marcial no mundo que não pode ser derrotada é a velocidade. No círculo de negociação, a negociação manual diária, a negociação intradiária de curto prazo e a negociação quantitativa de alta frequência sempre foram muito misteriosas. Não estou duvidando dessas pessoas que negociam olhando para o cronômetro, mas estou tentando persuadi-lo a desistir da negociação de curto prazo de outra perspectiva.
Quando julgamos se um método é viável, não devemos olhar apenas para aqueles que tiveram sucesso usando esses métodos, mas também para aqueles que falharam ao usá-los. Em outras palavras, você não pode presumir que comprar bilhetes de loteria é uma estratégia com expectativas positivas só porque algumas pessoas ganham o prêmio máximo.
Além disso, olhando para a classificação de produtos de private equity, nos últimos três anos, quantos dos 100 principais estão envolvidos em especulação diária ou negociações de curto prazo? Não há dúvidas de que a taxa de sucesso do investimento de curto prazo é muito baixa. Mesmo que seja bem-sucedido, esse método de ganhar dinheiro rápido é difícil de manter a longo prazo. Se você não tem talento, tome cuidado ao usar esse tipo de truque, afinal, só existe um Simmons.
Razão 3: Preconceito
Se possível, sugiro que você passe 100 minutos assistindo a um filme: "12 Homens e uma Sentença". Um filme refeito por quatro países: a primeira versão americana em 1957, a versão japonesa em 1991, a versão russa em 1997 e a versão chinesa em 2014. Embora este filme não possa lhe ensinar como negociar, ele lhe ensina a olhar as coisas e aprender a se conhecer, o que é muito importante.
Como a experiência humana é limitada, a cognição humana também é limitada. Todos têm preconceitos em maior ou menor grau com base em suas próprias experiências. Muitas vezes, o preconceito se tornou um hábito da maioria das pessoas, e elas tomam como certo julgar muitas coisas com base em suas próprias emoções.
Voltando ao mercado, não importa se seu julgamento do mercado é baseado em análise fundamental ou análise técnica. Se suas opiniões forem diferentes das da maioria no mercado, os preços tenderão a favorecer a maioria do mercado, e o mercado não operará de acordo com suas opiniões.
Portanto, em transações, devemos lembrar de "julgar, mas não confiar no julgamento". Em última análise, deve ser baseado em fatos e preços. A única força que faz os preços subirem ou descerem é o que a maioria das pessoas espera que seja o futuro. Seu julgamento não tem peso no mercado, então nunca deixe que ele forme seu próprio preconceito.
Motivo 4: Busca pela perfeição.
Os participantes do mercado incluem especialistas de todas as áreas, incluindo física, estatística, matemática, astronomia, etc. Muitas pessoas tentam usar seu conhecimento profissional para explicar esse mercado.
Mas os principais participantes do mercado são pessoas, e as próprias pessoas têm limitações cognitivas, o que significa que o próprio mercado é errado e imperfeito. Então, como podemos usar esses métodos "perfeitos" para explicar o mercado? Isso não vai contra a natureza do mercado?
O texto acima lista os motivos pelos quais a grande maioria das pessoas que chegam ao mercado acabam fracassando. Além dos principais motivos mencionados acima, há muitos outros fatores que não estão listados aqui um por um. Resumindo, exceto sua confiança na vitória, todo o resto é uma pedra de tropeço que impede você de ter sucesso.
Aqueles que ganham dinheiro no mercado por causa da sorte acabarão devolvendo-o ao mercado ao longo do tempo. Portanto, o mercado futuro é um jogo de soma negativa. Somente mudando sua maneira de pensar e estabelecendo sua própria estratégia de negociação você terá a possibilidade de sucesso.
O que é pensamento probabilístico?
Pensamento probabilístico é um nome chique, para simplificar é um pensamento de jogo. Você ouviu direito, negociar é apostar. Quando você ouve falar sobre jogos de azar, você pode pensar em "alguém que perdeu tudo no jogo, fugiu por causa de dívidas ou não tinha mais família" e ficar longe disso.
De fato, há alguns jogadores na sociedade que são obcecados pelo jogo. Mas jogo ≠ jogador. "Jogo" é provavelmente uma das palavras mais incompreendidas. Se sua estratégia é expectativa negativa, você é um jogador; se sua estratégia é expectativa positiva, você está apostando.
Se removermos o significado negativo de "jogo de azar" e o entendermos como uma atividade que envolve assumir certos riscos em troca de certos retornos, então a vida é realmente "jogo de azar" em todos os lugares. Qual especialização escolher na escola, se deve comprar uma casa, se deve iniciar um projeto, se deve trabalhar ou abrir um negócio, etc.
Até mesmo colocar dinheiro num banco é uma aposta, porque você não tem certeza se haverá inflação no futuro ou se o banco irá à falência (veja a crise da dívida grega). Em suma, do berço ao túmulo, todo processo da vida é uma aposta.
Como vencer a longo prazo
O conceito de jogo precisa ser melhor resolvido: como alguém pode ganhar a longo prazo? Antes de estudar as estratégias vencedoras de longo prazo, vamos primeiro estudar os princípios dessas estratégias vencedoras de longo prazo. Além da máquina de impressão de dinheiro, o que mais pode garantir uma vitória a longo prazo?
É o que acontece no cassino: bacará, roleta, caça-níqueis, blackjack, etc. Não importa como os métodos de jogo mudem, o cassino vencerá no final. Na verdade, há um segredo escondido aqui que os cassinos nunca contam: a lei dos grandes números.
Como funciona o Sic Bo
Três dados, aposte no tamanho, 4-10 é pequeno, 11-17 é grande, se você apostar corretamente, você ganha dinheiro. Existe um tipo de dado envolvente no Sic Bo, ou seja, quando os pontos em três dados são iguais, o dealer do cassino ganha. A probabilidade de dados envolventes aparecerem é de 2,8%. Então a probabilidade de aparecer um número grande e um número pequeno é de 48,6% cada. O cassino conta com essa probabilidade de 2,8%. Se cada jogador apostar 100 yuans em cada jogo, o cassino ganhará 280 yuans após jogar 100 jogos.
(0.486+0.028)100100-0.486100100=280
No entanto, essa estratégia de cassino tem brechas. Se um grande jogador aposta dezenas de bilhões por capricho e por acaso ganha, o cassino irá à falência de repente. Portanto, o cassino definirá um limite de aposta e nenhuma outra aposta poderá ser feita nesta rodada se o limite for excedido. Dessa forma, mesmo que o apostador tenha sorte o suficiente para ganhar dinheiro por um tempo, a longo prazo, ele ainda perderá para a probabilidade. Em um número infinito de jogos de Sic Bo, o apostador perderá 2,8% do seu dinheiro.
A lei dos grandes números
A vantagem do dono do cassino é apenas 2% maior que a do apostador. Em uma única aposta, o dono pode sofrer uma perda ou até mesmo experimentar perdas contínuas. No entanto, o dono do cassino não ficará assustado com as perdas, porque ele sabe que a razão pela qual ele pode ganhar dinheiro é que a "lei dos grandes números" está em ação. Enquanto as pessoas continuarem a apostar, ele só precisa de uma pequena vantagem de 2% para manter lucros estáveis a longo prazo.
Então o cassino não tem medo de você ganhar dinheiro, mas tem medo de que você não venha. Você já ouviu falar de bancos que foram à falência ao longo dos anos, mas quando foi que você já ouviu falar de um cassino que foi à falência? No longo prazo, o cassino é sempre o vencedor. Esta é a razão pela qual o jogo vencerá no longo prazo.
Exemplos semelhantes de vitórias a longo prazo incluem: várias loterias. Os fundos do prêmio da loteria vêm se acumulando cada vez mais desde que a loteria foi lançada, e esse dinheiro certamente vem da maioria dos jogadores de loteria. Você sabe qual é a probabilidade de ganhar 5 milhões no Double Color Ball? A resposta é uma em 17,7 milhões.
Mudanças na probabilidade
Suponha que haja uma moeda com o mesmo peso em ambos os lados, a probabilidade de virar uma palavra (atrás) ou uma flor (frente) é de 50% e cada lançamento de moeda é independente do resultado anterior. Se você lançar a moeda 10.000 vezes seguidas, a probabilidade de obter cara é de aproximadamente 50%.
Mas se você lançar apenas 10 vezes, a probabilidade de obter um resultado positivo mudará, e a probabilidade pode não ser de 50%. Portanto, o crupiê do cassino deve garantir que essa estratégia de expectativa positiva seja acionada vezes suficientes para que seja eficaz. Essa também é a razão pela qual as instituições de private equity não podem interromper a estratégia quando iniciam uma estratégia de negociação quantitativa, a menos que haja condições especiais.
Como usar a "lei dos grandes números" para criar uma estratégia vencedora de longo prazo no mercado financeiro será o conteúdo da nossa próxima série de cursos, então fique ligado!
Resumir
Acima, explicamos a você como encarar a negociação de uma forma científica, sob os aspectos de probabilidade, razões para falhas na negociação, mentalidade correta de negociação, o princípio de ganhar a longo prazo em jogos de azar, etc. Acredito que se você aprender bem, a mudança no pensamento será a mudança no seu comportamento, e a mudança no comportamento será a mudança no seu sucesso.
Trabalho de casa
- Por que a negociação é um jogo de probabilidade?
- Quais são os outros motivos para falha na transação?
- 1










