Schreiben von Gruppenanweisungen in der Quantitative Trading Strategie

Schriftsteller:Gutes, Erstellt: 2019-07-10 09:55:13, aktualisiert: 2019-07-16 15:37:32

Warum sollten Sie Anweisungen zusammenfassen?

Die Bedürfnisse von Strategieentwicklern

Für verschiedene Märkte müssen verschiedene Indikatoren verwendet werden. Kann ich unterschiedliche Stop-Loss-Differenzen für verschiedene Anlaufbedingungen festlegen?

So unterscheidet das herkömmliche Modell, in dem die Ausgleichsbedingungen geschrieben werden, nicht zwischen den verschiedenen Eröffnungsbedingungen.

Der folgende Code ist eine einfache Strategie, die traditionell nicht unterscheidet zwischen Lagerbedingungen:

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;

Das ist nicht so, wenn man die Anweisungen für die Zusammenstellung benutzt.

Die Komponentenanweisung kann die Ausgleichsbedingungen in n Gruppen aufteilen, wobei nur die Ausgleichsbedingungen für eine Gruppe ausgeglichen werden können, und die Ausgleichsbedingungen für andere Gruppen nicht signalisiert oder beauftragt werden.

Zum Beispiel:

Die erste Gruppe ist mehrbedingter

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

Die zweite Gruppe war mehr als bedingt.

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;

Wie unterscheiden wir verschiedene Gruppen von Bedingungen in demselben Modell?

Art und Weise, wie die Kommandos geschrieben werden

Zunächst wird das Modell in Filtermodelle und Nichtfiltermodelle unterteilt:

  • Filtermodell: Verschiedene Ausgangszustände wollen mit verschiedenen Ausgangszuständen ausgeglichen werden, was mit der Anweisung "Gruppieren" erreicht werden kann.

  • Nicht-filterendes Modell: Die erste Eintrittsstrategie unterscheidet sich von der Aufstockungsstrategie, bei der man sich mit verschiedenen Stop-Loss-Bilanzierungsstrategien ausgleichen möchte, die mit der Anweisungsgruppierung realisiert werden können.

Filtermodell

//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;//过滤函数

Hinweis: Eine Filtermodellgruppe ist eine Gruppe, die nach einer Transaktionsanweisung zusammengefasst und mit einem Komma gekennzeichnet werden muss.

Nicht-filternde Modelle

//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'));

Hinweis: Eine Gruppe in einem nicht-filternden Modell benötigt nach einer Transaktionsanweisung Gruppen und Handzahlen, die mit einem einzigartigen Anführungszeichen gekennzeichnet sind. Wie BK (A, 2)

Funktionsweise der Kommandos

Filtermodell: Erst das Gruppenfilter, dann das Signalfilter

  • Die Gruppefilterung bedeutet: Wenn das vorherige K-Signal das Eröffnungssignal der Gruppe A ist (BK SK BPK SPK), kann das aktuelle K-Signal nur das Eröffnungssignal der Gruppe A sein. Wenn das vorherige K-Signal das Eröffnungssignal der Gruppe A ist (BP SP), kann das aktuelle K-Signal das Eröffnungssignal der beliebigen Gruppe sein (BK SK BPK SPK).

  • Nicht gruppierte Ausgleichsbedingungen können nur für nicht gruppierte Ausgleichsbedingungen verwendet werden.

Signalfilter: Filter für ein offenes Signal

Die Prioritäten sind:

  • Die letzte K-Leitung ist BK. Die aktuelle K-Leitung muss SPK oder SP sein (SPK hat Vorrang vor SP, nachfolgend symmetrisch)
  • Die letzte K-Linie ist SK. Die aktuelle K-Linie muss BPK oder BP sein.
  • Die letzte K-Linie ist BP. Die aktuelle K-Linie muss BK oder SK sein.
  • Die letzte K-Leitung ist SP. Die aktuelle K-Leitung muss BK oder SK sein.
  • Die letzte K-Linie ist BPK. Die aktuelle K-Linie muss SPK oder SP sein.
  • Die letzte K-Leitung ist SPK. Die aktuelle K-Leitung muss BPK oder BP sein.

Ein nicht-filterndes Modell:

  • Wenn das vorherige Signal für die Gruppe A ausgegeben wurde, muss das nächste Signal für die Gruppe A ein Auf- oder Ausgleichssignal sein.
  • Wenn das vorherige Signal für die Gruppe A ein Ausgleichssignal ist und die Gruppe A für 0 gehalten wird, kann das nächste Signal für die beliebige Gruppe ein Eröffnungssignal sein.
  • Wenn Gruppe A eine Position hat, die größer als 0 ist, muss dies ein Eröffnungssignal oder ein Ausgleichssignal für Gruppe A sein. HINWEIS: Nicht gruppierte Ausgleichsbedingungen gelten nur für nicht gruppierte Ausgleichsbedingungen.

Analyse von Fallstudien von Verteilungsrichtlinien

Im Folgenden werden wir einige Strategien als Beispiele anführen, um zu sehen, wie diese Befehle beim Schreiben von Code zusammengefasst werden.

Filtermodell

Handelstheorie: Trends werden mit 20- und 60-Zyklus-Goldforken als Trendkriterium beurteilt.

  • Wenn die 20-Zyklus-Durchschnittslinie größer ist als die 60-Zyklus-Durchschnittslinie, tun Sie mehr.
  • In einem Trend mit mehr als 10 K-Linien ist der Trend höher, wenn der höchste Preis 10 K-Linien erreicht hat und der Trend für die Sonnenlinie höher ist. Wenn ein Ausgleich stattfindet, wird ein Ausgleich mit einem größeren Stop-Loss-Punkt oder ein einheitlicher Toten-Fork-Ausgleich stattfinden.
  • In einem Übertrend, wenn der KDJ-Indikator Goldfork und für die Sonnenlinie ist, ist der Wellenbereich mehr. Wenn das Gleichgewicht ist, wird mit einem kleineren Stop-Loss-Punkt das Gleichgewicht oder mit einem Fall des Wellenbereichs eröffnet.

Der Code:

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;

Nicht-filternde Modelle

Handelsidee: Als Voraussetzung für die Eröffnung einer Position mit 5- und 10-Zyklus-Goldforks.

  • 5 Zyklen und 60 Zyklen Gleichförmig-Goldfork-Zählposition; 5 Zyklen und 60 Zyklen Gleichförmig-Todfork-Zählposition.
  • Bei einer 5-Zyklus-Trendzeit größer als 60 Zyklus-Trendzeiten wird der höchste Preis 10 Basis-K-Linien neu hoch und dann ein zweites Mal mehr positioniert. Bei einer 5-Zyklus-Trendzeit kleiner als 60 Zyklus-Trendzeiten wird der niedrigste Preis 10 Basis-K-Linien neu niedrig und dann ein zweites Mal mehr positioniert.
  • Für das erste Mal, wenn mehr Positionen hinzugefügt werden, wird ein neuer Niedriger oder kleiner Stop-Loss-Punkt-Ebenfall geschaffen, um 5 K-Linien zu erzeugen.
  • Für die zweite Zunahme der Position wird eine lineare Toten-Fork-Gleichstellung in 5 und 60 Zyklen durchgeführt.

Der Code:

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);

Das ist eine konkrete Fallanalyse der beiden Modelle, aus der der Leser sehen kann, wie die My-Sprache die Komponentenanweisungen behandelt. Jeder kann unterschiedliche Komponentenanforderungen nach seiner eigenen Strategie-Logik erstellen, um die gewünschte Strategie-Logik in der Code so klar und fehlerfrei wie möglich darzustellen.


Mehr