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.
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.
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).
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
# 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.
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.
# 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.
# 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.
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.
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.
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.
'' '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.