3.3 Como implementar estratégias na linguagem M

Autora:Bem-estar, Criado: 2019-06-25 12:08:47, Atualizado: 2023-11-11 17:01:30

img

Como implementar estratégias na linguagem M

Resumo

No artigo anterior, explicamos a premissa da realização da estratégia de negociação a partir dos aspectos da introdução da linguagem M, a gramática básica, o método de execução do modelo e a classificação do modelo.

Módulo de Estratégia

img

Pense nisso, como você constrói um robô com peças de Lego? Você não pode sempre de cima para baixo ou de baixo para cima, juntar pedaço por pedaço. Pessoas com um pouco de bom senso sabem que devem juntar suas cabeças, braços, pernas, asas, etc., e depois combiná-los em um robô completo. O mesmo vale para escrever programas, escrevendo as funções necessárias em um único módulo de estratégia e, em seguida, combinando esses módulos de estratégia individuais em uma estratégia de negociação completa. Abaixo, listarei alguns módulos de estratégia comuns:

img

Aumento de estágio

O aumento de estágio é o cálculo da porcentagem do preço de fechamento da linha K atual comparado com N períodos anteriores de diferença de preço de fechamento.

CLOSE_0:=CLOSE; //get the current K-line's closing price, and save the results to variable CLOSE_0. 
CLOSE_10:=REF(CLOSE,10); //get the pervious 10 K-lines' closing price, and save the results to variable CLOSE_10

(CLOSE_0-CLOSE_10)/CLOSE_10*100;//calculating the percentage of current K line's closing price compare with previous N periods of closing price's difference.

Novo preço elevado

O novo preço mais alto é calculado por se a linha atual K é maior do que o preço mais alto de N ciclos.

HHV_10:=HHV(HIGH,10); //Get the highest price of latest 10 K-lines, which includes the current K-line.
HIGH>REF(HHV_10,1); //Judge whether the current K-line's highest price is greater than pervious K-lines' HHV_10 value.

Aumento dos preços com um aumento maciço do volume de negociação

Por exemplo: se o preço de fechamento da linha K atual for 1,5 vezes o preço de fechamento das 10 linhas K anteriores, o que significa que em 10 dias, o preço aumentou 50%; e o volume de negociação também aumentou mais de 5 vezes das 10 linhas K anteriores. pode ser escrito:

CLOSE_10:=REF(CLOSE,10); //get the 10th K-line closing price
IS_CLOSE:=CLOSE/CLOSE_10>1.5; //Judging whether the current K Line closing price is 1.5 times greater than the value of CLOSE_10 

VOL_MA_10:=MA(VOL,10); //get the latest 10 K-lines' average trading volume
IS_VOL:=VOL>VOL_MA_10*5; //Judging whether the current K-line's trading volume is 5 times greater than the value of VOL_MA_10

IS_CLOSE AND IS_VOL; //Judging whether the condition of IS_CLOSE and IS_VOL are both true.

Mercado de choque de preços estreito

Mercado de choque estreito significa que o preço é mantido dentro de um certo intervalo no período recente. Por exemplo: Se o preço mais alto em 10 ciclos menos o preço mais baixo em 10 ciclos, o resultado dividido pelo preço de fechamento atual da linha K é menor que 0,05.

HHV_10:=HHV(CLOSE,10); //Get the highest price in 10 cycles(including current K-line)
LLV_10:=LLV(CLOSE,10); //Get the lowest price in 10 cycles(including current K-line)

(HHV_10-LLV_10)/CLOSE<0.05; //Judging whether the difference between HHV_10 and LLV_10 divided by current k-line's closing price is less than 0.05.

A média móvel indica um mercado de alta

A média móvel indica a direção longa e curta, a linha K é apoiada ou resistida pela linha média móvel 5,10,20,30,60, A média móvel indica mercado de touros ou mercado de ursos. pode ser escrita:

MA_5:=MA(CLOSE,5);  //get the moving average of 5 cycle closing price.
MA_10:=MA(CLOSE,10);//get the moving average of 10 cycle closing price.
MA_20:=MA(CLOSE,20);//get the moving average of 20 cycle closing price.
MA_30:=MA(CLOSE,30);//get the moving average of 30 cycle closing price.

MA_5>MA_10 AND MA_10>MA_20 AND MA_20>MA_30; //determine wether the MA_5 is greater than MA_10, and MA_10 is greater than MA_20, and MA_20 is greater than MA_30.

Preço elevado anterior e localização

Para obter a localização do preço mais alto anterior e sua localização, você pode usar o FMZ Quant API diretamente. pode ser escrito:

HHV_20:=HHV(HIGH,20); //get the highest price of 20 cycle(including current K line)
HHVBARS_20:=HHVBARS(HIGH,20); //get the number of cycles from the highest price in 20 cycles to current K line
HHV_60_40:REF(HHV_20,40); //get the highest price between 60 cycles and 40 cycles.

Salto da diferença de preços

A diferença de preço é o caso em que os preços mais altos e mais baixos das duas linhas K não estão conectados. Consiste de duas linhas K, e a diferença de preço é o preço de referência dos pontos de suporte e pressão no movimento de preços futuro. Quando ocorre uma diferença de preço, pode-se assumir que uma aceleração ao longo da tendência com a direção original começou. pode ser escrito:

HHV_1:=REF(H,1); //get the pervious K line's highest price
LLV_1:=REF(L,1); //get the pervious K line's lowest price
HH:=L>HHV_1; //judging wether the current K line's lowest price is greater than pervious K line's highest price (jump up)
LL:=H<LLV_1; //judging wether the current K line's highest price is greater than pervious K line's lowest price (jump down)
HHH:=L/REF(H,1)>1.001; //adding additional condition, the bigger of the price gap, the stronger the signal (jump up)  
LLL:=H/REF(L.1)<0.999; //adding additional condition, the bigger of the price gap, the stronger the signal (jump down)  
JUMP_UP:HH AND HHH; //judging the overall condition, whether it is a jump up
JUMP_DOWN:LL AND LLL; //judging the overall condition, whether it is a jump down

Indicadores técnicos comuns

Média móvel

img

A média móvel é a média aritmética do preço diário, que é uma trajetória de preços de tendência. O sistema de média móvel é uma ferramenta técnica comum usada pela maioria dos analistas. Do ponto de vista técnico, é um fator que afeta o preço psicológico dos analistas técnicos.

MA_DEMO:MA(CLOSE,5);   // get the moving average of 5 cycle
MA_DEMO:EMA(CLOSE,15); // get the smooth moving average of 15 cycle
MA_DEMO:EMA2(CLOSE,10);// get the linear weighted moving average of 10 cycle
MA_DEMO:EMAWH(CLOSE,50); // get the exponentially weighted moving average of 50 cycle
MA_DEMO:DMA(CLOSE,100);  // get the dynamic moving average of 100 cycle
MA_DEMO:SMA(CLOSE,10,3); // get the fixed weight of 3 moving average of closing price in 10 cycle
MA_DEMO:ADMA(CLOSE,9,2,30); // get the fast-line 2 and slow-line 30 Kaufman moving average of closing price in 9 cycle.

Bandeiras de Bollinger

img

A banda de Bollinger também é baseada no princípio estatístico. O trilho médio é calculado de acordo com a média móvel de N dias, e os trilhos superior e inferior são calculados de acordo com o desvio padrão. Quando o canal BOLL começa a mudar de largo para estreito, o que significa que o preço retornará gradualmente à média. Quando o canal BOLL está mudando de estreito para largo, significa que o mercado começará a mudar. Se o preço estiver acima do trilho superior, significa que o poder de compra é aumentado. Se o preço abaixo atravessar o trilho inferior, indica que o poder de venda é aumentado.

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 em estatísticas, envolvendo a trajetória média (MB ), a trajetória superior (UP ) e a trajetória inferior (DN ). Felizmente, você não precisa saber os detalhes do cálculo, você pode usá-lo diretamente na plataforma FMZ Quant da seguinte forma:

MID:MA(CLOSE,100); //calculating moving average of 100 cycle, call it Bollinger Bands middle trajectory   
TMP2:=STD(CLOSE,100); //calculating standard deviation of closing price of 100 cycle.
TOP:MID+2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it upper trajectory
BOTTOM:MID-2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it lower trajectory

Indicador MACD

img

O indicador MACD é uma operação de dupla suavização usando médias móveis rápidas (a curto prazo) e lentas (a longo prazo) e sua agregação e separação. O MACD desenvolvido de acordo com o princípio das médias móveis elimina o defeito de que a média móvel frequentemente emite sinais falsos e também mantém o efeito do outro bom aspecto. Portanto, o indicador MACD tem a tendência e a estabilidade da média móvel.

DIFF:EMA(CLOSE,10)-EMA(CLOSE,50); //First calculating the difference between short-term moving average and long-term moving average.
DEA:EMA(DIFF,10); //Then calculating average of the difference.

O modelo acima é o módulo de estratégia comumente usado no desenvolvimento de estratégias de negociação quantitativas. Além disso, há muito mais do que isso. Através dos exemplos do módulo acima, você também pode implementar vários módulos de negociação que você usa com mais frequência na negociação subjetiva. Os métodos são os mesmos. Em seguida, começamos a escrever uma estratégia de negociação intradiária viável.

Escrita de estratégia

No mercado spot Forex, há uma estratégia bem conhecida chamada HANS123.

Estratégia lógica

  • Pronto para entrar no mercado após 30 minutos de abertura;

  • O carril superior = 30 minutos de altura após a abertura;

  • Relhas inferiores = 30 minutos após a abertura;

  • Quando o preço ultrapassar o limite superior, comprar e abrir a posição;

  • Quando o preço cai abaixo da linha inferior, o vendedor abre a posição.

  • Estratégia de negociação intradiária, encerramento antes do encerramento;

Código de estratégia

// Data Calculation
Q:=BARSLAST(DATA<>REF(DATA,1))+1; //Calculating the number of period from 
the first K line of the current trading day to current k line, and assign the results to N 
HH:=VALUEWHEN(TIME=0930,HHV(H,Q)); //when time is 9:30, get the highest price of N cycles, and assign the results to HH
LL:=VALUEWHEN(TIME=0930,LLV(L,Q)); //When time is 9:30, get the lowest price of N cycles, and assign the results to LL

//Placing Orders
TIME>0930 AND TIME<1445 AND C>HH,BK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is greater than HH, opening long position.
TIME>0930 AND TIME<1445 AND C<LL,SK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is lesser than LL, opening short position.
TIME>=1445,CLOSEOUT; //If the time is greater or equal to 14:45, close all position.

//Filtering the signals
AUTOFILTER;  //opening the filtering the signals mechanism

Resumindo

Acima, aprendemos o conceito do módulo de estratégia. Através de vários casos de módulo de estratégia comumente usados, tivemos uma ideia geral das ferramentas de programação FMZ Quant, pode-se dizer que aprender a escrever módulos de estratégia e melhorar o pensamento lógico de programação é um passo chave na negociação quantitativa avançada.

Anúncio da secção seguinte

Talvez ainda haja alguma confusão para algumas pessoas, principalmente por causa da parte de codificação. Não se preocupe, já pensamos nisso para você. Na plataforma FMZ Quant, há outra ferramenta de programação ainda mais fácil para iniciantes. É a programação visual, vamos aprender em breve!

Exercícios após a escola

  1. Tente implementar vários módulos de negociação que você usa com mais frequência na negociação subjetiva.

  2. Tente implementar o algoritmo de índice KDJ usando a linguagem M na plataforma FMZ Quant.


Mais.