
Strategi penarikan rendah dan tinggi adalah strategi pelacakan tren yang menggunakan harga saham untuk menentukan apakah harga telah melampaui titik tinggi dan rendah dalam sejarah saham tersebut. Dengan menghitung harga tertinggi dan terendah dalam periode tertentu, ini menghasilkan sinyal beli ketika harga periode saat ini melebihi harga tertinggi dalam periode tertentu terakhir. Ketika harga turun dari harga terendah dalam periode tertentu terakhir, ini menghasilkan penjualan.
Logika inti dari strategi ini adalah menghitung harga tertinggi dan terendah dalam periode tertentu (dengan 50 garis K default). Untuk menghitung harga tertinggi dan terendah, Anda dapat memilih untuk menggunakan harga closeout atau harga tertinggi dan terendah (dengan harga tertinggi dan terendah default). Kemudian, pertimbangkan apakah harga closeout atau harga tertinggi pada garis K saat ini melebihi harga tertinggi dalam periode tertentu, dan jika demikian, dan jarak antara harga tertinggi dan yang terendah dalam periode tertentu (dengan 30 garis K default).
Setelah menghasilkan sinyal beli, strategi akan membeli pada harga tersebut dan mengatur harga stop loss dan stop loss. Ketika harga menyentuh harga stop loss, strategi akan berhenti kehilangan dan keluar; Ketika harga menyentuh harga stop loss, strategi akan berhenti dan keluar. Logika sinyal jual juga serupa.
Strategi ini memiliki beberapa keuntungan:
Strategi ini juga memiliki beberapa risiko:
Untuk mengendalikan risiko ini, ada beberapa cara untuk mengoptimalkannya:
Strategi ini dapat dioptimalkan dalam beberapa hal:
Optimalisasi parameter. Parameter optimal dapat ditemukan dengan pengujian kombinasi parameter yang lebih sistematis.
Dalam kombinasi dengan indikator lain, sinyal penyaringan dapat dibuat. Misalnya, sinyal pembelian dapat dibuat dalam kombinasi dengan indikator Moving Average, hanya jika harga melampaui harga tertinggi dan melewati Moving Average jangka panjang di atas Moving Average jangka pendek.
Pertimbangkan frekuensi fluktuasi harga saham. Sebagai contoh, dapat digabungkan dengan indikator ATR, ketika fluktuasi harga saham meningkat, lebar yang tepat untuk melonggarkan pecah.
Membedakan pasar tren dan pasar goyah. Dalam fase yang jelas tren, parameter yang tepat untuk mengendurkan agar dapat mengikuti tren; Dalam pasar goyah, parameter yang tepat untuk memperketat.
Meningkatkan mekanisme manajemen posisi. Misalnya, berhenti membuka posisi ketika kerugian mencapai proporsi tertentu.
Secara keseluruhan, strategi penarikan rendah dan tinggi adalah strategi pelacakan tren yang sederhana dan praktis. Ini menentukan sinyal perdagangan dengan menilai apakah harga telah melampaui harga tertinggi dan terendah dalam periode tertentu. Strategi ini memiliki keunggulan seperti kesederhanaan, pelacakan tren, dan pengoptimalan parameter, tetapi ada juga risiko yang dapat menghasilkan perdagangan berlebihan dan tidak dapat menangani pasar yang bergolak.
/*backtest
start: 2023-11-25 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("High/Low Breaker Backtest 1.0", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, max_bars_back=700)
// Strategy Settings
takeProfitPercentageLong = input(.1, title='Take Profit Percentage Long', type=float)/100
stopLossPercentageLong = input(0.15, title='Stop Loss Percentage Long', type=float)/100
takeProfitPercentageShort = input(.1, title='Take Profit Percentage Short', type=float)/100
stopLossPercentageShort = input(0.15, title='Stop Loss Percentage Short', type=float)/100
candlesBack = input(title="Number of candles back", defval=50)
useHighAndLows = input(true, title="Use high and lows (uncheck to use close)", defval=true)
lastBarsBackMinimum = input(title="Number of candles back to ignore for last high/low", defval=30)
showHighsAndLows = input(true, title="Show high/low lines", defval=true)
getIndexOfLowestInSeries(series, period) =>
index = 0
current = series
for i = 1 to period
if series[i] <= current
index := i
current := series[i]
index
getIndexOfHighestInSeries(series, period) =>
index = 0
current = series
for i = 1 to period
if series[i] >= current
index := i
current := series[i]
index
indexOfHighestInRange = getIndexOfHighestInSeries(useHighAndLows ? high : close, candlesBack)
indexOfLowestInRange = getIndexOfLowestInSeries(useHighAndLows ? low : close, candlesBack)
max = useHighAndLows ? high[indexOfHighestInRange] : close[indexOfHighestInRange]
min = useHighAndLows ? low[indexOfLowestInRange] : close[indexOfLowestInRange]
barsSinceLastHigh = indexOfHighestInRange
barsSinceLastLow = indexOfLowestInRange
isNewHigh = (useHighAndLows ? high > max[1] : close > max[1]) and (barsSinceLastHigh[1] + 1 > lastBarsBackMinimum)
isNewLow = (useHighAndLows ? low < min[1] : close < min[1]) and (barsSinceLastLow[1] + 1 > lastBarsBackMinimum)
alertcondition(condition=isNewHigh, title="New High", message="Last High Broken")
alertcondition(condition=isNewLow, title="New Low", message="Last Low Broken")
if high > max
max := high
barsSinceLastHigh := 0
if low < min
min := low
barsSinceLastLow := 0
plot( showHighsAndLows ? max : na, color=red, style=line, title="High", linewidth=3)
plot( showHighsAndLows ? min : na, color=green, style=line, title="Low", linewidth=3)
// Strategy Entry/Exit Logic
goLong =isNewHigh
longStopLevel = strategy.position_avg_price * (1 - stopLossPercentageLong)
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentageLong)
goShort = isNewLow
shortStopLevel = strategy.position_avg_price * (1 + stopLossPercentageShort)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentageShort)
strategy.entry("Long", strategy.long, when=goLong)
strategy.exit("Long Exit", "Long", stop=longStopLevel, limit=longTakeProfitLevel)
strategy.entry("Short", strategy.short, when=goShort)
strategy.exit("Short Exit", "Short", stop=shortStopLevel, limit=shortTakeProfitLevel)
plot(goShort ? shortStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goShort ? shortTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)
plot(goLong ? longStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goLong ? longTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)