
이 전략은 유동성 동원 트렌드 전략이라고 불리는데, 그 목적은 서로 다른 시간 주기에서의 가격 트렌드 방향을 식별하고 그에 따라 구매 또는 판매 결정을 내리는 것이다. 이 전략은 쌍평등 시스템 사용으로 트렌드를 판단하고, 다중 시간 프레임에 대한 가격 차이 상대 강도 지수 (RSI) 를 활용하여 트렌드 변화가 있을 때 신속하게 반응한다.
이 전략의 핵심 논리는 CHOP 지표에 기반을 두고 있으며, 여기에는 변동 평균 시스템이 큰 트렌드 방향을 판단한다. 구체적으로, 전략은 고주기 시간 프레임에서 빠른 선 (Length=20) 과 느린 선 (Length=50) 의 RSI 값을 계산하고, 둘 사이의 차이를 계산한다. 빠른 선의 RSI 상에서 느린 선의 RSI를 통과하면 낙관적이라고 판단되며, 다중 신호를 형성한다. 반대로, 빠른 선의 RSI 아래에서 느린 선의 RSI를 통과하면 낙관적이라고 판단하고, 공백 신호를 형성한다. 가격 상승과 하락에 따라 변화하는 RSI 차이는 민감한 지점으로 추세 변화를 판단할 수 있다.
이 전략은 또한 다중 시간 프레임 판단을 도입합니다: 더 높은 수준의 주기 (예: 일선) 에서 RSI 차이를 계산하여 전반적인 트렌드 방향을 판단합니다. 더 높은 수준의 주기 판단 결과에 따라 더 낮은 수준의 주기 (예: 5 분 라인) 에서 특정 구매 및 판매를 수행합니다. 이러한 다중 시간 프레임의 조합은 고 주기 트렌드 판단을 고려하고 저 주기 운영의 유연성을 고려합니다.
해결책:
이 전략은 RSI 차수를 사용하여 잠재적인 트렌드 변화를 판단하여 민감한 전환점을 포착합니다. 다중 시간 프레임의 사용은 큰 트렌드에 대한 판단을 보장하고 특정 거래에 대한 거래가 더 유연합니다. 다른 트렌드 추적 전략에 비해이 전략은 더 간단합니다.
/*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)