Diese Strategie basiert auf zwei bekannten Indikatoren: MACD und Relative Strength (RS). Durch die Kopplung erhalten wir leistungsstarke Kaufsignale. Das Besondere an dieser Strategie ist in der Tat, dass sie einen Indikator aus einem Indikator erzeugt. So konstruieren wir eine MACD, deren Quelle der Wert des RS ist. Die Strategie nimmt nur Kaufsignale an und ignoriert Verkaufssignale, da sie meist Verlierer sind. Es gibt auch eine Geldverwaltungsmethode, mit der wir einen Teil des Gewinns reinvestieren oder die Ordergröße im Falle erheblicher Verluste reduzieren können.
Der Index ist ein Indikator, der die Anomalie zwischen der Dynamik und der Annahme der Markteffizienz misst. Es wird von Fachleuten verwendet und ist einer der robustesten Indikatoren. Die Idee ist es, Vermögenswerte zu besitzen, die besser als der Durchschnitt abschneiden, basierend auf ihrer früheren Leistung. Wir berechnen den Index mit der folgenden Formel:
RS = Aktueller Preis / Höchster Höchster Wert über den Zeitraum RS Länge
Wir können den aktuellen Preis somit in Beziehung zu seinem höchsten Preis über diesen vom Nutzer definierten Zeitraum stellen.
MACD ist einer der bekanntesten Indikatoren, der den Abstand zwischen zwei exponentiellen gleitenden Durchschnitten misst: einer schneller und einer langsamer. Eine breite Entfernung zeigt schnelle Dynamik an und umgekehrt. Wir zeichnen den Wert dieser Entfernung aus und nennen diese Linie Macdline. Der MACD verwendet einen dritten gleitenden Durchschnitt mit einer niedrigeren Periode als die ersten beiden. Dieser letzte gleitende Durchschnitt gibt ein Signal, wenn er die Macdline überschreitet. Er wird daher mit den Werten der Macdline als Quelle konstruiert.
Es ist wichtig zu beachten, dass die ersten beiden MAs mit RS-Werten als Quelle konstruiert werden. Wir haben also gerade einen Indikator eines Indikators erstellt. Diese Art von Methode ist sehr leistungsfähig, weil sie selten verwendet wird und der Strategie einen Mehrwert verleiht.
Diese Strategie kombiniert zwei einzeln sehr leistungsstarke Indikatoren: MACD und RS. Der MACD ist in der Lage, kurzfristige Trends und Dynamikveränderungen zu erfassen, während RS die Robustheit mittelfristiger bis langfristiger Trends widerspiegelt.
Darüber hinaus ist die Strategie sehr einzigartig, da sie den MACD aus dem RS-Indikator ableitet und so die Wirkung der Strategie kreativ verstärkt.
Schließlich verfügt die Strategie über Risikomanagement- und Stop-Loss-Mechanismen, die Risiken wirksam kontrollieren und Verluste pro Handel begrenzen.
Das größte Risiko dieser Strategie ist die Möglichkeit, dass RS- und MACD-Indikatoren falsche Signale geben. Obwohl beide Indikatoren robust sind, kann kein technischer Indikator die Zukunft zu 100% vorhersagen, und Signale können gelegentlich scheitern. Außerdem ist das RS selbst nach mittelfristigen und langfristigen Trends gerichtet und kann kurzfristig irreführende Signale erzeugen.
Um Risiken zu reduzieren, können die Parameter von RS und MACD so eingestellt werden, dass sie besser auf bestimmte Handelsinstrumente und Marktumgebungen abgestimmt sind. Außerdem kann eine strengere Stop-Loss-Range auferlegt werden. Im Allgemeinen ist die Verwendung von Stop-Loss zur Kontrolle von Handelsverlusten die beste Methode, um Risiken dieser Strategie zu bewältigen.
Zunächst prüfen Sie, welcher Markt (z. B. Aktien, Devisen, Kryptowährungen usw.) die beste Wirkung dieser Strategie erzeugt, und konzentrieren Sie sich dann auf diesen optimalen Vermögenswert.
Zweitens, versuchen Sie, mit Hilfe von Machine-Learning-Algorithmen die RS- und MACD-Parameter automatisch zu optimieren, anstatt sie manuell zu fixieren.
Drittens sollten andere Indikatoren zur Erstellung von Handelssignalen berücksichtigt werden, um ein Multifaktormodell zur Verbesserung der Signalgenauigkeit zu bilden, z. B. durch Hinzufügen von Volumenindikatoren usw.
Diese Strategie nutzt die MACD- und RS-Indikatoren synergistisch, um starke Kaufsignale zu liefern. Seine Neuheit liegt darin, den MACD aus dem RS-Indikator abzuleiten und die Kopplung zwischen den Indikatoren zu realisieren, um die Wirksamkeit zu verbessern. Die Strategie verfügt über klare Eintritts-, Stop-Loss- und Geldmanagementmechanismen, die Risiken effektiv kontrollieren. Die nächsten Schritte könnten die Strategie durch Parameteroptimierung, Verfeinerung der Signalgenerierung, Hinzufügung anderer Faktoren usw. weiter verbessern.
/*backtest start: 2022-12-14 00:00:00 end: 2023-12-20 00:00:00 period: 1d basePeriod: 1h 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/ // © gsanson66 //This strategy calculates the Relative Strength and plot the MACD of this Relative Strenght //We take only buy signals send by MACD //@version=5 strategy("MACD OF RELATIVE STRENGHT STRATEGY", shorttitle="MACD RS STRATEGY", precision=4, overlay=false, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=950, commission_type=strategy.commission.percent, commission_value=0.18, slippage=3) //------------------------------TOOL TIPS--------------------------------// t1 = "Relative Strength length i.e. number of candles back to find the highest high and compare the current price with this high." t2 = "Relative Strength fast EMA length used to plot the MACD." t3 = "Relative Strength slow EMA length used to plot the MACD." t4 = "Macdline SMA length used to plot the MACD." t5 = "The maximum loss a trade can incur (in percentage of the trade value)" t6 = "Each gain or losse (relative to the previous reference) in an amount equal to this fixed ratio will change quantity of orders." t7 = "The amount of money to be added to or subtracted from orders once the fixed ratio has been reached." //----------------------------------------FUNCTIONS---------------------------------------// //@function Displays text passed to `txt` when called. debugLabel(txt, color, loc) => label.new(bar_index, loc, text=txt, color=color, style=label.style_label_lower_right, textcolor=color.black, size=size.small) //@function which looks if the close date of the current bar falls inside the date range inBacktestPeriod(start, end) => (time >= start) and (time <= end) //---------------------------------------USER INPUTS--------------------------------------// //Technical parameters rs_lenght = input.int(defval=300, minval=1, title="RS Length", group="Technical parameters", tooltip=t1) fast_length = input(title="MACD Fast Length", defval=14, group="Technical parameters", tooltip=t2) slow_length = input(title="MACD Slow Length", defval=26, group="Technical parameters", tooltip=t3) signal_length = input.int(title="MACD Signal Smoothing", minval=1, maxval=50, defval=10, group="Technical parameters", tooltip=t4) //Risk Management slMax = input.float(8, "Max risk per trade (in %)", minval=0, group="Risk Management", tooltip=t5) //Money Management fixedRatio = input.int(defval=400, minval=1, title="Fixed Ratio Value ($)", group="Money Management", tooltip=t6) increasingOrderAmount = input.int(defval=200, minval=1, title="Increasing Order Amount ($)", group="Money Management", tooltip=t7) //Backtesting period startDate = input(title="Start Date", defval=timestamp("1 Jan 2020 00:00:00"), group="Backtesting Period") endDate = input(title="End Date", defval=timestamp("1 July 2024 00:00:00"), group="Backtesting Period") //----------------------------------VARIABLES INITIALISATION-----------------------------// strategy.initial_capital = 50000 //Relative Strenght Calculation rs = close/ta.highest(high, rs_lenght) //MACD of RS Calculation [macdLine, signalLine, histLine] = ta.macd(rs, fast_length, slow_length, signal_length) //Money management equity = math.abs(strategy.equity - strategy.openprofit) var float capital_ref = strategy.initial_capital var float cashOrder = strategy.initial_capital * 0.95 //Backtesting period bool inRange = na //------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------// //Checking if the date belong to the range inRange := true //Checking performances of the strategy if equity > capital_ref + fixedRatio spread = (equity - capital_ref)/fixedRatio nb_level = int(spread) increasingOrder = nb_level * increasingOrderAmount cashOrder := cashOrder + increasingOrder capital_ref := capital_ref + nb_level*fixedRatio if equity < capital_ref - fixedRatio spread = (capital_ref - equity)/fixedRatio nb_level = int(spread) decreasingOrder = nb_level * increasingOrderAmount cashOrder := cashOrder - decreasingOrder capital_ref := capital_ref - nb_level*fixedRatio //Checking if we close all trades in case where we exit the backtesting period if strategy.position_size!=0 and not inRange strategy.close_all() debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116), loc=macdLine) //-----------------------------------EXIT SIGNAL------------------------------// if strategy.position_size>0 and histLine<0 strategy.close("Long") //-------------------------------BUY CONDITION-------------------------------------// if histLine>0 and not (strategy.position_size>0) and inRange qty = cashOrder/close stopLoss = close*(1-slMax/100) strategy.entry("Long", strategy.long, qty) strategy.exit("Exit Long", "Long", stop=stopLoss) //---------------------------------PLOTTING ELEMENT----------------------------------// hline(0, "Zero Line", color=color.new(#787B86, 50)) plot(macdLine, title="MACD", color=color.blue) plot(signalLine, title="Signal", color=color.orange) plot(histLine, title="Histogram", style=plot.style_columns, color=(histLine>=0 ? (histLine[1] < histLine ? #26A69A : #B2DFDB) : (histLine[1] < histLine ? #FFCDD2 : #FF5252))) plotchar(rs, "Relative Strenght", "", location.top, color=color.yellow)