STC MA ATR Chiến lược giao dịch xu hướng tích hợp

Tác giả:ChaoZhang, Ngày: 2023-10-17 14:34:10
Tags:

img

Tổng quan

Chiến lược này kết hợp các chỉ số kỹ thuật STC, Moving Average MA và Average True Range ATR để đánh giá xu hướng và thực hiện giao dịch theo dõi xu hướng tương đối ổn định.

Nguyên tắc chiến lược

  1. Chỉ số STC đánh giá sự đảo ngược xu hướng. Nó sử dụng đường nhanh trừ đường chậm, sau đó xử lý làm mịn thứ cấp, tạo ra các tín hiệu xu hướng nhất quán.

  2. Moving Average MA đánh giá hướng xu hướng. Khi giá cổ phiếu vượt trên MA, nó báo hiệu xu hướng tăng, cho tín hiệu giữ vị trí dài. Khi giá vượt dưới MA, nó báo hiệu xu hướng giảm, cho tín hiệu giữ vị trí ngắn.

  3. Chỉ số ATR thiết lập stop loss và take profit. ATR có thể điều chỉnh stop loss và take profit dựa trên biến động của thị trường. Và ATR hoạt động như một tín hiệu cho hướng giao dịch, tăng trong xu hướng tăng và giảm trong xu hướng giảm.

  4. Chiến lược này sử dụng tín hiệu STC làm thời gian chính để vào, sử dụng MA như là phán đoán xu hướng phụ trợ và ATR để dừng lỗ và lấy lợi nhuận. Khi STC đưa ra tín hiệu mua, nếu MA cũng hiển thị xu hướng tăng và ATR tăng, nó mở vị trí dài; khi STC đưa ra tín hiệu bán, nếu MA hiển thị xu hướng giảm và ATR giảm, nó mở vị trí ngắn.

Phân tích lợi thế

  1. Chiến lược kết hợp nhiều chỉ số để đánh giá xu hướng và điểm đảo ngược, cải thiện độ chính xác của tín hiệu giao dịch.

  2. STC có thể nắm bắt các tín hiệu đảo ngược và tránh bị mắc kẹt trong xu hướng. MA lọc các tín hiệu đảo ngược không chắc chắn để đảm bảo theo xu hướng chính.

  3. ATR thiết lập stop loss động và lấy lợi nhuận dựa trên sự biến động của thị trường, tránh thua lỗ lớn.

  4. Sự kết hợp của nhiều chỉ số tạo ra khả năng theo dõi xu hướng mạnh mẽ.

Phân tích rủi ro

  1. STC có thời gian trễ, có thể bỏ lỡ thời gian tối ưu để đảo ngược giá.

  2. MA có xu hướng chậm lại trong các biến động giá mạnh mẽ, có thể tạo ra các tín hiệu sai.

  3. Lợi nhuận dừng ATR có thể đạt được trong vài giây.

  4. Nhiều chỉ số hơn có nghĩa là nhiều cơ hội để đạt được điểm dừng lỗ.

Hướng dẫn tối ưu hóa

  1. Điều chỉnh các thông số STC để tìm kết hợp phản ứng nhanh hơn để đảo ngược.

  2. Tối ưu hóa tham số thời gian MA để theo dõi xu hướng tốt hơn.

  3. Các tác động thử nghiệm của các nhân ATR khác nhau.

  4. Hãy thử thay thế STC bằng các chỉ số khác để phù hợp hơn.

  5. giới thiệu các thuật toán học máy cho tối ưu hóa tự động đa tham số.

  6. Xem xét xu hướng chu kỳ lớn và phân biệt các giai đoạn khác nhau.

Tóm lại

Chiến lược STC MA ATR kết hợp 3 chỉ số để nắm bắt các điểm đảo ngược xu hướng cho việc theo dõi xu hướng ổn định. Các kết hợp chỉ số lọc tín hiệu sai và kiểm soát rủi ro bằng dừng lỗ / lấy lợi nhuận. Nó có độ bền và ổn định mạnh mẽ.


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

Thêm nữa