Strategi Dagangan Saluran Rata-rata Bergerak Berganda

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

img

Ringkasan

Strategi perdagangan saluran purata bergerak berganda adalah strategi perdagangan trend yang mengesan persimpangan antara purata bergerak berganda. Strategi ini menggunakan purata bergerak eksponen (EMA) dan purata bergerak bertimbang (WMA) sebagai penunjuk isyarat perdagangan. Apabila EMA jangka pendek melintasi di atas WMA jangka panjang, strategi itu menjadi panjang. Apabila EMA jangka pendek melintasi di bawah WMA jangka panjang, strategi itu menjadi pendek.

Logika Strategi

Isyarat perdagangan strategi ini berasal dari salib emas dan salib kematian antara EMA jangka pendek 10 tempoh dan WMA jangka panjang 20 tempoh. Apabila EMA jangka pendek melintasi di atas WMA jangka panjang, ia menunjukkan pasaran sedang berbalik ke atas, dengan itu pergi panjang. Apabila EMA jangka pendek melintasi di bawah WMA jangka panjang, ia menunjukkan pasaran sedang berbalik ke bawah, dengan itu pergi pendek.

Selepas menentukan arah perdagangan, strategi menetapkan stop loss di bawah atau di atas harga kemasukan dengan tempoh 1 ATR, dengan dua mengambil keuntungan - keuntungan pertama ditetapkan pada 1 ATR di atas atau di bawah harga kemasukan, dan keuntungan kedua ditetapkan pada 2 ATR di atas atau di bawah harga kemasukan. Apabila keuntungan pertama dicetuskan, 50% dari kedudukan akan ditutup. Kedudukan yang selebihnya akan terus berjalan ke arah keuntungan kedua atau dengan kerugian berhenti.

Logik stop loss yang mengikuti - ia akan diaktifkan sebaik sahaja harga tertinggi atau harga terendah telah mencapai tahap keuntungan pertama.

Kelebihan

Strategi ini menggunakan ciri pengurangan bunyi bising pelincir yang berganda untuk menapis turun naik rawak di pasaran dan mengenal pasti isyarat trend jangka menengah hingga panjang, dengan itu mengelakkan terjebak dalam whipsaws.

Risiko

Purata bergerak sendiri mempunyai ketinggalan yang lebih besar, yang menimbulkan risiko isyarat yang hilang.

Tetapan stop loss adalah komponen penting dalam strategi. Jika stop loss terlalu kecil, ia cenderung terkena bunyi bising pasaran. Jika stop loss terlalu besar, ia mungkin gagal untuk mengawal risiko dengan berkesan.

Di samping itu, apabila pasaran turun naik dengan ganas, penangguhan penghantaran mungkin tidak berfungsi dengan baik dalam perlindungan.

Arahan pengoptimuman

  1. Uji EMA dan WMA dengan parameter yang berbeza untuk mencari kombinasi parameter yang optimum. EMA yang terlalu pendek atau WMA yang terlalu panjang boleh mempengaruhi prestasi strategi.

  2. Pilih titik tetap atau ATR stop loss berganda berdasarkan ciri produk dan gaya perdagangan yang berbeza.

  3. Uji kesan penangguhan kedudukan separa dan penangguhan kedudukan penuh.

  4. Memperkenalkan penapis isyarat lain untuk membantu EMA dan WMA, untuk meningkatkan kualiti isyarat.

Ringkasan

Secara umum, strategi perdagangan saluran purata bergerak berganda agak kukuh dan berprestasi baik di pasaran yang sedang berkembang. Dengan mengoptimumkan parameter, mekanisme stop loss, dan meningkatkan kualiti isyarat, prestasi perdagangan sebenar strategi ini dapat ditingkatkan lagi. Ini adalah idea strategi yang menjanjikan yang bernilai penyelidikan mendalam dan penerapan dalam perdagangan sebenar.


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