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.
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.
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.
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.
Strategi ini mengambil isyarat STC sebagai masa utama untuk masuk, menggunakan MA sebagai penilaian trend tambahan, dan ATR untuk menghentikan kerugian dan mengambil keuntungan.
Strategi ini menggabungkan beberapa penunjuk untuk menilai trend dan titik pembalikan, meningkatkan ketepatan isyarat perdagangan.
STC dapat menangkap isyarat pembalikan dan mengelakkan terperangkap dalam trend. MA menapis isyarat pembalikan yang tidak pasti untuk memastikan mengikuti trend utama.
ATR menetapkan stop loss dinamik dan mengambil keuntungan berdasarkan turun naik pasaran, mengelakkan kerugian besar.
Gabungan pelbagai penunjuk membentuk keupayaan pengesanan trend yang kuat.
STC mempunyai kelewatan masa, yang mungkin terlepas masa optimum untuk pembalikan harga.
MA cenderung terlambat semasa turun naik harga yang ganas, yang boleh menghasilkan isyarat yang salah.
Pengganda ATR harus longgar, atau tidak berfungsi sementara semasa trend besar.
Lebih banyak penunjuk bermakna lebih banyak peluang untuk memukul stop loss. Parameter harus diselaraskan untuk mengelakkan stop loss yang tidak perlu.
Sesuaikan parameter STC untuk mencari kombinasi respon yang lebih cepat untuk pembalikan.
Mengoptimumkan parameter tempoh MA untuk pengesanan trend yang lebih baik.
Kesan ujian kelipatan ATR yang berbeza.
Cuba ganti STC dengan penunjuk lain untuk kecocokan yang lebih baik.
Memperkenalkan algoritma pembelajaran mesin untuk pengoptimuman automatik pelbagai parameter.
Pertimbangkan trend kitaran besar dan membezakan peringkat yang berbeza.
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