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.
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)
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 é:
Modelo sem filtro:
Nota: Condições de equilíbrio não agrupadas só podem ser condições de abertura de posições não agrupadas
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.
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.
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.