Chiến lược theo dõi xu hướng Parabolic SAR


Ngày tạo: 2024-01-18 12:21:17 sửa đổi lần cuối: 2024-01-18 12:21:17
sao chép: 0 Số nhấp chuột: 379
1
tập trung vào
1214
Người theo dõi

Chiến lược theo dõi xu hướng Parabolic SAR

Tổng quan

Chiến lược này sử dụng các chỉ số SAR (dừng lỗ) và EMA (đường trung bình) để lọc để cải thiện độ chính xác của tín hiệu giao dịch. Chiến lược này được sử dụng cho các nhà giao dịch theo dõi xu hướng.

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

Tín hiệu nhiều được tạo ra khi SAR nằm dưới giá và giá cao hơn đường trung bình EMA chậm và giá thấp hơn đường trung bình EMA chậm. Đồng thời, một bộ lọc bổ sung được thực hiện thông qua giao thoa giữa đường trung bình EMA nhanh và đường trung bình EMA chậm. Điều này giúp tránh các tín hiệu sai có thể xảy ra khi chỉ số SAR được sử dụng một mình.

Cụ thể, các điều kiện kích hoạt của nhiều tín hiệu là: 1) SAR nằm dưới giá đóng cửa ngày hôm qua và nằm trên giá đóng cửa hiện tại; 2) Giá đóng cửa hiện tại cao hơn giá EMA trung bình chậm cộng với độ lệch hoặc vượt qua EMA trung bình chậm dưới EMA trung bình nhanh; 3) Giá đóng cửa hiện tại cao hơn giá SAR và EMA trung bình chậm cộng với độ lệch.

Các điều kiện kích hoạt tín hiệu mở cửa là: 1) SAR nằm trên giá đóng cửa hôm qua và nằm dưới giá đóng cửa hiện tại; 2) Giá đóng cửa hiện tại thấp hơn giá EMA trung bình chậm hoặc vượt qua đường trung bình EMA chậm trên đường trung bình EMA nhanh; 3) Giá đóng cửa hiện tại thấp hơn giá SAR và đường trung bình EMA chậm.

Phân tích lợi thế

Chiến lược này kết hợp các chỉ số SAR và bộ lọc đồng tuyến EMA để xác định tốt hơn hướng xu hướng và giảm tín hiệu giả.

Những ưu điểm:

  1. Chỉ số SAR có thể phản ứng nhanh với sự thay đổi giá và nhận ra điểm đảo ngược xu hướng.
  2. Bộ lọc EMA đồng tuyến có thể xác nhận thêm hướng xu hướng, tránh các tín hiệu sai có thể xuất hiện khi chỉ số SAR được sử dụng một mình.
  3. Kết hợp với đường chéo trung bình của EMA chậm và nhanh như một điều kiện phán đoán phụ, có thể cải thiện độ chính xác của tín hiệu.
  4. Điều chỉnh tham số có thể giúp tăng lợi nhuận của chiến lược.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro, bao gồm:

  1. Trong điều kiện cân bằng, chỉ số SAR và đường trung bình EMA có thể phát tín hiệu sai, do đó ảnh hưởng đến lợi nhuận chiến lược. Bạn có thể giảm thiểu rủi ro này bằng cách tối ưu hóa tham số.
  2. EMA trung bình có sự chậm trễ, có thể bỏ lỡ điểm đầu vào tốt nhất để đảo ngược xu hướng. Bạn có thể rút ngắn chu kỳ EMA một cách thích hợp để giảm sự chậm trễ.
  3. Các điểm dừng lỗ trong tình trạng chấn động lớn dễ bị phá vỡ và mang lại tổn thất lớn cho chiến lược.

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

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Tối ưu hóa các tham số bước và giá trị tối đa của chỉ số SAR để đáp ứng nhanh hơn với sự thay đổi giá cả.
  2. Tối ưu hóa các tham số chu kỳ của EMA chậm và EMA nhanh để tìm ra sự kết hợp tham số tốt nhất.
  3. Tối ưu hóa tham số lệch EMA, giảm tỷ lệ tín hiệu sai.
  4. Thêm các chỉ số khác để lọc, chẳng hạn như MACD, KDJ, v.v. để cải thiện độ chính xác của tín hiệu.
  5. Tối ưu hóa chiến lược dừng lỗ để giảm tổn thất đơn lẻ.

Tóm tắt

Chiến lược này tích hợp lợi thế của chỉ số SAR và đường trung bình EMA để thiết kế một chiến lược theo dõi xu hướng linh hoạt hơn. Nhìn chung, chiến lược này có khả năng xác định hướng xu hướng thành công và có thể đạt được hiệu quả tốt hơn trong việc theo dõi xu hướng.

Mã nguồn chiến lược
/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("SAR Trend Trader Strategy By: jhanson107", shorttitle="SAR Trend Trader Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)


SlowEMALength = input(100, "Slow EMA Length")
FastEMALength = input(10, "Fast EMA Length")
emaoffset = input(1.00, "EMA Offset %")
start = input(0.01)
increment = input(0.005)
maximum = input(0.08)

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////

psar = sar(start, increment, maximum)
ema = ema(close, SlowEMALength)
fastema = ema(close, FastEMALength)
offset = (emaoffset / 100) * ema

// Signals
long = high[1] < psar[2] and high >= psar[1] and close > ema + offset or crossunder(ema, fastema) and close > psar and close > ema + offset
short = low[1] > psar[2] and low <= psar[1] and close < ema - offset or crossover(ema, fastema) and close < psar and close < ema - offset

// Plot PSAR
plot(psar, title="PSAR", color = low < psar and not long ? green : red, trackprice=true)

//Barcolor
barcolor(close > psar and close > ema + offset and fastema > ema ? green : na)
barcolor(close > psar and close < ema + offset or close > psar and fastema < ema ? white : na)
barcolor(close < psar and close < ema - offset and fastema < ema and close? red : na)
barcolor(close < psar and close > ema - offset or close < psar and fastema > ema ? white : na)

//Plot EMA
plot(ema, color=blue, linewidth=1, transp=0, title="Slow EMA")
plot(fastema, color=purple, linewidth=1, transp=0, title="Fast EMA")


if(high > psar)
    strategy.close("Short")
    
if(low < psar)
    strategy.close("Long")
    
if(long and time_cond)
    strategy.entry("Long", strategy.long, comment="Long")
   
if(short and time_cond)
    strategy.entry("Short", strategy.short, comment="Short")

if (not time_cond)
    strategy.close_all()