Strategi Perdagangan Jalur Ganda Rata-rata Pergerakan


Tanggal Pembuatan: 2024-02-29 14:54:25 Akhirnya memodifikasi: 2024-02-29 14:54:25
menyalin: 1 Jumlah klik: 668
1
fokus pada
1617
Pengikut

Strategi Perdagangan Jalur Ganda Rata-rata Pergerakan

Ringkasan

Strategi perdagangan dua jalur rata-rata bergerak adalah strategi perdagangan tren yang melacak sinyal silang rata-rata bergerak ganda. Strategi ini menggunakan rata-rata bergerak indeks ((EMA) dan rata-rata bergerak bertimbang ((WMA) secara bersamaan sebagai indikator sinyal perdagangan. Strategi ini melakukan lebih banyak ketika melewati WMA jangka panjang di atas EMA jangka pendek; strategi ini melakukan lebih banyak ketika melewati WMA jangka panjang di bawah EMA jangka pendek.

Prinsip Strategi

Sumber sinyal perdagangan untuk strategi ini adalah EMA jangka pendek dengan 10 EMA dan WMA jangka panjang dengan 20 WMA. Ketika EMA jangka pendek melewati WMA jangka panjang, berarti pasar berbalik dari bawah ke atas, melakukan over; Ketika EMA jangka pendek melewati WMA jangka panjang, berarti pasar berbalik dari atas ke bawah, melakukan over.

Strategi pertama kali menentukan arah perdagangan, kemudian mengatur stop loss berada di bawah atau di atas 1 siklus ATR dari harga masuk, dan kemudian mengatur dua posisi stop, stop pertama berada di atas atau di bawah 1 ATR dari harga masuk, dan stop kedua berada di atas atau di bawah 2 ATR dari harga masuk. Ketika stop pertama dipicu, 50% dari posisi berikutnya dihentikan dengan stop kedua dan stop loss bergerak.

Logika Stop Loss bergerak adalah, jika harga tertinggi atau terendah menyentuh titik berhenti pertama dan mulai diaktifkan, stop loss akan dipindahkan ke antara nilai maksimum dan harga masuk untuk mencegah stop loss dan mengunci keuntungan sesuai dengan pembaruan real-time garis K.

Keunggulan

Strategi ini memanfaatkan fitur double smoothing dan noise of moving averages, yang secara efektif dapat menghapus fluktuasi acak dalam situasi pasar, mengidentifikasi sinyal tren di garis tengah dan panjang, dan menghindari penargetan. Menyiapkan dua batch stop pada saat yang sama meningkatkan area keuntungan strategi dan memaksimalkan keuntungan.

Risiko

Moving average sendiri sangat laggy, dan dapat menimbulkan risiko kehilangan sinyal; crossing dua moving averages dapat menghasilkan banyak sinyal palsu di beberapa pasar, yang dapat mengakibatkan kerugian. Pengaturan stop loss adalah bagian penting dari strategi, jika stop loss terlalu kecil mudah untuk dirobek dan menyebabkan kerugian, jika stop loss terlalu besar mungkin tidak dapat mengontrol risiko secara efektif.

Selain itu, stop loss mobile mungkin tidak dapat memberikan perlindungan yang baik dalam situasi pasar yang bergejolak.

Arah optimasi

  1. EMA dan WMA dengan parameter yang berbeda dapat diuji untuk menemukan kombinasi parameter yang optimal. EMA yang terlalu pendek atau WMA yang terlalu panjang dapat mempengaruhi kinerja strategi.

  2. Anda dapat memilih ATR multiplier atau stop loss fixed point, tergantung pada karakteristik varietas dan gaya trading.

  3. Anda dapat menguji efek dari stop loss bergerak sebagian posisi dan stop loss bergerak seluruh posisi.

  4. Anda dapat menilai sinyal filter dengan memasukkan indikator lain, membantu EMA dan WMA, dan meningkatkan kualitas sinyal.

Meringkaskan

Strategi perdagangan dua jalur rata-rata bergerak secara keseluruhan lebih kuat dan berkinerja lebih baik dalam situasi tren. Dengan pengoptimalan parameter, pengoptimalan stop-loss, dan peningkatan kualitas sinyal, kinerja strategi dapat ditingkatkan lebih lanjut. Ini adalah ide strategi yang berpotensi untuk dipelajari dan dimasukkan ke dalam pasar nyata.

Kode Sumber Strategi
/*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)