
Chiến lược này được gọi là Chiến lược xu hướng dẫn động tính thanh khoản, nhằm mục đích xác định hướng xu hướng giá trong các chu kỳ thời gian khác nhau và đưa ra quyết định mua hoặc bán phù hợp. Chiến lược này sử dụng hệ thống hai đường cân bằng để đánh giá xu hướng và sử dụng chỉ số cường độ tương đối của giá chênh lệch trên nhiều khung thời gian để phản ứng kịp thời khi xu hướng thay đổi.
Lý luận cốt lõi của chiến lược này dựa trên chỉ số CHOP, trong đó hệ thống trung bình biến động đánh giá hướng của xu hướng lớn. Cụ thể, chiến lược tính toán các giá trị RSI của đường dài (Length = 20) và đường dài (Length = 50) trên khung thời gian chu kỳ cao và tính toán chênh lệch giữa chúng.
Chiến lược này cũng giới thiệu việc xác định nhiều khung thời gian: tính toán chênh lệch RSI trong chu kỳ cao hơn (như đường mặt trời) để xác định hướng xu hướng tổng thể; thực hiện mua bán cụ thể trong chu kỳ thấp hơn (như đường 5 phút) dựa trên kết quả phán đoán của chu kỳ cao hơn. Sự kết hợp của khung thời gian đa dạng này, xem xét cả phán đoán xu hướng chu kỳ cao và tính linh hoạt cho hoạt động chu kỳ thấp.
Giải pháp:
Chiến lược này sử dụng chênh lệch RSI để đánh giá sự thay đổi xu hướng tiềm năng, để nắm bắt các điểm biến đổi một cách nhạy cảm. Việc sử dụng nhiều khung thời gian đảm bảo đánh giá xu hướng lớn và làm cho các hoạt động mua bán cụ thể linh hoạt hơn. So với các chiến lược theo dõi xu hướng khác, chiến lược này đơn giản hơn, trực tiếp hơn, các tham số Settings trực quan, dễ điều chỉnh và tối ưu hóa.
/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Flow Trend Indicator Strategy", "FlowTI", overlay=true, calc_on_every_tick=true)
isTimeFrame(timeFrame) =>
timeFrame == timeframe.period ? true : false
Htf() =>
isTimeFrame("12") ? "60" : isTimeFrame("60") ? "300" : isTimeFrame("300") ? "D" : isTimeFrame("D") ? "W" : isTimeFrame("W") ? "M" : isTimeFrame("M") ? "5M" : "D"
TrendIndication() =>
trendFastLength = 20
trendSlowLength = 50
upFastHtf = request.security(syminfo.tickerid, Htf(), rma(max(change(close), 0), trendFastLength), barmerge.gaps_off, barmerge.lookahead_on)
downFastHtf = request.security(syminfo.tickerid, Htf(), rma(-min(change(close), 0), trendFastLength), barmerge.gaps_off, barmerge.lookahead_on)
rsiFastHtf = downFastHtf == 0 ? 100 : upFastHtf == 0 ? 0 : 100 - (100 / (1 + upFastHtf / downFastHtf))
upSlowHtf = request.security(syminfo.tickerid, Htf(), rma(max(change(close), 0), trendSlowLength), barmerge.gaps_off, barmerge.lookahead_on)
downSlowHtf = request.security(syminfo.tickerid, Htf(), rma(-min(change(close), 0), trendSlowLength), barmerge.gaps_off, barmerge.lookahead_on)
rsiSlowHtf = downSlowHtf == 0 ? 100 : upSlowHtf == 0 ? 0 : 100 - (100 / (1 + upSlowHtf / downSlowHtf))
rsiDiff = rsiFastHtf - rsiSlowHtf
crossover(rsiDiff, 0) ? true : crossunder(rsiDiff, 0) ? false : na
if (TrendIndication() == true)
strategy.entry("Long", strategy.long)
if (TrendIndication() == false)
strategy.entry("Short", strategy.short)