
Strategi ini adalah berdasarkan pada K-Line dan merancang Entries untuk mencari titik balik trend. Entries kemudian akan menetapkan garis hentian berdasarkan ATR dan menjejaki hentian. Strategi ini juga akan mengira kedudukan sasaran berdasarkan perkadaran risiko-kebalasan dan menutup kedudukan selepas mencapai sasaran atau dihentikan.
Isyarat Entries dalam strategi ini berasal dari titik tinggi atau rendah. Isyarat beli dihasilkan apabila harga pembukaan K adalah sama dengan harga terendah, dan isyarat jual dihasilkan apabila harga pembukaan sama dengan harga tertinggi, yang menunjukkan kemungkinan terdapat peluang untuk membalikkan trend.
Entries akan dihitung secara dinamik mengikut indikator ATR untuk menjejaki hentian. Untuk membeli, garis hentian akan dikurangkan sebanyak 1 kali ATR untuk harga terendah dalam garis N-root K terkini; untuk menjual, garis hentian akan ditambah sebanyak 1 kali ATR untuk harga tertinggi dalam garis N-root K terkini.
Keuntungan sasaran dikira mengikut nisbah risiko-kebalasan yang ditetapkan. Harga sasaran yang dibeli adalah harga entri ditambah ((perkalian risiko-kebalasan antara harga entri dan harga hentian); harga sasaran yang dijual adalah harga entri dikurangkan ((perkalian risiko-kebalasan antara harga hentian dan harga entri).
Apabila harga menyentuh harga henti rugi atau harga sasaran, keluarkan arahan posisi kosong.
Strategi ini mempunyai kelebihan berikut:
Isyarat Entries mudah dan jelas, mudah difahami, mengelakkan gegaran berulang.
Dinamika ATR Stop Loss, memaksimumkan keuntungan, mengelakkan mengejar tinggi dan membunuh rendah.
Pengendalian kadar pulangan risiko, mengelakkan pembiayaan keuntungan dan operasi garis pendek.
Ia boleh digunakan untuk pelbagai jenis dan mudah dioptimumkan.
Strategi ini juga mempunyai risiko:
Isyarat Entries mungkin ada tahap kelewatan, terlepas kedudukan terbaik.
Harga stop loss yang terlalu rendah atau terlalu rendah boleh menyebabkan kerugian atau kerugian.
Modul penilaian tanpa trend, mudah disekat dalam keadaan gegaran.
Tidak boleh menguruskan kerja-kerja yang dibuat pada waktu malam.
Arah optimasi yang sesuai:
Berkongsi dengan petunjuk lain untuk menilai trend, mengelakkan pengorbanan yang tidak menentu.
Menyesuaikan parameter ATR atau menambah kawalan kadar turun naik untuk mengoptimumkan titik hentian.
Tambah modul penilaian atau penapisan trend, mengurangkan kesilapan pada isyarat entri.
Menambah modul pengendalian malam untuk mengendali gudang malam untuk varieti tertentu.
Secara keseluruhan, strategi ini lebih mudah dan langsung, isyarat Entries jelas, pemikiran stop loss masuk akal, dan kawalan risiko berada di tempat. Tetapi ada juga batasan tertentu, seperti penilaian tren yang tidak mencukupi, isyarat yang terlewat. Masalah-masalah ini juga memberikan arah untuk pengoptimuman masa depan. Dengan menggabungkan lebih banyak penilaian indikator dan modul kawalan risiko, strategi ini dapat meningkatkan keberkesanan dan menjadi lebih umum.
/*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.")