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.
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 ((
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 é:
Modelo sem filtro:
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.
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.
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.