[TOC] Je vous en prie.
Comme le dit le dicton, ce monde se séparera après une longue période d'unité. Il fera également l'inverse après une longue période de séparation. Et ce phénomène existe également sur le marché des contrats à terme. Il n'y a pas de variété qui ne fait que monter mais ne tombe pas. Mais quand monter et quand descendre, cela dépend du taux d'écart. Dans cet article, nous utiliserons le taux d'écart pour construire une stratégie de trading simple.
Le taux d'écart BIAS est un indicateur technique dérivé de la moyenne mobile. Il est principalement sous forme de pourcentage pour mesurer le degré d'écart de prix par rapport à la moyenne mobile dans les fluctuations. Si la moyenne mobile est le coût moyen d'un trader, le taux d'écart est le taux de rendement moyen du trader.
La base théorique du taux d'écart est une analyse du cœur du trader. Lorsque le prix est supérieur au coût moyen du marché, cela signifie que les traders de position longue auront l'idée de encaisser les bénéfices, ce qui fera baisser le prix. Lorsque le prix est inférieur au coût moyen du marché, cela signifie que les vendeurs à découvert sont rentables, et l'idée d'encaisser le profit fera grimper le prix.
Lorsque le prix dévie vers le haut de la moyenne mobile, le taux de déviation est trop élevé et il y a une forte probabilité que le prix baisse à l'avenir.
Lorsque le prix dévie de la moyenne mobile à la baisse, le taux de déviation est trop faible et il est fort probable que le prix augmente à l'avenir.
Bien que la moyenne mobile soit calculée à partir du prix, en termes de forme externe, le prix se rapprochera certainement de la moyenne mobile, ou le prix fluctuera toujours autour de la moyenne mobile.
Taux d'écart = [le prix de clôture de la journée - prix moyen de N jours] / prix moyen de N jours] * 100%
Parmi eux, N est le paramètre de moyenne mobile, car la période de N est différente, le résultat de calcul du taux d'écart est également différent. En général, les valeurs de N sont: 6, 12, 24, 36, etc. Dans l'utilisation réelle, il peut également être ajusté dynamiquement en fonction de différentes variétés. Cependant, la sélection des paramètres est très importante. Si le paramètre est trop petit, le taux d'écart sera trop sensible, si le paramètre est trop grand, le taux d'écart sera trop lent. Les résultats de calcul du taux d'écart sont positifs et négatifs. Plus le taux d'écart positif est élevé, plus le profit des taureaux est élevé et plus la probabilité de correction du prix est grande. Plus le taux d'écart est élevé, plus le profit court est élevé et plus la probabilité de rebond est grande.
Puisque le taux d'écart est une autre forme de moyenne mobile, nous pouvons également adapter une stratégie de taux d'écart double basée sur la stratégie de moyenne mobile double. À en juger par la relation positionnelle entre le taux d'écart à court terme et le taux d'écart à long terme, l'état actuel du marché est jugé. Si le taux d'écart à long terme est supérieur au taux d'écart à court terme, il représente en fait la moyenne mobile à court terme en hausse par rapport à la moyenne mobile à long terme, et vice versa.
Étape 1: Écrire un cadre stratégique
# Strategy main function
def onTick():
pass
# Program entry
def main():
while True: # Enter infinite loop mode
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second
La plateforme FMZ adopte le mode de formation par rotation.main
fonction et uneonTick
La fonction principale est la fonction d'entrée de la stratégie, et le programme exécutera le code ligne par ligne à partir de la fonction principale.while
la boucle et exécuter à plusieurs reprises leonTick
Tout le code de base de la stratégie est écrit dans leonTick
function.
Étape 2: définir les positions virtuelles
mp = 0
L'avantage des positions virtuelles est qu'elles sont faciles à écrire et qu'elles sont rapides à utiliser. Elles sont généralement utilisées dans l'environnement de backtest.
Étape 3: Obtenez la ligne K.
exchange.SetContractType('rb000') # Subscribe to futures varieties
bars_arr = exchange.GetRecords() # Get K-line array
if len(bars_arr) <long + 1: # If the number of K lines is too small
return
Utilisation de la fonction FMZSetContractType
, vous pouvez souscrire au contrat d'indice de barres d'armature en passant GetRecords
Comme il faut une certaine période pour calculer le taux d'écart, afin d'éviter les erreurs de programme, s'il n'y a pas assez de lignes K, utiliserif
les instructions à filtrer.
Étape 4: Calculer le taux d'écart
close = bars_arr[-2]['Close'] # Get the closing price of the previous K line
ma1 = TA.MA(bars_arr, short)[-2] # Calculate the short-term moving average value of the previous K line
bias1 = (close-ma1) / ma1 * 100 # Calculate the short-term deviation rate value
ma2 = TA.MA(bars_arr, long)[-2] # Calculate the long-term average of the previous K line
bias2 = (close-ma2) / ma2 * 100 # Calculate the long-term deviation rate value
Selon la formule de calcul du taux d'écart, nous obtenons d'abord le prix de clôture. Dans cette stratégie, nous utilisons le prix de clôture de la ligne K précédente, ce qui signifie que le signal de la ligne K actuelle est établi et que la ligne K suivante est pour passer des ordres.talib
La moyenne mobile est par exemple:TA.MA
Cette fonction reçoit 2 paramètres, à savoir: K matrice de lignes et période moyenne mobile.
Étape 5: Placement des commandes
global mp # global variables
current_price = bars_arr[-1]['Close'] # latest price
if mp> 0: # If you are holding long positions
if bias2 <= bias1: # If the long-term deviation rate is less than or equal to the short-term deviation rate
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # Closing long positions
mp = 0 # reset virtual holding positions
if mp <0: # If you are holding short positions
if bias2 >= bias1: # If the long-term deviation rate is greater than or equal to the short-term deviation rate
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # closing short positions
mp = 0 # reset virtual holding positions
if mp == 0: # If there is no holding position
if bias2> bias1: # Long-term deviation rate is greater than short-term deviation rate
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # open long positions
mp = 1 # reset virtual holding position
if bias2 <bias1: # The long-term deviation rate is less than the short-term deviation rate
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # open short positions
mp = -1 # reset virtual holding position
# Backtest configuration
'''backtest
start: 2018-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''
# External parameters
short = 10
long = 50
# Global variables
mp = 0
# 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) <long + 1: # If the number of K lines is too small
return
# Calculate BIAS
close = bars_arr[-2]['Close'] # Get the closing price of the previous K line
ma1 = TA.MA(bars_arr, short)[-2] # Calculate the short-term moving average of the previous K line
bias1 = (close-ma1) / ma1 * 100 # Calculate the short-term deviation rate value
ma2 = TA.MA(bars_arr, long)[-2] # Calculate the long-term average of the previous K line
bias2 = (close-ma2) / ma2 * 100 # Calculate the long-term deviation rate value
# Placing Orders
global mp # global variables
current_price = bars_arr[-1]['Close'] # latest price
if mp> 0: # If you are holding long positions
if bias2 <= bias1: # If the long-term deviation rate is less than or equal to the short-term deviation rate
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # closing long positions
mp = 0 # reset virtual holding position
if mp <0: # If you are holding short positions
if bias2 >= bias1: # If the long-term deviation rate is greater than or equal to the short-term deviation rate
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # closing short positions
mp = 0 # reset virtual holding position
if mp == 0: # If there is no holding position
if bias2> bias1: # Long-term deviation rate is greater than short-term deviation rate
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # opening long positions
mp = 1 # reset virtual holding position
if bias2 <bias1: # The long-term deviation rate is less than the short-term deviation rate
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # open short positions
mp = -1 # reset virtual holding position
# Program entry function
def main():
while True: # loop
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second
La stratégie complète a été publiée sur le site internet de la FMZ:https://www.fmz.com/strategy/215129
Configuration des tests antérieurs
Rapport sur les performances
Curve des fonds
Le taux de déviation est un outil de trading simple et efficace qui peut fournir une référence efficace pour les traders.