Strategi Perdagangan Penembusan Terbuka Tinggi Tutup Rendah

Penulis:ChaoZhang, Tarikh: 2024-02-02 12:03:45
Tag:

img

Ringkasan

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.

Logika Strategi

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.

Analisis Kelebihan

Kelebihan utama ialah:

  1. Menggunakan harga buka/tutup untuk mengenal pasti isyarat pecah dengan cepat.

  2. Isyarat masuk yang jelas yang mudah dilaksanakan.

  3. Hentikan kerugian tepat pada masanya dan ambil keuntungan untuk mengunci keuntungan dan mengehadkan kerugian.

  4. Kedudukan rata pada sempadan harian untuk mengelakkan risiko jurang semalaman.

  5. Market-neutral, terpakai untuk forex, saham, crypto dan lain-lain

Analisis Risiko

Beberapa risiko yang perlu dipertimbangkan:

  1. Stop loss yang kerap dengan ATR dalam pasaran yang bergelora.

  2. Overfit untuk instrumen tertentu dan sesi tanpa penapis tambahan.

  3. Tahap keuntungan tetap mungkin kurang dalam trend yang kuat.

  4. Masa yang salah pada kedudukan rata boleh terlepas trend atau menyebabkan kerugian yang tidak perlu.

Kawasan Peningkatan

Beberapa cara untuk mengoptimumkannya lebih lanjut:

  1. Bereksperimen dengan pelbagai teknik stop loss untuk keadaan pasaran yang berbeza.

  2. Tambah penapis menggunakan penunjuk momentum dll untuk mengelakkan isyarat palsu.

  3. Sesuaikan tahap keuntungan secara dinamik berdasarkan turun naik pasaran.

  4. Mengoptimumkan masa penutupan harian untuk pelbagai instrumen dan sesi perdagangan.

Kesimpulan

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.")



Lebih lanjut