Handelssystem für Krokodillinien Python-Version

Schriftsteller:Gutes, Erstellt: 2020-05-07 14:33:19, Aktualisiert: 2023-11-06 19:40:42

img

Zusammenfassung

Menschen, die Finanzhandel gemacht haben, werden wahrscheinlich Erfahrung haben. Manchmal sind die Kursschwankungen regelmäßig, aber häufiger zeigt es einen instabilen Zustand des zufälligen Wandels. Es ist diese Instabilität, in der Marktrisiken und -chancen liegen. Instabilität bedeutet auch unvorhersehbar, also ist es auch ein Problem für jeden Händler, wie man in einem unvorhersehbaren Marktumfeld die Rendite stabiler macht. Dieser Artikel wird die Krokodil-Handelsregeln-Strategie vorstellen, in der Hoffnung, alle zu inspirieren.

Was ist eine Krokodillinie?

img

Die Krokodillinie besteht aus drei speziellen gleitenden Durchschnitten, die dem Kinn der blauen Linie, den Zähnen der roten Linie und der oberen Lippe der grünen Linie entsprechen.

Das Prinzip der Krokodillinie

Die Krokodillinie ist eine Reihe technischer Analysemethoden, die auf der Grundlage von Geometrie und nichtlinearer Dynamik zusammengefasst werden. Wenn das Kinn, die Zähne und die obere Lippe des Krokodils geschlossen oder verwickelt sind, bedeutet dies, dass das Krokodil schläft. Zu diesem Zeitpunkt bleiben wir normalerweise außerhalb des Marktes, bis das Fragment erscheint, und nehmen nur am offensichtlichen Trendmarkt teil.

Je länger das Krokodil schläft, desto hungriger wird es sein, wenn es aufwacht, also wird es, sobald es aufwacht, seinen Mund weit öffnen. Wenn die Oberlippe über den Zähnen und die Zähne über dem Kinn sind, zeigt dies, dass der Markt in einen Bullenmarkt eingetreten ist und die Krokodile Rindfleisch essen werden. Wenn die Oberlippe unter den Zähnen und die Zähne unter dem Kinn sind, zeigt dies, dass der Markt in einen Bärenmarkt eingetreten ist und die Krokodile Bärenfleisch essen werden. Bis es voll ist, schließt es dann seinen Mund wieder (halten und Gewinn machen).

Formel für die Berechnung der Krokodillinie

Die Oberlippe = REF ((SMA ((VAR1,5,1),3) Zähne = REF ((SMA ((VAR1,8,1),5) Bei der Angabe des Zinssatzes ist der Zinssatz zu berücksichtigen, der für die Angabe des Zinssatzes verwendet wird.

Krokodil-Strategie-Zusammensetzung

Schritt 1: Erstellen eines Strategierahmens

# Strategy main function
def onTick():
     pass

# Program entry
def main ():
     while True: # Enter infinite loop mode
         onTick() # execute strategy main function
         Sleep(1000) # sleep for 1 second

FMZ mit dem Wahlmodus, eine ist die onTick-Funktion, und die andere ist die Hauptfunktion, bei der die onTick-Funktion in einer unendlichen Schleife in der Hauptfunktion ausgeführt wird.

Schritt 2: Python-Bibliothek importieren

import talib
import numpy as np

Die SMA-Funktion wird in unserer Strategie verwendet. SMA ist das arithmetische Mittel. Es gibt bereits fertige SMA-Funktionen in der talib-Bibliothek, also importieren Sie direkt die talib-Python-Bibliothek und rufen Sie sie dann direkt an. Denn wenn Sie diese Funktion anrufen, müssen Sie Numpy-Formatparameter geben, also müssen wir Import verwenden, um diese beiden Python-Bibliotheken zu Beginn der Strategie zu importieren.

Schritt 3: Konvertieren von K-Linien-Arraydaten

# Convert the K-line array into an array of highest price, lowest price, and closing price, for conversion to numpy.array
def get_data(bars):
    arr = []
    for i in bars:
        arr.append(i['Close'])
    return arr

Hier haben wir eine get_data-Funktion erstellt, der Zweck dieser Funktion ist es, das gewöhnliche K-Line-Array in Numpy-Formatdaten zu verarbeiten.

Schritt 4: Positionsdaten erhalten

# Get the number of positions
def get_position ():
     # Get position
     position = 0 # The number of assigned positions is 0
     position_arr = _C (exchange.GetPosition) # Get array of positions
     if len (position_arr)> 0: # If the position array length is greater than 0
         for i in position_arr:
             if i ['ContractType'] == 'rb000': # If the position symbol is equal to the subscription symbol
                 if i ['Type']% 2 == 0: # If it is long position
                     position = i ['Amount'] # Assigning a positive number of positions
                 else:
                     position = -i ['Amount'] # Assigning a negative number of positions
     return position

In unseren ersten zehn Lektionen wurden immer virtuelle Positionen verwendet, aber in einer realen Handelsumgebung ist es am besten, die GetPosition-Funktion zu verwenden, um reale Positionsinformationen zu erhalten, einschließlich: Positionsrichtung, Positionsgewinn und -verlust, Anzahl der Positionen usw.

Schritt 5: Die Daten erhalten

exchange.SetContractType('rb000') # Subscribe the futures varieties
     bars_arr = exchange.GetRecords() # Get K line array
     if len(bars_arr) < 22: # If the number of K lines is less than 22
         return

Bevor Sie Daten erwerben, müssen Sie zuerst die Funktion SetContractType verwenden, um relevante Futures-Varianten zu abonnieren. FMZ unterstützt alle chinesischen Rohstoff-Futures-Varianten. Nach dem Abonnieren des Futures-Symbols können Sie die Funktion GetRecords verwenden, um K-Liniendaten zu erhalten, die ein Array zurückgeben.

Schritt 6: Berechnen der Daten

np_arr = np.array (get_data (bars_arr)) # Convert closing price array
sma13 = talib.SMA (np_arr, 130) [-9] # chin
sma8 = talib.SMA (np_arr, 80) [-6] # teeth
sma5 = talib.SMA (np_arr, 50) [-4] # upper lip
current_price = bars_arr [-1] ['Close'] # latest price

Vor der Berechnung des SMA mit der Talib-Bibliothek müssen Sie die Numpy-Bibliothek verwenden, um das gewöhnliche K-Line-Array in Numpy-Daten zu verarbeiten. Dann erhalten Sie das Kinn, die Zähne und die obere Lippe der Krokodillinie separat. Darüber hinaus muss der Preisparameter bei der Bestellung eingegeben werden, so dass wir den Schlusskurs im K-Line-Array verwenden können.

Schritt 7: Bestellung

position = get_position ()
if position == 0: # If there is no position
     if current_price> sma5: # If the current price is greater than the upper lip
         exchange.SetDirection ("buy") # Set the trading direction and type
         exchange.Buy (current_price + 1, 1) # open long position order
     if current_price <sma13: # If the current price is less than the chin
         exchange.SetDirection ("sell") # Set the trading direction and type
         exchange.Sell (current_price-1, 1) # open short position order
    
if position> 0: # If you have long positions
     if current_price <sma8: # If the current price is less than teeth
         exchange.SetDirection ("closebuy") # Set the trading direction and type
         exchange.Sell (current_price-1, 1) # close long position

if position <0: # If you have short position
     if current_price> sma8: # If the current price is greater than the tooth
         exchange.SetDirection ("closesell") # Set the trading direction and type
         exchange.Buy (current_price + 1, 1) # close short position

Bevor Sie eine Bestellung aufgeben, müssen Sie die tatsächliche Position erhalten. Die Funktion get_position, die wir zuvor definiert haben, gibt die tatsächliche Anzahl der Positionen zurück. Wenn die aktuelle Position lang ist, gibt sie eine positive Zahl zurück. Wenn die aktuelle Position kurz ist, gibt sie eine negative Zahl zurück. Wenn es keine Position gibt, gibt sie 0. Schließlich werden die Kauf- und Verkaufsfunktionen verwendet, um Bestellungen nach der obigen Handelslogik zu platzieren, aber davor müssen auch die Handelsrichtung und -art festgelegt werden.

Vollständige Strategie

'' 'backtest
start: 2019-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1h
exchanges: [{"eid": "Futures_CTP", "currency": "FUTURES"}]
'' '

import talib
import numpy as np


# Convert the K-line array into an array of highest price, lowest price, and closing price, used to convert to numpy.array type data
def get_data (bars):
    arr = []
    for i in bars:
        arr.append (i ['Close'])
    return arr


# Get the number of positions
def get_position ():
    # Get position
    position = 0 # The number of assigned positions is 0
    position_arr = _C (exchange.GetPosition) # Get array of positions
    if len (position_arr)> 0: # If the position array length is greater than 0
        for i in position_arr:
            if i ['ContractType'] == 'rb000': # If the position symbol is equal to the subscription symbol
                if i ['Type']% 2 == 0: # If it is long
                    position = i ['Amount'] # Assign a positive number of positions
                else:
                    position = -i ['Amount'] # Assign a negative number of positions
    return position
    
    

# Strategy main function
def onTick ():
    # retrieve data
    exchange.SetContractType ('rb000') # Subscribe to futures varieties
    bars_arr = exchange.GetRecords () # Get K line array
    if len (bars_arr) <22: # If the number of K lines is less than 22
        return
    
    # Calculation
    np_arr = np.array (get_data (bars_arr)) # Convert closing price array
    sma13 = talib.SMA (np_arr, 130) [-9] # chin
    sma8 = talib.SMA (np_arr, 80) [-6] # teeth
    sma5 = talib.SMA (np_arr, 50) [-4] # upper lip
    current_price = bars_arr [-1] ['Close'] # latest price

    position = get_position ()
    if position == 0: # If there is no position
        if current_price> sma5: # If the current price is greater than the upper lip
            exchange.SetDirection ("buy") # Set the trading direction and type
            exchange.Buy (current_price + 1, 1) # open long position order
        if current_price <sma13: # If the current price is less than the chin
            exchange.SetDirection ("sell") # Set the trading direction and type
            exchange.Sell (current_price-1, 1) # open short position order
        
    if position> 0: # If you have long positions
        if current_price <sma8: # If the current price is less than teeth
            exchange.SetDirection ("closebuy") # Set the trading direction and type
            exchange.Sell (current_price-1, 1) # close long position

    if position <0: # If you have short positions
        if current_price> sma8: # If the current price is greater than the tooth
            exchange.SetDirection ("closesell") # Set the trading direction and type
            exchange.Buy (current_price + 1, 1) # close short position

            
# Program main function
def main ():
    while True: # loop
        onTick () # execution strategy main function
        Sleep (1000) # sleep for 1 second

Klicken Sie direkt auf den folgenden Link, um die komplette Strategie ohne Konfiguration zu kopieren:https://www.fmz.com/strategy/199025

Ende

Die größte Rolle der Krokodil-Handelsregel besteht darin, uns zu helfen, die gleiche Richtung wie der Markt beim Handel zu halten, unabhängig davon, wie sich der aktuelle Marktpreis ändert, und weiterhin zu profitieren, bis der Konsolidierungsmarkt erscheint.


Verwandt

Mehr