Strategi crossover panjang dan pendek indikator ganda rata-rata bergerak cepat


Tanggal Pembuatan: 2023-11-22 17:29:04 Akhirnya memodifikasi: 2023-11-22 17:29:04
menyalin: 0 Jumlah klik: 615
1
fokus pada
1617
Pengikut

Strategi crossover panjang dan pendek indikator ganda rata-rata bergerak cepat

Ringkasan

Dual Moving Average Crossover Trend Strategy adalah strategi pelacakan tren yang menggunakan persilangan rata-rata bergerak cepat dan rata-rata bergerak lambat untuk membentuk sinyal jual beli. Strategi ini menggabungkan beberapa indikator seperti MACD, RSI, dan lain-lain untuk menentukan arah tren, dan memiliki kemampuan pelacakan tren yang kuat.

Prinsip Strategi

Strategi ini didasarkan pada beberapa indikator:

  1. Fast Moving Average dan Slow Moving Average: Di atas garis cepat melewati garis lambat sebagai sinyal beli, di bawah garis cepat melewati garis lambat sebagai sinyal jual.

  2. MACD: sinyal multihead ketika MACD lebih tinggi dari garis sinyal dan MACD minimum naik.

  3. RSI: RSI di atas 50 adalah sinyal multihead, di bawah 50 adalah sinyal kosong.

  4. Oscillator pengukur (AO): ketika AO di atas melewati 0 sumbu untuk sinyal beli, AO di bawah melewati 0 sumbu untuk sinyal jual.

  5. Tiga garis rata-rata bergerak di tingkat garis harian: Rata-rata bergerak berperiode lebih pendek di tingkat garis harian dan rata-rata bergerak berperiode lebih lama di tingkat garis harian adalah sinyal beli.

Strategi ini mengintegrasikan beberapa periode waktu dan beberapa indikator untuk membentuk logika keputusan membeli dan menjual. Menghasilkan instruksi membeli ketika beberapa indikator muncul pada saat yang sama dengan sinyal beli, menghasilkan instruksi jual ketika beberapa indikator muncul pada saat yang sama dengan sinyal jual, untuk melacak tren.

Analisis Keunggulan

Strategi ini memiliki beberapa keuntungan:

  1. Pengukuran dengan kombinasi beberapa indikator, menghindari sinyal yang salah, dan meningkatkan akurasi penilaian.

  2. Pengertian ini dapat digabungkan dengan beberapa periode waktu untuk mengidentifikasi arah tren pada tingkat yang lebih besar.

  3. Parameter indikator telah dioptimalkan, Parameters tuning, memiliki tingkat pengembalian yang lebih baik.

  4. Menggunakan Stop Loss Mobile untuk mengendalikan risiko dan mencegah pertumbuhan kerugian.

  5. Menggunakan sistem tracking otomatis, tanpa intervensi manusia, mengurangi biaya operasional.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Dalam situasi yang bergejolak mungkin menghasilkan lebih banyak sinyal perdagangan tidak valid. Dapat mengurangi sinyal tidak valid dengan mengoptimalkan parameter indikator.

  2. Kecelakaan dapat menyebabkan penarikan cepat. Stop loss mobile dapat diatur untuk mengendalikan kerugian.

  3. Aturan penentuan sinyal multispace lebih rumit, dan optimasi parameter membutuhkan banyak data historis untuk mendukungnya.

  4. Pengaturan tracking stop yang tidak tepat dapat menyebabkan stop prematur. Perlu uji ulang untuk menentukan parameter optimal.

Arah optimasi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. Uji kombinasi indikator yang lebih banyak untuk mencari sinyal perdagangan yang lebih stabil dan akurat, seperti indikator volatilitas, indikator OBV, dll.

  2. Optimalkan parameter indikator, mengurangi jumlah transaksi yang tidak valid. Menggunakan pembelajaran mesin dan algoritma genetik untuk mencari parameter yang optimal secara otomatis.

  3. Menambahkan teknologi integrasi model, mengintegrasikan lebih banyak keputusan model strategi independen. Meningkatkan stabilitas

  4. Masuk di tingkat frekuensi tinggi, keluar di tingkat frekuensi rendah. Mengurangi risiko tersandung.

  5. Menambahkan modul pengendalian angin kuantitatif, kontrol ketat pada rasio stop loss tunggal, rasio penarikan maksimum, dll.

Meringkaskan

Kecepatan rata-rata dua indikator lintas multi-kamar strategi dengan cepat bergerak rata-rata dan bergerak lambat rata-rata lintas membentuk sinyal perdagangan, dan digabungkan dengan MACD, RSI dan beberapa indikator untuk menentukan arah tren, untuk mencapai otomatisasi trend tracking. Strategi ini memiliki ruang untuk optimasi yang lebih besar, dengan memperkenalkan lebih banyak indikator, menyesuaikan parameter dan model integrasi dan lain-lain diharapkan untuk mendapatkan efek strategi yang lebih baik.

Kode 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)