STC MA ATR Strategi Dagangan Trend Bersepadu

Penulis:ChaoZhang, Tarikh: 2023-10-17 14:34:10
Tag:

img

Ringkasan

Strategi ini menggabungkan penunjuk teknikal STC, Moving Average MA dan Average True Range ATR untuk menilai trend dan melaksanakan perdagangan pengesanan trend yang agak stabil.

Prinsip Strategi

  1. Indikator STC menilai pembalikan trend. Ia menggunakan garisan pantas dikurangkan garis perlahan, kemudian memproses pelembab sekunder, membentuk isyarat trend yang konsisten. Isyarat membeli datang apabila penunjuk melintasi di atas paksi 0, dan isyarat jual di bawah paksi 0.

  2. Moving Average MA menilai arah trend. Apabila harga saham melintasi di atas MA, ia menandakan trend menaik, memberikan isyarat memegang kedudukan panjang. Apabila harga melintasi di bawah MA, ia menandakan trend menurun, memberikan isyarat memegang kedudukan pendek.

  3. Indikator ATR menetapkan stop loss dan mengambil keuntungan. ATR boleh menyesuaikan secara dinamik stop loss dan mengambil mata keuntungan berdasarkan turun naik pasaran. Dan ATR bertindak sebagai isyarat untuk arah perdagangan itu sendiri, meningkat dalam trend menaik dan jatuh dalam trend menurun.

  4. Strategi ini mengambil isyarat STC sebagai masa utama untuk masuk, menggunakan MA sebagai penilaian trend tambahan, dan ATR untuk menghentikan kerugian dan mengambil keuntungan.

Analisis Kelebihan

  1. Strategi ini menggabungkan beberapa penunjuk untuk menilai trend dan titik pembalikan, meningkatkan ketepatan isyarat perdagangan.

  2. STC dapat menangkap isyarat pembalikan dan mengelakkan terperangkap dalam trend. MA menapis isyarat pembalikan yang tidak pasti untuk memastikan mengikuti trend utama.

  3. ATR menetapkan stop loss dinamik dan mengambil keuntungan berdasarkan turun naik pasaran, mengelakkan kerugian besar.

  4. Gabungan pelbagai penunjuk membentuk keupayaan pengesanan trend yang kuat.

Analisis Risiko

  1. STC mempunyai kelewatan masa, yang mungkin terlepas masa optimum untuk pembalikan harga.

  2. MA cenderung terlambat semasa turun naik harga yang ganas, yang boleh menghasilkan isyarat yang salah.

  3. Pengganda ATR harus longgar, atau tidak berfungsi sementara semasa trend besar.

  4. Lebih banyak penunjuk bermakna lebih banyak peluang untuk memukul stop loss. Parameter harus diselaraskan untuk mengelakkan stop loss yang tidak perlu.

Arahan pengoptimuman

  1. Sesuaikan parameter STC untuk mencari kombinasi respon yang lebih cepat untuk pembalikan.

  2. Mengoptimumkan parameter tempoh MA untuk pengesanan trend yang lebih baik.

  3. Kesan ujian kelipatan ATR yang berbeza.

  4. Cuba ganti STC dengan penunjuk lain untuk kecocokan yang lebih baik.

  5. Memperkenalkan algoritma pembelajaran mesin untuk pengoptimuman automatik pelbagai parameter.

  6. Pertimbangkan trend kitaran besar dan membezakan peringkat yang berbeza.

Ringkasan

Strategi STC MA ATR menggabungkan 3 penunjuk untuk menangkap titik pembalikan trend untuk perdagangan pengesanan trend yang stabil. Kombinasi penunjuk menapis isyarat palsu dan mengawal risiko dengan stop loss / mengambil keuntungan. Ia mempunyai ketahanan dan kestabilan yang kuat. Penambahbaikan lanjut dapat dicapai melalui pengoptimuman parameter dan pengenalan algoritma. Secara keseluruhan ia adalah pilihan strategi yang boleh dipercayai dan sederhana.


/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 4h
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/
// © Romedius

//@version=5
strategy("My Strategy", overlay=true, margin_long=100, margin_short=100)

// STC
EEEEEE=input(12,"Length",group="STC")
BBBB=input(26,"FastLength",group="STC")
BBBBB=input(50,"SlowLength",group="STC")

AAAA(BBB, BBBB, BBBBB) =>
    fastMA = ta.ema(BBB, BBBB)
    slowMA = ta.ema(BBB, BBBBB)
    AAAA = fastMA - slowMA
    AAAA
    
AAAAA(EEEEEE, BBBB, BBBBB) => 
    //AAA=input(0.5)
    var AAA = 0.5
    var CCCCC = 0.0
    var DDD = 0.0
    var DDDDDD = 0.0
    var EEEEE = 0.0
    BBBBBB = AAAA(close,BBBB,BBBBB)     
    CCC = ta.lowest(BBBBBB, EEEEEE)
    CCCC = ta.highest(BBBBBB, EEEEEE) - CCC    
    CCCCC := (CCCC > 0 ? ((BBBBBB - CCC) / CCCC) * 100 : nz(CCCCC[1])) 
    DDD := (na(DDD[1]) ? CCCCC : DDD[1] + (AAA * (CCCCC - DDD[1]))) 
    DDDD = ta.lowest(DDD, EEEEEE) 
    DDDDD = ta.highest(DDD, EEEEEE) - DDDD     
    DDDDDD := (DDDDD > 0 ? ((DDD - DDDD) / DDDDD) * 100 : nz(DDDDDD[1])) 
    EEEEE := (na(EEEEE[1]) ? DDDDDD : EEEEE[1] + (AAA * (DDDDDD - EEEEE[1])))
    EEEEE

mAAAAA = AAAAA(EEEEEE,BBBB,BBBBB)
stc = mAAAAA > mAAAAA[1] ? true : false
stc_sig = stc == true and stc[1] == false ? 1 : stc == false and stc[1] == true ? -1 : 0
stc_long = stc_sig == 1
stc_short = stc_sig == -1
// STC end

// ATR stops
nATRPeriod = input(5,group="ATR Stops")
nATRMultip = input(3.5,group="ATR Stops")

xATR = ta.atr(nATRPeriod)
nLoss = nATRMultip * xATR

xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) : close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss

pos = 0
pos := close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0) ? 1 : close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)

atr_sig = pos == -1 ? false : true
// ATR stops end

// ma
ma_len = input(200, title="MA Length", group="Moving Average")
ma = ta.sma(close, 200)
ma_sig = close < ma ? false : true
// ma end

// strategy entries
tp_mult = input(2, title="Take Profit ATR Multiplier", group="Strategy")
sl_mult = input(1, title="Stop Loss ATR Multiplier", group="Strategy")
early_stop = input(true, title="Close position when ATR changes color")

atr_stop = if close < xATRTrailingStop
    close - (close - xATRTrailingStop) * sl_mult
else
    close + (xATRTrailingStop - close) * sl_mult

longCondition = atr_sig == true and stc_sig == 1 and ma_sig == true
shortCondition = atr_sig == false and stc_sig == -1 and ma_sig == false

if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", limit=close + xATR * tp_mult, stop=atr_stop)
else if atr_sig == false and early_stop
    strategy.close("Long")

if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", limit=close - xATR * tp_mult, stop=atr_stop)
else if atr_sig == true and early_stop
    strategy.close("Short")
    
// plot stuff
atr_color = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(atr_stop, title="ATR Stop", color=atr_color)

ma_color = ma_sig ? color.green : color.red
plot(ma, title="Moving Average", color=ma_color)

stc_color = stc_long ? color.green : color.red
plotshape(stc_long, style=shape.triangleup, color=stc_color, title="STC Long Signal", size=size.tiny)
plotshape(stc_short, style=shape.triangledown, color=stc_color, title="STC Short Signal", size=size.tiny)
// plot stuff end

Lebih lanjut