Indikator momentum dikombinasikan dengan moving average untuk melakukan strategi long


Tanggal Pembuatan: 2024-02-29 11:57:18 Akhirnya memodifikasi: 2024-02-29 11:57:18
menyalin: 7 Jumlah klik: 536
1
fokus pada
1617
Pengikut

Indikator momentum dikombinasikan dengan moving average untuk melakukan strategi long

Ringkasan

Strategi ini menggabungkan indikator momentum MACD dan indikator tren DMI untuk melakukan beberapa operasi ketika memenuhi syarat. Keluarannya memiliki set stop yang tetap dan trailing stop yang dapat disesuaikan untuk mengunci keuntungan.

Prinsip

Entries untuk strategi ini bergantung pada indikator MACD dan DMI:

  • Ketika MACD adalah positif (garis MACD lebih tinggi dari garis Signal), ini menunjukkan peningkatan momentum di pasar
  • Di dalam DMI, DI+ lebih tinggi dari DI- menunjukkan bahwa pasar berada dalam fase tren ke atas

Jika kedua kondisi tersebut terpenuhi, maka Anda akan melakukan over-opening.

Posisi keluar memiliki dua kriteria:

  • Set Stop: close Persentase kenaikan harga mencapai set Stop
  • Trailing Stop Loss: Menggunakan ATR dan harga tertinggi terbaru untuk menghitung posisi trailing stop yang disesuaikan secara dinamis. Trailing stop loss dapat digunakan untuk memantau volatilitas pasar.

Keunggulan

  • Kombinasi antara MACD dan DMI dapat digunakan untuk menilai arah tren pasar dengan lebih andal dan mengurangi kesalahan
  • Kondisi stop loss menggabungkan stop loss tetap dan stop loss fluktuatif, yang memungkinkan keuntungan untuk dikunci secara fleksibel

Risiko

  • MACD dan DMI dapat menghasilkan sinyal palsu yang menyebabkan kerugian yang tidak perlu
  • Stop loss bisa membuat keuntungan tidak maksimal.
  • Trails dengan volatilitas yang terganggu, kecepatan yang mungkin tidak disesuaikan, terlalu radikal, atau konservatif

Arah optimasi

  • Anda dapat mempertimbangkan untuk memasukkan indikator lain untuk memfilter sinyal masuk, misalnya menggunakan indikator KDJ untuk menentukan apakah ada overbought atau oversold
  • Anda dapat menguji parameter yang berbeda untuk mendapatkan efek stop-loss yang lebih baik
  • Parameter seperti moving averages dapat disesuaikan dengan jenis transaksi tertentu, sistem optimasi

Meringkaskan

Strategi ini mengintegrasikan beberapa indikator untuk menilai tren dan kondisi pasar, dan melakukan intervensi dalam situasi yang lebih menguntungkan. Kondisi stop-loss juga dirancang secara optimal, dengan mempertimbangkan fleksibilitas penguncian pendapatan sambil menjamin keuntungan tertentu. Dengan penyesuaian parameter dan manajemen risiko lebih lanjut, strategi ini dapat menjadi sistem perdagangan kuantitatif dengan output yang stabil.

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