O que é a linguagem M? A chamada linguagem M é um conjunto de funções programáticas que se estendem desde os primeiros indicadores técnicos de negociação de ações. Encapsulando o algoritmo em uma única função, o usuário só precisa chamar uma determinada função como blocos de construção para implementar a lógica da estratégia.
Ele adota o modo de construção de "pequena gramática, grande função", o que melhora muito a eficiência de programação. A escrita de estratégia de mais de 100 frases em outras linguagens pode ser compilada com apenas algumas linhas em linguagens M. A biblioteca de funções estatísticas financeiras e a estrutura de dados em conjunto com a ferramenta FMZ Quant também podem suportar alguma lógica de negociação complexa.
Para ajudá-lo a entender rapidamente os conhecimentos-chave desta seção, antes de introduzir a linguagem FMZ Quant M, vamos primeiro ter uma compreensão preliminar do conceito de substantivo desta seção.
Posição longa aberta: se não houver atualmente nenhuma posição e o preço de encerramento for superior à média móvel de curto prazo, e o preço de encerramento for superior à média móvel de longo prazo, e a média móvel de curto prazo for superior à média móvel de longo prazo, e a média móvel de longo prazo estiver em alta.
Posição curta aberta: Se, atualmente, não houver posição, e o preço de encerramento for inferior à média móvel de curto prazo, e o preço de encerramento for inferior à média móvel de longo prazo, e a média móvel de curto prazo for inferior à média móvel de longo prazo, e a média móvel de longo prazo estiver em queda.
Fechar posição longa: se a posição longa estiver atualmente detida e o preço de fechamento for inferior à média móvel de longo prazo, ou a média móvel de curto prazo for inferior à média móvel de longo prazo, ou a média móvel de longo prazo estiver a cair.
Fechar posição curta: Se a posição curta atual for mantida e o preço de fechamento for superior à média móvel de longo prazo, ou a média móvel de curto prazo for superior à média móvel de longo prazo, ou a média móvel de longo prazo estiver em alta.
Se você escrever em linguagem M, será:
MA10:=MA(CLOSE,10); // Get the 10-cycle moving average of the latest K-line and save the result in variable MA10
MA50:=MA(CLOSE,50); // Get the 50-cycle moving average of the latest K-line and save the result in variable MA50
MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling
CLOSE>MA10 AND CLOSE>MA50 AND MA10>MA50 AND MA50_ISUP,BK; //open long position
CLOSE<MA10 AND CLOSE<MA50 AND MA10<MA50 AND MA50_ISUP,SK; //open short position
CLOSE<MA50 OR MA10<MA50,SP;//close long position
CLOSE>MA50 OR MA10>MA50,BP;//close short position
Para escrever uma estratégia de negociação completa, você precisará de: aquisição de dados, cálculo de dados, cálculo lógico e colocação de ordens. Como mostrado acima, em todo o código, apenas uma API para obter os dados básicos é usada, que é o " CLOSE " nas primeiras e segundas linhas ; então a primeira a nona linhas são as partes de cálculo de dados; Linhas 11 a 14 são cálculos lógicos e parte de colocação de ordem.
Observe que o MA10, MA50, MA10_1, MA50_1, MA10_2, e MA50_2 são variáveis; na primeira a nona linhas, o " := " é um sinal de atribuição, e os dados à direita do sinal de atribuição são atribuídos à variável à esquerda do sinal de atribuição; o
Os dados básicos (preço de abertura, preço mais alto, preço mais baixo, preço de fechamento, volume) são uma parte indispensável da negociação quantitativa. Para obter os dados básicos mais recentes na estratégia, você só precisa ligar para a API do FMZ Quant.
As variáveis podem ser alteradas. O nome de uma variável pode ser entendido como um nome de código. Seu nome é suportado por letras, números e linhas em inglês. No entanto, o comprimento deve ser controlado dentro de 31 caracteres. Os nomes de variáveis não podem ser repetidos com outro, não podem ser duplicados com nomes de parâmetros, não podem ser repetidos com nomes de funções (API ), e cada declaração deve terminar com um ponto e vírgula. Escrever comentários após o " // ". Como mostrado abaixo:
INT:=2; //Integer type
FLOAT:=3.1; //Floating point
ISTRUE:=CLOSE>OPEN; //Boolean type
A atribuição da variável significa que o valor à direita do sinal de atribuição é dado à variável à esquerda. Existem quatro tipos de atribuições, que podem controlar se o valor é exibido no gráfico ou a posição da exibição.
CC1: C; //Assign the closing price to the variable CC1 and display it in the sub-chart
CC2:=C; //Assign the closing price to variable CC2, but not display in the status bar and chart
CC3^^C; //Assign the closing price to the variable CC3 and display it in the main chart
CC4..0; //Assign the closing price to the variable CC4 and display it in the status bar, but not in the chart
Existem vários tipos de dados na linguagem M, os mais comuns dos quais são tipos numéricos, tipos de cadeia e tipos booleanos. O tipo numérico são números, incluindo números inteiros, decimais, números positivos e negativos, etc., como: 1, 2, 3, 1.1234, 2.23456...; o tipo de cadeia pode ser entendido como texto, chinês, inglês, os números também podem ser cadeias, como:
Os operadores relacionais, como o nome sugere, são operadores usados para comparar a relação de dois valores.
CLOSE = OPEN; //when closing price equals to opening price, return 1 (true), otherwise return 0 (false)
CLOSE > OPEN; //when closing price greater than opening price, return 1 (true), otherwise return 0 (false)
CLOSE < OPEN; //when closing price less than opening price, return 1 (true), otherwise return 0 (false)
CLOSE >= OPEN; //when closing price greater than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <= OPEN; //when closing price less than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <> OPEN; //when closing price is not equal to opening price, return 1 (true), otherwise return 0 (false)
As operações lógicas podem juntar instruções de tipo booleano separadas no todo, as mais usadas são "AND" e "OR". Suponha que existam dois valores de tipo booleano,
AA:=2>1; //return true
BB:=4>3; //return true
CC:=6>5; //return true
DD:=1>2; //return false
Atenção:
" E " é quando todas as condições são
"OR" significa em todas as condições, desde que qualquer uma das condições seja
" AND " pode ser escrito como " && ", e " OR " pode ser escrito como ".
Não há diferença entre os operadores aritméticos (" +
AA:=1+1; //the result is 2
BB:=2-1; //the result is 1
CC:=2*1; //the result is 2
DD:=2/1; //the result is 2
Se houver uma expressão 100*(10-1)/(10+5, qual passo é o programa calculado primeiro?
1, Se for o mesmo nível de funcionamento, é geralmente calculado da esquerda para a direita. 2, Se há adições e subtrações, e multiplicação e divisão, primeiro calcule a multiplicação e divisão, então adições e subtrações. 3, Se houver parênteses, calcule primeiro o interior dos parênteses. 4, Se for cumprida a lei da facilidade de operação, a lei pode ser utilizada para o cálculo.
O mesmo vale para a linguagem M, conforme mostrado abaixo:
100*(10-1)/(10+5) //the result is 60
1>2 AND (2>3 OR 3<5) //the result is false
1>2 AND 2>3 OR 3<5 //the result is true
Na linguagem M da ferramenta FMZ Quant, existem dois modos de execução do programa, a saber, o modo de preço de fechamento e o modo de preço em tempo real.
Se for uma estratégia de negociação intradiária, você precisa usar a função de tempo "TIME" quando precisar fechar a posição no final. Esta função está acima do segundo ciclo e abaixo do ciclo do dia, mostrada na forma de quatro dígitos: HHMM (1450 - 14: 50).
CLOSE>OPEN && TIME<1450,BK; //if it is a positive k-line and the time is less than 14:50, opening position.
TIME>=1450,CLOSEOUT; //if the time is beyond 14:50, closing all position.
Há dois tipos de classificação de modelos na linguagem M: modelo sem filtragem e modelo de filtragem. Isso é realmente muito bem compreendido: o modelo sem filtragem permite sinais de abertura ou fechamento contínuos, que podem ser usados para adicionar e reduzir posições. O modelo de filtragem não permite sinais de abertura ou fechamento contínuos, ou seja, quando o sinal de abertura aparece, o sinal de abertura subsequente será filtrado até que o sinal de fechamento apareça. A ordem do modelo sem filtragem é: posição aberta - posição próxima - posição aberta - posição próxima - posição aberta...
O acima é o conteúdo do início rápido da linguagem M, agora você pode programar sua própria estratégia de negociação agora.
A negociação intradiária também é um modo de negociação popular. Este método não mantém a posição durante a noite. Portanto, está sujeito a baixo risco de volatilidade do mercado. Uma vez que ocorrem condições desfavoráveis do mercado, ele pode ser ajustado a tempo. Na próxima seção, vamos trazer você para escrever uma estratégia de negociação intradiária viável.