Stratégie de négociation BIAS pour le taux d'écart

Auteur:La bonté, Créé: 2020-06-30 09:58:26, Mis à jour: 2023-10-28 15:29:08

[TOC] Je vous en prie.

img

Résumé

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.

Une brève introduction

img

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.

Le principe du taux d'écart

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.

Formule de calcul du taux d'écart

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.

La logique de la stratégie

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.

  • Ouverture de position longue: si aucune position de détention n'existe et que le taux d'écart à long terme est supérieur au taux d'écart à court terme
  • Ouverture de position courte: s'il n'y a pas de position de détention en cours et que le taux d'écart à long terme est inférieur au taux d'écart à court terme
  • Fermeture de position longue: si une position longue est détenue et que le taux d'écart à long terme est inférieur au taux d'écart à court terme
  • Fermeture de position courte: si une position courte est détenue et que le taux d'écart à long terme est supérieur au taux d'écart à court terme

Rédaction de stratégie

É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.mainfonction et uneonTickLa 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.whilela boucle et exécuter à plusieurs reprises leonTickTout 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 rb000, mais dans le backtest et la situation réelle du marché, l'indice de barres d'armature est utilisé comme données, et le contrat principal spécifique est utilisé pour passer la commande.GetRecordsComme 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, utiliserifles 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.talibLa moyenne mobile est par exemple:TA.MACette 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

Stratégie complète

# 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

Test de retour de la stratégie

Configuration des tests antérieurs

img

Rapport sur les performances

img img

Curve des fonds

img

Pour résumer

Le taux de déviation est un outil de trading simple et efficace qui peut fournir une référence efficace pour les traders.


Relationnée

Plus de