Momentum-Reversal-Strategie


Erstellungsdatum: 2023-10-07 16:52:05 zuletzt geändert: 2023-10-07 16:52:05
Kopie: 0 Klicks: 673
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie basiert auf dem Trading-Konzept der Dynamik-Umkehr und beurteilt den aktuellen Trend anhand von drei Indikatoren: RSI, Stoch und MACD, kombiniert mit ATR-Satz Stop-Loss-Stoppositionen, um eine automatisierte Handelsstrategie zu entwickeln, die eine Trendumkehr effizient erfasst.

Strategieprinzip

Die Strategie nutzt drei Indikatoren: den RSI, den Stoch und den MACD, um die Richtung des aktuellen Trends zu bestimmen. Die spezifische Logik ist:

  • RSI (7. Tag): RSI-Werte über 50 sind positiv und unter 50 sind negativ
  • Stoch ((%K,14,3,3): %K-Wert größer als 50 ist bullish, kleiner als 50 ist bearish
  • MACD ((12,26,9): MACD ist größer als Signal für bullish, kleiner als Signal für bearish

Wenn drei Indikatoren gleichzeitig bullish sind, wird die Bar auf grün gesetzt; wenn drei Indikatoren gleichzeitig bullish sind, wird die Bar auf rot gesetzt; wenn die Indikatorensignale unterschiedlich sind, wird sie auf schwarz gesetzt.

Die Handelsregeln lauten wie folgt:

  • Wenn die aktuelle Bar grün und die vorherige Bar schwarz oder rot ist, wird der Eintrittspreis für die höchste Stelle der Bar plus 0,01 erhöht.
  • Wenn die aktuelle Bar rot und die vorherige Bar schwarz oder grün ist, wird der Eintritt mit einem Minus von 0,01 auf den Tiefpunkt der Bar ausgeführt.
  • Wenn während der Haltbarkeit ein roter oder ein schwarzer Bar auftritt, ist die Position plat.
  • Wenn ein grüner oder schwarzer Bar während der Leerstellung erscheint, ist der Leerstand

Die Strategie verwendet auch ATR (sieben-Tage-Durchschnittslinie), um die Stop-Loss-Stop-Position einzustellen. Die Stop-Loss-Position ist 1,5 mal die ATR und die Stop-Loss-Position ist 3 mal die ATR.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Die Verwendung von mehreren Indikatoren, um Trends zu beurteilen, kann die False Breakout effektiv filtern. Wenn die drei Indikatoren RSI, Stoch und MACD gleichzeitig bullish oder bearish sind, ist die Wahrscheinlichkeit für eine Trendwende.

  2. Die ATR-Stop-Loss-Stopp-Einstellungen sind vorteilhaft. Die ATR kann die Schwankungen des Marktes effektiv verfolgen. Mit der Multiplikation der Stop-Loss-Stopp-Einstellungen der ATR kann die Stop-Loss-Stopp-Einstellung entsprechend der dynamischen Marktlage angepasst werden, um zu verhindern, dass die Stop-Loss zu locker oder zu eng ist.

  3. Die Trading-Logik ist einfach, klar und leicht zu verstehen und eignet sich als automatisierte Trading-Strategie.

Risikoanalyse

Die Gefahren dieser Strategie sind:

  1. Bei einer Kombination von mehreren Indikatoren kann es zu Fehlsignalen bei einzelnen Indikatoren kommen, die die Eintrittszeit beeinträchtigen. Es kann in Betracht gezogen werden, die Parameter der Indikatoren anzupassen oder andere Indikatoren zur Überprüfung hinzuzufügen, um die Fehlsignalrate zu verringern.

  2. Die ATR-Größe hat einen großen Einfluss auf die Stop-Loss-Sperre. Wenn die ATR-Berechnung nicht korrekt ist, kann dies zu einer zu großen Stop-Loss oder zu kleinen Stop-Loss führen. Es kann in Erwägung gezogen werden, die Größe der ATR durch die Aufnahme anderer Indikatoren zu bestätigen.

  3. Mangel an Trendbeurteilung. Diese Strategie konzentriert sich auf den Umkehrhandel, fehlt an Trendbeurteilung und ist leicht in den Schaukeln gefangen. Es kann ein zusätzliches Trendindikator-Unterstützungsurteil hinzugefügt werden

  4. Es besteht ein Überpassungsrisiko. Es sollte eine ausreichende Rücküberprüfung durchgeführt werden, um die Zuverlässigkeit von Parametern und Regeln zu überprüfen.

Optimierungsrichtung

Diese Strategie kann optimiert werden durch:

  1. Anpassung oder Erhöhung der Indikatoren, um die Genauigkeit der Beurteilung der Zeitpunkte der Trendwende zu verbessern. Zum Beispiel die Aufnahme von Brin-Linien, um Überkauf-Überverkauf zu beurteilen.

  2. Optimierung der Berechnungsmethode des ATR, um die Marktbewegungen besser zu verfolgen.

  3. Hinzufügen von Trendbeurteilungsindikatoren, um zu vermeiden, dass Sie in einem wackligen Umfeld eingeschlossen werden. Zum Beispiel die Hinzufügung eines beweglichen Durchschnitts zur Beurteilung der Trendrichtung.

  4. Optimierung der Kapitalverwaltung, z. B. Anpassung der Positionen an die Rücknahme.

  5. Zyklusoptimierung, um die Stabilität verschiedener Zeitzyklusparameter zu überprüfen.

  6. Es wird eine Überprüfung der Strategie durchgeführt, um zu überprüfen, ob die Strategie stabil und zuverlässig ist.

Zusammenfassen

Die Strategie basiert auf der Dynamik-Umkehr-Ideologie, nutzt RSI, Stoch und MACD-Kombinationen, um den Zeitpunkt des Trendwechsels zu bestimmen, kombiniert mit ATR-Dynamik-Stopp-Stopps, um eine vollständige Trendumkehr-Handelsstrategie zu bilden. Die Strategie hat Vorteile wie die Klarheit der Handelslogik, eine vernünftige Stop-Loss-Stopp-Einstellung, aber auch Mängel wie Fehlsignale, fehlende Trendbeurteilung. In der Zukunft können Verbesserungen in Bezug auf die Optimierung der Indikatorparameter, die Aufnahme von Trendbeurteilungen, die Anpassung der Kapitalverwaltung usw. vorgenommen werden, um die Strategie stabiler und zuverlässiger zu machen.

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