Swing Trend Moving Average Strategi

Penulis:ChaoZhang, Tarikh: 2024-02-04 15:44:54
Tag:

img

Ringkasan

Swing Trend Moving Average Strategy adalah sistem mengikuti trend yang menggunakan purata bergerak jangka panjang untuk mengenal pasti arah trend yang digabungkan dengan Julat Benar Purata untuk menapis palsu dan mengehadkan pengeluaran keseluruhan. Ia menggunakan Purata Bergerak Eksponen untuk menentukan arah trend dan menggunakan Julat Benar Purata untuk mengesan jika ia adalah pecah palsu. Ini dapat menapis pasaran berkisar dengan berkesan dan mengurangkan pengeluaran keseluruhan strategi.

Logika Strategi

Strategi ini direka berdasarkan prinsip-prinsip berikut:

  1. Gunakan purata bergerak eksponensial untuk menentukan arah trend keseluruhan. Tempoh lalai adalah 200 bar.
  2. Hitung Julat Benar Purata selama 10 bar terakhir.
  3. Apabila harga penutupan di atas Moving Average + Average True Range, ia ditentukan sebagai trend menaik.
  4. Apabila harga penutupan adalah di bawah Moving Average - Average True Range, ia ditentukan sebagai trend menurun.
  5. Pergi panjang dalam trend menaik dan pergi pendek dalam trend menurun.
  6. Secara lalai, purata bergerak digunakan sebagai garisan stop loss. Ia juga boleh memilih untuk menggunakan Moving Average ± Average True Range sebagai garisan stop loss.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan purata bergerak untuk menentukan trend utama dapat menapis bunyi pasaran jangka pendek dengan berkesan.
  2. Menambah Julat Benar Purata sebagai keadaan penapis mengelakkan penjanaan isyarat perdagangan di pasaran julat, dengan itu mengurangkan kerugian yang tidak perlu.
  3. Garis stop loss adalah dekat dengan purata bergerak atau julat terbaliknya, yang membolehkan stop loss cepat untuk mengurangkan pengeluaran maksimum.
  4. Tetapan parameter mudah menjadikannya mudah difahami dan dioptimumkan.

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko berpotensi:

  1. Pembalikan trend biasanya membawa kepada beberapa tahap penarikan dalam sistem purata bergerak.
  2. Tetapan parameter purata bergerak dan Julat Benar Purata boleh memberi kesan besar terhadap prestasi strategi. Tetapan parameter yang tidak betul boleh kehilangan peluang perdagangan atau meningkatkan kerugian yang tidak perlu.
  3. Strategi itu sendiri tidak mengambil kira hubungan antara harga dan jumlah.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Uji pelbagai jenis purata bergerak untuk mencari yang paling sesuai untuk stok atau produk tertentu.
  2. Mengoptimumkan parameter purata bergerak tempoh untuk menjadikannya lebih sesuai dengan ciri stok atau produk yang didagangkan.
  3. Mengoptimumkan parameter Julat Benar Purata untuk mencari kombinasi terbaik untuk menapis pasaran julat tanpa kehilangan trend.
  4. Tambah peraturan kelantangan untuk mengelakkan gangguan yang tidak sah.
  5. Uji dan bandingkan kaedah stop loss yang berbeza untuk menentukan penyelesaian optimum.

Kesimpulan

Secara keseluruhan, Swing Trend Moving Average Strategy adalah strategi trend yang sangat mudah dan praktikal. Ia juga mempunyai kawalan risiko yang baik. Walaupun strategi tidak mengambil banyak faktor dalam pertimbangan, ujian terperinci dan pengoptimuman parameter dan kaedah stop loss masih diperlukan.


/*backtest
start: 2023-01-28 00:00:00
end: 2024-02-03 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/
// © Inkedlau

//@version=5
strategy('Swing Trend Strategy', overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, commission_value=0.1)

use_short = input.bool(false, 'Open Short Positions?')
exit_type = input.bool(true, 'Exit trade on Moving Average Cross?')
src = input.source(close, 'Source')
len = input.int(200, 'Trend Length')
ma_type = input.string('ema', 'Moving Average Type', options=['sma', 'ema', 'rma', 'wma', 'vwma'], tooltip='Select the type of Moving Average to use to calculate the Trend')
atr_multiplier = input.float(1., 'ATR Threshold', step=0.5, tooltip='Filter the ranging market using the Average True Range')

// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A TREND FOLLOWING SYSTEM THAT USES A COMBINATION OF MOVING AVERAGE AND AVERAGE TRUE RANGE
// TO SPOT THE TRENDS AND ENTER THE MARKET ACCODINGLY.
// THE MARKET IS CONSIDERED IN AN UPTREND WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE + THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// THE MARKET IS CONSIDERED IN AN DOWNTREND WHEN THE PRICE CLOSES BLOW THE MOVING AVERAGE - THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// BY DEFAULT, THE STRATEGY WILL ENTER LONG WHEN AN UPTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES BELOW THE MOVING AVERAGE
// THE STRATEGY WILL ENTER SHORT WHEN A DOWNTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE

// ------------------ INDICATORS CALCULATION------------------
my_ma()=>
    ma = close
    if ma_type == 'sma'
        ma := ta.sma(src, len)
    if ma_type == 'ema'
        ma := ta.ema(src, len)
    if ma_type == 'rma'
        ma := ta.rma(src, len)
    if ma_type == 'wma'
        ma := ta.wma(src, len)
    if ma_type == 'vwma'
        ma := ta.vwma(src, len)
    ma

trend = my_ma()
atr = ta.atr(10)
uptrend = trend + atr * atr_multiplier
downtrend = trend - atr * atr_multiplier

// ---------------- ENTRY AND EXIT CONDITIONS ----------------

open_long = strategy.position_size == 0 and src > uptrend
close_long = exit_type ? strategy.position_size > 0 and src < trend : strategy.position_size > 0 and src < downtrend

open_short = use_short and strategy.position_size == 0 and src < downtrend
close_short = exit_type ? strategy.position_size < 0 and src > trend : strategy.position_size < 0 and src > uptrend

strategy.entry('long', strategy.long, when=open_long)
strategy.close('long', when=close_long)

strategy.entry('short', strategy.short, when=open_short)
strategy.close('short', when=close_short)


// ------------------ PLOTTING AND COLORING ------------------
tcolor = src > uptrend ? color.green : src < downtrend ? color.red : na

ptrend = plot(trend, color=color.blue, linewidth=1)
puptrend = plot(uptrend, color=color.green, linewidth=1)
pdowntrend = plot(downtrend, color=color.red, linewidth=1)
pclose = plot(close, color=na)

fill(puptrend, pclose, color=close > uptrend ? color.green : na, transp = 90)
fill(pdowntrend, pclose, color=close < downtrend ? color.red : na, transp = 90)



Lebih lanjut