MACD der Strategie der relativen Stärke

Schriftsteller:ChaoZhang, Datum: 2023-12-21 12:01:01
Tags:

img

Übersicht

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.

Strategie Logik

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.

Analyse der Vorteile

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.

Risikoanalyse

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.

Anweisungen zur Verbesserung

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.

Schlussfolgerung

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)

Mehr