Strategi pelacakan tren berdasarkan jangka waktu yang berbeda

Penulis:ChaoZhang, Tanggal: 2024-02-21 11:05:17
Tag:

基于超越时间框架的趋势追踪策略

Pengamatan

Gagasan inti dari strategi ini adalah untuk mengkombinasikan beberapa kerangka waktu untuk mengidentifikasi tren pasar, menggunakan indikator melampaui pada kerangka waktu yang lebih tinggi sebagai filter, dan mengirimkan sinyal beli dan jual pada kerangka waktu yang lebih rendah. Strategi ini bertujuan untuk memanfaatkan informasi struktural pasar yang diberikan oleh kerangka waktu yang lebih tinggi untuk meningkatkan kualitas keputusan perdagangan.

Prinsip Strategi

Strategi ini menggunakan fungsi keamanan untuk mendapatkan nilai dari indikator yang melampaui batas waktu yang lebih tinggi (default adalah 4 kali batas waktu saat ini).

Strategi ini menggunakan arah tren tinggi sebagai kondisi penyaringan, dan hanya akan mengirimkan sinyal perdagangan ketika arah tren rendah sesuai dengan frame tinggi. Artinya, strategi ini hanya akan melakukan lebih banyak atau tidak melakukan apa pun ketika indikator tren tinggi pada hanya dua frame waktu mengirimkan sinyal yang sama.

Hal ini dapat menghindari gangguan dari kebisingan pasar dengan kerangka waktu yang lebih rendah dan meningkatkan keandalan sinyal.

Keunggulan Strategis

  • Menggunakan informasi struktur pasar yang diberikan oleh kerangka waktu tinggi untuk menyaring kebisingan kerangka waktu rendah untuk meningkatkan kualitas keputusan perdagangan
  • Menggabungkan analisis beberapa kerangka waktu untuk membuat sinyal perdagangan lebih andal
  • Parameter indikator supertrend yang dapat disesuaikan untuk mengoptimalkan strategi jual beli
  • Pengaturan rentang tanggal built-in yang dapat membatasi rentang waktu yang dapat diulang

Analisis Risiko

  • Sinyal frame waktu tinggi berlarut-larut, mungkin kehilangan kesempatan jalur pendek
  • Kerangka waktu tinggi menilai kemungkinan adanya struktur pasar yang salah
  • Indikator hipertrend itu sendiri bisa menjadi sinyal yang salah.
  • Pembatasan rentang waktu retest dapat mengabaikan data penting dan mempengaruhi akurasi hasil tes.

Solusi:

  • Sesuaikan pengaturan frame waktu tinggi untuk mengurangi keterlambatan sinyal
  • Pengertian struktural kerangka waktu tinggi yang dikonfirmasi dalam kombinasi dengan indikator lain
  • Mengoptimalkan parameter indikator supertrend, meningkatkan kualitas sinyal
  • Secara bertahap memperluas rentang waktu uji ulang, pengujian strategi yang kuat

Kebijakan Optimasi

Strategi ini dapat dioptimalkan dari beberapa aspek berikut:

  1. Mengoptimalkan parameter indikator supertrend untuk menemukan kombinasi parameter terbaik
  2. Menambahkan indikator lain untuk kombinasi, membentuk model multi-faktor
  3. Uji kombinasi frame waktu yang berbeda
  4. Meningkatkan mekanisme penghentian kerugian untuk mengendalikan risiko
  5. Menggabungkan algoritma pembelajaran mesin dengan hyperparameter penyesuaian dinamis

Metode-metode seperti optimasi parameter, penggabungan indikator, peningkatan stop loss, dan pengenalan pembelajaran mesin dapat secara signifikan meningkatkan efektivitas strategi pelacakan tren multi-frame.

Pengamatan

Strategi ini dengan cerdik memanfaatkan penilaian tren dari kerangka waktu yang tinggi untuk memandu eksekusi perdagangan dari kerangka waktu yang rendah. Desain kerangka waktu yang multi ini dapat secara efektif menyaring kebisingan pasar dan mengidentifikasi arah tren yang lebih jelas. Sementara fungsi pengaturan tanggal internal membuat retrograde lebih fleksibel. Secara keseluruhan, ini adalah strategi pelacakan tren kerangka waktu multi yang dirancang dengan baik yang layak untuk penelitian dan aplikasi lebih lanjut.


/*backtest
start: 2023-02-14 00:00:00
end: 2024-02-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("Higher TF - Repainting", overlay=true, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

HTFMultiplier = input(4, minval=1, step=1)

SupertrendMult = input(1)
SupertrendPd = input(4, minval=4, step=4)

backtestBars = input(title="Backtest from ", defval=10, minval=1, maxval=30)
backtestFrom = input(title="Timeframe", defval="years", options=["days", "months", "years"])

repaintOption = input(title="Repaint", defval="Yes", options=["Yes", "No - set lookahead false", "No - do not use security"])

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_getBackTestTimeFrom(backtestFrom, backtestBars)=>
    byDate = backtestFrom == "days"
    byMonth = backtestFrom == "months"
    byYear = backtestFrom == "years"
    
    date = dayofmonth(timenow)
    mth = month(timenow)
    yr = year(timenow)
    
    leapYearDaysInMonth = array.new_int(12,0)
    array.set(leapYearDaysInMonth,0,31)
    array.set(leapYearDaysInMonth,1,29)
    nonleapYearDaysInMonth = array.new_int(12,0)
    array.set(leapYearDaysInMonth,0,31)
    array.set(leapYearDaysInMonth,1,28)
    
    restMonths = array.new_int(10,0)
    array.set(leapYearDaysInMonth,0,31)
    array.set(leapYearDaysInMonth,1,30)
    array.set(leapYearDaysInMonth,2,31)
    array.set(leapYearDaysInMonth,3,30)
    array.set(leapYearDaysInMonth,4,31)
    array.set(leapYearDaysInMonth,5,31)
    array.set(leapYearDaysInMonth,6,30)
    array.set(leapYearDaysInMonth,7,31)
    array.set(leapYearDaysInMonth,8,30)
    array.set(leapYearDaysInMonth,9,31)
    
    array.concat(leapYearDaysInMonth,restMonths)
    array.concat(nonleapYearDaysInMonth,restMonths)
    isLeapYear = yr % 4 == 0 and (year%100 != 0 or year%400 == 0)
    numberOfDaysInCurrentMonth = isLeapYear ? array.get(leapYearDaysInMonth, mth-2) : array.get(nonleapYearDaysInMonth, mth-2)
    if(byDate)
        mth := (date - backtestBars) < 0 ? mth - 1 : mth
        yr := mth < 1 ? yr - 1 : yr
        mth := mth < 1 ? 1 : mth
        date := (date - backtestBars) < 0 ? numberOfDaysInCurrentMonth - backtestBars + date + 1 : date - backtestBars + 1
    if(byMonth)
        date := 1
        yr := (mth - (backtestBars%12)) < 0 ? yr - int(backtestBars/12) - 1 : yr - int(backtestBars/12)
        mth := mth - (backtestBars%12) + 1
    if(byYear)
        date := 1
        mth := 1
        yr := yr - backtestBars
    [date, mth, yr]


repaint = repaintOption == "Yes"
useSecurityLookahead = repaintOption == "No - set lookahead false"

[SupertrendRepaint, DirRepaint] = security(syminfo.tickerid, f_multiple_resolution(HTFMultiplier), supertrend(SupertrendMult, SupertrendPd), lookahead = true, gaps=true)
[SupertrendNoLookahead, DirNoLookahead] = security(syminfo.tickerid, f_multiple_resolution(HTFMultiplier), supertrend(SupertrendMult, SupertrendPd), lookahead = false, gaps=false)

[SupertrendRegular, DirRegular] = supertrend(SupertrendMult, SupertrendPd)

[date, mth, yr] = f_getBackTestTimeFrom(backtestFrom, backtestBars)
inDateRange = time >= timestamp(syminfo.timezone, yr, mth, date, 0, 0)

longCondition = repaint ? DirRepaint == -1 : useSecurityLookahead? DirNoLookahead == -1 : DirRegular == -1
shortCondition = repaint ? DirRepaint == 1 : useSecurityLookahead? DirNoLookahead == 1 : DirRegular == 1
strategy.entry("Buy", strategy.long, when=longCondition and inDateRange)
strategy.entry("Sell", strategy.short, when=shortCondition and inDateRange)


Informasi lebih lanjut