Die Ressourcen sind geladen. Beförderung...

3.3 Wie man Strategien in M-Sprache umsetzt

Schriftsteller:Gutes, Erstellt: 2019-06-25 12:08:47, Aktualisiert: 2023-11-11 17:01:30

img

Wie man Strategien in der M-Sprache umsetzt

Zusammenfassung

In dem vorherigen Artikel haben wir die Prämisse der Realisierung der Handelsstrategie aus den Aspekten der Einführung der M-Sprache, der Grundgrammatik, der Modelldurchführungsmethode und der Modellklassifizierung erklärt.

Strategie-Modul

img

Denken Sie darüber nach, wie man einen Roboter mit Lego-Stückchen baut? Man kann nicht immer von oben nach unten oder von unten nach oben, Stück für Stück zusammenstellen. Menschen mit ein wenig gesundem Menschenverstand wissen, dass sie ihre Köpfe, Arme, Beine, Flügel usw. zusammenlegen sollten, und sie dann zu einem kompletten Roboter kombinieren. Dasselbe gilt für das Schreiben von Programmen, das Schreiben der erforderlichen Funktionen in ein einziges Strategie-Modul und dann die Kombination dieser einzelnen Strategie-Module in eine komplette Handelsstrategie. Im Folgenden werde ich einige allgemeine Strategie-Module auflisten:

img

Stufenzuwachs

Die Steigerung der Stufe berechnet den Prozentsatz des aktuellen Schlusskurses der K-Linien im Vergleich zu den vorherigen N-Perioden der Schlusskursdifferenz.

CLOSE_0:=CLOSE; //get the current K-line's closing price, and save the results to variable CLOSE_0. 
CLOSE_10:=REF(CLOSE,10); //get the pervious 10 K-lines' closing price, and save the results to variable CLOSE_10

(CLOSE_0-CLOSE_10)/CLOSE_10*100;//calculating the percentage of current K line's closing price compare with previous N periods of closing price's difference.

Neuer hoher Preis

Der neue Höchstpreis wird berechnet, wenn die aktuelle K-Linie größer ist als der höchste Preis von N Zyklen.

HHV_10:=HHV(HIGH,10); //Get the highest price of latest 10 K-lines, which includes the current K-line.
HIGH>REF(HHV_10,1); //Judge whether the current K-line's highest price is greater than pervious K-lines' HHV_10 value.

Preiserhöhung mit massiver Handelsvolumensteigerung

Zum Beispiel: Wenn der aktuelle Schlusskurs der K-Linie 1,5 Mal höher ist als der Schlusskurs der vorherigen 10 K-Linien, was bedeutet, dass der Preis in 10 Tagen um 50% gestiegen ist; und das Handelsvolumen auch mehr als 5-mal höher als die vorherigen 10 K-Linien ist. kann geschrieben werden:

CLOSE_10:=REF(CLOSE,10); //get the 10th K-line closing price
IS_CLOSE:=CLOSE/CLOSE_10>1.5; //Judging whether the current K Line closing price is 1.5 times greater than the value of CLOSE_10 

VOL_MA_10:=MA(VOL,10); //get the latest 10 K-lines' average trading volume
IS_VOL:=VOL>VOL_MA_10*5; //Judging whether the current K-line's trading volume is 5 times greater than the value of VOL_MA_10

IS_CLOSE AND IS_VOL; //Judging whether the condition of IS_CLOSE and IS_VOL are both true.

Markt für Preis-Schnellen Schock

Ein Schmal-Schockmarkt bedeutet, dass der Preis in der letzten Periode innerhalb eines bestimmten Bereichs gehalten wird. Zum Beispiel: Wenn der höchste Preis in 10 Zyklen minus der niedrigste Preis in 10 Zyklen, das Ergebnis durch den aktuellen K-Lines Schlusskurs geteilt ist weniger als 0,05. kann geschrieben werden:

HHV_10:=HHV(CLOSE,10); //Get the highest price in 10 cycles(including current K-line)
LLV_10:=LLV(CLOSE,10); //Get the lowest price in 10 cycles(including current K-line)

(HHV_10-LLV_10)/CLOSE<0.05; //Judging whether the difference between HHV_10 and LLV_10 divided by current k-line's closing price is less than 0.05.

Gleitender Durchschnitt zeigt einen Bullenmarkt an

Der gleitende Durchschnitt zeigt eine lange und kurze Richtung an, die K-Linie wird von 5,10,20,30,60 gleitenden Durchschnittslinien unterstützt oder ihnen widersteht. Der gleitende Durchschnitt zeigt einen Bullenmarkt oder einen Bärenmarkt an.

MA_5:=MA(CLOSE,5);  //get the moving average of 5 cycle closing price.
MA_10:=MA(CLOSE,10);//get the moving average of 10 cycle closing price.
MA_20:=MA(CLOSE,20);//get the moving average of 20 cycle closing price.
MA_30:=MA(CLOSE,30);//get the moving average of 30 cycle closing price.

MA_5>MA_10 AND MA_10>MA_20 AND MA_20>MA_30; //determine wether the MA_5 is greater than MA_10, and MA_10 is greater than MA_20, and MA_20 is greater than MA_30.

Vorheriger hoher Preis und Standort

Um den Standort des vorherigen Höchstpreises und seinen Standort zu erhalten, können Sie FMZ Quant API direkt verwenden. kann geschrieben werden:

HHV_20:=HHV(HIGH,20); //get the highest price of 20 cycle(including current K line)
HHVBARS_20:=HHVBARS(HIGH,20); //get the number of cycles from the highest price in 20 cycles to current K line
HHV_60_40:REF(HHV_20,40); //get the highest price between 60 cycles and 40 cycles.

Preisunterschiedsprung

Die Preislücke ist der Fall, in dem die höchsten und niedrigsten Preise der beiden K-Linien nicht miteinander verbunden sind. Sie besteht aus zwei K-Linien, und die Preislücke ist der Referenzpreis der Unterstützungs- und Druckpunkte in der zukünftigen Preisbewegung.

HHV_1:=REF(H,1); //get the pervious K line's highest price
LLV_1:=REF(L,1); //get the pervious K line's lowest price
HH:=L>HHV_1; //judging wether the current K line's lowest price is greater than pervious K line's highest price (jump up)
LL:=H<LLV_1; //judging wether the current K line's highest price is greater than pervious K line's lowest price (jump down)
HHH:=L/REF(H,1)>1.001; //adding additional condition, the bigger of the price gap, the stronger the signal (jump up)  
LLL:=H/REF(L.1)<0.999; //adding additional condition, the bigger of the price gap, the stronger the signal (jump down)  
JUMP_UP:HH AND HHH; //judging the overall condition, whether it is a jump up
JUMP_DOWN:LL AND LLL; //judging the overall condition, whether it is a jump down

Gemeinsame technische Indikatoren

Gleitender Durchschnitt

img

Aus statistischer Sicht ist der gleitende Durchschnitt der arithmetische Durchschnitt des täglichen Preises, der eine Trendpreisbahn ist. Das gleitende Durchschnittssystem ist ein allgemeines technisches Werkzeug, das von den meisten Analysten verwendet wird. Aus technischer Sicht ist es ein Faktor, der den psychologischen Preis technischer Analysten beeinflusst. Der Entscheidungsfaktor des Denkhandels ist ein gutes Referenzwerkzeug für technische Analysten. Das FMZ Quant-Tool unterstützt viele verschiedene Arten von gleitenden Durchschnitten, wie unten gezeigt:

MA_DEMO:MA(CLOSE,5);   // get the moving average of 5 cycle
MA_DEMO:EMA(CLOSE,15); // get the smooth moving average of 15 cycle
MA_DEMO:EMA2(CLOSE,10);// get the linear weighted moving average of 10 cycle
MA_DEMO:EMAWH(CLOSE,50); // get the exponentially weighted moving average of 50 cycle
MA_DEMO:DMA(CLOSE,100);  // get the dynamic moving average of 100 cycle
MA_DEMO:SMA(CLOSE,10,3); // get the fixed weight of 3 moving average of closing price in 10 cycle
MA_DEMO:ADMA(CLOSE,9,2,30); // get the fast-line 2 and slow-line 30 Kaufman moving average of closing price in 9 cycle.

Bollinger-Bänder

img

Bollinger-Bänder basieren auch auf dem statistischen Prinzip. Die mittlere Schiene wird nach dem N-Tage- gleitenden Durchschnitt berechnet, und die oberen und unteren Schienen werden nach der Standardabweichung berechnet. Wenn der BOLL-Kanal von breit nach schmal ändert, was bedeutet, dass der Preis allmählich zum Mittel zurückkehrt. Wenn der BOLL-Kanal von schmal nach breit ändert, bedeutet dies, dass sich der Markt ändern wird. Wenn der Preis über die obere Schiene steigt, bedeutet dies, dass die Kaufkraft gesteigert wird. Wenn der Preis über die untere Schiene steigt, bedeutet dies, dass die Verkaufskraft gesteigert wird.

Unter allen technischen Indikatoren ist die Bollinger Bands Berechnungsmethode eine der kompliziertesten, die das Konzept der Standardabweichung in der Statistik einführt, die die mittlere Flugbahn (MB ), die obere Flugbahn (UP ) und die untere Flugbahn (DN) umfasst. Zum Glück müssen Sie die Berechnungsdetails nicht kennen, Sie können sie direkt auf der FMZ Quant Plattform wie folgt verwenden:

MID:MA(CLOSE,100); //calculating moving average of 100 cycle, call it Bollinger Bands middle trajectory   
TMP2:=STD(CLOSE,100); //calculating standard deviation of closing price of 100 cycle.
TOP:MID+2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it upper trajectory
BOTTOM:MID-2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it lower trajectory

MACD-Indikator

img

Der MACD-Indikator ist eine doppelte Glättungsoperation, bei der schnelle (kurzfristige) und langsame (langfristige) gleitende Durchschnitte und ihre Aggregation und Trennung verwendet werden. Der nach dem Prinzip der gleitenden Durchschnitte entwickelte MACD beseitigt den Fehler, dass der gleitende Durchschnitt häufig falsche Signale ausstrahlt, und behält auch die Wirkung des anderen guten Aspekts. Daher hat der MACD-Indikator den Trend und die Stabilität des gleitenden Durchschnitts. Er wurde verwendet, um den Zeitpunkt des Kaufs und Verkaufs von Aktien zu untersuchen und die Kursänderung der Aktien vorherzusagen. Sie können ihn wie folgt verwenden:

DIFF:EMA(CLOSE,10)-EMA(CLOSE,50); //First calculating the difference between short-term moving average and long-term moving average.
DEA:EMA(DIFF,10); //Then calculating average of the difference.

Das obige ist das häufig verwendete Strategie-Modul bei der Entwicklung von quantitativen Handelsstrategien. Darüber hinaus gibt es viel mehr als das. Durch die obigen Modulbeispiele können Sie auch mehrere Handelsmodule implementieren, die Sie am häufigsten im subjektiven Handel verwenden. Die Methoden sind die gleichen. Als nächstes begannen wir, eine tragfähige Intraday-Handelsstrategie zu schreiben.

Strategie schreiben

Auf dem Forex-Spotmarkt gibt es eine bekannte Strategie namens HANS123. Ihre Logik ist im Grunde zu beurteilen, ob der Preis durch den höchsten oder niedrigsten Preis der Anzahl der K-Linien nach der Marktöffnung bricht

Strategie Logik

  • Bereit für den Markteintritt nach 30 Minuten Öffnung;

  • Oberbahn = 30 Minuten nach dem Öffnen;

  • Unteren Schienen = 30 Minuten nach dem Öffnen;

  • Wenn der Preis die Obergrenze überschreitet, wird die Position gekauft und geöffnet.

  • Wenn der Preis unter die untere Schiene fällt, öffnet der Verkäufer die Position.

  • Intraday-Handelsstrategie, Schließung vor dem Schließen;

Strategiecode

// Data Calculation
Q:=BARSLAST(DATA<>REF(DATA,1))+1; //Calculating the number of period from 
the first K line of the current trading day to current k line, and assign the results to N 
HH:=VALUEWHEN(TIME=0930,HHV(H,Q)); //when time is 9:30, get the highest price of N cycles, and assign the results to HH
LL:=VALUEWHEN(TIME=0930,LLV(L,Q)); //When time is 9:30, get the lowest price of N cycles, and assign the results to LL

//Placing Orders
TIME>0930 AND TIME<1445 AND C>HH,BK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is greater than HH, opening long position.
TIME>0930 AND TIME<1445 AND C<LL,SK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is lesser than LL, opening short position.
TIME>=1445,CLOSEOUT; //If the time is greater or equal to 14:45, close all position.

//Filtering the signals
AUTOFILTER;  //opening the filtering the signals mechanism

Zusammenfassend

Wir haben das Konzept des Strategie-Moduls gelernt. Durch mehrere häufig verwendete Strategie-Modul-Fälle hatten wir eine allgemeine Vorstellung von den FMZ Quant-Programmierwerkzeugen, es kann gesagt werden, dass das Erlernen von Strategie-Modulen und die Verbesserung des Programmierlogikdenkens ein wichtiger Schritt im fortgeschrittenen quantitativen Handel ist. Schließlich haben wir das FMZ Quant-Tool verwendet, um die Handelsstrategie nach einer klassischen Forex-Handelsstrategie umzusetzen.

Ankündigung zum nächsten Abschnitt

Vielleicht gibt es noch einige Verwirrung für einige Leute, hauptsächlich wegen des Codierungsteils. Keine Sorge, wir haben bereits darüber nachgedacht. Auf der FMZ Quant Plattform gibt es ein weiteres noch einfacheres Programmierwerkzeug für Anfänger. Es ist die visuelle Programmierung, lasst es uns bald lernen!

Nachschulübungen

  1. Versuchen Sie, mehrere Handelsmodule zu implementieren, die Sie am häufigsten beim subjektiven Handel verwenden.

  2. Versuchen Sie, den KDJ-Index-Algorithmus mit der M-Sprache auf der FMZ Quant-Plattform zu implementieren.


Mehr