Strategi Sinyal Tren Terdiri

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

img

Gambaran umum

Strategi ini menghasilkan sinyal perdagangan dengan menghitung Indeks Gerakan Arah (DMI) DI+ dan DI- bersama dengan Indeks Arah Rata-rata (ADX) dan Rata-rata Gerak Eksponensial (EMA). Ini memicu sinyal panjang ketika DI+ melintasi di atas DI- dan ADX di atas 20. Sinyal pendek dipicu ketika DI- melintasi di bawah DI+ dan ADX di atas 25. Sinyal stop loss adalah ketika DI- melintasi di atas DI+ dengan ADX di atas 30.

Logika Strategi

  1. Menghitung DI+, DI-, ADX

    • Gunakan ta.dmi() untuk menghitung DI+, DI-, ADX
    • DI+/DI- mengukur pergerakan harga arah
    • ADX mengukur kekuatan pergerakan harga
  2. Hitung Rata-rata Bergerak Eksponensial

    • Gunakan fungsi my_ema() khusus untuk menghitung EMA
    • EMA meratakan data harga
  3. Menghasilkan sinyal perdagangan

    • Sinyal panjang: DI+ melintasi DI- dan ADX > 20 dan mendekati > EMA
      • Menunjukkan tren naik dan meningkatnya volatilitas
    • Sinyal pendek: DI- melintasi di bawah DI+ dan ADX > 25 dan dekat < EMA
      • Menunjukkan tren menurun dan volatilitas tinggi
  4. Tentukan stop loss

    • Long stop loss: DI- melintasi DI+ dan ADX > 30
      • Menunjukkan pembalikan tren
    • Pelanggaran stop pendek: DI+ melintasi di bawah DI- dan ADX > 30
      • Menunjukkan pembalikan tren

Singkatnya, strategi ini menggabungkan indikator momentum dan analisis tren untuk perdagangan ketika tren harga yang kuat muncul, dengan stop loss untuk membatasi kerugian.

Analisis Keuntungan

  1. Dual DI menghindari sinyal palsu
    • DI tunggal dapat memberikan sinyal palsu, DI ganda memastikan tren
  2. Ambang ADX membutuhkan peningkatan volatilitas
    • Hanya memperdagangkan pergerakan volatilitas tinggi, menghindari rentang
  3. EMA melengkapi DI
    • EMA mengidentifikasi tren jangka menengah/panjang
  4. Stop loss yang ketat
    • Mengurangi kerugian dengan cepat

Analisis Risiko

  1. Stop loss yang sering
    • Pergeseran volatile dapat memicu sering berhenti
  2. Ketergantungan parameter
    • Parameter DI dan ADX yang optimal harus ditemukan
  3. Frekuensi perdagangan rendah
    • Aturan ketat mengurangi perdagangan

Dapat mengoptimalkan dengan memperluas stop loss, menyesuaikan parameter, menambahkan filter untuk meningkatkan frekuensi.

Peluang Optimalisasi

  1. Optimasi parameter
    • Mengoptimalkan parameter DI dan ADX
  2. Tambahkan filter
    • Volume, divergensi dll.
  3. Memperluas stop loss
    • Relaksasi berhenti untuk mengurangi frekuensi

Kesimpulan

Strategi ini menggabungkan indikator momentum dan analisis tren untuk memperdagangkan tren yang kuat, dengan stop ketat untuk mengendalikan 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 banyak