0
focar em
78
Seguidores

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

Criado em: 2019-07-10 09:55:13, atualizado em: 2019-07-16 15:37:32
comments   0
hits   2376

Por que um grupo de instruções?

Necessidades dos desenvolvedores de estratégias

Para diferentes situações, são necessários diferentes indicadores. Posso definir diferentes diferenças de preço de parada de acordo com as diferentes condições de abertura?

Por exemplo, os modelos tradicionais criam as condições de posição parada sem distinguir as diferentes condições de abertura.

O código a seguir é uma estratégia simples e tradicional para abrir condições de posição sem distinção:

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 o comando de agrupamento.

A instrução de agrupamento pode ser dividida em n grupos de condições de equilíbrio, e a posição de abertura condicional de um grupo só pode ser equilibrada com as condições de equilíbrio correspondentes a um determinado grupo. Se as condições de equilíbrio de outros grupos forem satisfeitas, não será enviado um sinal nem será confiado.

Por exemplo:

O primeiro grupo fez mais condições.

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

O segundo grupo fez mais condições.

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 diferenciar diferentes grupos de condições em um mesmo modelo? Vamos implementá-las.

Método de programação das instruções de agrupamento

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

  • Modelo de filtragem: diferentes condições de abertura de uma posição podem ser aplicadas a diferentes condições de equilíbrio. Isso pode ser realizado com o agrupamento de instruções.

  • Modelo sem filtro: a estratégia de entrada inicial é diferente da estratégia de aquisição de posições. Se você quiser se equilibrar com uma estratégia de parada de perda diferente, você pode usar 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 grupo do modelo de filtragem deve ser agregado ao grupo após a instrução de negociação e encerrado com uma única referência, como BK ((‘A’)

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 grupo do modelo não filtrado precisa ser adicionado ao grupo e ao número de mãos após a instrução de negociação, e os grupos precisam ser cercados por uma única citação. Como BK ((‘A’,2)

Mecanismos de funcionamento das diretrizes de agrupamento

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

  • Filtragem de grupo significa: se o sinal da linha K anterior for um sinal de abertura de posição emitido pelo grupo A (((BK SK BPK SPK) o sinal de abertura de posição atual da linha K pode ser apenas o sinal de abertura de posição do grupo A. Se o sinal da linha K anterior for um sinal de abertura de posição emitido pelo grupo A (((BP SP) o sinal de abertura de posição atual da linha K pode ser o sinal de abertura de posição de qualquer grupo.

  • Condições de equilíbrio não agrupadas só podem ser condições de abertura de posições não agrupadas

Filtragem de sinais significa: filtragem de sinais em plano

A ordem de prioridade é:

  • A linha K superior é BK e a linha K atual deve ser SPK ou SP (SPK tem prioridade sobre SP, e assim por diante)
  • A linha K anterior é SK e a linha K atual deve ser BPK ou BP
  • A linha K anterior é BP, a linha K atual deve ser BK ou SK
  • A linha K anterior é SP e a linha K atual deve ser BK ou SK.
  • A linha K anterior é BPK e a linha K atual deve ser SPK ou SP
  • A linha K superior é SPK e a linha K atual deve ser BPK ou BP

Modelo sem filtro:

  • Se o sinal anterior for um sinal de abertura de posição emitido pelo grupo A, o próximo sinal deve ser um sinal de acréscimo de posição ou um sinal de equilíbrio do grupo A.
  • Se o sinal anterior for o sinal de equilíbrio do grupo A e o grupo A tiver uma posição de 0, o próximo sinal pode ser o sinal de abertura de posição de qualquer grupo.
  • Se o grupo A tiver uma posição maior que 0, deve ser um sinal de abertura ou de fechamento para o grupo A.

Nota: Condições de equilíbrio não agrupadas só podem ser condições de abertura de posições não agrupadas

Análise de casos de diretrizes de agrupamento

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

Modelo de filtragem

O padrão de negociação é de 20 ciclos e 60 ciclos de Forex como padrão de tendência.

  • Faça mais sobre a linha média de 20 ciclos que sobre a linha média de 60 ciclos. Ao contrário, faça um vazio.
  • Em uma tendência múltipla, se o preço máximo atingir 10 k e for a linha do sol, a tendência é maior. Quando a posição está parada, pare a posição com um ponto de parada maior ou ocorra uma posição de parada de linha média. Fazer o contrário.
  • Em uma tendência de multiplicação, se o indicador KDJ forquilhar e for a linha do sol, a faixa de multiplicação. Quando a posição de equilíbrio, com um menor ponto de parada de parada de parada ou cair a posição de abertura da faixa de onda em um ponto mínimo de parada de parada de k line.

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

Método de negociação: a condição para abrir uma posição pela primeira vez é que o forro de ouro linear morra em 5 ciclos e 10 ciclos.

  • O forro de ouro linear médio de 5 e 60 ciclos é adicionado antes da primeira abertura de posição e sem posição baixa. O forro de ouro linear médio de 5 e 60 ciclos é adicionado antes da primeira abertura de posição vazia e sem posição baixa.
  • No ciclo 5 maior do que a tendência do ciclo 60, o preço mais alto atingiu a linha k de 10 novas altas, e depois aumentou a posição pela segunda vez. No ciclo 5 menor do que a tendência do ciclo 60, o preço mais baixo atingiu a linha k de 10 novas baixas, e depois aumentou a posição pela segunda vez.
  • Para a primeira adição de posições, leve o ponto de parada de perda para uma nova baixa ou menor em 5 raízes k.
  • Para a segunda adição de posição, a linha de equilíbrio de 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);

O que se segue é uma análise de casos específicos de ambos os tipos de modelos, a partir dos quais o leitor pode ver como a linguagem My lida com as instruções de agrupamento, e você pode criar diferentes requisitos de agrupamento de acordo com sua própria lógica de estratégia, para que a lógica de estratégia que você deseja expressar seja expressa no código da maneira mais clara e com o mínimo de erros.