Stratégie R-Breaker des contrats à terme sur matières premières

Auteur:La bonté, Créé: 2020-06-02 08:57:10, Mis à jour: 2023-11-02 19:52:44

img

Résumé

La stratégie R-Breaker a été développée par Richard Saidenberg et publiée en 1994. Elle a été sélectionnée comme l'une des dix stratégies de trading les plus rentables par le magazine Futures Truth aux États-Unis pendant 15 années consécutives.

Résistance et soutien

En termes simples, la stratégie R-Breaker est une stratégie de support et de résistance des prix. Elle calcule sept prix en fonction des prix les plus élevés, les plus bas et les prix de clôture d'hier: un prix central (pivot) et trois niveaux de support (s1 s2, s3), trois niveaux de résistance (r1, r2, r3).

  • Prix d' achat de rupture (niveau de résistance r3) = prix le plus élevé d' hier + 2 * (prix central - prix le plus bas d' hier) / 2

  • Le prix de vente observé (niveau de résistance r2) = prix central + (prix le plus élevé d'hier - prix le plus bas d'hier)

  • Prix de vente inverse (niveau de résistance r1) = 2 * Prix central - prix le plus bas d'hier

  • Prix central (pivot) = (coût le plus élevé d'hier + prix de clôture d'hier + prix le plus bas d'hier) / 3

  • Prix d'achat inverse (niveau de soutien s1) = 2 * Prix central - prix le plus élevé d'hier

  • Prix d'achat observé (niveau de soutien s2) = prix central - (prix le plus élevé d'hier - prix le plus bas d'hier)

  • Prix de vente de rupture (niveau de support s3) = prix le plus bas d'hier - 2 * (prix le plus élevé d'hier - prix central)

Nous pouvons voir que la stratégie R-Breaker dessine une ligne de prix en forme de grille basée sur le prix d'hier, et met à jour ces lignes de prix une fois par jour. Dans l'analyse technique, les niveaux de support et de résistance, et le rôle des deux peuvent être convertis l'un dans l'autre. Lorsque le prix brise avec succès le niveau de résistance, le niveau de résistance devient le niveau de support; lorsque le prix brise avec succès le niveau de support, le niveau de support devient le niveau de résistance.

Dans le commerce réel, ces niveaux de support et de résistance indiquent au trader la direction des positions d'ouverture et de fermeture et les points de négociation précis. Les traders disposant de conditions d'ouverture et de fermeture spécifiques peuvent adapter de manière flexible en fonction des prix intraday, des prix centraux, des niveaux de résistance et des niveaux de support, et peuvent également gérer des positions basées sur ces lignes de prix de la grille.

La logique de la stratégie

Ensuite, voyons comment la stratégie R-Breaker utilise ces niveaux de support et de résistance. Sa logique n'est pas du tout compliquée. S'il n'y a pas de position de détention, entrez en mode tendance. Lorsque le prix est supérieur au prix d'achat de rupture, ouvrez une position longue; lorsque le prix est inférieur au prix de vente de rupture, ouvrez une position courte.

  • Mode tendance

position longue ouverte: s'il n'y a pas de position de détention et que le prix est supérieur au prix d'achat de rupture

position courte ouverte: si aucune position de détention n'existe et que le prix est inférieur au prix de vente de rupture

position longue fermée: si vous détenez une position longue et que le prix le plus élevé de la journée est supérieur au prix de vente observé et que le prix est inférieur au prix de vente inverse

position courte fermée: si vous détenez une position courte et que le prix le plus bas de la journée est inférieur au prix d'achat observé et que le prix est supérieur au prix d'achat inverse

  • Retour en arrière

position longue ouverte: si vous détenez une position courte et que le prix le plus bas de la journée est inférieur au prix d'achat observé et que le prix est supérieur au prix d'achat inverse

position ouverte courte: si vous détenez une position longue et que le prix le plus élevé de la journée est supérieur au prix de vente observé et que le prix est inférieur au prix de vente inverse

position longue fermée: si des positions longues sont détenues et que le prix est inférieur au prix de vente de rupture

position courte fermée: si la position courte est détenue et que le prix est supérieur au prix d'achat de rupture

Lorsqu'il y a des positions de détention, il entre en mode inversion. Lorsqu'il y a des positions de détention longues, et que le prix le plus élevé de la journée est supérieur au prix de vente observé, et que le prix tombe en dessous du prix de vente inverse, la position longue sera fermée et la position courte sera ouverte de manière synchrone. Lorsqu'il y a des positions courtes, et que le prix le plus bas de la journée est inférieur au prix d'achat observé, et que le prix traverse le prix d'achat inverse, la position courte sera fermée et la position longue sera ouverte.

Rédaction de stratégie

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

# Strategy main function
def onTick():
    # retrieve data
    exchange.SetContractType(contract_type)   # Subscribe to futures products
    bars_arr = exchange.GetRecords(PERIOD_D1)  # Get daily K line array
    if len(bars_arr) < 2:  # If the number of K lines is less than 2
        return
    yesterday_open = bars_arr[-2]['Open']     # Yesterday's opening price
    yesterday_high = bars_arr[-2]['High']     # Yesterday's highest price
    yesterday_low = bars_arr[-2]['Low']       # Yesterday's lowest price
    yesterday_close = bars_arr[-2]['Close']   # Yesterday's closing price

    # Calculation
    pivot = (yesterday_high + yesterday_close + yesterday_low) / 3 # Pivot point
    r1 = 2 * pivot - yesterday_low # Resistance level 1
    r2 = pivot + (yesterday_high - yesterday_low) # Resistance level 2
    r3 = yesterday_high + 2 * (pivot - yesterday_low) # Resistance level 3
    s1 = 2 * pivot - yesterday_high  # Support level 1
    s2 = pivot - (yesterday_high - yesterday_low)  # Support level 2
    s3 = yesterday_low - 2 * (yesterday_high - pivot)  # Support level 3

    today_high = bars_arr[-1]['High'] # Today's highest price
    today_low = bars_arr[-1]['Low'] # Today's lowest price
    current_price = _C(exchange.GetTicker).Last # Current price

    # Get positions
    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'] == contract_type:  # If the position variety equals the subscription variety
                if i['Type'] % 2 == 0:  # If it is long position
                    position = i['Amount']  # The number of assigned positions is positive
                else:
                    position = -i['Amount']  # The number of assigned positions is negative
                profit = i['Profit']  # Get position profit and loss
    else:
        position = 0  # The number of assigned positions is 0
        profit = 0  # The value of the assigned position is 0
        
    if position == 0:  # If there is no position
        if current_price > r3:  # If the current price is greater than Resistance level 3
            exchange.SetDirection("buy")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # open long position
        if current_price < s3:  # If the current price is less than Support level 3
            exchange.SetDirection("sell")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # open short position
        
    if position > 0:  # if holding long position
        if today_high > r2 and current_price < r1 or current_price < s3:  # If today's highest price is greater than Resistance level 2, and the current price is less than Resistance level 1
            exchange.SetDirection("closebuy")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # close long position
            exchange.SetDirection("sell")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # open short position

    if position < 0:  # if holding short position
        if today_low < s2 and current_price > s1 or current_price > r3:  # If today's lowest price is less than Support level 2, and the current price is greater than Support level 1
            exchange.SetDirection("closesell")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # close short position
            exchange.SetDirection("buy")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # open long position

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

Copier la stratégie complète

La stratégie complète a été publiée sur la plateforme FMZ (FMZ.COM), cliquez sur le lien ci-dessous pour le copier directement, et vous pouvez effectuer un backtest sans configuration:https://www.fmz.com/strategy/187009

Résumé

La raison pour laquelle la stratégie R-Breaker est populaire est qu'il ne s'agit pas purement d'une stratégie de suivi de tendance, mais d'une stratégie composée pour gagner à la fois un revenu alpha de tendance et un revenu alpha inverse.


Relationnée

Plus de