Strategi Pelacakan Stop Loss Open-High-Low

Penulis:ChaoZhang, Tanggal: 2024-02-18 14:30:08
Tag:

img

Gambaran umum

Strategi ini dirancang berdasarkan data terbuka, tinggi dan rendah dari grafik candlestick untuk mengidentifikasi titik pembalikan tren untuk entri. Setelah entri, garis stop loss akan ditetapkan berdasarkan indikator ATR dan dilacak. Target juga akan dihitung berdasarkan rasio risiko-imbalan. Ketika harga mencapai target stop loss atau profit, order akan dikirim untuk menutup posisi.

Logika Strategi

Sinyal masuk dari strategi ini berasal dari harga terbuka, tinggi dan rendah. Sinyal beli dihasilkan ketika harga pembukaan sama dengan harga rendah candlestick, dan sinyal jual dihasilkan ketika harga pembukaan sama dengan harga tinggi, menunjukkan potensi peluang pembalikan tren.

Setelah masuk, stop loss trailing dinamis dihitung berdasarkan indikator ATR. Long stop loss ditetapkan pada level terendah dari N bar terakhir dikurangi 1 ATR; short stop loss ditetapkan pada level tertinggi dari N bar terbaru ditambah 1 ATR.

Target keuntungan dihitung berdasarkan pengaturan rasio risiko-manfaat. target panjang ditetapkan pada harga masuk ditambah (perbedaan risiko antara harga masuk dan stop loss dikalikan dengan rasio risiko-manfaat); target pendek ditetapkan pada harga masuk dikurangi (perbedaan risiko antara stop loss dan harga masuk dikalikan dengan rasio risiko-manfaat).

Ketika harga mencapai target stop loss atau profit, order akan dikirim ke posisi rata.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Sinyal masuk yang sederhana dan jelas, menghindari beberapa whipsaws.

  2. Dinamis ATR trailing stop kunci dalam keuntungan dan mencegah mengejar tinggi dan rendah.

  3. Pengendalian rasio risiko-balasan menghindari meninggalkan keuntungan di atas meja dan perdagangan yang berlebihan.

  4. Dilakukan pada produk yang berbeda, mudah dioptimalkan.

Analisis Risiko

Ada juga beberapa risiko dari strategi ini:

  1. Sinyal masuk mungkin tertinggal sampai batas tertentu, kehilangan masuk pasar terbaik.

  2. Stop loss terlalu ketat atau terlalu longgar, menyebabkan stop loss yang tidak perlu atau kehilangan keuntungan.

  3. Tidak ada penentuan tren, cenderung terjebak di pasar yang bervariasi.

  4. Tidak bisa menangani posisi overnight.

Arah optimasi adalah:

  1. Sertakan indikator lain untuk bias tren untuk menghindari whipsaws.

  2. Perbaiki parameter ATR atau tambahkan kontrol volatilitas untuk stop loss yang lebih baik.

  3. Tambahkan penyaringan tren untuk mengurangi suara sinyal.

  4. Tambahkan penanganan posisi semalam untuk produk tertentu.

Kesimpulan

Kesimpulannya, ini adalah strategi sederhana dan langsung dengan logika masuk yang jelas, metodologi stop loss yang wajar dan kontrol risiko yang baik. Tetapi ada beberapa keterbatasan seperti bias tren yang tidak cukup, keterlambatan sinyal dll. Cacat ini juga menunjukkan arah untuk optimasi di masa depan. Dengan menggabungkan lebih banyak filter indikator dan modul manajemen risiko, strategi ini dapat ditingkatkan dan dibuat lebih kuat.


/*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 banyak