Purata pergerakan pantas berganda penunjuk silang strategi panjang dan pendek


Tarikh penciptaan: 2023-11-22 17:29:04 Akhirnya diubah suai: 2023-11-22 17:29:04
Salin: 0 Bilangan klik: 617
1
fokus pada
1621
Pengikut

Purata pergerakan pantas berganda penunjuk silang strategi panjang dan pendek

Gambaran keseluruhan

Strategi Trend Crossover Dual Moving Average adalah strategi trend yang menggunakan purata bergerak cepat dan purata bergerak perlahan untuk membentuk isyarat jual beli. Strategi ini menggabungkan beberapa petunjuk seperti MACD, RSI dan lain-lain untuk menentukan arah trend, dengan kemampuan trend yang lebih kuat.

Prinsip Strategi

Strategi ini dibuat berdasarkan beberapa petunjuk berikut:

  1. Rata-rata bergerak cepat dan rata-rata bergerak perlahan: melalui garis perlahan di atas garis pantas untuk memberi isyarat membeli, melalui garis perlahan di bawah garis pantas untuk memberi isyarat menjual.

  2. MACD: Apabila MACD lebih tinggi daripada garis isyarat dan MACD minimum meningkat menjadi isyarat berbilang kepala.

  3. RSI: RSI lebih tinggi daripada 50 adalah isyarat multihead, dan kurang daripada 50 adalah isyarat kosong.

  4. Oscillator pengukuran (AO): apabila AO di atas melalui 0 sumbu untuk membeli isyarat, AO di bawah melalui 0 sumbu untuk menjual isyarat.

  5. Tiga purata bergerak pada tahap garis matahari: purata bergerak pada tahap garis matahari dengan kitaran yang lebih pendek di atas purata bergerak dengan kitaran yang lebih lama sebagai isyarat membeli.

Strategi ini mengintegrasikan beberapa tempoh masa dan beberapa indikator untuk membentuk logik keputusan membeli dan menjual. Ia menghasilkan arahan membeli apabila beberapa indikator muncul pada masa yang sama dengan isyarat membeli, dan arahan menjual apabila beberapa indikator muncul pada masa yang sama dengan isyarat menjual, untuk menjejaki trend.

Analisis kelebihan

Strategi ini mempunyai beberapa kelebihan:

  1. Penghakiman gabungan pelbagai indikator, mengelakkan isyarat salah, meningkatkan ketepatan penghakiman.

  2. Menggabungkan beberapa penghakiman jangka masa, ia dapat mengenal pasti arah trend pada tahap yang lebih besar.

  3. Parameter penyesuaian yang dioptimumkan mempunyai kadar pulangan yang lebih baik.

  4. Menggunakan Stop Loss Bergerak untuk mengawal risiko dan mengelakkan kerugian daripada berkembang.

  5. Pengendalian trend automatik, tanpa campur tangan manusia, mengurangkan kos operasi.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Lebih banyak isyarat perdagangan tidak sah mungkin dihasilkan dalam keadaan gegaran. Isyarat tidak sah dapat dikurangkan dengan mengoptimumkan parameter penunjuk.

  2. Kejadian yang tidak dijangka boleh menyebabkan penarikan balik yang cepat. Hentian bergerak boleh ditetapkan untuk mengawal kerugian.

  3. Peraturan penentuan isyarat pelbagai ruang lebih rumit, dan pengoptimuman parameter memerlukan sokongan data sejarah yang banyak.

  4. Tetapan tracking stop yang tidak betul boleh menyebabkan stop prematur. Ujian berulang diperlukan untuk menentukan parameter optimum.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Uji kombinasi lebih banyak indikator untuk mencari isyarat perdagangan yang lebih stabil dan tepat. Contohnya indikator kadar turun naik, indikator OBV dan sebagainya.

  2. Mengoptimumkan parameter penunjuk, mengurangkan jumlah transaksi yang tidak sah. Menggunakan pembelajaran mesin dan algoritma genetik untuk mencari parameter terbaik secara automatik.

  3. Menambah teknologi integrasi model, mengintegrasikan lebih banyak keputusan model strategi bebas. meningkatkan kestabilan.

  4. Masuk pada tahap frekuensi tinggi, keluar pada tahap frekuensi rendah. Mengurangkan risiko tersandung.

  5. Tambah modul kawalan angin kuantitatif, kawalan ketat peratusan hentian tunggal, peratusan penarikan balik maksimum dan sebagainya.

ringkaskan

Strategi multi ruang silang dua penunjuk rata-rata bergerak membentuk isyarat perdagangan melalui persilangan rata-rata bergerak cepat dan rata-rata bergerak perlahan, dan menggabungkan beberapa penunjuk untuk menentukan arah trend, seperti MACD, RSI, dan lain-lain, untuk menjejaki trend secara automatik. Strategi ini mempunyai ruang untuk pengoptimuman yang lebih besar, dengan memperkenalkan lebih banyak penunjuk, menyesuaikan parameter, dan mengintegrasikan model.

Kod sumber strategi
/*backtest
start: 2023-10-22 00:00:00
end: 2023-11-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('SteffVans', shorttitle='SteffVans strategy', overlay=true, process_orders_on_close = true)

// Input settings
macd_fast_length = input(12)
macd_slow_length = input(26)
macd_signal_length = input(9)

// Calculate MACD values
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
mg = ta.lowest(signal_line, 30) >= -0

// RSI
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "Bollinger Bands" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

rsiLengthInput = input.int(14, minval=1)
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
RSI = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))


//  AO
AO = ta.sma((high + low) / 2, 5) - ta.sma((high + low) / 2, 34)
crossaosell = AO < AO[1] and AO[1] < AO[2] and AO[2] > AO[3]  and ta.lowest(low,3)

// Uptrend sma
len1 = input.int(5, minval=1)
len2 = input.int(10, minval=1)
len3 = input.int(20, minval=1)
src = input(close)

out1 = ta.sma(src, len1)
out2 = ta.sma(src, len2)
out3 = ta.sma(src, len3)



// Timeframe 
macdl60 = request.security(syminfo.tickerid, "60", signal_line,lookahead = barmerge.lookahead_on)
ao = request.security(syminfo.tickerid, "60", AO,lookahead = barmerge.lookahead_on)
rsi = request.security(syminfo.tickerid, "60", RSI,lookahead = barmerge.lookahead_on)
good = request.security(syminfo.tickerid, "60", mg,lookahead = barmerge.lookahead_on)
bad = request.security(syminfo.tickerid, "60", crossaosell,lookahead = barmerge.lookahead_on)

ma1 = request.security(syminfo.tickerid, "D", out1,lookahead = barmerge.lookahead_on)
ma2 = request.security(syminfo.tickerid, "D", out2, lookahead = barmerge.lookahead_on)
ma3 = request.security(syminfo.tickerid, "D", out3, lookahead = barmerge.lookahead_on)






// Kriteria BUY and SELL
uptrend1 =  request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) > ma1 and ma1 > ma3 and ma2 > ma3
uptrend2 = ta.lowest(ma1,12) > ta.lowest(ma3,12) and ta.lowest(ma2,12) > ta.lowest(ma3,12) 


 

// Triger BUY and SELL 
cross1 = ao > ao[1] and ao[1] < ao[2] and ao > 0 and good and rsi >= 60 and uptrend1
cross2 = ao > 0 and ao[1] < 0 and good and rsi >=50 and uptrend1
cross3 =  ao > 0 and ao[1] < 0 and not good and uptrend2 and uptrend1
cross4 =  ao > ao[1] and ao[1] > ao[2] and ao[2] < ao[3] and ao[3] < ao[4]  and not good and uptrend2 and uptrend1

s1 = ao < ao[1] and ao[1] < ao[2] and ao[2] < ao[3] and ao > 0 and rsi < 50 and request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) < ma1
s2 =  ao < 0 and ao < ao[2] and rsi < 50 and request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) < ma1 

// Variabel Buy dan Sell
buySignal = false
sellSignal = false

// Syarat masuk Buy
buyCondition =  cross1 or cross2 or cross3 or cross4
if buyCondition
    buySignal := true

// Syarat masuk Sell
sellCondition = s1 or s2
if sellCondition
    sellSignal := true

// Reset sinyal jika ada sinyal berulang
if buySignal and sellSignal
    sellSignal := false
if sellSignal and buySignal
    buySignal := false

// Logika perdagangan
if buySignal
    strategy.entry("Buy", strategy.long, comment = "BUY")
if sellSignal
    strategy.close("Buy")


plotshape(cross1,title = "Stefkuy1", style = shape.labelup, location = location.belowbar, color = color.green,text = "1", textcolor = color.white,size = size.small)
plotshape(cross2,title = "Stefkuy2", style = shape.labelup, location = location.belowbar, color = color.green, text = "2", textcolor= color.white, size = size.small)
plotshape(cross3,title = "StefVan1", style = shape.labelup, location = location.belowbar, color = color.rgb(0, 153, 255), text = "3", textcolor= color.white,size = size.small)
plotshape(cross4,title = "StefVan2", style = shape.labelup, location = location.belowbar, color = color.rgb(0, 153, 255), text = "4", textcolor= color.white,size = size.small)