s 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?
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.
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.
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.
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.
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
SK——Vender posição de abertura Exemplo: CLOSE
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
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.
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.
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.
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.
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.
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.
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.
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.
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”.
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.
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.
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.
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.
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.
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.
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.
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.
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++ é 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# 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.
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.
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.
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.
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 (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.
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 é 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
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”.
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
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 “||”.
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
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
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.
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
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…..
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ê.
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.
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.
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:
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
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
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
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
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
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
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
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
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 mai