
Chiến lược đo lường lại Rainbow Vibrator là một chiến lược giao dịch định lượng dựa trên chỉ số Rainbow Vibrator. Chiến lược này đánh giá xu hướng và cường độ của thị trường bằng cách tính toán độ lệch giữa giá cổ phiếu và đường trung bình, để đưa ra phán đoán về hướng của vị trí dài và ngắn.
Chỉ số cốt lõi của chiến lược là dao động cầu vồng (Rainbow Oscillator, RO), với công thức tính toán như sau:
RO = 100 * ((收盘价 - 10日移动平均线) / (最高价的最高值 - 最低价的最低值))
Trong đó, đường trung bình di chuyển 10 ngày là đường trung bình di chuyển đơn giản của giá đóng cửa 10 chu kỳ. Chỉ số này phản ánh sự lệch của giá so với đường trung bình của chính nó. Khi RO > 0, đại diện cho giá trên đường trung bình, là tín hiệu đi lên; khi RO < 0, đại diện cho giá dưới đường trung bình, là tín hiệu đi xuống.
Chiến lược này cũng tính toán một chỉ số phụ là băng thông (Bandwidth, RB), với công thức tính toán như sau:
RB = 100 * ((均线的最高值 - 均线的最低值) / (最高价的最高值 - 最低价的最低值))
RB phản ánh chiều rộng giữa các đường trung bình. RB càng lớn, giá sẽ biến động nhiều hơn, ngược lại, giá sẽ ổn định. Chỉ số RB có thể được sử dụng để đánh giá mức độ ổn định của thị trường.
Dựa trên giá trị của các chỉ số RO và RB, chiến lược này đánh giá mức độ lệch giá và sự ổn định của thị trường, để tạo ra tín hiệu giao dịch cho vị trí dài và ngắn.
Chiến lược này có những ưu điểm sau:
Chiến lược này cũng có một số rủi ro:
Phản ứng:
Chiến lược này cũng có thể được tối ưu hóa theo các khía cạnh sau:
Chiến lược đo đạc quay ngược dao động cầu vồng bằng cách tính toán mối quan hệ sai lệch giữa giá và đường trung bình, đánh giá xu hướng và sự ổn định của thị trường, để giao dịch ngắn hạn. Chiến lược này trực quan, dễ đọc, dễ thực hiện và có giá trị thực tế nhất định. Nhưng cũng có một số rủi ro, cần phải tối ưu hóa cho các tham số và quy tắc giao dịch, giảm rủi ro và tăng hiệu quả 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)