Chiến lược này dựa trên chỉ số QQE và chỉ số RSI. Nó tính toán mức trung bình động mịn và phạm vi dao động động của chỉ số RSI để xây dựng khoảng thời gian tín hiệu ngắn dài. Khi chỉ số RSI phá vỡ đường ray trên, nó tạo ra một tín hiệu dài, và khi nó phá vỡ đường ray dưới, nó tạo ra một tín hiệu ngắn. Ý tưởng chính của chiến lược là sử dụng các đặc điểm xu hướng của chỉ số RSI và các đặc điểm biến động của chỉ số QQE để nắm bắt những thay đổi trong xu hướng thị trường và cơ hội biến động.
Chiến lược này xây dựng các tín hiệu ngắn dài dựa trên chỉ số RSI và chỉ số QQE, và có các đặc điểm nắm bắt xu hướng và nắm bắt biến động. Logic chiến lược rõ ràng, với ít tham số hơn, và phù hợp để tối ưu hóa và cải thiện hơn nữa. Tuy nhiên, chiến lược cũng có một số rủi ro nhất định, chẳng hạn như kiểm soát rút và thiết lập tham số, cần được cải thiện hơn nữa. Trong tương lai, chiến lược có thể được tối ưu hóa từ các khía cạnh như cơ chế dừng lỗ, tối ưu hóa tham số, làm giàu tín hiệu và khả năng thích nghi với các thị trường khác nhau, để cải thiện độ bền và lợi nhuận của chiến lược.
/*backtest start: 2023-05-21 00:00:00 end: 2024-05-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Binance","currency":"BTC_USDT"}] */ //@version=4 // modified by swigle // thanks colinmck strategy("QQE signals bot", overlay=true) RSI_Period = input(14, title='RSI Length') SF = input(5, title='RSI Smoothing') QQE = input(4.236, title='Fast QQE Factor') ThreshHold = input(10, title="Thresh-hold") src = close Wilders_Period = RSI_Period * 2 - 1 Rsi = rsi(src, RSI_Period) RsiMa = ema(Rsi, SF) AtrRsi = abs(RsiMa[1] - RsiMa) MaAtrRsi = ema(AtrRsi, Wilders_Period) dar = ema(MaAtrRsi, Wilders_Period) * QQE longband = 0.0 shortband = 0.0 trend = 0 DeltaFastAtrRsi = dar RSIndex = RsiMa newshortband = RSIndex + DeltaFastAtrRsi newlongband = RSIndex - DeltaFastAtrRsi longband := RSIndex[1] > longband[1] and RSIndex > longband[1] ? max(longband[1], newlongband) : newlongband shortband := RSIndex[1] < shortband[1] and RSIndex < shortband[1] ? min(shortband[1], newshortband) : newshortband cross_1 = cross(longband[1], RSIndex) trend := cross(RSIndex, shortband[1]) ? 1 : cross_1 ? -1 : nz(trend[1], 1) FastAtrRsiTL = trend == 1 ? longband : shortband // Find all the QQE Crosses QQExlong = 0 QQExlong := nz(QQExlong[1]) QQExshort = 0 QQExshort := nz(QQExshort[1]) QQExlong := FastAtrRsiTL < RSIndex ? QQExlong + 1 : 0 QQExshort := FastAtrRsiTL > RSIndex ? QQExshort + 1 : 0 //Conditions qqeLong = QQExlong == 1 ? FastAtrRsiTL[1] - 50 : na qqeShort = QQExshort == 1 ? FastAtrRsiTL[1] - 50 : na // Plotting plotshape(qqeLong, title="QQE long", text="Long", textcolor=color.white, style=shape.labelup, location=location.belowbar, color=color.green, size=size.tiny) plotshape(qqeShort, title="QQE short", text="Short", textcolor=color.white, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.tiny) // trade //if qqeLong > 0 strategy.entry("buy long", strategy.long, 100, when=qqeLong) if qqeShort > 0 strategy.close("buy long") // strategy.exit("close_position", "buy long", loss=1000) // strategy.entry("sell", strategy.short, 1, when=strategy.position_size > 0)