Stratégie de négociation de renversement de l'élan

Auteur:ChaoZhang est là., Date: 2023-10-07 16h52 et 05 min
Les étiquettes:

Résumé

Cette stratégie est basée sur le concept de trading d'inversion d'élan. Elle utilise le RSI, le Stoch et le MACD pour déterminer la direction de la tendance actuelle, et définit un stop loss et un profit basé sur l'ATR, pour mettre en œuvre une stratégie de trading automatisée qui peut capturer efficacement les inversions de tendance.

Logique de négociation

La stratégie utilise RSI, Stoch et MACD comme trois indicateurs pour déterminer la direction de la tendance actuelle.

  • RSI ((7): RSI supérieur à 50 indique une tendance haussière, tandis qu'au-dessous de 50 une tendance à la baisse
  • Stoch ((%K, 14, 3, 3): %K supérieur à 50 est tendance haussière, inférieur à 50 est tendance baissière
  • MACD ((12, 26, 9): MACD au-dessus de la ligne de signal est tendance haussière, en dessous est tendance baissière

Lorsque les trois indicateurs sont haussiers, la couleur de la barre est réglée sur le vert. Lorsque tous sont baissiers, la couleur de la barre est réglée sur le rouge. S'il y a une divergence entre les indicateurs, la couleur de la barre est réglée sur le noir.

Les règles de négociation sont les suivantes:

  • Lorsque la barre actuelle est verte, et la barre précédente est noire ou rouge, allez long.
  • Lorsque la barre actuelle est rouge et que la barre précédente est noire ou verte, passez à la position courte.
  • Si la barre devient rouge ou noire pendant une position longue, fermez la position longue.
  • Si la barre devient verte ou noire lors d'une position courte, fermez la transaction courte.

La stratégie utilise également l'ATR (7) pour définir le stop loss et le take profit.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. L'utilisation de plusieurs indicateurs pour déterminer la tendance peut filtrer efficacement les fausses ruptures.

  2. Les paramètres d'arrêt des pertes et de prise de profit ATR sont raisonnables. ATR peut suivre efficacement la volatilité du marché. En utilisant des multiples d'ATR, les arrêts et les objectifs peuvent être ajustés dynamiquement en fonction des conditions du marché.

  3. Une logique simple et claire, facile à comprendre et à automatiser.

Analyse des risques

Les risques de cette stratégie comprennent:

  1. Les erreurs dans les indicateurs individuels peuvent affecter le calendrier d'entrée.

  2. La taille de l'ATR affecte considérablement les arrêts et les cibles. Un calcul incorrect de l'ATR peut entraîner des arrêts trop larges ou des cibles trop serrées. Peut ajouter des indicateurs supplémentaires pour confirmer l'ATR.

  3. Manque de détermination de tendance. axée sur le trading inverse, une analyse de tendance insuffisante peut entraîner des fléchettes sur les marchés en évolution. peut ajouter des indicateurs de tendance.

  4. Risque de surajustement: nécessite un backtesting approfondi pour vérifier la robustesse des paramètres et des règles.

Directions d'amélioration

Améliorations possibles de cette stratégie:

  1. Ajustement ou ajout d'indicateurs pour améliorer la précision de la détermination des points de renversement, par exemple l'ajout de bandes de Bollinger pour vérifier les niveaux de surachat/survente.

  2. Optimiser le calcul de l'ATR pour mieux suivre la volatilité, par exemple en utilisant des ratios ATR/prix.

  3. L'ajout d'indicateurs de tendance pour éviter les sauts de marée sur les marchés variables, par exemple les moyennes mobiles.

  4. Optimisation de la gestion de l'argent, par exemple en ajustant la taille des positions en fonction du tirage.

  5. Optimisation de la période pour tester la robustesse à travers les délais.

  6. Plus de tests antérieurs sur différents produits et périodes de temps pour vérifier la fiabilité.

Résumé

Cette stratégie est conçue sur la base de concepts de renversement de momentum, en utilisant des combinaisons RSI, Stoch et MACD pour identifier les renversements, avec des arrêts et des cibles ATR dynamiques. Elle forme un système d'inversion de tendance relativement complet. Les avantages incluent une logique claire et des arrêts / cibles raisonnables. Les lacunes incluent des erreurs de signal et l'absence de filtres de tendance. Des améliorations peuvent être apportées en optimisant les indicateurs, en ajoutant des tendances et en ajustant la taille des positions.


/*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*********************************






















Plus de