Trend Trader Bands Backtest chiến lược dựa trên Trend Trader Moving Average

Tác giả:ChaoZhang, Ngày: 2023-12-11 13:12:44
Tags:

img

Tổng quan

Ý tưởng chính của chiến lược này là đánh giá xu hướng giá và tạo ra tín hiệu giao dịch bằng cách sử dụng đường trung bình động và Bollinger Bands. Cụ thể, nó đầu tiên tính toán phạm vi trung bình thực sự (ATR) trong một khoảng thời gian nhất định để có được phạm vi biến động, sau đó kết hợp giá cao nhất và thấp nhất để tạo thành một kênh giới hạn. Nếu giá vượt qua kênh này, giá đóng được thiết lập là giá kênh. Sau đó, nó tính toán trung bình động của giá đóng hạn chế, được gọi là Trung bình di chuyển của Trend Trader (AVR). Cuối cùng, vẽ các dải Bollinger trên và dưới Trung bình di chuyển của Trend Trader để tạo ra tín hiệu giao dịch. Đi dài khi giá vượt qua dải trên và đi ngắn khi vượt qua dải dưới.

Chiến lược logic

Chiến lược này đầu tiên tính toán phạm vi ATR và tạo thành một kênh giới hạn kết hợp với giá cao nhất và thấp nhất. Giá đóng sẽ bị giới hạn ở giá kênh chỉ khi nó phá vỡ kênh. Sau đó, nó tính toán trung bình di chuyển của giá đóng giới hạn, phản ánh hướng xu hướng trung dài hạn. Cuối cùng, vẽ một dải trên và một dải dưới song song với trung bình di chuyển của Trend Trader như các dải Bollinger. Bước qua dải trên tạo ra tín hiệu dài và bước qua dải dưới tạo ra tín hiệu ngắn.

Trọng tâm của việc đánh giá xu hướng nằm ở trung bình di chuyển của Trend Trader, thể hiện hướng xu hướng trung hạn dài hạn. Vai trò của Bollinger Bands là lọc một số đột phá sai và làm cho các tín hiệu giao dịch đáng tin cậy hơn. Toàn bộ chiến lược kết hợp theo xu hướng và đột phá, tạo thành một hệ thống xu hướng mạnh mẽ.

Ưu điểm

  1. ATR và phạm vi giá xây dựng một kênh thích nghi để theo dõi biến động thị trường
  2. Trend Trade AVR đánh giá rõ xu hướng trung dài hạn
  3. Bollinger Bands lọc các đột phá sai và cải thiện chất lượng tín hiệu
  4. Hệ thống phản ánh xu hướng mạnh mẽ, nắm giữ lâu có thể có được lợi nhuận tốt

Rủi ro

  1. Long Holding có thể chịu tổn thất lớn do một số sự kiện đột ngột.
  2. Thiết lập tham số không chính xác có thể dẫn đến giao dịch quá mức, tăng chi phí giao dịch và trượt
  3. Hiệu suất phụ thuộc rất nhiều vào điều chỉnh tham số

Giải pháp:

  1. Giảm đúng thời gian giữ và thiết lập stop loss
  2. Tối ưu hóa các tham số để cung cấp tín hiệu đủ bộ đệm
  3. Sử dụng dữ liệu lịch sử và giao dịch trực tiếp để điều chỉnh tham số

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

  1. Cài đặt các thông số nghiên cứu trên các thị trường và khung thời gian khác nhau
  2. Kiểm tra xem các chỉ số khác có thể lọc các đột phá sai không
  3. Cố gắng kết hợp dừng lỗ để giới hạn mỗi lỗ thương mại

Kết luận

Chiến lược này nói chung là một hệ thống theo xu hướng mạnh mẽ. Nó có thể đánh giá xu hướng trung dài hạn và tạo ra các tín hiệu giao dịch kết hợp với các băng tần Bollinger. Thông qua tối ưu hóa tham số, nó có thể có được alpha ổn định. Nhưng kiểm soát rủi ro cũng rất quan trọng để tránh tổn thất lớn do một số sự kiện đột ngột khi nắm giữ dài hạn. Nói chung, chiến lược xứng đáng nghiên cứu và tối ưu hóa thêm cho alpha bền vững dài hạn.


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 16/10/2018
// This is plots the indicator developed by Andrew Abraham 
// in the Trading the Trend article of TASC September 1998  
// It was modified, result values wass averages.
// And draw two bands above and below TT line.
////////////////////////////////////////////////////////////
strategy(title="Trend Trader Bands Backtest", overlay = true)
Length = input(21, minval=1),
LengthMA = input(21, minval=1),
BandStep = input(20),
Multiplier = input(3, minval=1)
reverse = input(false, title="Trade reverse")
avgTR      = wma(atr(1), Length)
highestC   = highest(Length)
lowestC    = lowest(Length)
hiLimit = highestC[1]-(avgTR[1] * Multiplier)
loLimit = lowestC[1]+(avgTR[1] * Multiplier)
ret = 0.0
ret :=  iff(close > hiLimit and close > loLimit, hiLimit,
         iff(close < loLimit and close < hiLimit, loLimit, nz(ret[1], 0)))
nResMA = ema(ret, LengthMA)        
pos = 0.0
pos := iff(close < nResMA - BandStep , -1,
       iff(close > nResMA + BandStep, 1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue ) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(nResMA, color= blue , title="Trend Trader AVR")
plot(nResMA+BandStep, color= red , title="Trend Trader UpBand")
plot(nResMA-BandStep, color= green, title="Trend Trader DnBand")

Thêm nữa