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


Ngày tạo: 2023-10-17 14:34:10 sửa đổi lần cuối: 2023-10-17 14:34:10
sao chép: 0 Số nhấp chuột: 845
1
tập trung vào
1617
Người theo dõi

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

Tổng quan

Chiến lược tổng hợp sử dụng chỉ số kỹ thuật của cổ phiếu STC, đường trung bình di chuyển MA và tỷ lệ biến động thực trung bình ATR, kết hợp với nhiều chỉ số kỹ thuật để đánh giá xu hướng, để thực hiện giao dịch theo dõi xu hướng ổn định hơn.

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

  1. Chỉ số STC đánh giá xu hướng đảo ngược. Chỉ số này sử dụng đường nhanh làm chậm đường, sau đó xử lý bằng phẳng lần thứ hai, tạo thành tín hiệu xu hướng nhất quán. Khi chỉ số đi qua trục 0 trên là tín hiệu mua, khi đi qua trục 0 dưới là tín hiệu bán.

  2. Đường trung bình di chuyển MA đánh giá xu hướng. Khi giá cổ phiếu vượt qua MA, nó được coi là vẫn đang tăng trong thị trường, cho tín hiệu giữ nhiều đơn. Khi giá vượt qua MA, nó được coi là đi xuống, cho tín hiệu giữ đơn trống.

  3. Chỉ số ATR thiết lập điểm dừng lỗ. ATR có thể điều chỉnh điểm dừng lỗ theo biến động của thị trường. ATR được sử dụng như một tín hiệu hướng giao dịch, ATR tăng trong giai đoạn đa đầu và ATR giảm trong giai đoạn trống.

  4. Chiến lược chọn thời điểm để STC phán quyết đảo ngược là điểm mua bán chính, MA là xu hướng phán quyết phụ trợ, ATR để dừng lỗ. Khi STC phát đi tín hiệu mua, nếu MA cũng là xu hướng tăng, ATR tăng lên, mở nhiều lệnh; Nếu STC phát đi tín hiệu bán, nếu MA là xu hướng giảm, ATR giảm, mở lệnh trống.

Phân tích lợi thế

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

  2. Chỉ số STC có thể nắm bắt các tín hiệu đảo ngược, tránh giao dịch bị đặt. Chỉ số MA lọc các tín hiệu đảo ngược không ổn định, đảm bảo theo xu hướng chính.

  3. Chỉ số ATR có thể thiết lập điểm dừng lỗ dựa trên biến động của thị trường, tránh thua lỗ lớn. Và sử dụng ATR làm tín hiệu hỗ trợ phán đoán xu hướng.

  4. Kết hợp nhiều chỉ số, có thể tạo ra khả năng theo dõi xu hướng mạnh mẽ hơn, sử dụng lại có khả năng lợi nhuận ổn định tốt hơn.

Phân tích rủi ro

  1. Chỉ số STC có sự chậm trễ về thời gian, có thể bỏ lỡ thời điểm tốt nhất để giá đảo ngược.

  2. Chỉ số MA có xu hướng bị tụt hậu khi giá thay đổi mạnh, có thể tạo ra tín hiệu sai.

  3. ATR dừng có thể được giây ra, ATR nhân nên được nới lỏng thích hợp, hoặc tạm thời tắt trong xu hướng lớn.

  4. Mặc dù kết hợp đa chỉ số làm tăng tỷ lệ thắng, nhưng cũng làm tăng cơ hội kích hoạt dừng lỗ, nên điều chỉnh các tham số một cách thích hợp để giảm lỗ dừng không cần thiết.

Hướng tối ưu hóa

  1. Điều chỉnh tham số STC để tìm các tham số phản ứng nhanh hơn

  2. Tối ưu hóa các tham số chu kỳ MA để có thể theo dõi xu hướng tốt hơn

  3. Các tham số thử nghiệm các nhân ATR khác nhau ảnh hưởng đến chiến lược

  4. Thử các chỉ số khác thay thế STC để tìm các chỉ số phù hợp hơn

  5. Thêm thuật toán học máy để tự động tối ưu hóa nhiều tham số

  6. Tăng khả năng đánh giá xu hướng của chu kỳ vĩ đại, phân biệt các giai đoạn khác nhau của chu kỳ vĩ đại

Tóm tắt

Chiến lược STC MA ATR sử dụng tổng hợp ba chỉ số để nắm bắt các điểm đảo ngược xu hướng, để thực hiện giao dịch theo dõi xu hướng ổn định. Gói chỉ số lọc các tín hiệu giả mạo, kiểm soát rủi ro dừng lỗ, có tính phù hợp và ổn định mạnh mẽ. Bằng cách tối ưu hóa tham số và đưa ra thuật toán, bạn có thể tăng cường hơn nữa hiệu suất của chiến lược.

Mã nguồn chiến lược
/*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