Swing Trend Moving Average Strategi

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

img

Gambaran umum

Swing Trend Moving Average Strategy adalah sistem mengikuti tren yang menggunakan moving average jangka panjang untuk mengidentifikasi arah tren dikombinasikan dengan Average True Range untuk menyaring fakeout dan membatasi total drawdown.

Logika Strategi

Strategi ini dirancang berdasarkan prinsip-prinsip berikut:

  1. Gunakan rata-rata bergerak eksponensial untuk menentukan arah tren keseluruhan.
  2. Hitung rentang rata-rata selama 10 bar terakhir.
  3. Ketika harga penutupan di atas Moving Average + Average True Range, itu ditentukan sebagai uptrend.
  4. Ketika harga penutupan di bawah Moving Average - Average True Range, itu ditentukan sebagai downtrend.
  5. Pergi panjang dalam tren naik dan pergi pendek dalam tren turun.
  6. Secara default, rata-rata bergerak digunakan sebagai garis stop loss.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Menggunakan rata-rata bergerak untuk menentukan tren utama dapat secara efektif menyaring kebisingan pasar jangka pendek.
  2. Menambahkan Average True Range sebagai kondisi filter menghindari menghasilkan sinyal perdagangan di pasar range, sehingga mengurangi kerugian yang tidak perlu.
  3. Garis stop loss dekat dengan moving average atau kisaran terbaliknya, memungkinkan stop loss cepat untuk mengurangi drawdown maksimum.
  4. Pengaturan parameter sederhana membuatnya mudah dipahami dan dioptimalkan.

Analisis Risiko

Strategi ini juga memiliki beberapa risiko potensial:

  1. Pembalikan tren biasanya mengarah pada beberapa tingkat penarikan dalam sistem rata-rata bergerak.
  2. Pengaturan parameter dari moving average dan Average True Range dapat berdampak besar pada kinerja strategi. Pengaturan parameter yang tidak benar dapat kehilangan peluang perdagangan atau meningkatkan kerugian yang tidak perlu.
  3. Strategi itu sendiri tidak mempertimbangkan hubungan antara harga dan volume.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Uji berbagai jenis rata-rata bergerak untuk menemukan yang paling cocok untuk saham atau produk tertentu.
  2. Mengoptimalkan parameter periode rata-rata bergerak agar lebih cocok dengan karakteristik saham atau produk yang diperdagangkan.
  3. Optimalkan parameter Average True Range untuk menemukan kombinasi terbaik untuk menyaring pasar yang berkisar tanpa kehilangan tren.
  4. Tambahkan aturan volume untuk menghindari gangguan yang tidak valid.
  5. Uji dan bandingkan metode stop loss yang berbeda untuk menentukan solusi optimal.

Kesimpulan

Secara keseluruhan, Swing Trend Moving Average Strategy adalah strategi yang sangat sederhana dan praktis mengikuti tren. Ini juga memiliki kontrol risiko yang baik. Meskipun strategi tidak mempertimbangkan banyak faktor, pengujian dan pengoptimalan parameter dan metode stop loss yang rinci masih diperlukan. Namun, logika perdagangan dan pengaturan parameter yang sederhana membuatnya dapat diterapkan secara luas pada produk yang berbeda, terutama cocok untuk perdagangan cryptocurrency seperti Bitcoin.


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