Strategi Perdagangan Saluran Dual Moving Average

Penulis:ChaoZhang, Tanggal: 2024-02-29 14:54:25
Tag:

img

Gambaran umum

Strategi perdagangan saluran rata-rata bergerak ganda adalah strategi perdagangan tren yang melacak persilangan antara rata-rata bergerak ganda. Strategi ini menggunakan rata-rata bergerak eksponensial (EMA) dan rata-rata bergerak tertimbang (WMA) sebagai indikator sinyal perdagangan. Ketika EMA jangka pendek melintasi di atas WMA jangka panjang, strategi akan panjang. Ketika EMA jangka pendek melintasi di bawah WMA jangka panjang, strategi akan pendek.

Logika Strategi

Sinyal perdagangan dari strategi ini berasal dari salib emas dan salib kematian antara EMA jangka pendek 10 periode dan WMA jangka panjang 20 periode. Ketika EMA jangka pendek melintasi di atas WMA jangka panjang, itu menunjukkan pasar sedang berbalik ke atas, sehingga akan panjang. Ketika EMA jangka pendek melintasi di bawah WMA jangka panjang, itu menunjukkan pasar sedang berbalik ke bawah, sehingga akan pendek.

Setelah menentukan arah perdagangan, strategi menetapkan stop loss di bawah atau di atas harga masuk dengan periode 1 ATR, dengan dua take profit - take profit pertama ditetapkan pada 1 ATR di atas atau di bawah harga masuk, dan take profit kedua ditetapkan pada 2 ATR di atas atau di bawah harga masuk. Ketika take profit pertama dipicu, 50% dari posisi akan ditutup. Posisi yang tersisa akan terus berjalan menuju take profit kedua atau dengan trailing stop loss.

Logika stop loss trailing - ini akan diaktifkan setelah harga tertinggi atau harga terendah telah mencapai level take profit pertama. Menurut update bar realtime, stop loss akan dilacak antara titik profit maksimum dan harga masuk sebagai perlindungan untuk menghindari kerugian dan mengunci keuntungan di sepanjang jalan.

Keuntungan

Strategi ini memanfaatkan fitur pengurangan noise smoothing ganda dari moving average untuk secara efektif menyaring fluktuasi acak di pasar dan mengidentifikasi sinyal tren jangka menengah hingga panjang, sehingga menghindari terjebak dalam whipsaws.

Risiko

Rata-rata bergerak sendiri memiliki keterlambatan yang lebih besar, yang menimbulkan risiko sinyal yang hilang.

Stop loss adalah komponen penting dari strategi. Jika stop loss terlalu kecil, hal ini rentan terkena kebisingan pasar. Jika stop loss terlalu besar, hal ini mungkin gagal untuk mengontrol risiko secara efektif.

Selain itu, ketika pasar berfluktuasi keras, trailing stop mungkin tidak bekerja dengan baik dalam perlindungan.

Arahan Optimasi

  1. Uji EMA dan WMA dengan parameter yang berbeda untuk menemukan kombinasi parameter yang optimal.

  2. Pilih titik tetap atau ATR stop loss ganda berdasarkan karakteristik produk yang berbeda dan gaya perdagangan.

  3. Uji efek dari posisi parsial trailing stop dan posisi penuh trailing stop.

  4. Memperkenalkan indikator lain untuk penyaringan sinyal untuk membantu EMA dan WMA, sehingga meningkatkan kualitas sinyal.

Ringkasan

Secara umum, strategi perdagangan saluran rata-rata bergerak ganda relatif kuat dan berkinerja baik di pasar tren. Dengan mengoptimalkan parameter, mekanisme stop loss, dan meningkatkan kualitas sinyal, kinerja perdagangan nyata dari strategi ini dapat ditingkatkan lebih lanjut. Ini adalah ide strategi yang menjanjikan yang layak penelitian mendalam dan aplikasi dalam perdagangan aktual.


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 3h
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/
// © gpadihar

//@version=4
strategy("SL1 Pips after TP1 (MA)", commission_type=strategy.commission.cash_per_order, overlay=true)

// Strategy
Buy  = input(true)
Sell = input(true)

// Date Range
start_year    = input(title='Start year'   ,defval=2020)
start_month   = input(title='Start month'  ,defval=1)
start_day     = input(title='Start day'    ,defval=1)
start_hour    = input(title='Start hour'   ,defval=0)
start_minute  = input(title='Start minute' ,defval=0)
end_time      = input(title='set end time?',defval=false)
end_year      = input(title='end year'     ,defval=3019)
end_month     = input(title='end month'    ,defval=12)
end_day       = input(title='end day'      ,defval=31)
end_hour      = input(title='end hour'     ,defval=23)
end_minute    = input(title='end minute'   ,defval=59)

// MA
ema_period = input(title='EMA period',defval=10)
wma_period = input(title='WMA period',defval=20)
ema        = ema(close,ema_period)
wma        = wma(close,wma_period)

// Entry Condition
buy =
 crossover(ema,wma) and
 nz(strategy.position_size) == 0 and Buy and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)
 
sell =
 crossunder(ema,wma) and
 nz(strategy.position_size) == 0 and Sell and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)

// Pips
pip = input(20)*10*syminfo.mintick

// Trading parameters //
var bool  LS  = na
var bool  SS  = na
var float EP  = na
var float TVL = na
var float TVS = na
var float TSL = na
var float TSS = na
var float TP1 = na
var float TP2 = na
var float SL1 = na
var float SL2 = na

if buy or sell and strategy.position_size == 0
    EP  := close
    SL1 := EP - pip     * (sell?-1:1)
    SL2 := EP - pip     * (sell?-1:1)
    TP1 := EP + pip     * (sell?-1:1)
    TP2 := EP + pip * 2 * (sell?-1:1) 
   
// current trade direction    
LS := buy  or strategy.position_size > 0
SS := sell or strategy.position_size < 0

// adjust trade parameters and trailing stop calculations
TVL := max(TP1,open) - pip[1]
TVS := min(TP1,open) + pip[1]
TSL := open[1] > TSL[1] ? max(TVL,TSL[1]):TVL 
TSS := open[1] < TSS[1] ? min(TVS,TSS[1]):TVS

if LS and high > TP1
    if open <= TP1
        SL2:=min(EP,TSL)
    
if SS and low < TP1
    if open >= TP1
        SL2:=max(EP,TSS)

// Closing conditions
close_long  = LS and open < SL2
close_short = SS and open > SL2

// Buy
strategy.entry("buy"  , strategy.long, when=buy and not SS)
strategy.exit ("exit1", from_entry="buy", stop=SL1, limit=TP1, qty_percent=50)
strategy.exit ("exit2", from_entry="buy", stop=SL2, limit=TP2)

// Sell
strategy.entry("sell" , strategy.short, when=sell and not LS)
strategy.exit ("exit3", from_entry="sell", stop=SL1, limit=TP1, qty_percent=50)
strategy.exit ("exit4", from_entry="sell", stop=SL2, limit=TP2)

// Plots
a=plot(strategy.position_size >  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr)
b=plot(strategy.position_size <  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) 
c=plot(strategy.position_size >  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
d=plot(strategy.position_size <  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
e=plot(strategy.position_size >  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
f=plot(strategy.position_size <  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
g=plot(strategy.position_size >= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 
h=plot(strategy.position_size <= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 

plot(ema,title="ema",color=#fff176)
plot(wma,title="wma",color=#00ced1)



Lebih banyak