
Strategi penarikan balik rendah dan tinggi adalah strategi pemantauan trend yang menggunakan tinggi dan rendah sejarah saham untuk menentukan sama ada harga telah menembusi tinggi dan rendah. Ia menghasilkan isyarat beli dengan mengira harga tertinggi dan terendah dalam tempoh tertentu, apabila harga dalam tempoh semasa melebihi harga tertinggi dalam tempoh tertentu yang terakhir; apabila harga jatuh di bawah harga terendah dalam tempoh tertentu yang terakhir, menghasilkan menjual.
Logik teras strategi ini adalah untuk mengira harga tertinggi dan terendah dalam tempoh tertentu (dalam 50 baris K default). Untuk mengira harga tertinggi dan terendah, anda boleh memilih untuk menggunakan harga penutupan atau harga tertinggi dan terendah (dalam 50 baris K default). Kemudian, anda akan menentukan sama ada harga penutupan atau harga tertinggi pada baris K semasa melebihi harga tertinggi dalam tempoh tertentu.
Apabila menghasilkan isyarat beli, strategi akan membeli pada harga itu dan menetapkan harga hentikan dan hentikan. Apabila harga menyentuh harga hentikan, strategi akan berhenti dan keluar; apabila harga menyentuh harga hentikan, strategi akan berhenti dan keluar. Logik isyarat jual juga serupa.
Strategi ini mempunyai beberapa kelebihan:
Strategi ini mempunyai beberapa risiko:
Untuk mengawal risiko-risiko ini, anda boleh mengoptimumkan dalam beberapa aspek:
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Pengoptimuman parameter. Anda boleh mencari parameter yang optimum dengan menguji kombinasi parameter yang berbeza dengan lebih sistematik.
Sebagai contoh, ia boleh digabungkan dengan penunjuk purata bergerak, hanya apabila harga menembusi harga tertinggi, dan apabila rata-rata bergerak jangka pendek merentasi rata-rata bergerak jangka panjang, ia akan menghasilkan isyarat beli.
Pertimbangkan frekuensi turun naik harga saham. Sebagai contoh, ia boleh digabungkan dengan penunjuk ATR, apabila turun naik harga saham meningkat, dengan tepat melonggarkan ketinggian pecah.
Membedakan antara pasaran trend dan pasaran goyah. Pada tahap yang jelas trend, pelepasan parameter yang sesuai untuk menjejaki trend; pada pasaran goyah, pengetatan parameter yang sesuai
Menambah mekanisme pengurusan kedudukan. Sebagai contoh, berhenti membuka kedudukan apabila kerugian mencapai peratusan tertentu.
Secara keseluruhan, strategi pengukuran semula tinggi rendah adalah strategi pemantauan trend yang mudah dan praktikal. Ia menentukan isyarat perdagangan dengan menilai sama ada harga telah menembusi harga tertinggi dan terendah dalam tempoh tertentu. Strategi ini mempunyai kelebihan seperti kesederhanaan, pemantauan trend, pengoptimuman parameter, dan juga terdapat risiko menghasilkan perdagangan berlebihan dan tidak dapat menangani pasaran 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)