Strategi ujian belakang dinamik bingkai berbilang masa


Tarikh penciptaan: 2023-11-21 17:07:17 Akhirnya diubah suai: 2023-11-21 17:07:17
Salin: 1 Bilangan klik: 698
1
fokus pada
1617
Pengikut

Strategi ujian belakang dinamik bingkai berbilang masa

Gambaran keseluruhan

Strategi ini menggunakan mekanisme pengulangan dinamik pelbagai kerangka masa untuk menilai trend harga dengan membandingkan harga tertinggi dan terendah dalam tempoh masa yang berbeza.

Prinsip Strategi

Strategi ini menggunakan fungsi khusus f_get_htfHighLow untuk mendapatkan harga tertinggi nhigh dan harga terendah nlow untuk tempoh masa yang berbeza. Secara khusus, fungsi keselamatan dipanggil untuk mendapatkan harga tertinggi dan terendah untuk tempoh masa yang berbeza, berdasarkan resolusi tempoh masa yang ditetapkan oleh pengguna, pengganda tempoh masa HTFMultiplier, parameter retrospektif lookahead dan gaps, dan offset offset.

Sebagai contoh, apabila offset adalah 0, anda akan mendapat harga tertinggi dan terendah pada garis K semasa; apabila offset adalah 1, anda akan mendapat harga tertinggi dan terendah pada garis K terdahulu. Dengan membandingkan perubahan harga antara dua garis K, anda akan mengetahui arah trend.

Jika harga tertinggi naik dan harga terendah naik, ia akan dianggap sebagai trend bullish; jika harga tertinggi jatuh dan harga terendah jatuh, ia akan dianggap sebagai trend bearish. Berdagang panjang atau pendek, untuk melakukan perdagangan lelang, mengikut arah trend.

Kelebihan Strategik

  1. Menggunakan analisis pelbagai kerangka masa untuk meningkatkan ketepatan penilaian
  2. Menggunakan mekanisme pengulangan dinamik untuk mengelakkan repainting
  3. Fleksibiliti dalam menetapkan kombinasi parameter yang berbeza untuk menyesuaikan diri dengan perubahan pasaran
  4. Hanya buka posisi apabila trend jelas, mengawal risiko dengan berkesan

Risiko Strategik

  1. Penghakiman dalam pelbagai kerangka masa boleh membawa kepada risiko salah faham
  2. Tidak betul set parameter regresi boleh menyebabkan repainting
  3. Frekuensi dagangan mungkin terlalu tinggi, meningkatkan kos dagangan dan risiko tergelincir

Penyelesaian:

  1. Optimumkan parameter kitaran masa untuk meningkatkan ketepatan penilaian
  2. Uji ulang parameter dengan ketat untuk mengelakkan repainting
  3. Sesuai menyesuaikan syarat untuk membuka kedudukan dan mengawal kekerapan perdagangan

Arah pengoptimuman strategi

  1. Menambah modul pembelajaran mesin untuk menilai trend menggunakan AI
  2. Dinamika perubahan kedudukan yang berkaitan dengan turun naik harga saham
  3. Menyertai mekanisme halangan kerugian untuk mengawal risiko kerugian

ringkaskan

Strategi ini mempunyai pemikiran keseluruhan yang jelas, menggunakan pelbagai rangka masa untuk menilai trend harga saham secara dinamik, dan meminimumkan kesilapan pertimbangan manusia. Ini adalah strategi perdagangan berprogrami yang tipikal. Dengan optimasi parameter dan fungsi yang diperluaskan, ia dapat meningkatkan lagi kestabilan strategi dan ruang keuntungan.

Kod sumber strategi
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HeWhoMustNotBeNamed

//@version=4
strategy("HTF High/Low Repaint Strategy", overlay=true, initial_capital = 20000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01)

i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time)
inDateRange = true

resolution = input("3M", type=input.resolution)
HTFMultiplier = input(22, minval=1, step=1)
offset = input(0, minval=0, step=1)
lookahead = input(true)
gaps = false

f_secureSecurity_on_on(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on, gaps=barmerge.gaps_on)
f_secureSecurity_on_off(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on, gaps=barmerge.gaps_off)
f_secureSecurity_off_on(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_off, gaps=barmerge.gaps_on)
f_secureSecurity_off_off(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_off, gaps=barmerge.gaps_off)

f_multiple_resolution(HTFMultiplier) => 
    target_Res_In_Min = timeframe.multiplier * HTFMultiplier * (
      timeframe.isseconds   ? 1. / 60. :
      timeframe.isminutes   ? 1. :
      timeframe.isdaily     ? 1440. :
      timeframe.isweekly    ? 7. * 24. * 60. :
      timeframe.ismonthly   ? 30.417 * 24. * 60. : na)

    target_Res_In_Min     <= 0.0417       ? "1S"  :
      target_Res_In_Min   <= 0.167        ? "5S"  :
      target_Res_In_Min   <= 0.376        ? "15S" :
      target_Res_In_Min   <= 0.751        ? "30S" :
      target_Res_In_Min   <= 1440         ? tostring(round(target_Res_In_Min)) :
      tostring(round(min(target_Res_In_Min / 1440, 365))) + "D"

f_get_htfHighLow(resolution, HTFMultiplier, lookahead, gaps, offset)=>
    derivedResolution = resolution == ""?f_multiple_resolution(HTFMultiplier):resolution
    nhigh_on_on = f_secureSecurity_on_on(syminfo.tickerid, derivedResolution, high, offset) 
    nlow_on_on = f_secureSecurity_on_on(syminfo.tickerid, derivedResolution, low, offset)
    
    nhigh_on_off = f_secureSecurity_on_off(syminfo.tickerid, derivedResolution, high, offset) 
    nlow_on_off = f_secureSecurity_on_off(syminfo.tickerid, derivedResolution, low, offset)
    
    nhigh_off_on = f_secureSecurity_off_on(syminfo.tickerid, derivedResolution, high, offset) 
    nlow_off_on = f_secureSecurity_off_on(syminfo.tickerid, derivedResolution, low, offset)
    
    nhigh_off_off = f_secureSecurity_off_off(syminfo.tickerid, derivedResolution, high, offset) 
    nlow_off_off = f_secureSecurity_off_off(syminfo.tickerid, derivedResolution, low, offset)
    
    nhigh = lookahead and gaps ? nhigh_on_on :
             lookahead and not gaps ? nhigh_on_off :
             not lookahead and gaps ? nhigh_off_on :
             not lookahead and not gaps ? nhigh_off_off : na
    nlow = lookahead and gaps ? nlow_on_on :
             lookahead and not gaps ? nlow_on_off :
             not lookahead and gaps ? nlow_off_on :
             not lookahead and not gaps ? nlow_off_off : na
    [nhigh, nlow]
    
[nhigh, nlow] = f_get_htfHighLow(resolution, HTFMultiplier, lookahead, gaps, offset)
[nhighlast, nlowlast] = f_get_htfHighLow(resolution, HTFMultiplier, lookahead, gaps, offset+1)
plot(nhigh , title="HTF High",style=plot.style_circles, color=color.green, linewidth=1) 
plot(nlow , title="HTF Low",style=plot.style_circles, color=color.red, linewidth=1)

buyCondition = nhigh > nhighlast and nlow > nlowlast
sellCondition = nhigh < nhighlast and nlow < nlowlast

strategy.entry("Buy", strategy.long, when= buyCondition and inDateRange, oca_name="oca_buy")
strategy.entry("Sell", strategy.short, when= sellCondition and inDateRange, oca_name="oca_sell")