Momentum dan Moving Average Kombinasi Strategi Panjang

Penulis:ChaoZhang, Tanggal: 2024-02-29 11:57:18
Tag:

img

Gambaran umum

Prinsip-prinsip

Pos-pos dalam strategi ini didasarkan pada indikator MACD dan DMI:

  • Ketika MACD positif (garis MACD di atas garis sinyal), ini menunjukkan penguatan momentum naik di pasar

Ketika kedua kondisi terpenuhi pada saat yang sama, pergi panjang.

Ada dua standar untuk keluar posisi:

  • Fixed take profit: harga penutupan naik ke persentase yang ditetapkan untuk mengambil keuntungan

Keuntungan

  • Kombinasi MACD dan DMI dapat lebih dapat diandalkan menentukan arah tren pasar dan mengurangi operasi yang salah
  • Kondisi mengambil keuntungan menggabungkan fixed take profit dan volatility stop loss yang dapat secara fleksibel mengunci keuntungan

Risiko

  • Baik MACD maupun DMI dapat menghasilkan sinyal palsu, menyebabkan kerugian yang tidak perlu
  • Fixed take profit dapat mencegah keuntungan yang dimaksimalkan

Arahan Optimasi

  • Pertimbangkan untuk menambahkan indikator lain untuk menyaring sinyal masuk, seperti menggunakan indikator KDJ untuk menentukan apakah terlalu banyak dibeli atau terlalu banyak dijual
  • Berbagai parameter dapat diuji untuk mengambil keuntungan yang lebih baik dan efek stop loss

Ringkasan

Strategi ini mensintesis beberapa indikator untuk menilai tren dan kondisi pasar, dan campur tangan dalam situasi dengan probabilitas menguntungkan yang relatif besar. Kondisi pengambilan keuntungan juga telah dirancang secara optimal untuk memastikan keuntungan tertentu sambil mempertimbangkan fleksibilitas mengunci keuntungan. Melalui penyesuaian parameter dan manajemen risiko lebih lanjut, strategi ini dapat menjadi sistem perdagangan kuantitatif yang stabil.


/*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())


Lebih banyak