Les gens qui ont fait du trading financier auront probablement une expérience. Parfois, les fluctuations de prix sont régulières, mais le plus souvent, cela montre un état instable de marche aléatoire. C'est cette instabilité qui est à l'origine des risques et des opportunités du marché. L'instabilité signifie également imprévisible, donc comment rendre les rendements plus stables dans un environnement de marché imprévisible est également un problème pour chaque trader. Cet article présentera la stratégie des règles de trading du crocodile, dans l'espoir d'inspirer tout le monde.
La ligne du crocodile est en fait trois moyennes mobiles spéciales, qui correspondent au menton de la ligne bleue, aux dents de la ligne rouge et à la lèvre supérieure de la ligne verte.
La ligne du crocodile est un ensemble de méthodes d'analyse technique résumées sur la base de la géométrie et de la dynamique non linéaire. Lorsque le menton, les dents et la lèvre supérieure du crocodile sont fermés ou enchevêtrés, cela signifie que le crocodile est endormi.
Plus le crocodile dort longtemps, plus il aura faim quand il se réveillera, donc une fois qu'il se réveillera, il ouvrira largement la bouche. Si la lèvre supérieure est au-dessus des dents et que les dents sont au-dessus du menton, cela indique que le marché est entré dans un marché haussier et que les crocodiles vont manger du bœuf. Si la lèvre supérieure est au-dessous des dents et que les dents sont au-dessous du menton, cela indique que le marché est entré dans un marché ours et que les crocodiles vont manger de la viande d'ours. Jusqu'à ce qu'il soit plein, il fermera à nouveau sa bouche (restez et faites un profit).
Le niveau d'humidité est calculé en fonction de la température de l'air. Les dents = REF ((SMA ((VAR1,8,1),5) Le nombre d'heures de travail est calculé en fonction de la fréquence de travail.
Composition de la stratégie du crocodile
# 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 en utilisant le mode de sondage, l'un est la fonction onTick, et l'autre est la fonction principale, dans laquelle la fonction onTick est exécutée en boucle infinie dans la fonction principale.
import talib
import numpy as np
La fonction SMA est utilisée dans notre stratégie. SMA est la moyenne arithmétique. Il y a déjà des fonctions SMA prêtes à l'emploi dans la bibliothèque talib, donc importez directement la bibliothèque talib Python et appelez-la ensuite directement. Parce que lorsque vous appelez cette fonction, vous devez passer des paramètres de format numpy, nous devons donc utiliser import pour importer ces deux bibliothèques Python au début de la stratégie.
# 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
Ici, nous avons créé une fonction get_data, le but de cette fonction est de traiter le tableau K-line ordinaire en données de format numpy.
# 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
Le statut de position implique une logique de stratégie. Nos dix premières leçons ont toujours utilisé des positions virtuelles, mais dans un environnement de trading réel, il est préférable d'utiliser la fonction GetPosition pour obtenir des informations de position réelles, notamment: direction de position, profit et perte de position, nombre de positions, etc.
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
Avant d'acquérir des données, vous devez d'abord utiliser la fonction SetContractType pour souscrire aux variétés de contrats à terme pertinentes. FMZ prend en charge toutes les variétés de contrats à terme chinois. Après avoir souscrit au symbole des contrats à terme, vous pouvez utiliser la fonction GetRecords pour obtenir des données de ligne K, qui renvoie un tableau.
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
Avant de calculer le SMA à l'aide de la bibliothèque talib, vous devez utiliser la bibliothèque numpy pour traiter le tableau K-line ordinaire en données numpy. Puis obtenir le menton, les dents et la lèvre supérieure de la ligne du crocodile séparément.
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
Avant de passer un ordre, vous devez obtenir la position réelle. La fonction get_position que nous avons définie précédemment renverra le nombre réel de positions. Si la position actuelle est longue, elle renverra un nombre positif. Si la position actuelle est courte, elle renverra un nombre négatif. S'il n'y a pas de position, elle renvoie 0. Enfin, les fonctions d'achat et de vente sont utilisées pour passer des ordres selon la logique de trading ci-dessus, mais avant cela, la direction et le type de trading doivent également être définis.
'' '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
Cliquez directement sur le lien ci-dessous pour copier la stratégie complète sans configuration:https://www.fmz.com/strategy/199025
Finition
Le plus grand rôle de la règle de trading du crocodile est de nous aider à maintenir la même direction que le marché lors de la négociation, indépendamment de la façon dont le prix actuel du marché change, et de continuer à tirer profit jusqu'à ce que le marché de consolidation apparaisse.