Chiến lược kiểm tra ngược dao động cầu vồng

Tác giả:ChaoZhang, Ngày: 2023-12-26 15:08:17
Tags:

img

Tổng quan

Rainbow Oscillator backtesting là một chiến lược giao dịch định lượng dựa trên chỉ số Rainbow Oscillator. Chiến lược này đánh giá hướng xu hướng và sức mạnh của thị trường bằng cách tính lệch giữa giá và trung bình động để xác định các vị trí dài và ngắn.

Chiến lược logic

Chỉ số cốt lõi của chiến lược này là Rainbow Oscillator (RO), được tính như sau:

RO = 100 * ((Close - 10-day Moving Average) / (HHV(High, N) - LLV(Low, N))) 

Trong đó đường trung bình động 10 ngày là đường trung bình động đơn giản của giá đóng trong 10 giai đoạn qua. Chỉ số này phản ánh độ lệch của giá so với đường trung bình động của nó. Khi RO > 0, điều đó có nghĩa là giá trên đường trung bình động, tín hiệu tăng; khi RO < 0, điều đó có nghĩa là giá dưới đường trung bình động, tín hiệu giảm.

Chiến lược cũng tính toán một chỉ số phụ - Bandwidth (RB), được tính như sau:

RB = 100 * ((Highest value of moving averages - Lowest value of moving averages) / (HHV(High, N) - LLV(Low, N)))

RB phản ánh chiều rộng giữa các đường trung bình động. RB càng lớn, biến động giá càng lớn, và ngược lại, giá ổn định hơn. Chỉ số RB có thể được sử dụng để đánh giá sự ổn định của thị trường.

Theo các giá trị của các chỉ số RO và RB, chiến lược đánh giá mức độ lệch giá và ổn định thị trường, và tạo ra các tín hiệu giao dịch cho các vị trí dài và ngắn.

Ưu điểm

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

  1. Phán quyết hai chỉ số tránh những hạn chế của phán quyết chỉ số duy nhất.
  2. Có thể đánh giá xu hướng giá và sự ổn định thị trường đồng thời.
  3. Đơn giản để tính toán, dễ hiểu và thực hiện.
  4. Các chỉ số được hiển thị tạo thành hiệu ứng cầu vồng trực quan và dễ đọc.

Rủi ro

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Các thiết lập tham số không chính xác của các chỉ số RO và RB có thể gây ra các tín hiệu giao dịch sai.
  2. Chiến lược trung bình động kép có xu hướng tạo ra tín hiệu sai và giao dịch thường xuyên.
  3. Thời gian kiểm tra hậu quả không phù hợp và lựa chọn sản phẩm sẽ ảnh hưởng đến hiệu quả của chiến lược.
  4. Chi phí giao dịch không được xem xét, kết quả thực tế có thể kém.

Các biện pháp đối phó:

  1. Tối ưu hóa các thông số cho các chỉ số RO và RB.
  2. Thêm các điều kiện lọc để tránh giao dịch thường xuyên.
  3. Chọn chu kỳ và loại thử nghiệm ngược thích hợp.
  4. Tính toán và xem xét chi phí giao dịch.

Tối ưu hóa

Chiến lược cũng có thể được tối ưu hóa theo những cách sau:

  1. Thêm tính năng Smooth vào chỉ số RO để tránh biến động đáng kể.
  2. Thêm chiến lược dừng lỗ để kiểm soát lỗ đơn.
  3. Kết hợp với các chỉ số khác cho giao dịch danh mục đầu tư để tăng lợi nhuận.
  4. Thêm mô hình học máy để dự đoán và đánh giá hiệu quả của chỉ số.
  5. Tối ưu hóa các thông số cho các giống khác nhau để cải thiện khả năng thích nghi.

Kết luận

Rainbow Oscillator backtesting chiến lược đánh giá xu hướng thị trường và sự ổn định bằng cách tính toán độ lệch giữa giá và đường trung bình động, và sử dụng thông tin này để đưa ra quyết định giao dịch dài / ngắn. Chiến lược này trực quan, dễ thực hiện và có một số giá trị thực tế.


/*backtest
start: 2023-11-25 00:00:00
end: 2023-12-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 18/03/2018
// Ever since the people concluded that stock market price movements are not 
// random or chaotic, but follow specific trends that can be forecasted, they 
// tried to develop different tools or procedures that could help them identify 
// those trends. And one of those financial indicators is the Rainbow Oscillator 
// Indicator. The Rainbow Oscillator Indicator is relatively new, originally 
// introduced in 1997, and it is used to forecast the changes of trend direction.
//
// As market prices go up and down, the oscillator appears as a direction of the 
// trend, but also as the safety of the market and the depth of that trend. As 
// the rainbow grows in width, the current trend gives signs of continuity, and 
// if the value of the oscillator goes beyond 80, the market becomes more and more 
// unstable, being prone to a sudden reversal. When prices move towards the rainbow 
// and the oscillator becomes more and more flat, the market tends to remain more 
// stable and the bandwidth decreases. Still, if the oscillator value goes below 20, 
// the market is again, prone to sudden reversals. The safest bandwidth value where 
// the market is stable is between 20 and 80, in the Rainbow Oscillator indicator value. 
// The depth a certain price has on a chart and into the rainbow can be used to judge 
// the strength of the move.
//
// You can change long to short in the Input Settings
// WARNING:
//  - For purpose educate only
//  - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title="Rainbow Oscillator Backtest")
Length = input(2, minval=1)
LengthHHLL = input(10, minval=2, title="HHV/LLV Lookback")
reverse = input(false, title="Trade reverse")
xMA1 = sma(close, Length)
xMA2 = sma(xMA1, Length)
xMA3 = sma(xMA2, Length)
xMA4 = sma(xMA3, Length)
xMA5 = sma(xMA4, Length)
xMA6 = sma(xMA5, Length)
xMA7 = sma(xMA6, Length)
xMA8 = sma(xMA7, Length)
xMA9 = sma(xMA8, Length)
xMA10 = sma(xMA9, Length)
xHH = highest(close, LengthHHLL)
xLL = lowest(close, LengthHHLL)
xHHMAs = max(xMA1,max(xMA2,max(xMA3,max(xMA4,max(xMA5,max(xMA6,max(xMA7,max(xMA8,max(xMA9,xMA10)))))))))
xLLMAs = min(xMA1,min(xMA2,min(xMA3,min(xMA4,min(xMA5,min(xMA6,min(xMA7,min(xMA8,min(xMA9,xMA10)))))))))
xRBO = 100 * ((close - ((xMA1+xMA2+xMA3+xMA4+xMA5+xMA6+xMA7+xMA8+xMA9+xMA10) / 10)) / (xHH - xLL))
xRB = 100 * ((xHHMAs - xLLMAs) / (xHH - xLL))
clr = iff(xRBO >= 0, green, red)
pos = iff(xRBO > 0, 1,
       iff(xRBO < 0, -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 ) 
plot(xRBO, color=clr, title="RO", style= histogram, linewidth=2)
p0 = plot(0, color = gray, title="0")
p1 = plot(xRB, color=green, title="RB")
p2 = plot(-xRB, color=red, title="RB")
fill(p1, p0, color=green)
fill(p2, p0, color=red)

Thêm nữa