Penunjuk momentum digabungkan dengan purata bergerak untuk melakukan strategi panjang


Tarikh penciptaan: 2024-02-29 11:57:18 Akhirnya diubah suai: 2024-02-29 11:57:18
Salin: 7 Bilangan klik: 536
1
fokus pada
1617
Pengikut

Penunjuk momentum digabungkan dengan purata bergerak untuk melakukan strategi panjang

Gambaran keseluruhan

Strategi ini menggabungkan penunjuk momentum MACD dan penunjuk trend DMI untuk melakukan banyak operasi apabila memenuhi syarat. Keluarannya menetapkan hentian tetap dan berhenti trailing turun naik yang disesuaikan untuk mengunci keuntungan.

Prinsip

Entries untuk strategi ini bergantung kepada MACD dan DMI:

  • Apabila MACD adalah positif ((garis MACD lebih tinggi daripada garis isyarat), ia menunjukkan peningkatan tenaga geseran di pasaran
  • DI+ dalam DMI lebih tinggi daripada DI- menandakan pasaran berada dalam tahap trend ke atas

Apabila kedua-dua syarat di atas dipenuhi secara bersamaan, anda boleh membuka lebih banyak kedudukan.

Terdapat dua kriteria untuk keluar dari kedudukan:

  • Hentian tetap: tutup Peratusan kenaikan harga mencapai Hentian set
  • Trailing Stop Loss: Menggunakan ATR dan harga tertinggi terkini untuk mengira kedudukan trailing stop yang disesuaikan secara dinamik. Trailing stop loss ini boleh digunakan untuk memantau turun naik pasaran

Kelebihan

  • Kombinasi MACD dan DMI dapat menilai arah trend pasaran dengan lebih dipercayai, mengurangkan kesilapan
  • Syarat Stop Loss menggabungkan Stop Loss Tetap dan Stop Loss Berfluktuasi, yang membolehkan anda mengunci keuntungan secara fleksibel

Risiko

  • MACD dan DMI boleh menghasilkan isyarat palsu yang menyebabkan kerugian yang tidak perlu
  • Penangguhan tetap mungkin tidak dapat memaksimumkan keuntungan
  • Trails yang mengalami kemerosotan pergerakan mungkin tidak disesuaikan dengan kelajuan, terlalu radikal atau konservatif

Arah pengoptimuman

  • Anda boleh pertimbangkan untuk menyaring isyarat masuk dengan penunjuk lain, seperti menggunakan KDJ untuk menentukan sama ada anda telah membeli atau menjual terlalu banyak
  • Parameter yang berbeza boleh diuji untuk mendapatkan kesan yang lebih baik dari stop-loss
  • Parameter seperti purata bergerak boleh disesuaikan mengikut jenis dagangan tertentu, sistem pengoptimuman

ringkaskan

Strategi ini mengintegrasikan beberapa petunjuk untuk menilai trend dan keadaan pasaran, dan campur tangan dalam keadaan keuntungan yang berkemungkinan besar. Keadaan berhenti juga telah dirancang dengan optimum, dengan mempertimbangkan fleksibiliti penguncian pendapatan sambil menjamin keuntungan tertentu. Dengan penyesuaian parameter dan pengurusan risiko lebih lanjut, strategi ini dapat menjadi sistem perdagangan kuantitatif dengan output yang stabil.

Kod sumber strategi
/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 2h
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/
//@version=4
strategy(shorttitle='(MACD + DMI Scalping with Volatility Stop',title='MACD + DMI Scalping with Volatility Stop by (Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works better on 3h, 1h, 2h, 4h

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true

// DMI and MACD inputs and calculations

[pos_dm, neg_dm, avg_dm] = dmi(14, 14)
[macd, macd_signal, macd_histogram] = macd(close, 12, 26, 9)


Take_profit= ((input (3))/100)

longTakeProfit = strategy.position_avg_price * (1 + Take_profit)

length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(2.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)


closeLong = close > longTakeProfit or crossunder(close, vStop)


//Entry 
strategy.entry(id="long", long = true, when = crossover(macd, macd_signal) and pos_dm > neg_dm and window())


//Exit
strategy.close("long", when = closeLong and window())