Strategi Ujian Belakang Penembusan Tinggi-Rendah


Tarikh penciptaan: 2023-11-27 15:37:13 Akhirnya diubah suai: 2023-11-27 15:37:13
Salin: 0 Bilangan klik: 689
1
fokus pada
1617
Pengikut

Strategi Ujian Belakang Penembusan Tinggi-Rendah

Gambaran keseluruhan

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.

Prinsip Strategi

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.

Analisis kelebihan

Strategi ini mempunyai beberapa kelebihan:

  1. Logik strategi mudah, mudah difahami dan dilaksanakan.
  2. Ia boleh menangkap ciri-ciri trend harga saham, mengikut trend harga.
  3. Anda boleh menyesuaikan Finding parameter dengan kombinasi parameter strategi yang paling sesuai.
  4. Mekanisme terbina dalam untuk menghentikan kerosakan dan menghentikan, untuk mengawal risiko.
  5. Paparan visual sangat memudahkan penyesuaian parameter dan analisis hasil.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Ia boleh menyebabkan transaksi berulang dan berlebihan.
  2. Apabila harga bergoyang, anda sering membuka posisi.
  3. Jika parameter penunjuk tidak tepat pada masanya, anda mungkin terlepas peluang trend besar.
  4. Tidak mengambil kira frekuensi dan ketaraannya.
  5. Tidak digabungkan dengan petunjuk lain untuk mengesahkan isyarat.

Untuk mengawal risiko-risiko ini, anda boleh mengoptimumkan dalam beberapa aspek:

  1. Kurangkan markah stop loss dengan sewajarnya dan panjangkan tempoh pegangan.
  2. Menambah syarat untuk membuka kedudukan dan mengelakkan pembukaan kedudukan yang kerap.
  3. Mengoptimumkan parameter, mencari kombinasi parameter yang terbaik.
  4. Gabungan dengan penapis isyarat lain.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Pengoptimuman parameter. Anda boleh mencari parameter yang optimum dengan menguji kombinasi parameter yang berbeza dengan lebih sistematik.

  2. 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.

  3. 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.

  4. 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

  5. Menambah mekanisme pengurusan kedudukan. Sebagai contoh, berhenti membuka kedudukan apabila kerugian mencapai peratusan tertentu.

ringkaskan

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.

Kod sumber strategi
/*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)