Strategi Tempoh Salib AlphaTrend

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

Ringkasan

Strategi ini berdasarkan kepada penunjuk AlphaTrend, yang menggabungkan kelebihan penunjuk RSI dan MFI dan dapat mencapai hasil yang baik di kedua-dua pasaran tren menaik dan menurun.

Logika Strategi

  1. Mengira penunjuk ATR untuk mengukur turun naik pasaran
  2. Gunakan RSI untuk menentukan arah pasaran jika tiada data jumlah; gunakan MFI jika data jumlah wujud
  3. Mengira jalur atas dan bawah berdasarkan ATR dan arah pasaran
  4. Mengira lengkung AlphaTrend, yang menggabungkan jalur atas dan bawah dinamik
  5. Menghasilkan isyarat beli dan jual apabila harga melintasi di atas atau di bawah lengkung AlphaTrend

Strategi ini bergantung terutamanya pada kurva AlphaTrend untuk menentukan arah trend harga. Ia mengambil kira ATR, RSI / MFI, dan dapat mengesan trend dengan berkesan. Apabila harga menembusi kurva, ia menandakan perubahan dalam trend dan membentuk titik masuk.

Kelebihan

  1. AlphaTrend menggabungkan kekuatan RSI dan MFI, dapat disesuaikan dengan kedua-dua pasaran lembu dan beruang
  2. Band atas dan bawah dinamik menyesuaikan secara automatik berdasarkan turun naik pasaran
  3. Merangkumi maklumat harga dan jumlah, mengelakkan isyarat palsu
  4. Pendekatan pecah jelas mengenal pasti arah trend
  5. Logik yang mudah difahami

Ringkasnya, strategi ini berfungsi untuk kedua-dua pasaran bullish dan bearish, menapis bunyi pasaran dengan berkesan, mengenal pasti trend dengan tepat, dan merupakan strategi trend yang berkesan.

Risiko

  1. AlphaTrend curve mungkin mempunyai pecah palsu, yang memerlukan pengesahan dari penunjuk lain
  2. Banyak isyarat palsu boleh berlaku semasa penyatuan pasaran
  3. Hasil yang tidak berkesan daripada penyesuaian parameter yang buruk
  4. Stop loss boleh diambil semasa lonjakan, menyebabkan kerugian besar

Untuk menangani risiko, stop loss boleh mengawal kerugian perdagangan tunggal; menggabungkan dengan penunjuk lain untuk mengelakkan isyarat palsu; menyesuaikan parameter berdasarkan pasaran yang berbeza.

Peluang Peningkatan

  1. Uji kombinasi parameter yang berbeza untuk tetapan yang dioptimumkan
  2. Masukkan penunjuk lain untuk membentuk syarat pengesahan
  3. Menggunakan stop loss dinamik atau trailing untuk mengawal risiko
  4. Perdagangan dalam jangka masa yang berbeza (5m, 15m, dan lain-lain) berdasarkan keadaan pasaran
  5. Memperbaiki sistem masa kemasukan untuk kemasukan yang lebih tepat

Pengoptimuman lanjut boleh dilakukan dengan menguji di pasaran dan parameter yang berbeza supaya strategi dapat disesuaikan dengan lebih banyak keadaan pasaran.

Kesimpulan

Secara keseluruhan, strategi AlphaTrend ini adalah sistem trend berikut yang mudah dan cekap. Ia menggabungkan kedua-dua maklumat harga dan jumlah untuk menyesuaikan diri dengan pasaran bullish dan bearish. Mekanisme pecah memberikan isyarat kemasukan yang jelas. Dengan kawalan risiko yang betul, ia dapat mencapai hasil yang baik. Ujian dan peningkatan lanjut dapat membantu menstabilkan keuntungan dalam lebih banyak keadaan pasaran.


/*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 lanjut