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.
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.
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.
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.
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.
Pilih titik tetap atau ATR stop loss berganda berdasarkan ciri produk dan gaya perdagangan yang berbeza.
Uji kesan penangguhan kedudukan separa dan penangguhan kedudukan penuh.
Memperkenalkan penapis isyarat lain untuk membantu EMA dan WMA, untuk meningkatkan kualiti isyarat.
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)