Chiến lược giao dịch chỉ báo Balance Line PSAR


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

Chiến lược này kết hợp sử dụng đồ thị đường cân bằng và chỉ số PSAR để đánh giá xu hướng và tạo tín hiệu giao dịch. Chiến lược này sử dụng tính năng giảm tiếng ồn của đường cân bằng, kết hợp với chỉ số PSAR để đánh giá điểm đảo ngược xu hướng, để nắm bắt xu hướng đường dài và trung bình.

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

  1. Tính toán giá mở, giá đóng, giá cao nhất, giá thấp nhất của đường cân bằng.

  2. Xu hướng đa đầu và vô đầu được đánh giá dựa trên màu sắc của thực thể đường cân bằng.

  3. Tính toán chỉ số PSAR, xác định xu hướng đảo ngược khi nó phá vỡ từ lên xuống hoặc xuống xuống.

  4. Khi đường cân bằng nhiều đầu, PSAR phá vỡ xuống nhiều hơn; khi đường cân bằng không đầu, PSAR phá vỡ lên.

  5. PSAR tự điều chỉnh theo các yếu tố tăng, giảm và tăng tốc.

Những lợi thế của chiến lược này:

  1. Bộ lọc tiếng ồn bằng đường cân bằng, PSAR bắt và đảo ngược. Sự kết hợp giúp tăng độ chính xác.

  2. Các tham số PSAR tự điều chỉnh để đáp ứng sự thay đổi của thị trường.

  3. Quy tắc rõ ràng và dễ sử dụng, thuận lợi cho việc tối ưu hóa tham số.

Rủi ro của chiến lược này:

  1. Cả đường cân bằng và PSAR đều có vấn đề về sự chậm trễ, có thể bỏ lỡ điểm vào tốt nhất.

  2. Trong khu vực có xu hướng chấn động, PSAR có thể tạo ra các tín hiệu sai.

  3. Cần quản lý tài chính nghiêm ngặt để bảo vệ rủi ro của các giao dịch đảo ngược.

Tóm lại, chiến lược này đánh giá xu hướng lớn thông qua đường cân bằng, PSAR xác định thời điểm tham gia cụ thể, thực hiện hoạt động theo dõi xu hướng. Cần cảnh giác với các vấn đề chậm trễ và rủi ro đảo ngược giả, nhưng có thể đạt được lợi nhuận ổn định lâu dài bằng cách tối ưu hóa.

Mã nguồn chiến lược
/*backtest
start: 2023-08-12 00:00:00
end: 2023-09-11 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("QuantNomad - Heikin-Ashi PSAR Strategy", shorttitle = "HA-PSAR[QN]", overlay = false)

////////////
// INPUTS //

start      = input(0.02, title = "PSAR Start")
increment  = input(0.02, title = "PSAR Increment")
maximum    = input(0.2,  title = "PSAR Max")

start_year  = input(2018, 'Start Year',  input.integer)
start_month = input(1,    'Start Month', input.integer)
start_day   = input(1,    'Start Day',   input.integer)

end_year  = input(2100, 'End Year',  input.integer)
end_month = input(1,    'End Month', input.integer)
end_day   = input(1,    'End Day',   input.integer)

date_start = timestamp(start_year, start_month, start_day, 00, 00)
date_end   = timestamp(end_year,   end_month,   end_day,   00, 00)

// if time is in correct period
time_cond = time >= date_start and time <= date_end

// Calculation HA Values 
haopen  = 0.0
haclose = (open + high + low + close) / 4
haopen := na(haopen[1]) ? (open + close) / 2 : (haopen[1] + haclose[1]) / 2
hahigh  = max(high, max(haopen, haclose))
halow   = min(low,  min(haopen, haclose))

// HA colors
hacolor = haclose > haopen ? color.green : color.red

psar        = 0.0 // PSAR
af          = 0.0 // Acceleration Factor
trend_dir   = 0   // Current direction of PSAR
ep          = 0.0 // Extreme point
trend_bars  = 0

sar_long_to_short = trend_dir[1] == 1  and haclose <= psar[1] // PSAR switches from long to short
sar_short_to_long = trend_dir[1] == -1 and haclose >= psar[1] // PSAR switches from short to long

trend_change = barstate.isfirst[1] or sar_long_to_short or sar_short_to_long

// Calculate trend direction
trend_dir    := barstate.isfirst[1] and haclose[1] > haopen[1] ? 1 : 
   barstate.isfirst[1] and haclose[1] <= haopen[1] ? -1 : 
   sar_long_to_short ? -1 : 
   sar_short_to_long ?  1 : nz(trend_dir[1])

trend_bars := sar_long_to_short ? -1 : 
              sar_short_to_long ?  1 : 
              trend_dir ==  1   ? nz(trend_bars[1]) + 1 : 
              trend_dir == -1   ? nz(trend_bars[1]) - 1 : 
              nz(trend_bars[1])

// Calculate  Acceleration Factor
af := trend_change ? start : 
   (trend_dir == 1 and hahigh > ep[1]) or  
   (trend_dir == -1 and low < ep[1]) ? 
   min(maximum, af[1] + increment) : 
   af[1]

// Calculate extreme point
ep := trend_change and trend_dir == 1 ? hahigh :  
   trend_change and trend_dir == -1 ? halow : 
   trend_dir == 1 ? max(ep[1], hahigh) : 
   min(ep[1], halow)

// Calculate PSAR
psar := barstate.isfirst[1] and haclose[1] > haopen[1] ? halow[1] : 
   barstate.isfirst[1] and haclose[1] <= haopen[1] ? hahigh[1] : 
   trend_change ? ep[1] :    
   trend_dir == 1 ? psar[1] + af * (ep - psar[1]) : psar[1] - af * (psar[1] - ep) 

plotcandle(haopen, hahigh, halow, haclose, title = "HA", color = hacolor)
plot(psar, style=plot.style_cross, color=trend_dir == 1 ? color.green : color.red,  linewidth = 2)

// Strategy
strategy.entry("long",  true,  when = sar_short_to_long and time_cond)
strategy.entry("short", false, when = sar_long_to_short and time_cond)