O recurso está a ser carregado... Carregamento...

Escrever instruções de agrupamento em estratégias de negociação quantitativas

Autora:Bem-estar, Criado: 2019-07-10 09:55:13, Atualizado: 2019-07-16 15:37:32

Por que agrupar instruções?

Necessidades dos desenvolvedores de estratégias

Para diferentes mercados, são necessários diferentes indicadores para julgar. Posso definir diferentes diferenciais de stop loss de acordo com diferentes condições de abertura?

Por exemplo, os modelos tradicionais de redação de condições de liquidação não distinguem as diferentes condições de abertura.

O seguinte código é uma simples estratégia tradicional de não distinguir condições de armazenamento:

MA5^^MA(C,5);
MA10^^MA(C,10);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K..SMA(RSV,3,1);
D..SMA(K,3,1);
CROSS(MA5,MA10)||CROSS(K,D),BK;
C>HV(H,10)||C<BKPRICE-5*MINPRICE,SP;
AUTOFILTER;

O que é diferente é usar instruções de agrupamento.

As instruções de agrupamento podem dividir n grupos de condições de equilíbrio, sendo que os posicionamentos de um grupo de condições de equilíbrio somente podem ser equilibrados com as condições de equilíbrio correspondentes a um grupo, e os outros grupos de condições de equilíbrio não são sinalizados ou confiados.

Por exemplo:

O primeiro grupo é multicondicional.

MA5^^MA(C,5);
MA10^^MA(C,10);
CROSS(MA5,MA10),BK;
CROSS(MA10,MA5),SP;

O segundo grupo é multicondicional.

RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K..SMA(RSV,3,1);
D..SMA(K,3,1); 
CROSS(K,D),BK; 
C>HV(H,10)||C<BKPRICE-5*MINPRICE,SP;

Como distinguir os diferentes grupos de condições no mesmo modelo? Vamos implementá-los.

Como escrever instruções de agrupamento

Em primeiro lugar, os modelos são divididos em modelos filtrados e modelos não filtrados:

  • Modelo de filtragem: diferentes condições de abertura de posições querem ser equilibradas com diferentes condições de equilíbrio, que podem ser realizadas usando instruções de agrupamento.

  • Modelo não filtrado: a estratégia de entrada inicial é diferente da estratégia de aumento de risco, que quer equilibrar com diferentes estratégias de equilíbrio de stop-loss, que podem ser realizadas usando o agrupamento de instruções.

Modelo de filtragem

//A组指令
A组的开多条件,BK('A');
A组的开空条件,SK('A');
A组的平多条件,SP('A');
A组的平空条件,BP('A');
//B组指令
B组的开多条件,BPK('B');
B组的开空条件,SPK('B');
B组的平多条件,SP('B');
B组的平空条件,BP('B');
AUTOFILTER;//过滤函数

Nota: o agrupamento de um modelo de filtragem requer que o grupo seja adicionado após uma instrução de transação e encadernado com uma simples cotação.

Modelo sem filtro

//A组指令
A组的开多条件1,BK('A',2);
A组的开空条件1,SK('A',2);
A组的加多条件2,BK('A',1);
A组的加空条件2,SK('A',1);
A组的平多条件,SP('A',GROUPBKVOL('A'));
A组的平空条件,BP('A',GROUPSKVOL('A'));
//B组指令
B组的加多条件,BK('B',1);
B组的加空条件,SK('B',1);
B组的平多条件1,SP('B',GROUPBKVOL('B'));
B组的平空条件1,BP('B',GROUPSKVOL('B'));

Observação: o agrupamento de modelos não filtrados requer a adição de agrupamentos e números de mãos após as instruções de transação, e os agrupamentos precisam ser encadernados com as vírgulas. Por exemplo, BK ((A, 2)

Mecanismos de operação de instruções de agrupamento

Modelo de filtragem: primeiro filtragem de grupo e depois filtragem de sinal

  • O filtro do grupo é: se o sinal anterior da linha K for o sinal de negociação aberto do grupo A (BK SK BPK SPK), o sinal atual da linha K pode ser apenas o sinal de negociação aberto do grupo A. Se o sinal anterior da linha K for o sinal de negociação aberto do grupo A (BP SP), o sinal atual da linha K pode ser o sinal de negociação aberto de qualquer grupo.

  • As condições de liquidação não agrupadas só podem ser aplicadas às condições de abertura não agrupadas.

Filtragem de sinais: Filtragem de sinais abertos

A prioridade é:

  • A linha K anterior é BK e a linha K atual deve ser SPK ou SP (SPK tem prioridade sobre SP, abaixo é a simetria)
  • A linha K acima é SK. A linha K atual deve ser BPK ou BP.
  • A linha K acima é BP e a linha K atual deve ser BK ou SK.
  • A linha K acima é SP. A linha K atual deve ser BK ou SK.
  • A linha K acima é BPK. A linha K atual deve ser SPK ou SP.
  • A linha K acima é SPK. A linha K atual deve ser BPK ou BP.

Modelo sem filtro:

  • Se o sinal anterior é o sinal de abertura do grupo A, o próximo deve ser o sinal de aumento ou o sinal de equilíbrio do grupo A.
  • Se o sinal anterior for o sinal de equilíbrio do grupo A e o grupo A estiver posicionado em 0, o próximo sinal pode ser o sinal de abertura do grupo arbitrário.
  • Se a posição do grupo A for maior que 0, deve ser o sinal de abertura ou o sinal de liquidação do grupo A. Nota: condições de liquidação não agrupadas só podem ser aplicadas em condições de abertura não agrupadas

Análise de casos de instruções de agrupamento

Em seguida, vamos dar alguns exemplos de estratégias para ver como essas instruções são agrupadas quando o código é escrito.

Modelo de filtragem

Ideia de negociação: usar 20 ciclos e 60 ciclos como padrão para determinar a tendência.

  • Faça mais acima da linha média de 20 ciclos do que acima da linha média de 60 ciclos. Faça o contrário.
  • Em uma tendência de fazer mais, se o preço máximo for mais alto do que a linha k de 10 e para o sol, a tendência é mais. Quando o equilíbrio, o equilíbrio é feito com um ponto de stop loss maior ou com um equilíbrio linear de forks mortos. Fazer o contrário.
  • Em uma tendência de multiplicação, se o indicador KDJ forca e é para a linha do sol, o intervalo é maior. Quando está em equilíbrio, abra com um menor ponto de stop-loss para o equilíbrio ou quebre o intervalo para a linha k. Faça o inverso.

Código:

MA20^^MA(C,20);
MA60^^MA(C,60);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;
HH:=HV(H,10);
LL:=LV(L,10);
MA20>MA60&&H>HH&&C>O,BK('A');
MA20<MA60&&L<LL&&C<O,SK('A');
L<LV(L,5)||CROSSDOWN(MA20,MA60)||C<BKPRICE-5*MINPRICE,SP('A');
H>HV(H,5)||CROSSUP(MA20,MA60)||C>SKPRICE+5*MINPRICE,BP('A');//只平A组开仓
MA20>MA60&&CROSSUP(K,D)&&C>O,BK('B');
MA20<MA60&&CROSSDOWN(K,D)&&C<O,SK('B');
C>BKPRICE+5*MINPRICE||C<BKPRICE-2*MINPRICE||C<REF(L,BARSBK),SP('B');
C<SKPRICE-5*MINPRICE||C>SKPRICE+2*MINPRICE||C>REF(H,BARSSK),BP('B');//只平B组开仓
//不同的开仓条件开仓,用不同的平仓条件,有针对性的平仓。达到不同行情试用不同策略的目的。
AUTOFILTER;

Modelo sem filtro

Ideia de negociação: como condição para a abertura de um primeiro negócio com 5 ciclos e 10 ciclos.

  • 5 ciclos e 60 ciclos de equilíbrio de forks de ouro para aumentar as posições antes da primeira abertura de mais posições e sem equilíbrio. 5 ciclos e 60 ciclos de equilíbrio de forks de ouro para aumentar as posições antes da primeira abertura de vazio e sem equilíbrio.
  • Em cinco ciclos de tendência maior que 60, o preço mais alto cria um novo alto de 10 bases k, e depois um segundo aumento de posições. Em cinco ciclos de tendência menor que 60, o preço mais baixo cria um novo baixo de 10 bases k, e depois um segundo aumento de posições.
  • Para a primeira adição de posições, para criar uma linha k nova baixa ou menor ponto de parada de equilíbrio.
  • Para o segundo aumento de posições, equilíbrio linear do forco morto em 5 ciclos e 60 ciclos.

Código:

MA5^^MA(C,5);
MA10^^MA(C,10);
MA20:=MA(C,20);
MA60^^MA(C,60);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;
HH:=HV(H,10);
LL:=LV(L,10);
CROSSUP(MA5,MA10)&&BKVOL=0&&C>=O,BK('A',2);
CROSSDOWN(MA5,MA10)&&SKVOL=0&&C<=O,SK('A',2);
CROSSUP(MA5,MA60)&&ISLASTBK&&BKVOL=2,BK('A',1);
CROSSDOWN(MA5,MA60)&&ISLASTSK&&SKVOL=2,SK('A',1);
MA5>MA60&&H>HH&&ISLASTSP&&REF(GROUPBKVOL('A'),BARSSP+1)>0,BK('B',1);
MA5<MA60&&L<LL&&ISLASTBP&&REF(GROUPSKVOL('A'),BARSBP+1)>0,SK('B',1);
L<LV(L,5)||C<REF(L,BARSBK)&&(C<BKPRICE-2*MINPRICE),SP('A',GROUPBKVOL('A'));
H>HV(H,5)||C>REF(H,BARSSK)&&(C>SKPRICE+2*MINPRICE),BP('A',GROUPSKVOL('A'));
C>BKPRICE+10*MINPRICE||CROSSDOWN(MA5,MA60),SP('B',BKVOL);
C<SKPRICE-10*MINPRICE||CROSS(MA5,MA60),BP('B',SKVOL);

A seguir estão analisados casos concretos de ambos os modelos, onde o leitor pode ver como o My Language lida com instruções de agrupamento, e pode criar diferentes requisitos de agrupamento de acordo com sua própria lógica de estratégia, para tentar expressar a lógica de estratégia que deseja expressar no código da maneira mais clara e com o mínimo de erros.


Mais.