Diese Strategie basiert auf dem Konzept des Momentum-Reversal-Handels. Sie verwendet RSI, Stoch und MACD, um die aktuelle Trendrichtung zu bestimmen, und setzt Stop-Loss und Take-Profit basierend auf ATR, um eine automatisierte Handelsstrategie zu implementieren, die Trendumkehrungen effizient erfassen kann.
Die Strategie verwendet RSI, Stoch und MACD als drei Indikatoren, um die aktuelle Trendrichtung zu bestimmen.
Wenn alle drei Indikatoren bullisch sind, wird die Barfarbe auf grün gesetzt. Wenn alle bearisch sind, wird die Barfarbe auf rot gesetzt. Wenn zwischen den Indikatoren eine Divergenz besteht, wird die Barfarbe auf schwarz gesetzt.
Die Handelsregeln sind:
Die Strategie verwendet auch ATR(7) um den Stop-Loss und den Take-Profit festzulegen.
Zu den Vorteilen dieser Strategie gehören:
Die Verwendung mehrerer Indikatoren zur Bestimmung des Trends kann falsche Ausbrüche effektiv filtern.
ATR-Stop-Loss- und Take-Profit-Einstellungen sind angemessen. ATR kann die Marktvolatilität effektiv verfolgen. Durch die Verwendung von Vielfachen von ATR können Stops und Ziele dynamisch anhand der Marktbedingungen angepasst werden.
Einfache und klare Logik, leicht zu verstehen und zu automatisieren.
Zu den Risiken dieser Strategie gehören:
Fehler in einzelnen Indikatoren können sich auf den Eingangszeitplan auswirken, wobei die Anpassung von Parametern oder das Hinzufügen weiterer Bestätigungsindikatoren zur Verringerung von Fehlern in Betracht gezogen werden kann.
Die Größe der ATR beeinflusst die Stopps und Ziele erheblich. Eine falsche ATR-Berechnung kann dazu führen, dass die Stopps zu breit oder die Ziele zu eng sind. Es können zusätzliche Indikatoren hinzugefügt werden, um die ATR zu bestätigen.
Mangelnde Trendbestimmung. Konzentriert auf Umkehrhandel, kann eine unzureichende Trendanalyse zu Whipsaws in verschiedenen Märkten führen. Kann Trendindikatoren hinzufügen.
Das Risiko einer Überanpassung erfordert eine gründliche Rückprüfung zur Überprüfung der Robustheit der Parameter und Regeln.
Mögliche Verbesserungen dieser Strategie:
Anpassung oder Hinzufügung von Indikatoren, um die Präzision bei der Bestimmung von Umkehrpunkten zu verbessern.
Optimierung der ATR-Berechnung, um die Volatilität besser nachzuverfolgen, z. B. mit ATR/Preisverhältnissen.
Hinzufügen von Trendindikatoren, um Whipsaws während der Schwellenmärkte zu vermeiden.
Optimierung des Geldmanagements, z. B. Anpassung der Positionsgröße anhand der Auslastung.
Periodenoptimierung, um die Robustheit über Zeiträume hinweg zu testen.
Weitere Backtests für verschiedene Produkte und Zeiträume zur Überprüfung der Zuverlässigkeit.
Diese Strategie basiert auf den Konzepten der Umkehrung der Dynamik, wobei RSI, Stoch und MACD kombiniert verwendet werden, um Umkehrungen zu identifizieren, mit dynamischen ATR-Stopps und Zielen. Sie bildet ein relativ vollständiges Trendumkehrsystem. Zu den Vorteilen gehören klare Logik und vernünftige Stopps / Ziele. Zu den Mängeln gehören Signalfehler und Mangel an Trendfiltern. Verbesserungen können durch Optimierung von Indikatoren, Hinzufügen von Trends und Anpassung der Positionsgröße vorgenommen werden. Dies kann die Strategie robuster machen.
/*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*********************************