Open High Close Low breakout trading strategy adalah strategi trend-following. Ia mengenal pasti arah trend jangka pendek dengan memeriksa hubungan antara harga buka dan tutup pada carta lilin. Apabila trend bermula, ia memasuki kedudukan panjang atau pendek untuk menangkap momentum dengan cepat.
Logik teras adalah untuk memeriksa sama ada harga terbuka sama dengan harga terendah atau tertinggi lilin. Isyarat panjang dicetuskan apabila harga terbuka sama dengan rendah. Isyarat pendek dicetuskan apabila harga terbuka sama dengan tinggi. Ini bertujuan untuk menangkap pecah yang menunjukkan trend jangka pendek.
Apabila isyarat dicetuskan, kedudukan saiz tetap akan dibuka dengan serta-merta. Stop loss ditetapkan berdasarkan penunjuk ATR untuk mengikuti turun naik pasaran. Tahap mengambil keuntungan adalah kelipatan RR tetap jarak stop loss dari harga kemasukan. Apabila harga mencapai stop loss atau mengambil keuntungan, kedudukan akan ditutup dengan sewajarnya.
Strategi ini juga meratakan semua kedudukan pada masa pemotongan harian yang ditakrifkan oleh pengguna, seperti 30 minit sebelum pasaran AS ditutup.
Kelebihan utama ialah:
Menggunakan harga buka/tutup untuk mengenal pasti isyarat pecah dengan cepat.
Isyarat masuk yang jelas yang mudah dilaksanakan.
Hentikan kerugian tepat pada masanya dan ambil keuntungan untuk mengunci keuntungan dan mengehadkan kerugian.
Kedudukan rata pada sempadan harian untuk mengelakkan risiko jurang semalaman.
Market-neutral, terpakai untuk forex, saham, crypto dan lain-lain
Beberapa risiko yang perlu dipertimbangkan:
Stop loss yang kerap dengan ATR dalam pasaran yang bergelora.
Overfit untuk instrumen tertentu dan sesi tanpa penapis tambahan.
Tahap keuntungan tetap mungkin kurang dalam trend yang kuat.
Masa yang salah pada kedudukan rata boleh terlepas trend atau menyebabkan kerugian yang tidak perlu.
Beberapa cara untuk mengoptimumkannya lebih lanjut:
Bereksperimen dengan pelbagai teknik stop loss untuk keadaan pasaran yang berbeza.
Tambah penapis menggunakan penunjuk momentum dll untuk mengelakkan isyarat palsu.
Sesuaikan tahap keuntungan secara dinamik berdasarkan turun naik pasaran.
Mengoptimumkan masa penutupan harian untuk pelbagai instrumen dan sesi perdagangan.
Strategi penembusan buka tinggi tutup rendah menawarkan cara mudah untuk memajukan perdagangan. Peraturan kemasukan dan keluar yang jelas memudahkan pelaksanaan dan pengurusannya. Tetapi pengoptimuman lanjut pada parameter seperti stop loss, mengambil keuntungan, penapis akan meningkatkan ketahanan di lebih banyak keadaan pasaran.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // Open-High-Low strategy strategy('Strategy: OLH', shorttitle="OLH", overlay=true) // Inputs slAtrLen = input.int(defval=14, title="ATR Period for placing SL", group="StopLoss settings") showSLLines = input.bool(defval=false, title="Show SL lines in chart", tooltip="Show SL lines also as dotted lines in chart. Note: chart may look untidy.", group="Stolploss settings") // Trade related rrRatio = input.float(title='Risk:Reward', step=0.1, defval=2.0, group="Trade settings") endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings") mktAlwaysOn = input.bool(defval=true, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked.", group="Trade settings") lotSize = input.int(title='Lot Size', step=1, defval=1, group="Trade settings") // Utils green(open, close) => close > open ? true : false red(open, close) => close < open ? true : false body(open, close) => math.abs(open - close) lowerwick = green(open, close) ? open - low : close - low upperwick = green(open, close) ? high - close : high - open crange = high - low crangep = high[1] - low[1] // previous candle's candle-range bullish = close > open ? true : false bearish = close < open ? true : false // Trade signals longCond = barstate.isconfirmed and (open == low) shortCond = barstate.isconfirmed and (open == high) // For SL calculation atr = ta.atr(slAtrLen) highestHigh = ta.highest(high, 7) lowestLow = ta.lowest(low, 7) longStop = showSLLines ? lowestLow - (atr * 1) : na shortStop = showSLLines ? highestHigh + (atr * 1) : na plot(longStop, title="Buy SL", color=color.green, style=plot.style_cross) plot(shortStop, title="Sell SL", color=color.red, style=plot.style_cross) // Trade execute h = hour(time('1'), syminfo.timezone) m = minute(time('1'), syminfo.timezone) hourVal = h * 100 + m totalTrades = strategy.opentrades + strategy.closedtrades if (mktAlwaysOn or (hourVal < endOfDay)) // Entry var float sl = na var float target = na if (longCond) strategy.entry("enter long", strategy.long, lotSize, limit=na, stop=na, comment="Enter Long") sl := longStop target := close + ((close - longStop) * rrRatio) alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar) if (shortCond) strategy.entry("enter short", strategy.short, lotSize, limit=na, stop=na, comment="Enter Short") sl := shortStop target := close - ((shortStop - close) * rrRatio) alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar) // Exit: target or SL if ((close >= target) or (close <= sl)) strategy.close("enter long", comment=close < sl ? "Long SL hit" : "Long target hit") if ((close <= target) or (close >= sl)) strategy.close("enter short", comment=close > sl ? "Short SL hit" : "Short target hit") else if (not mktAlwaysOn) // Close all open position at the end if Day strategy.close_all(comment = "Close all entries at end of day.")