Berdasarkan strategi perdagangan persimpangan purata bergerak berganda


Tarikh penciptaan: 2023-12-27 16:07:49 Akhirnya diubah suai: 2023-12-27 16:07:49
Salin: 2 Bilangan klik: 681
1
fokus pada
1623
Pengikut

Berdasarkan strategi perdagangan persimpangan purata bergerak berganda

Gambaran keseluruhan

Strategi ini berdasarkan kepada persimpangan emas dan persimpangan mati pada purata bergerak untuk menghasilkan isyarat beli dan jual. Secara khusus, strategi ini menggunakan purata bergerak indeks 5 hari (EMA) dan purata bergerak indeks 34 hari (DEMA) pada masa yang sama. Isyarat beli dihasilkan apabila EMA 5 hari pendek melintasi DEMA 34 hari panjang dari bawah; Isyarat jual dihasilkan apabila EMA 5 hari pendek melintasi DEMA 34 hari panjang dari atas ke bawah.

Prinsip Strategi

  1. Hitung EMA 5 hari dan DEMA 34 hari
  2. Apabila EMA jangka pendek 5 hari melintasi DEMA jangka panjang 34 hari dari bawah, ia menghasilkan isyarat beli
  3. Apabila EMA jangka pendek 5 hari melintasi DEMA jangka panjang 34 hari dari atas ke bawah, ia menghasilkan isyarat jual
  4. Anda boleh memilih untuk berdagang hanya dalam tempoh masa tertentu.
  5. Anda boleh memilih untuk menggunakan Tracking Stop Loss

Strategi ini menggabungkan kedua-dua faktor pengesanan trend dan persilangan garis rata, dengan kesan yang stabil. Rata-rata bergerak sebagai indikator pengesanan trend, dapat mengenal pasti trend pasaran dengan berkesan. Penggunaan gabungan EMA dan DEMA dapat menghasilkan isyarat perdagangan dengan data harga yang lancar dengan berkesan.

Analisis kelebihan

  1. Strategi yang ringkas, jelas dan mudah difahami
  2. Penggunaan gabungan purata bergerak, yang mengambil kira penilaian trend dan pemprosesan data harga yang lancar
  3. Persaingan jangka pendek dan jangka panjang yang boleh memberi isyarat perdagangan lebih awal pada titik perubahan pasaran yang besar
  4. Panjang garis rata boleh dioptimumkan melalui parameter untuk menyesuaikan dengan pelbagai jenis dan tempoh
  5. Mengintegrasikan dua faktor boleh meningkatkan kestabilan strategi

Analisis risiko

  1. Dalam keadaan gegaran, lebih banyak isyarat palsu mungkin berlaku
  2. Panjang garisan purata yang tidak betul boleh menyebabkan kelewatan isyarat
  3. Masa perdagangan dan penempatan hentian yang tidak betul boleh menjejaskan keuntungan strategi

Risiko ini dapat dikurangkan dengan menyesuaikan panjang garis rata-rata, mengoptimumkan masa perdagangan, dan menetapkan hentian kerugian yang munasabah.

Arah pengoptimuman

  1. Menyesuaikan parameter panjang garis purata untuk pelbagai jenis dan kitaran perdagangan
  2. Optimumkan parameter masa dagangan untuk berdagang pada masa aktif utama
  3. Perbandingan kelebihan dan kekurangan kedua-dua penyelesaian berhenti tetap dan berhenti
  4. Ujian Kesan Pelbagai Cara Pengambilan Harga terhadap Strategi

ringkaskan

Strategi ini menghasilkan isyarat dagangan melalui persilangan dua garis sejajar, dan digabungkan dengan trend tracking dan pemprosesan data yang lancar, merupakan strategi trend tracking yang mudah dan praktikal. Ia boleh disesuaikan dengan varieti dan kitaran perdagangan yang berbeza melalui penyesuaian parameter dan pengoptimuman peraturan, memberi isyarat perdagangan lebih awal semasa perubahan trend besar, dan mengelakkan isyarat palsu.

Kod sumber strategi
/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["v_input_1",false]]
*/

//@version=2
strategy(title='[STRATEGY][RS]MicuRobert EMA cross V2', shorttitle='S', overlay=true)
USE_TRADESESSION = input(title='Use Trading Session?', type=bool, defval=true)
USE_TRAILINGSTOP = input(title='Use Trailing Stop?', type=bool, defval=true)
trade_session = input(title='Trade Session:',  defval='0400-1500', confirm=false)
istradingsession = not USE_TRADESESSION ? false : not na(time('1', trade_session))
bgcolor(istradingsession?gray:na)
trade_size = input(title='Trade Size:', type=float, defval=1)
tp = input(title='Take profit in pips:', type=float, defval=55.0) * (syminfo.mintick*10)
sl = input(title='Stop loss in pips:', type=float, defval=22.0) * (syminfo.mintick*10)
ma_length00 = input(title='EMA length:', defval=5)
ma_length01 = input(title='DEMA length:',  defval=34)
price = input(title='Price source:', defval=open)

//  ||--- NO LAG EMA, Credit LazyBear:  ---||
f_LB_zlema(_src, _length)=>
    _ema1=ema(_src, _length)
    _ema2=ema(_ema1, _length)
    _d=_ema1-_ema2
    _zlema=_ema1+_d
//  ||-------------------------------------||

ma00 = f_LB_zlema(price, ma_length00)
ma01 = f_LB_zlema(price, ma_length01)
plot(title='M0', series=ma00, color=black)
plot(title='M1', series=ma01, color=black)

isnewbuy = change(strategy.position_size)>0 and change(strategy.opentrades)>0
isnewsel = change(strategy.position_size)<0 and change(strategy.opentrades)>0

buy_entry_price = isnewbuy ? price : buy_entry_price[1]
sel_entry_price = isnewsel ? price : sel_entry_price[1]
plot(title='BE', series=buy_entry_price, style=circles, color=strategy.position_size <= 0 ? na : aqua)
plot(title='SE', series=sel_entry_price, style=circles, color=strategy.position_size >= 0 ? na : aqua)
buy_appex = na(buy_appex[1]) ? price : isnewbuy ? high : high >= buy_appex[1] ? high : buy_appex[1]
sel_appex = na(sel_appex[1]) ? price : isnewsel ? low : low <= sel_appex[1] ? low : sel_appex[1]
plot(title='BA', series=buy_appex, style=circles, color=strategy.position_size <= 0 ? na : teal)
plot(title='SA', series=sel_appex, style=circles, color=strategy.position_size >= 0 ? na : teal)
buy_ts = buy_appex - sl
sel_ts = sel_appex + sl
plot(title='Bts', series=buy_ts, style=circles, color=strategy.position_size <= 0 ? na : red)
plot(title='Sts', series=sel_ts, style=circles, color=strategy.position_size >= 0 ? na : red)

buy_cond1 = crossover(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
buy_cond0 = crossover(price, ma00) and ma00 > ma01 and (USE_TRADESESSION ? istradingsession : true)
buy_entry = buy_cond1 or buy_cond0
buy_close = (not USE_TRAILINGSTOP ? low <= buy_entry_price - sl: low <= buy_ts) or high>=buy_entry_price+tp//high>=last_traded_price + tp or low<=last_traded_price - sl //high >= hh or 
sel_cond1 = crossunder(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
sel_cond0 = crossunder(price, ma00) and ma00 < ma01 and (USE_TRADESESSION ? istradingsession : true)
sel_entry = sel_cond1 or sel_cond0
sel_close = (not USE_TRAILINGSTOP ? high >= sel_entry_price + sl : high >= sel_ts) or low<=sel_entry_price-tp//low<=last_traded_price - tp or high>=last_traded_price + sl //low <= ll or 

strategy.entry('buy', long=strategy.long, qty=trade_size, comment='buy', when=buy_entry)
strategy.close('buy', when=buy_close)
strategy.entry('sell', long=strategy.short, qty=trade_size, comment='sell', when=sel_entry)
strategy.close('sell', when=sel_close)