유동성 기반 트렌드 전략 - 흐름 트렌드 표시에 기반한 양적 거래 전략

저자:차오장, 날짜: 2023-12-21 10:19:52
태그:

img

전반적인 설명

이 전략은 유동성 주도 트렌드 전략 (Liquidity Driven Trend Strategy) 이라고 불린다. 이 전략은 다른 시간 프레임에 걸쳐 가격 트렌드 방향을 파악하고 그에 따른 긴 또는 짧은 결정을 내리는 것을 목표로 한다. 이 전략은 트렌드를 결정하기 위해 이중 이동 평균 시스템을 사용하고 트렌드 변화에 적시에 대응하기 위해 여러 시간 프레임에 걸쳐 상대 강도 지수 (RSI) 값의 차이를 사용합니다.

전략 논리

이 전략의 핵심 논리는 이동 평균 시스템이 전체 트렌드 방향을 판단하는 CHOP 지표에 기반합니다. 구체적으로, 전략은 더 높은 시간 프레임에서 빠른 라인 (장 = 20) 및 느린 라인 (장 = 50) 의 RSI 값을 계산하고 두 RSI 라인 사이의 차이를 계산합니다. 빠른 라인 RSI가 느린 라인 RSI 위에 넘어가면 상승 추세를 신호하고 긴 신호를 유발합니다. 반대로, 빠른 라인 RSI가 느린 라인 RSI 아래에 넘어가면 하락 추세를 표시하고 짧은 신호를 생성합니다. 가격 하락으로 인해 변화하는 RSI 차이는 상승하고 트렌드 변화 지점을 민감하게 식별 할 수 있습니다.

이 전략은 또한 멀티 타임프레임 메커니즘을 도입합니다. 전체 트렌드 방향을 결정하기 위해 더 높은 시간 프레임 (예를 들어 매일) 에서 RSI 차이를 계산하고, 더 낮은 시간 프레임 (예를 들어 5 분) 에서 더 높은 시간 프레임 트렌드 판단에 따라 실제 구매 및 판매 명령을 실행합니다. 여러 시간 프레임의 이러한 조합은 높은 시간 프레임 트렌드 결정과 낮은 시간 프레임 실행의 유연성을 모두 고려합니다.

전략 의 장점

  • RSI 분리를 사용하여 잠재적인 트렌드 전환을 미리 민감하게 포착합니다.
  • 더 높은 TF의 추세를 결정하고 더 낮은 TF에서 명령을 실행하기 위해 다중 시간 프레임 개념을 적용합니다.
  • RSI는 시장 유동성 및 참여를 나타내는 가격 및 부피 변화를 반영합니다.
  • 간단한 매개 변수 설정, 이해하기 쉽고 설명하고 조정

위험 과 해결책

  • 이중 MA 시스템에서 잘못된 탈출이 발생할 수 있습니다.
  • 실패한 탈출은 불필요한 손실을 초래할 수 있습니다.

해결책:

  1. 거짓 파기 확률을 줄이기 위해 MA 매개 변수를 조정합니다.
  2. 불필요한 입력 방지 필터를 추가

최적화 방향

  • 칼만 필터 알고리즘을 사용하여 RSI 매개 변수를 최적화
  • 판단을 돕기 위해 MACD 및 다른 지표를 추가합니다.
  • 거래량 변화에 따라 동적 출구 포지션을 설정

결론

이 전략은 트렌드의 잠재적 인 전환점을 민감하게 파악하기 위해 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)

더 많은