Renko Yin Yang Quant Trading Strategy

Penulis:ChaoZhang, Tarikh: 2023-09-27 17:11:30
Tag:

Ringkasan

Strategi perdagangan kuant Renko Yin Yang adalah strategi perdagangan jangka pendek berdasarkan hubungan harga-volume intraday. Ia menggunakan maklumat arah yin yang dalam sehari dan menggabungkan isyarat pengesahan jumlah untuk melaksanakan perdagangan jangka pendek berisiko rendah.

Logika Strategi

Strategi ini mengira harga buka, tutup, tinggi dan rendah setiap hari dagangan, dan menghasilkan batu bata Renko bersama dengan penunjuk ATR. Isyarat dagangan dihasilkan apabila batu bata yin yang terbalik.

Secara khusus, strategi ini pertama kali mengira harga buka o2 dan harga tutup c2 bata Renko. Jika o2 < c2, ia menunjukkan garis yang, jika o2 > c2, ia menunjukkan garis yin. Apabila garis yang bertukar ke garis yin, isyarat jual dihasilkan. Apabila garis yin bertukar ke garis yang, isyarat beli dihasilkan.

Untuk menapis pecah palsu, strategi ini juga mengira bilangan tempoh yang terakhir yang dan garis yin. Jika garis yang mempunyai lebih banyak tempoh, isyarat lebih boleh dipercayai.

Kelebihan

  1. Batang Renko menapis bunyi pasaran dan membuat isyarat perdagangan lebih jelas.

  2. Menggabungkan hubungan harga-volume mengelakkan risiko pecah palsu.

  3. Model DAPM adalah mudah dan berkesan untuk perdagangan intraday.

  4. Parameter ATR yang boleh disesuaikan menyesuaikan kekerapan perdagangan.

  5. Stop loss yang boleh disesuaikan meningkatkan pengurusan risiko.

Risiko

  1. Masih ada risiko pelarian palsu yang tidak jelas.

  2. Tetapan parameter Renko yang tidak betul boleh terlepas trend atau meningkatkan kekerapan perdagangan.

  3. Stop loss yang terlalu ketat mungkin akan dihentikan oleh pullback kecil.

Pengoptimuman

  1. Pertimbangkan untuk menggabungkan penunjuk teknikal lain untuk menapis isyarat.

  2. Pertimbangkan untuk menambah ciri stop loss.

  3. Mengoptimumkan parameter untuk aset yang berbeza.

  4. Pertimbangkan untuk menggabungkan kerangka masa yang berbeza untuk perdagangan pelbagai kerangka masa.

Kesimpulan

Kesimpulannya, ini adalah strategi perdagangan jangka pendek yang sangat praktikal. Ia menggunakan hubungan harga-volume untuk menapis dengan cekap dan menangkap titik perubahan utama. Penyesuaian parameter yang betul, pengurusan risiko dan strategi stop loss dapat meningkatkan kestabilan dan keuntungan. Dengan pengoptimuman dan pengujian berterusan, strategi ini boleh menjadi alat yang kuat untuk peniaga intraday.


/*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')

Lebih lanjut