Strategi Pertengahan Periode AlphaTrend

Penulis:ChaoZhang, Tanggal: 2023-09-28 11:05:27
Tag:

Gambaran umum

Strategi ini didasarkan pada indikator AlphaTrend, yang menggabungkan keuntungan dari indikator RSI dan MFI dan dapat mencapai hasil yang baik di pasar tren bullish dan bearish.

Logika Strategi

  1. Menghitung indikator ATR untuk mengukur volatilitas pasar
  2. Gunakan RSI untuk menentukan arah pasar jika tidak ada data volume; gunakan MFI jika data volume ada
  3. Menghitung band atas dan bawah berdasarkan ATR dan arah pasar
  4. Menghitung kurva AlphaTrend, yang menggabungkan band atas dan bawah dinamis
  5. Menghasilkan sinyal beli dan jual ketika harga melintasi di atas atau di bawah kurva AlphaTrend

Strategi ini terutama bergantung pada kurva AlphaTrend untuk menentukan arah tren harga. Ini memperhitungkan ATR, RSI / MFI, dan dapat melacak tren secara efektif. Ketika harga menembus kurva, itu menandakan perubahan tren dan membentuk titik masuk.

Keuntungan

  1. AlphaTrend menggabungkan kekuatan RSI dan MFI, dapat beradaptasi dengan pasar bull dan bear
  2. Band atas dan bawah dinamis secara otomatis menyesuaikan berdasarkan volatilitas pasar
  3. Menggabungkan informasi harga dan volume, menghindari sinyal palsu
  4. Pendekatan Breakout dengan jelas mengidentifikasi arah tren
  5. Logika yang sederhana dan mudah dipahami

Singkatnya, strategi ini bekerja baik untuk pasar bullish dan bearish, menyaring kebisingan pasar secara efektif, mengidentifikasi tren dengan akurat, dan merupakan strategi trend berikut yang efisien.

Risiko

  1. kurva AlphaTrend mungkin memiliki pecah palsu, yang membutuhkan konfirmasi dari indikator lain
  2. Banyak sinyal palsu dapat terjadi selama konsolidasi pasar
  3. Hasil yang tidak efektif dari pengaturan parameter yang buruk
  4. Stop loss dapat diambil selama lonjakan, menimbulkan kerugian besar

Untuk mengatasi risiko, stop loss dapat mengendalikan kerugian perdagangan tunggal; menggabungkan dengan indikator lain untuk menghindari sinyal palsu; menyesuaikan parameter berdasarkan pasar yang berbeda.

Peluang Peningkatan

  1. Uji kombinasi parameter yang berbeda untuk pengaturan yang dioptimalkan
  2. Masukkan indikator lain untuk membentuk kondisi konfirmasi
  3. Menggunakan stop loss dinamis atau trailing untuk mengendalikan risiko
  4. Perdagangan dalam jangka waktu yang berbeda (5m, 15m, dll) berdasarkan kondisi pasar
  5. Memperbaiki sistem waktu entri untuk entri yang lebih tepat

Optimalisasi lebih lanjut dapat dilakukan dengan pengujian di pasar dan parameter yang berbeda sehingga strategi dapat disesuaikan dengan kondisi pasar yang lebih banyak.

Kesimpulan

Secara keseluruhan strategi AlphaTrend ini adalah sistem trend berikut yang sederhana dan efisien. Ini menggabungkan informasi harga dan volume untuk beradaptasi dengan pasar bullish dan bearish. Mekanisme breakout memberikan sinyal masuk yang jelas. Dengan kontrol risiko yang tepat, dapat mencapai hasil yang baik. Pengujian lebih lanjut dan peningkatan dapat membantu menstabilkan profitabilitasnya di lebih banyak kondisi pasar.


/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-26 00:00:00
period: 30m
basePeriod: 15m
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/
// author © KivancOzbilgic
// developer © KivancOzbilgic
// pv additions, simplification and strategy conversion @ treigen
//@version=5
strategy('AlphaTrend For ProfitView', overlay=true, calc_on_every_tick=true, process_orders_on_close=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, initial_capital=1000)
coeff = input.float(1.5, 'Multiplier', step=0.1)
AP = input(15, 'Common Period')
ATR = ta.sma(ta.tr, AP)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)

i_startTime = input(defval = timestamp("01 Jan 2014 00:00 +0000"), title = "Backtesting Start Time", inline="timestart", group='Backtesting')
i_endTime = input(defval = timestamp("01 Jan 2100 23:59 +0000"), title = "Backtesting End Time", inline="timeend", group='Backtesting')
timeCond = true

pv_ex = input.string('', title='Exchange', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings')
pv_sym = input.string('', title='Symbol', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings')
pv_acc = input.string("", title="Account", group='PV Settings')
pv_alert_long = input.string("", title="PV Alert Name Longs", group='PV Settings')
pv_alert_short = input.string("", title="PV Alert Name Shorts", group='PV Settings')
pv_alert_test = input.bool(false, title="Test Alerts", tooltip="Will immediately execute the alerts, so you may see what it sends. The first line on these test alerts will be excluded from any real alert triggers" ,group='PV Settings')

upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(close, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT


k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])

var exsym = ""
if barstate.isfirst
    exsym := pv_ex == "" ? "" : "ex=" + pv_ex + ","
    exsym := pv_sym == "" ? exsym : exsym + "sym=" + pv_sym + ","


if barstate.isconfirmed and timeCond 
    if strategy.position_size <= 0 and buySignalk
        strategy.entry("Buy", strategy.long)
        alert(pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close)
    if strategy.position_size >= 0 and sellSignalk
        strategy.entry("Sell", strategy.short)
        alert(pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close)


//  Only used for testing/debugging alert messages
if pv_alert_test
    alert("<![Alert Test]!>\n" + pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar)
    alert("<![Alert Test]!>\n" + pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar)


Lebih banyak