Strategi Isyarat Trend Tumpukan

Penulis:ChaoZhang, Tarikh: 2024-02-18 10:00:22
Tag:

img

Ringkasan

Strategi ini menjana isyarat perdagangan dengan mengira Indeks Gerak Arah (DMI) DI+ dan DI- bersama dengan Indeks Arah Purata (ADX) dan Purata Bergerak Eksponen (EMA). Ia mencetuskan isyarat panjang apabila DI+ melintasi di atas DI- dan ADX di atas 20. Isyarat pendek dicetuskan apabila DI- melintasi di bawah DI+ dan ADX di atas 25. Isyarat stop loss adalah apabila DI- melintasi di atas DI+ dengan ADX di atas 30.

Logika Strategi

  1. Mengira DI+, DI-, ADX

    • Gunakan ta.dmi() untuk mengira DI+, DI-, ADX
    • DI+/DI- mengukur pergerakan harga arah
    • ADX mengukur kekuatan pergerakan harga
  2. Mengira purata bergerak eksponen

    • Gunakan fungsi my_ema() khusus untuk mengira EMA
    • EMA meluruskan data harga
  3. Menghasilkan isyarat perdagangan

    • Isyarat panjang: DI+ melintasi di atas DI- dan ADX > 20 dan dekat > EMA
      • Menunjukkan trend menaik dan peningkatan turun naik
    • Isyarat pendek: DI- melintasi di bawah DI+ dan ADX > 25 dan dekat < EMA
      • Menunjukkan trend menurun dan turun naik yang tinggi
  4. Tetapkan stop loss

    • Hentian rugi panjang: DI- melintasi di atas DI+ dan ADX > 30
      • Menunjukkan pembalikan trend
    • Hentian kehilangan pendek: DI+ melintasi di bawah DI- dan ADX > 30
      • Menunjukkan pembalikan trend

Ringkasnya, strategi ini menggabungkan indikator analisis momentum dan trend untuk berdagang apabila trend harga yang kuat muncul, dengan menghentikan kerugian untuk mengehadkan kerugian.

Analisis Kelebihan

  1. Dual DI mengelakkan isyarat palsu
    • DI tunggal boleh memberikan isyarat palsu, DI berganda memastikan trend
  2. Sempadan ADX memerlukan peningkatan turun naik
    • Hanya berdagang pergerakan turun naik yang tinggi, mengelakkan julat
  3. EMA melengkapkan DI
    • EMA mengenal pasti trend jangka menengah/panjang
  4. Stop loss yang ketat
    • Mengurangkan kerugian dengan cepat

Analisis Risiko

  1. Stop loss yang kerap
    • Pergolakan mudah berubah boleh mencetuskan hentian yang kerap
  2. Kebergantungan parameter
    • Parameter DI dan ADX yang optimum perlu dijumpai
  3. Frekuensi perdagangan yang rendah
    • Peraturan ketat mengurangkan perdagangan

Boleh mengoptimumkan dengan memperluaskan stop loss, menyesuaikan parameter, menambah penapis untuk meningkatkan kekerapan.

Peluang Pengoptimuman

  1. Pengoptimuman Parameter
    • Mengoptimumkan parameter DI dan ADX
  2. Tambah penapis
    • Volume, perbezaan dan lain-lain.
  3. Memperluas stop loss
    • Relaks berhenti untuk mengurangkan kekerapan

Kesimpulan

Strategi ini menggabungkan indikator analisis momentum dan trend untuk berdagang trend yang kuat, dengan berhenti yang ketat untuk mengawal risiko.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Tamil_FNO_Trader

//@version=5
strategy("Overlay Signals by TFOT", overlay=true)

// Calculate DMI
len = input.int(14, minval=1, title="DI Length")
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
[diplus, diminus, adx] = ta.dmi(len, lensig)

// Get EMA
emalen = input.int(26, minval=1, title = "EMA Length")
emasrc = input.source(close, title = "EMA Source")

my_ema(src, length) =>
    alpha = 2 / (length + 1)
    sum = 0.0
    sum := na(sum[1]) ? src : alpha * src + (1 - alpha) * nz(sum[1])
EMA2 = my_ema(emasrc, emalen)

// Variables
var bool buycondition1 = false
var bool sellcondition1 = false

var int firstbuybar = na
var int firstsellbar = na

var int buyexitbar = na
var int sellexitbar = na

var bool buyexit1 = false
var bool sellexit1 = false

// Buy & Sell Conditions
buycondition1 := (ta.crossover(diplus, diminus)) and (adx > 20) and (close > EMA2) and na(firstbuybar)
sellcondition1 := (ta.crossover(diminus, diplus)) and (adx > 25) and (close < EMA2) and na(firstsellbar)

buyexit1 := ta.crossover(diminus, diplus) and (adx > 30) and na(buyexitbar)
sellexit1 := ta.crossover(diplus, diminus) and (adx > 30) and na(sellexitbar)

if buycondition1
    if(na(firstbuybar))
        firstbuybar := bar_index
        buyexitbar := na
        firstsellbar := na
        strategy.entry("Buy", strategy.long)

if sellcondition1
    if(na(firstsellbar))
        firstsellbar := bar_index
        sellexitbar := na
        firstbuybar := na
        strategy.entry("Sell", strategy.short)

if buyexit1 and not na(firstbuybar)
    if(na(buyexitbar))
        buyexitbar := bar_index
        firstbuybar := na
        firstsellbar := na
        strategy.close("Buy")

if sellexit1 and not na(firstsellbar)
    if(na(sellexitbar))
        sellexitbar := bar_index
        firstsellbar := na
        firstbuybar := na
        strategy.close("Sell")

// Plot signals on chart
hl = input.bool(defval = true, title = "Signal Labels")

plotshape(hl and buycondition1 and bar_index == firstbuybar ? true : na, "Buy", style = shape.labelup, location = location.belowbar, color = color.green, text = "Buy", textcolor = color.white, size = size.tiny)
plotshape(hl and sellcondition1 and bar_index == firstsellbar ? true : na, "Sell", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell", textcolor = color.white, size = size.tiny)

plotshape(hl and buyexit1 and bar_index == buyexitbar ? true : na, "Buy Exit", style = shape.labelup, location = location.belowbar, color = color.red, text = "Buy X", textcolor = color.white, size = size.tiny)
plotshape(hl and sellexit1 and bar_index == sellexitbar ? true : na, "Sell Exit", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell X", textcolor = color.white, size = size.tiny)



Lebih lanjut