
Die Strategie, die als “Multi-Zyklus-Trend-Tracking-Trading-Strategie basierend auf EMA und Random RSI” bezeichnet wird, nutzt die Index-Moving Average (EMA) und den Random-RSI-Indikator aus zwei verschiedenen Perioden, um die mittelfristige Entwicklung des Marktes zu erfassen. Die Kernidee der Strategie besteht darin, die Richtung des Trends durch die Kreuzung von EMAs zu bestimmen, während der Random-RSI als Trendbestätigungs- und Umkehrwarnsignal verwendet wird, um Positionen zu initiieren und am Ende des Trends zu platzieren.
Berechnung der schnellen EMA und der langsamen EMA. Die Standardparameter des schnellen EMA sind 12, die Standardparameter des langsamen EMA sind 25 und können in der Praxis je nach Marktcharakteristik und Handelsfrequenz angepasst werden.
Wie kann man überflüssige Trends beurteilen?
Trendbestätigung: Nach dem Auftreten eines Über-/Unterblick-Signals müssen 2 aufeinanderfolgende Über-/Unterblick-K-Linien vorhanden sein, um eine Trendentstehung zu bestätigen. Dies hilft, falsche Signale zu filtern.
Der Zufalls-RSI dient als Hilfsmittel:
Die Analyse zeigt, dass die EMA-Kombination für die 12⁄25-Periode die mittelfristigen Trends besser erfasst.
Die Trendbestätigungsmechanismen filtern die meisten Falschsignale aus und erhöhen die Gewinnchancen der Strategien.
Der Random RSI dient als Hilfsbeurteilung, um die Trendstärke zu Beginn des Trends zu bestimmen und eine mögliche Trendumkehr im späteren Trendszenario zu warnen.
Die Strategie ist einfach, hat weniger Parameter, ist leicht zu verstehen und zu implementieren, und ist für eine Vielzahl von Märkten und Sorten geeignet.
Der EMA ist ein nachlässiger Indikator, der zu Beginn einer Trendwende einen größeren Schlupf verursachen kann.
Eine Trend-Strategie ist in der Regel in den Schaukelstädten zu finden. Diese Strategie hat keine spezifische Einschätzung für die Schaukelstädte.
Der Random RSI kann bei starken Marktschwankungen verfälscht werden und die Qualität der Beurteilung beeinträchtigen.
Die festgelegten Parameter sind möglicherweise nicht für alle Marktbedingungen geeignet und müssen entsprechend der dynamischen Marktentwicklung angepasst werden.
Die Einführung von Volatilitätsindikatoren wie ATR und die Anpassung der EMA-Parameter an die Dynamik der Volatilität, um sie an die unterschiedlichen Marktrhythmen anzupassen.
Erhöhung der Beurteilung von Marktschwankungen, beispielsweise in Verbindung mit der Richtung der Brin-Band-Öffnung, um den häufigen Handel in den Marktschwankungen zu vermeiden.
Die Integration von zusätzlichen Hilfsdaten, wie beispielsweise der Veränderung des Umsatzes, auf der Basis des zufälligen RSI erhöht die Signalsicherheit.
Marktrelativität zu berücksichtigen, verschiedene Verbindungssignale einzuführen und die Risikobereitschaft des Systems zu erhöhen.
Die Strategie nutzt die Vorteile der EMA und des Random RSI, um eine mittelfristige Handelsstrategie zu bilden, die auf Trendverfolgung und Dynamikumkehr basiert. Durch die gleichmäßige Kreuzung des Trends, die Bestätigung der Trendstärke durch den Random-RSI und die Vorwarnumkehr, die Verbesserung der Signalqualität durch die Trendbestätigungsmechanik, sind die drei organisch kombiniert, um einen einfachen und effektiven Rahmen für eine quantitative Handelsstrategie zu bilden. Die Hauptvorteile liegen in der Logik, der Einfachheit, der geringen Anzahl von Parametern, der geringen Schwierigkeit und der großen Reichweite.
/*backtest
start: 2023-03-02 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('[Jacky] Trader XO Macro Trend Scanner', overlay=true)
// Variables
var ok = 0
var countBuy = 0
var countSell = 0
src = input(close, title='OHLC Type')
i_fastEMA = input(12, title='Fast EMA')
i_slowEMA = input(25, title='Slow EMA')
i_defEMA = input(25, title='Consolidated EMA')
// Allow the option to show single or double EMA
i_bothEMAs = input(title='Show Both EMAs', defval=true)
// Define EMAs
v_fastEMA = ta.ema(src, i_fastEMA)
v_slowEMA = ta.ema(src, i_slowEMA)
v_biasEMA = ta.ema(src, i_defEMA)
// Color the EMAs
emaColor = v_fastEMA > v_slowEMA ? color.green : v_fastEMA < v_slowEMA ? color.red : #FF530D
// Plot EMAs
plot(i_bothEMAs ? na : v_biasEMA, color=emaColor, linewidth=3, title='Consolidated EMA')
plot(i_bothEMAs ? v_fastEMA : na, title='Fast EMA', color=emaColor)
plot(i_bothEMAs ? v_slowEMA : na, title='Slow EMA', color=emaColor)
// Colour the bars
buy = v_fastEMA > v_slowEMA
sell = v_fastEMA < v_slowEMA
if buy
countBuy += 1
countBuy
if buy
countSell := 0
countSell
if sell
countSell += 1
countSell
if sell
countBuy := 0
countBuy
buysignal = countBuy < 2 and countBuy > 0 and countSell < 1 and buy and not buy[1]
sellsignal = countSell > 0 and countSell < 2 and countBuy < 1 and sell and not sell[1]
barcolor(buysignal ? color.green : na)
barcolor(sellsignal ? color.red : na)
// Strategy backtest
if (buysignal)
strategy.entry("Buy", strategy.long)
if (sellsignal)
strategy.entry("Sell", strategy.short)
// Plot Bull/Bear
plotshape(buysignal, title='Bull', text='Bull', style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.black, 0), size=size.tiny)
plotshape(sellsignal, title='Bear', text='Bear', style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.black, 0), size=size.tiny)
bull = countBuy > 1
bear = countSell > 1
barcolor(bull ? color.green : na)
barcolor(bear ? color.red : na)
// Set Alerts
alertcondition(ta.crossover(v_fastEMA, v_slowEMA), title='Bullish EMA Cross', message='Bullish EMA crossover')
alertcondition(ta.crossunder(v_fastEMA, v_slowEMA), title='Bearish EMA Cross', message='Bearish EMA Crossover')
// Stoch RSI code
smoothK = input.int(3, 'K', minval=1)
smoothD = input.int(3, 'D', minval=1)
lengthRSI = input.int(14, 'RSI Length', minval=1)
lengthStoch = input.int(14, 'Stochastic Length', minval=1)
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)
bandno0 = input.int(80, minval=1, title='Upper Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno2 = input.int(50, minval=1, title='Middle Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno1 = input.int(20, minval=1, title='Lower Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
// Alerts
crossoverAlertBgColourMidOnOff = input.bool(title='Crossover Alert Background Colour (Middle Level) [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourOBOSOnOff = input.bool(title='Crossover Alert Background Colour (OB/OS Level) [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourGreaterThanOnOff = input.bool(title='Crossover Alert >input [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourLessThanOnOff = input.bool(title='Crossover Alert <input [ON/OFF]', group='Crossover Alerts', defval=false)
maTypeChoice = input.string('EMA', title='MA Type', group='Moving Average', options=['EMA', 'WMA', 'SMA', 'None'])
maSrc = input.source(close, title='MA Source', group='Moving Average')
maLen = input.int(200, minval=1, title='MA Length', group='Moving Average')
maValue = if maTypeChoice == 'EMA'
ta.ema(maSrc, maLen)
else if maTypeChoice == 'WMA'
ta.wma(maSrc, maLen)
else if maTypeChoice == 'SMA'
ta.sma(maSrc, maLen)
else
0
crossupCHECK = maTypeChoice == 'None' or open > maValue and maTypeChoice != 'None'
crossdownCHECK = maTypeChoice == 'None' or open < maValue and maTypeChoice != 'None'
crossupalert = crossupCHECK and ta.crossover(k, d) and (k < bandno2 or d < bandno2)
crossdownalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno2 or d > bandno2)
crossupOSalert = crossupCHECK and ta.crossover(k, d) and (k < bandno1 or d < bandno1)
crossdownOBalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno0 or d > bandno0)
aboveBandalert = ta.crossunder(k, bandno0)
belowBandalert = ta.crossover(k, bandno1)
bgcolor(color=crossupalert and crossoverAlertBgColourMidOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert Background Colour (Middle Level)', transp=70)
bgcolor(color=crossupOSalert and crossoverAlertBgColourOBOSOnOff ? #fbc02d : crossdownOBalert and crossoverAlertBgColourOBOSOnOff ? #000000 : na, title='Crossover Alert Background Colour (OB/OS Level)', transp=70)
bgcolor(color=aboveBandalert and crossoverAlertBgColourGreaterThanOnOff ? #ff0014 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K > Upper level', transp=70)
bgcolor(color=belowBandalert and crossoverAlertBgColourLessThanOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K < Lower level', transp=70)
alertcondition(crossupalert or crossdownalert, title='Stoch RSI Crossover', message='STOCH RSI CROSSOVER')