
Die Hauptidee dieser Strategie besteht darin, mehrere Durchschnittslinien mit Ratio OCHL Averager-Indikatoren aus verschiedenen Perioden zu erstellen, um ein Kauf- und Verkaufssignal basierend auf der Kreuzung der Durchschnittslinie zu erzeugen. Es ist in der Lage, die Preisentwicklung dynamisch zu erfassen und eignet sich für mittelfristige Geschäfte.
Die Strategie verwendet zwei verschiedene Perioden des Ratio OCHL Averager-Indikators, die als Schnell- und Langzeitlinie dienen. Die Berechnungsformel für den Ratio OCHL Averager-Indikator lautet wie folgt:
b = abs(close-open)/(high - low)
c = min(max(b, 0), 1)
Ratio OCHL Averager = c*close + (1-c)*前一日Ratio OCHL Averager
Der Ratio OCHL Averager ist ein Indikator, der die vier Preise für den Eröffnungspreis, den Abschlusspreis, den Höchstpreis und den niedrigsten Preis zusammenfasst, um eine Mittellinie zu bilden.
Die Strategie setzt eine kurze und eine lange Kurz- und Langzeitschleife ein. Die Kurz- und Langzeitschleife erzeugen ein Kaufsignal, wenn die Kurz- und Langzeitschleife über die Kurz- und Langzeitschleife gehen.
Der Ratio OCHL Averager ist in der Lage, Preisdaten zu glätten und Marktgeräusche zu filtern, um Handelssignale zuverlässiger zu machen.
Durch die Kombination verschiedener Perioden kann man die Richtung des Trends besser bestimmen und den Beginn eines neuen Trends bestimmen.
Durch die Anpassung der Periodenparameter der Schnell- und der Langzeitlinien kann sie an unterschiedliche Marktbedingungen angepasst werden.
Die Strategie ist einfach, intuitiv und leicht zu verstehen.
Es gibt eine flexible Einstellung der Stop Loss Stop-Standards, um Risiken zu kontrollieren.
Die Methode der Gleichschnitt-Kreuzung kann mehr Falschsignale erzeugen und muss in Kombination mit anderen technischen Kennzahlen gefiltert werden.
Es ist notwendig, die Periodiparameter für die schnelle und die langsame Linie zu wählen. Die falsche Wahl der Parameter kann die Wirksamkeit der Strategie beeinträchtigen.
Die Doppel-Even-Linien-Kreuz-Strategie gehört zur Trend-Tracking-Strategie und ist nicht für einen Erschütterungsfall geeignet, sondern sollte für einen Trend verwendet werden.
Die Stop-Loss-Punkte müssen entsprechend angepasst werden, um das Risiko von Verlusten zu verringern, und die Stop-Loss-Punkte müssen vernünftig eingestellt werden.
Eine Signalfilterung kann in Verbindung mit Dynamikindikatoren oder ähnlichem in Betracht gezogen werden, um die Signalqualität zu verbessern.
Verschiedene Kombinationen von schnellen und langsamen Periodenparametern können getestet werden, um die optimale Parameter zu finden.
Die Optimierung der Stop-Loss-Stopp-Punkte basierend auf den Rückmeldungen kann die optimale Einstellung finden.
Dynamische Anpassungsparameter können in bestimmten Marktumgebungen berücksichtigt werden, z. B. die Zyklusparameter, die bei einer großen Börsenbewegung vergrößert werden.
Die Strategie ist übersichtlich und lässt sich durch schnelle, langsame und mittellinge Kreuzung der Trendrichtung bestimmen. Sie ist eine dynamische Tracking-Strategie, die für den mittelschnellen und kurzfristigen Handel geeignet ist. Die Optimierungsmöglichkeiten sind groß und die Effektivität der Strategie kann durch Parameteranpassung, Signalfilterung usw. weiter verbessert werden.
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="[XC] Adaptive Strategy V3 - Ratio OCHL Averager no repaint",shorttitle="R_OHCL", overlay=true, currency=currency.EUR,initial_capital=10000,
default_qty_value=100, default_qty_type=strategy.percent_of_equity , calc_on_every_tick=false, calc_on_order_fills=true)
// ╔═ SETTINGS ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░
strategy_1 = input ( defval=true , type=input.bool , title="STRATEGY 1? —>" )
Recursive = input(false)
RES201 = "Min",RES202= "D",RES203 = "W",RES204 = "M"
//++ Resolution 1 ++
inp_resolution1 = input(600, minval=1, title="Resolution Line 1")
restype1 = input ( defval="Min" , type=input.string , title= "Resolution Line 1" , options=[ "Min","D","W","M"])
multiplier1 = restype1 == "Min" ? "" : restype1 == "D" ? "D" : restype1 == "W" ? "W" : "M"
resolution1 = tostring(inp_resolution1)+ multiplier1
//++ Resolution 2 ++
inp_resolution2 = input(1440, minval=1, title="Resolution Line 2")
restype2 = input ( defval="Min" , type=input.string , title= "Resolution Line 2" , options=["Min","D","W","M"])
multiplier2 = restype2 == "Min" ? "" : restype2 == "D" ? "D" : restype2 == "W" ? "W" : "M"
resolution2 = tostring(inp_resolution2)+ multiplier2
StopLoss = input(defval = 500 , title = "Stop Loss", minval = 0)
TakeProfit = input(defval = 2500 , title = "Take Profit", minval = 0)
// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit = TakeProfit >= 1 ? TakeProfit : na
useStopLoss = StopLoss >= 1 ? StopLoss : na
// ╔═ BACKTEST RANGE ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░
line_breakBTR = input ( defval = true , type=input.bool , title="BACKTEST RANGE —" )
FromYear = input ( defval = 2019, title = "From Year", minval = 2017)
FromMonth = input ( defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input ( defval = 2, title = "From Day", minval = 1, maxval = 31)
//FromHour = input ( defval = 1, title = "From Hour", minval = 1, maxval = 24)
ToYear = input ( defval = 9999, title = "To Year", minval = 2017)
//ToHour = input ( defval = 0, title = "From Hour", minval = 0, maxval = 24)
ToMonth = input ( defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input ( defval = 1, title = "To Day", minval = 1, maxval = 31)
// === FUNCTION EXAMPLE ===
start = timestamp(syminfo.timezone, FromYear, FromMonth, FromDay, 0, 00) // backtest start window
finish = timestamp(syminfo.timezone, ToYear , ToMonth , ToDay , 0, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
// ╔═ INDICATOR ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░
// "Ratio OCHL Averager" -> alexgrover / tradingview.com/script/RGAtOI6h-Ratio-OCHL-Averager-An-Alternative-to-VWAP/
rochla( res,Recursive)=>
//Recursive = false
H = security(syminfo.tickerid,res,high[1],gaps = barmerge.gaps_off, lookahead = barmerge.lookahead_on)
L = security(syminfo.tickerid,res,low[1] ,gaps = barmerge.gaps_off, lookahead = barmerge.lookahead_on)
d = 0.
//----
a = Recursive ? nz(d[1],open) : open
b = abs(close-a)/(H - L)
c = b > 1 ? 1 : b
d := c*close+(1-c)*nz(d[1],close)
strat1_line1=rochla(resolution1,Recursive)
strat1_line2=rochla(resolution2,Recursive)
plot(strat1_line1, title="Ratio OCHL Averager 1", color=#DAA520,linewidth=2,transp=0)
plot(strat1_line2, title="Ratio OCHL Averager 2", color=#B22222,linewidth=2,transp=0)
// ╔═ STRATEGY 1 ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░
trading_strat1_line1 = strategy_1 == 1 ? strat1_line1 : na
trading_strat1_line2 = strategy_1 == 1 ? strat1_line2 : na
longCross = crossunder (trading_strat1_line2, trading_strat1_line1) ? true : false
shortCross = crossover (trading_strat1_line2, trading_strat1_line1) ? true : false
plot( longCross ? trading_strat1_line1 : na , title = "Long" , color=color.aqua, style=plot.style_circles, linewidth=5, offset= 0)
plot( shortCross ? trading_strat1_line2 : na , title = "Short" , color=color.red , style=plot.style_circles, linewidth=5, offset= 0)
// ╔═ Backtest 1 ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░
strategy.exit("close",loss = useStopLoss, profit = useTakeProfit)
if longCross and window() and strategy_1 == 1
strategy.entry("Go Long", strategy.long)
if shortCross and window() and strategy_1 == 1
strategy.entry("Go Short", strategy.short)
//end