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.
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.
Keuntungan dari strategi ini meliputi:
Sinyal masuk yang sederhana dan jelas, menghindari beberapa whipsaws.
Dinamis ATR trailing stop kunci dalam keuntungan dan mencegah mengejar tinggi dan rendah.
Pengendalian rasio risiko-balasan menghindari meninggalkan keuntungan di atas meja dan perdagangan yang berlebihan.
Dilakukan pada produk yang berbeda, mudah dioptimalkan.
Ada juga beberapa risiko dari strategi ini:
Sinyal masuk mungkin tertinggal sampai batas tertentu, kehilangan masuk pasar terbaik.
Stop loss terlalu ketat atau terlalu longgar, menyebabkan stop loss yang tidak perlu atau kehilangan keuntungan.
Tidak ada penentuan tren, cenderung terjebak di pasar yang bervariasi.
Tidak bisa menangani posisi overnight.
Arah optimasi adalah:
Sertakan indikator lain untuk bias tren untuk menghindari whipsaws.
Perbaiki parameter ATR atau tambahkan kontrol volatilitas untuk stop loss yang lebih baik.
Tambahkan penyaringan tren untuk mengurangi suara sinyal.
Tambahkan penanganan posisi semalam untuk produk tertentu.
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.")