Stratégie de renversement de la dynamique


Date de création: 2023-10-07 16:52:05 Dernière modification: 2023-10-07 16:52:05
Copier: 0 Nombre de clics: 673
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie est basée sur le concept de trading basé sur un renversement de dynamique, en évaluant la tendance actuelle à l’aide des trois indicateurs RSI, Stoch et MACD, en combinaison avec la stratégie de trading automatique ATR, qui permet de capturer efficacement le renversement de tendance.

Principe de stratégie

La stratégie utilise les trois indicateurs RSI, Stoch et MACD pour juger de l’orientation de la tendance actuelle. La logique est la suivante:

  • RSI (le 7): RSI plus de 50 est positif, moins de 50 est négatif
  • Stoch ((%K,14,3,3): une valeur de%K supérieure à 50 est positive et inférieure à 50 est négative
  • MACD ((12,26,9): le MACD est plus grand que le signal à la hausse et plus petit que le signal à la baisse

Lorsque trois indicateurs sont à la hausse simultanément, la barre est définie en vert; lorsque trois indicateurs sont à la baisse simultanément, la barre est définie en rouge; si le signal de l’indicateur est divergent, elle est définie en noir.

Les règles de trading sont les suivantes :

  • Lorsque la barre actuelle est verte et que la barre précédente est noire ou rouge, faites une entrée supplémentaire, ajoutant 0.01 au prix d’entrée du point le plus élevé de la barre
  • Lorsque la barre actuelle est rouge et que la barre précédente est noire ou verte, le prix d’entrée est réduit de 0,01 pour le bas de la barre
  • Si une barre rouge ou noire apparaît pendant une position multiple, la position est nulle.
  • Si une barre verte ou noire apparaît pendant la position vide, la position est nulle.

La stratégie utilise également l’ATR (la moyenne des 7 jours) pour définir la position de stop loss. Le stop loss est 1,5 fois l’ATR et le stop stop est 3 fois l’ATR.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. L’utilisation de plusieurs indicateurs pour juger de la tendance peut filtrer efficacement les fausses ruptures. Lorsque les trois indicateurs RSI, Stoch et MACD sont à la fois en hausse ou en baisse, la probabilité est un point de reprise de la tendance.

  2. L’ATR peut suivre efficacement les fluctuations du marché, en utilisant plusieurs fois l’ATR pour régler l’arrêt de la perte, en ajustant l’arrêt de la perte en fonction de la dynamique du marché, afin d’éviter que la perte soit trop lâche ou trop serrée.

  3. La logique des transactions est simple, claire et facile à comprendre, ce qui en fait une stratégie de trading automatisée.

Analyse des risques

Cette stratégie présente également les risques suivants:

  1. Il est possible que des indicateurs individuels émettent des signaux erronés, ce qui affecte le moment d’entrée. Il est possible d’ajuster les paramètres de l’indicateur ou d’ajouter d’autres indicateurs pour vérifier et réduire le taux de faux signaux.

  2. La taille de l’ATR a un impact important sur le stop loss. Si l’ATR n’est pas calculé avec précision, il peut entraîner un stop loss trop grand ou un stop loss trop petit. Il peut être envisagé d’ajouter d’autres indicateurs pour confirmer la taille de l’ATR.

  3. Manque de jugement de tendance. Cette stratégie est axée sur le trading inversé, manque de jugement de tendance et peut être emprisonnée dans une situation de choc.

  4. Il existe un risque de surconformité. Il faut effectuer un retour d’expérience suffisant pour vérifier la fiabilité des paramètres et des règles.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Ajuster ou augmenter l’indicateur pour améliorer la précision de jugement sur le moment de l’inversion de tendance. Par exemple, ajouter une ligne de Brin pour juger de l’état de surachat et de survente.

  2. Optimiser la méthode de calcul de l’ATR pour mieux suivre les fluctuations du marché. Par exemple, utiliser l’ATR par rapport au prix.

  3. Augmenter les indicateurs de jugement de tendance pour éviter d’être pris dans des situations de choc. Par exemple, ajouter une moyenne mobile pour juger de la direction de la tendance.

  4. Optimisation de la gestion des fonds, par exemple en ajustant les positions en fonction des retraits.

  5. Optimisation des cycles pour vérifier la stabilité des paramètres des différentes périodes.

  6. Les résultats de cette étude ont été publiés dans la revue Nature et la revue Nature et la revue Nature.

Résumer

Cette stratégie est basée sur la conception de l’idée d’inversion de dynamique, l’utilisation de la combinaison RSI, Stoch et MACD pour déterminer le moment du retournement de tendance, avec le paramètre d’arrêt de perte d’arrêt ATR, formant un ensemble plus complet de stratégies de négociation de renversement de tendance. La stratégie a des avantages tels que la clarté de la logique de négociation, le paramètre de stop loss et le paramètre d’arrêt de perte raisonnable, mais il y a aussi des défauts tels que les signaux d’erreur d’indicateur, le manque de jugement de tendance.

Code source de la stratégie
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jwitt98
//The PowerX strategy - based on the rules outlined in the book "The PowerX Strategy: How to Trade Stocks and Options in Only 15 Minutes a Day" by Markus Heitkoetter

//@version=5
strategy("PowerX", overlay=true)
strategy.initial_capital = 50000
longEntry = "Enter long"
shortEntry = "Enter short"
longExit = "Exit long"
shortExit = "Exit short"

//*********************************Begin inputs*********************************

//get time range inputs and set time range bool
timeRangeGroup = "Select the trading range"
startDate = input(timestamp("1 Jan 2021 00:00 +0000"), "Start date", "Select the start date for the trading range", "", timeRangeGroup)
endDate = input(timestamp("1 Jan 2050 00:00 +0000"), "End date", "Select the end date for the trading range", "", timeRangeGroup)
isInTimeRange = true

//get long/short inputs
positionsAllowedGroup = "Select the direction(s) of trades to allow"
isLongsAllowed = input.bool(true, "Allow long positions", "Check the box if you want to allow long positions", "", positionsAllowedGroup)
isShortsAllowed = input.bool(true, "Allow short positions", "Check the box if you want to allow short positions", "", positionsAllowedGroup)

//get the stop loss and profit target multiples.  Per the PowerX rules the ratio shoud be 1:2.  1.5 and 3 are defaults
adrMultuplesGroup="Select the multipliers for the stop loss and profit targets"
stopLossMultiple = input.float(1.5, "Stop loss multiple", 0.1, 10, 0.1, "The ADR is multiplied by the stop loss multiple to calculate the stop loss", group=adrMultuplesGroup)
profitTargetMultiple=input.float(3.0, "Profit target multiple", 0.1, 10, 0.1, "The ADR is multiplied by the profit target multiple to calculate the profit target", group=adrMultuplesGroup)

//get the option to use the money management stategy or not.  This is a fixed ratio type management system
moneyManagementGroup="Money management"
isUsingMoneyManagement=input.bool(false, "Use money management", "Check the box if you want to use a fixed ratio type money management system, such as the type described in PowerX", group=moneyManagementGroup)
initial_riskPercent=input.float(2.0, "Percent risk per trade", .1, 100, .1, "The percentage of capital you want to risk when starting out.  This will increase or decrease base on the money management rules.  Only applicable if money managent is used", group=moneyManagementGroup)/100
isRiskDowsideLimited=input.bool(false, "Keep risk at or above the set point", "Check the box if you don't want the risk to fall below the set \"risk per trade\" percentage, for example, when your equity is underwater. Only applicable if money management is used", "", moneyManagementGroup)
initial_riskPerTrade=initial_riskPercent * strategy.initial_capital 
riskFactor = 0.0
currentProfit = 0.0
currentRisk = 0.0

//*********************************End inputs*********************************

//*********************************Begin money management*********************************

if(isUsingMoneyManagement)
    currentProfit := strategy.equity - strategy.initial_capital
    if(currentProfit < 0)
        currentProfit:=math.abs(currentProfit)
        riskFactor := 0.5*(math.pow(1+8*currentProfit/(2*initial_riskPerTrade), 0.5)+1)
        currentRisk := 1/riskFactor * initial_riskPercent * strategy.initial_capital
        if(isRiskDowsideLimited)
            currentRisk := initial_riskPerTrade
    else
        riskFactor := 0.5*(math.pow(1+8*currentProfit/(2*initial_riskPerTrade), 0.5)+1)
        currentRisk := riskFactor * initial_riskPercent * strategy.initial_capital
        
plot(strategy.equity, "Strategy equity")
plot(currentRisk, "Current risk")
plot(riskFactor, "Risk Factor")

//*********************************End money management*********************************


//*********************************Begin indicators*********************************
//4 indicators are used in this strategy, RSI(7), Stochastics(14, 3, 3), MACD(12, 26, 9), and ADR(7)

rsiVal = ta.rsi(close, 7)//this checks out
plot(rsiVal, "RSI(7)", color.lime)

stochKVal = ta.sma(ta.sma(ta.stoch(close, high, low, 14),3),3)//this formula checks out
plot(stochKVal, "Stoch %K", color.lime)

[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
plot(histLine, "MACD Hist", color.lime)

adr = ta.sma(high, 7) - ta.sma(low, 7)
plot(adr, "Average daily range", color.orange)


//*********************************End indicators*********************************

//*********************************Define the bar colors*********************************

greenBar = rsiVal > 50 and stochKVal > 50 and histLine > 0
redBar = rsiVal < 50 and stochKVal < 50 and histLine < 0
blackBar = not greenBar and not redBar

color currentBarColor = switch
    greenBar => color.green
    redBar => color.red
    blackBar => color.gray //because black is too hard to see in dark mmode
    => color.yellow
    
barcolor(currentBarColor)

//*********************************End defining the bar colors*********************************

//*********************************Define the entry, stop loss and profit target*********************************

longStopLimit = high + .01
longProfitTarget = high + (profitTargetMultiple * adr)
longStopLoss = high - (stopLossMultiple * adr)

shortStopLimit = low - .01
shortProfitTarget = low - (profitTargetMultiple * adr)
shortStopLoss = low + (stopLossMultiple * adr)

qtyToTrade= math.floor(currentRisk / (stopLossMultiple * adr))//only if using money management
if(qtyToTrade * high > strategy.equity)
    qtyToTrade := math.floor(strategy.equity / high)

//*********************************End defining stop loss and profit targets*********************************

//*********************************Execute trades, set rules, stop loss and profit targets*********************************

if (greenBar and not greenBar[1] and isInTimeRange and isLongsAllowed)
    if(isUsingMoneyManagement)
        strategy.order(longEntry, strategy.long, qtyToTrade, limit=longStopLimit, stop=longStopLimit)
        //strategy.order(longEntry, strategy.long, qtyToTrade, stop=longStopLimit)
    else
        strategy.order(longEntry, strategy.long, limit=longStopLimit,stop=longStopLimit)
        //strategy.order(longEntry, strategy.long, stop=longStopLimit)
    strategy.exit("Long limit/stop", from_entry=longEntry, limit=longProfitTarget, stop=longStopLoss)
    

if(blackBar or redBar)
    strategy.cancel(longEntry)
    strategy.close(longEntry, longExit)
    

if (redBar and not redBar[1] and isInTimeRange and isShortsAllowed)
    if(isUsingMoneyManagement)
        strategy.order(shortEntry, strategy.short, qtyToTrade, limit=shortStopLimit, stop=shortStopLimit)
        //strategy.order(shortEntry, strategy.short, qtyToTrade, stop=shortStopLimit)
    else
        strategy.order(shortEntry, strategy.short, limit=shortStopLimit, stop=shortStopLimit)
        //strategy.order(shortEntry, strategy.short, stop=shortStopLimit)
    strategy.exit("Short limit/stop", from_entry=shortEntry, limit=shortProfitTarget, stop=shortStopLoss)

if(blackBar or greenBar)
    strategy.cancel(shortEntry)
    strategy.close(shortEntry, shortExit)
    

//*********************************End execute trades, set rules, stop loss and profit targets*********************************