Renko Yin Yang Quant Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-09-27 17:11:30
Tags:

Übersicht

Die Renko Yin Yang Quant Trading Strategie ist eine kurzfristige Handelsstrategie, die auf der Intraday-Preis-Volumen-Beziehung basiert.

Strategie Logik

Die Strategie berechnet die offenen, schließenden, hohen und niedrigen Preise jedes Handelstages und erzeugt Renko-Steine zusammen mit dem ATR-Indikator.

Insbesondere berechnet die Strategie zunächst den Eröffnungspreis o2 und den Schlusskurs c2 der Renko-Steine. Wenn o2c2 ist, zeigt sie eine Yin-Linie an. Wenn die Yang-Linie zu der Yin-Linie wechselt, wird ein Verkaufssignal erzeugt. Wenn die Yin-Linie zu der Yang-Linie wechselt, wird ein Kaufsignal erzeugt.

Um falsche Ausbrüche zu filtern, zählt die Strategie auch die Anzahl der Perioden der letzten Yang- und Yin-Linie. Wenn die Yang-Linie mehr Perioden hat, ist das Signal zuverlässiger.

Vorteile

  1. Renko-Steine filtern Marktlärm und machen Handelssignale klarer.

  2. Die Kombination der Preis-Volumen-Beziehung vermeidet das Risiko eines falschen Ausbruchs.

  3. Das DAPM-Modell ist für den Intraday-Handel einfach und effektiv.

  4. Anpassungsfähige ATR-Parameter passen die Handelsfrequenz an.

  5. Ein anpassbarer Stop-Loss verbessert das Risikomanagement.

Risiken

  1. Es besteht immer noch die Gefahr eines unklaren falschen Ausbruchs.

  2. Eine unsachgemäße Einstellung der Renko-Parameter kann Trends verpassen oder die Handelsfrequenz erhöhen.

  3. Ein zu enger Stop-Loss kann durch einen geringfügigen Rückzug gestoppt werden.

Optimierung

  1. Es sollte in Betracht gezogen werden, andere technische Indikatoren zu kombinieren, um Signale zu filtern.

  2. Überlegen Sie, ob Sie eine Stop-Loss-Funktion hinzufügen.

  3. Optimierung der Parameter für verschiedene Vermögenswerte.

  4. Es sollte in Betracht gezogen werden, verschiedene Zeitrahmen für den Handel mit mehreren Zeitrahmen zu kombinieren.

Schlussfolgerung

Zusammenfassend ist dies eine sehr praktische kurzfristige Handelsstrategie. Sie nutzt die Preis-Volumen-Beziehung, um wichtige Wendepunkte effizient zu filtern und zu erfassen. Die richtige Parameter-Tuning, das Risikomanagement und die Stop-Loss-Strategie können ihre Stabilität und Rentabilität erheblich verbessern. Mit kontinuierlicher Optimierung und Testung kann diese Strategie zu einem leistungsstarken Werkzeug für Intraday-Händler werden.


/*backtest
start: 2022-09-26 00:00:00
end: 2023-09-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License https://creativecommons.org/licenses/by-sa/4.0/
// © dman103
strategy(title="Renko Strategy V2", shorttitle="Renko Strategy V2", overlay=true,precision=3, commission_value=0.025, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000)
// Version 2.0 of my previous renko strategy using Renko calculations, this time without Tilson T3 and without using security with Renko to remove repaints!
// Seems to work nicely on cryptocurrencies on higher time frames.

//== Description ==
// Strategy gets Renko values and uses renko close and open to trigger signals.
// Base on these results the strategy triggers a long and short orders, where green is uptrending and red is downtrending.
// This Renko version is based on ATR, you can Set ATR (in settings) to adjust it.

// == Notes ==
// Supports alerts.
// Supports backtesting time ranges.
// Shorts are disabled by default (can be enabled in settings).
// Link to previous Renko strategy V1: https://www.tradingview.com/script/KeWBWLGT-Renko-Strategy-T3-V1/
//
// Stay tuned for version V3 in the future as i have an in progress prototype, Follow to get updated: https://www.tradingview.com/u/dman103/#published-scripts

// === INPUT BACKTEST RANGE ===
useDate = input(true,     title='---------------- Trade Range ----------------', type=input.bool)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2017, title = "From Year", minval = 2000)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2099, title = "To Year", minval = 2010)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create 

settings = input(true,     title='---------------- Settings ----------------', type=input.bool)

allow_short = input(false,title="Allow Short")
atr_len = input(10,"ATR Length")

atr = atr(atr_len)
// Thanks to renko snippet calculations from @RafaelZioni  https://www.tradingview.com/script/2vKhpfVH-Renko-XZ/
Renko1() =>
    p1 = 0.0
    p1 := close > nz(p1[1]) + atr ? nz(p1[1]) + atr : close < nz(p1[1]) - atr ? nz(p1[1]) - atr : nz(p1[1])
    p1
Renko2() =>
    p2 = 0.0
    Br_1 = Renko1()
    p2 := Renko1() != Renko1()[1] ? Br_1[1] : nz(p2[1])
    p2

Renko3() =>
    p3 = 0.0
    p3 := open > nz(p3[1]) + atr ? nz(p3[1]) + atr : open < nz(p3[1]) - atr ? nz(p3[1]) - atr : nz(p3[1])
    p3

Renko4() =>
    open_v = 0.0
    Br_2 = Renko3()
    open_v := Renko3() != Renko3()[1] ? Br_2[1] : nz(open_v[1])
    open_v

o2 = Renko4()
c2 = Renko1()
l2 =low
h2 = high

//=== Plotting ===

crossPlot= 0.0
if (o2 < c2)
    crossPlot :=o2
else 
    crossPlot := o2

// Used to make sure that even if o2 and c2 are equal, the result (short or long) will be based on previous trend.
bars_since_up=barssince(o2 < c2)
bars_since_down=barssince(o2 > c2)
go_long= (bars_since_up<bars_since_down) and  o2<c2
go_short = (bars_since_up>bars_since_down) and o2>c2
plotColor = go_long and  o2<c2 ? color.green : go_short and o2>c2?  color.red : color.white 
plot(crossPlot, color = plotColor, style = plot.style_circles, linewidth = 2,join=true)
changeCond = plotColor != plotColor[1]

//=== Buy/Sell ===
closeStatus =  strategy.openprofit > 0 ? "win" : "lose"
long_entry = plotColor == color.green and window()  and changeCond
long_exit_entry = plotColor == color.red //or (allow_alternative_sl and close < low_result  )
short_entry = plotColor == color.red  and window() and changeCond
short_exit_entry = plotColor == color.green   // or (allow_alternative_sl and close > high_result )

strategy.entry("long", true, when = long_entry)
strategy.close("long",when=long_exit_entry,comment=closeStatus)

if (allow_short)
    strategy.entry("short",false, when = short_entry)
strategy.close("short",when=short_exit_entry,comment=closeStatus)
//=== Alerts ===
alertcondition(go_long and changeCond , title='Renko Buy Signal', message='Renko Revered to Buy Signal')
alertcondition(go_short and changeCond , title='Renko Sell Signal', message='Renko Revered to Sell Signal')

Mehr