변동성 및 거래량 복합 지수 추세 추종 전략

SMA FIBONACCI volatility VOLUME TREND FOLLOWING REVERSAL PATTERN
생성 날짜: 2025-05-26 13:20:39 마지막으로 수정됨: 2025-05-26 13:20:39
복사: 0 클릭수: 378
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

변동성 및 거래량 복합 지수 추세 추종 전략 변동성 및 거래량 복합 지수 추세 추종 전략

개요

변동율과 거래량 복합 지수 트렌드 추적 전략은 거래량과 가격 변동율의 관계에 기반한 양적 거래 시스템이다. 이 전략은 거래량과 가격 변동의 상호 관계를 계산하여, 시장의 동적 변화를 포착하고, 단기 및 장기 평평선 교차 확인 트렌드 방향과 결합하여 복합 지수를 만듭니다. 그것의 핵심은 거래량이 비정상적으로 확대되고 가격 변동과 함께 확장되는 중요한 시장 전환점을 식별하는 데 있습니다.

전략 원칙

이 전략의 핵심 컴퓨팅 논리는 다음과 같은 몇 가지 핵심 단계를 포함합니다.

  1. 거래량 분석: 간단한 이동 평균 ((SMA) 를 사용하여 거래량 평균을 계산하고 현재 거래량을 평균과 비교하여 비율 지표 ((vol_percent = volume / vol_ma * 100) 를 얻습니다.

  2. 변동률 계산: K선 진동과 종점 가격의 비율을 계산하여 가격 변동률을 정량화하기 위해 ((volatility = (high - low) / close * 100) ᅳ

  3. 복합 지수 구성: 거래량 비율과 변동률을 곱한 복합 지표 ((volatility_index = volume * volatility) 를 생성합니다. 이 지표는 거래량과 가격 변동의 이중 비정상성을 동시에 반영합니다.

  4. 평선 시스템: 복합 지수에 대해 단기 (index_short_ma) 과 장기 (index_long_ma) 이동 평균을 계산하고, 감수성을 확대하는 배수 (index_magnification) 를 적용하여 신호의 감수성을 높인다.

  5. 동적 하락: index_threshold_magnification을 이용하여 동적 필터링값을 구성하여 시장소음을 필터링한다.

  6. 형상 인식: lookback_bars 루트 K 라인을 분석하여 특정 반전 형태 패턴을 감지합니다. 예를 들어, 변동률 지수가 특정 변화 경향을 나타내고 가격 형태가 반전 조건에 부합하면 신호를 유발합니다.

  7. 신호 생성

    • 다중 신호: 단기 지수 평균선에서 장기 평균선을 통과하고 복합 지수가 역동적 인 경계를 돌파하면서 역형 조건을 충족 할 때 발생합니다.
    • 공백 신호: 단기 지수가 평균선 아래에서 장기 평균선을 통과하고, 복합 지수가 역동적 인 경계를 넘어가는 동시에 역형 조건을 충족 할 때 발생합니다.
    • 역전 모드: 역전 전략이 활성화될 때, 하위 신호를 다수 신호로 변환하여, 트렌드 상황에서 가중치 조작을 할 수 있다.
  8. 위험 관리피보나치 비율을 기반으로 자동으로 스톱 (take_profit) 및 스톱 (stop_loss) 수준을 설정하고, 형태적 진동 (bearish_range) 을 기반으로 계산하여, 리스크/수익 비율이 합리적으로 설정되도록 합니다.

전략적 이점

  1. 통합 지표의 장점이 전략은 거래량과 변동률을 결합함으로써 시장의 비정상적인 활성점을 더 포괄적으로 포착하고 단일 지표로 인해 발생할 수 있는 오해를 방지합니다.

  2. 역동적인 적응력: 동적 저하 메커니즘 ((index_threshold_magnification_auto) 을 사용함으로써, 전략이 다른 시장 조건의 변동적 특성에 적응할 수 있게 하고, 잘못된 신호를 줄일 수 있다.

  3. 형태 확인 메커니즘: lookback_bars 파라미터를 통해 K선 형태를 역으로 분석하여 신호의 신뢰도를 높이고, 지표 교차에만 의존하지 않고, 가격 형태 협조를 요구하며, 가짜 돌파의 위험을 현저하게 감소시킨다.

  4. 유연한 전략 모형: reversal_s 파라미터를 통해 트렌드 추적과 반전 전략 사이에 전환할 수 있으며, 이는 시스템이 다양한 시장 환경과 거래 요구에 적응할 수 있도록 해준다.

  5. 체계화된 위험 관리: 피보나치 레벨을 기반으로 하는 스톱 스톱 손실 메커니즘은 실제 시장의 변동 정도에 따라 자동으로 위험 매개 변수를 조정할 수 있으며, 고정 점수가 가져올 수 있는 불응을 피할 수 있다.

  6. 직관적인 시각화전략은 거래량 기둥 모양의 도표와 지표 곡선의 시각적 표시를 제공하며 거래 신호는 명확하고 직관적으로 거래자가 시장 상태와 의사 결정 근거를 이해하는 데 도움이됩니다.

  7. 변수 조정 가능: 여러 조정 가능한 파라미터를 제공 (vol_length, index_short_length, index_long_length 등) 하여 거래자가 다른 시장 특성과 개인 위험 선호에 따라 사용자 정의 설정을 할 수 있습니다.

전략적 위험

  1. 매개변수 민감도 위험이 전략은 거래량 평균선 길이 ((vol_length), 지수 평균선 길이 ((index_short_length, index_long_length) 와 같은 여러 파라미터 설정을 의존합니다. 파라미터 선택이 잘못되면 과도한 적합성이나 신호 지연이 발생할 수 있습니다. 해결 방법: 역사 회귀 최적화를 수행하고, 다양한 시장 환경에서 안정적으로 수행하는 파라미터 조합을 찾고, 특정 기간 데이터를 과도하게 최적화하는 것을 피하십시오.

  2. 가짜 침입 위험전략에는 동적 하락 필터링 메커니즘이 있지만, 높은 변동성 시장에서 지수가 하락한 후 급격히 하락하는 경우가 발생할 수 있습니다. 해결 방법: 신호 확인 주기를 늘리거나, 다른 기술 지표 (RSI, MACD 등) 와 결합하여 여러 번 확인하여 신호 신뢰도를 높인다.

  3. 부적절한 스포드 리스크피보나치 기반의 손해배상 설정은 극도로 변동하는 시장에서 자금의 안전을 보호하기 위해 충분하지 않을 수 있습니다. 해결 방법: 최대 중지 비율 제한을 증가 시키거나, 역사적인 변동률에 따라 stopLossFib 변수를 동적으로 조정하여 위험을 허용 범위 내에서 제어하도록하십시오.

  4. 트렌드 판단 오류 위험: 평행선 교차 신호는 재조정시장이나 변동시장에서 자주 발생하여 과도한 거래가 발생할 수 있습니다. 해결 방법: 트렌드 강도 지표 (ADX와 같은) 를 도입하여 약한 트렌드 시장의 신호를 필터링하거나 거래 빈도 제한 조건을 증가시킵니다.

  5. 유동성 위험: 전략은 거래량 변화에 민감하며, 낮은 유동성 시장에서 잘못된 신호를 생성하거나 슬라이드 포인트 문제를 직면할 수 있다. 해결 방법: 최소 거래량 하락 조건을 추가하여 유동성이 낮은 환경에서 거래하는 것을 피하거나, 미세한 변동에 대한 반응을 줄이기 위해 지수의 민감도를 조정합니다.

  6. 재검토 기간 외의 위험이 전략은 역사적인 데이터에서 좋은 성적을 거뒀지만, 미래의 시장 조건의 변화는 성능 저하로 이어질 수 있다. 해결 방법: 샘플 외 테스트와 전향 테스트 방법을 사용하여, 정기적으로 재평가하고 전략 매개 변수를 조정하여 전략 적응성을 유지하십시오.

전략 최적화 방향

  1. 다중 시간 주기 확인 메커니즘: 현재 전략은 단일 시간 주기에만 실행되며, 다중 시간 주기의 분석 프레임워크를 도입할 수 있으며, 더 높은 시간 주기의 트렌드 방향이 거래 신호와 일치하도록 요구하며, 승률을 높인다. 이렇게하면 큰 트렌드의 역행이 방지되고, “압”의 위험이 감소한다.

  2. 시장 상태 분류 처리: 시장 상태 분류 메커니즘을 추가하기 ((트렌드 시/폭동 시), 다른 시장 상태에 따라 전략 파라미터 또는 거래 규칙을 자동으로 조정한다. 예를 들어, ATR 또는 변동률 지표를 통해 시장 상태를 판단할 수 있으며, 높은 변동률 환경에서는 마이너스 요건을 높이고, 낮은 변동률 환경에서는 완화 조건이다.

  3. 기계 학습 최적화 변수: 기계 학습 알고리즘을 도입하여 전략의 변수를 동적으로 최적화합니다. 예를 들어, 유전 알고리즘이나 강도 학습 방법을 사용하여 최적의 변수 조합을 찾아서 전략이 시장 변화에 적응할 수 있도록합니다.

  4. 감정 지표 통합: 시장 감정 지표 (VIX, 자금 흐름 등) 를 신호 생성 로직에 통합하여 시장 전환점에 대한 사전 판단 능력을 향상시킵니다. 시장 감정은 가격 변화에 앞서서 감정 지표와 결합하여 시장 전환 신호를 조기에 포착 할 수 있습니다.

  5. 정지 전략 최적화: Fibonacci 계열에 따라 수익을 얻는 분량 스톱 메커니즘을 구현하여 수익의 일부를 잠금화 할 수 있으며 나머지 포지션이 트렌드 수익을 충분히 누릴 수 있습니다. 예를 들어, 0.382, 0.618, 1.0 및 1.618 수준에서 일정 비율의 포지션을 설정 할 수 있습니다.

  6. 거래 비용 고려: 현재 전략은 거래 비용을 고려하지 않고, 거래 비용 계산 논리에 추가할 수 있으며, 신호가 생성하는 예상 수익이 거래 비용보다 많고, 빈번한 소규모 거래로 인한 비용 침식을 피할 수 있습니다.

  7. 리스크 포지션 관리: 역동적인 포지션 관리 모듈을 추가하여, 역사 변동률, 현재 신호 강도 및 계정 리스크 용량에 따라 최적의 포지션 크기를 자동으로 계산하여, 더 과학적인 자금 관리를 구현한다.

  8. 연관성 필터다자산 거래 시나리오에서 연관성 분석 모듈을 추가하여 고도로 연관된 여러 자산에 대해 동방위치 포지션을 동시에 설정하는 것을 피하고 체계적인 위험을 줄입니다.

요약하다

변동률과 거래량 복합 지수 트렌드 추적 전략은 거래량과 가격 변동률 지표를 혁신적으로 결합하여 시장 동력의 변화를 포착할 수 있는 정량화 거래 시스템을 구축한다. 이 전략은 잠재적인 전환점과 트렌드 확인을 식별하는 데 탁월한 성능을 발휘하며 피포나 체트 스톱 손실 관리 및 선택 가능한 반전 모드를 통해 유연한 거래 실행 장치를 제공합니다.

전략의 핵심 장점은 다양한 시장 환경에서 고품질 거래 기회를 식별 할 수있는 통합 지표 시스템과 동적 적응력입니다. 그러나 사용자는 파라미터 민감성, 가짜 돌파구 및 추세 판단 오류와 같은 잠재적인 위험에 주의해야하며, 여러 시간 주기 확인, 시장 상태 분류, 기계 학습 최적화 등을 통해 전략의 안정성과 적응력을 더욱 향상시킬 수 있습니다.

합리적인 매개 변수 설정과 지속적인 최적화를 통해, 이 전략은 거래자의 도구 상자에 있는 강력한 무기가 될 수 있으며, 특히 거래량과 가격 변동이 일치하는 비정상적인 시장 전환점을 찾는 데 적합하며, 거래자가 복잡한 변동 시장에서 중요한 거래 기회를 잡을 수 있도록 도와줍니다.

전략 소스 코드
/*backtest
start: 2024-05-26 00:00:00
end: 2025-05-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("Volume and Volatility Ratio Indicator-WODI", overlay=false)

// === 用户自定义参数 ===
vol_length = input(48, title="交易量均线长度")  // 交易量均线长度
index_short_length = input(13, title="指数短均线长度")  // 交易量均线长度
index_long_length = input(26, title="指数均线长度")  // 交易量均线长度
index_magnification = input(2, title="指数均线敏感度")  // 调整指数倍率
index_threshold_magnification = input(200, title="指数阈值百分比")  // 交易量/波动率指数阈值
lookback_bars = input(3, title="K线形态检测长度")  // 形态检测 K 线数量

reversal_s = input.bool(title = "反转策略", defval = false, group="Position")
stopLossFib = input.float(title="止损斐波那契", defval=0, options=[0, 0.127, 0.236, 0.382, 0.5, 0.618, 0.692, 0.786, 1, 1.272, 1.414, 1.618, 2.272, 2.414, 2.618, 3, 3.414, 3.618, 4, 4.236, 4.272, 4.414, 5], group="Position")
takeProfitFib = input.float(title="止盈斐波那契", defval=1.618, options=[0, 0.127, 0.236, 0.382, 0.5, 0.618, 0.692, 0.786, 1, 1.272, 1.414, 1.618, 2.272, 2.414, 2.618, 3, 3.414, 3.618, 4, 4.236, 4.272, 4.414, 5], group="Position")


// === 计算交易量均线 ===
vol_ma = ta.sma(volume, vol_length)

// === 计算当前交易量为平均交易量的百分比 ===
vol_percent = volume / vol_ma * 100

// === 计算波动率(当前 K 线振幅) ===
volatility = (high - low) / close * 100


// === 计算交易量/波动率指数 ===
new_module = ((volume*volume)/volatility) //新算法,不好用
volatility_index =  volume*volatility //

// === 计算指数平均值,用平均值做触发阈值 ===
index_short_ma = ta.sma(volatility_index, index_short_length)
index_long_ma = ta.sma(volatility_index, index_long_length)

index_threshold_magnification_auto = index_long_ma * index_threshold_magnification /100

// === 计算前 lookback_bars 根 K 线的指数趋势 ===
is_reversal_pattern = false
is_reversal_pattern_s = false

for i = 1 to lookback_bars
    if volatility_index[1] > volatility_index[2] and (volatility_index[1] > volatility_index[0] or volume[1] > volume[0])and close[i+1] > close[i] and close[1] < close[0] and volume > vol_ma  and volatility_index > index_threshold_magnification_auto and ((open[1] - close[1] < close[1] - low[1]) or (open[0] - close[0] < close[0] - low[0]))
        if i >= lookback_bars 
            is_reversal_pattern := true
    else if i < lookback_bars
        break
        
for i = 1 to lookback_bars
    if volatility_index[1] > volatility_index[2] and (volatility_index[1] > volatility_index[0] or volume[1] > volume[0])and close[i+1] < close[i] and close[1] > close[0] and volume > vol_ma and volatility_index > index_threshold_magnification_auto and ((close[1] - open[1] < high[1] - close[1]) or (close[0] - open[0] < high[0] - close[0]))
        if i >= lookback_bars 
            is_reversal_pattern_s := true
    else if i < lookback_bars
        break


// === 绘制指标 ===
//plot(vol_ma, color=color.rgb(158, 161, 170), linewidth = 1, title="交易量均线")
//plot(index_short_ma * index_magnification, color=color.gray, linewidth = 1, title="指数短均线")
//plot(index_long_ma * index_magnification, color=#2ad7f6, linewidth = 1, title="指数长均线")
plot(index_threshold_magnification_auto, color=color.rgb(238, 66, 193), linewidth = 1, title="波动率阈值")

// === 交易量柱状图(高亮大于均值的交易量) ===
bar_color = volume > vol_ma ? (is_reversal_pattern? #bc2af6 : (is_reversal_pattern_s? #f22a2a : color.rgb(77, 231, 255, 37))) : color.rgb(120, 123, 134, 70)
plot(volatility_index*2, style=plot.style_columns, color=bar_color, title="交易量柱状图")
plot(volume, style=plot.style_stepline, color=#00000055, title="交易量")



// === 反转做多策略 ===
var float stop_loss = na
var float take_profit = na

if is_reversal_pattern and (reversal_s ? strategy.position_size >= 0 : strategy.position_size <= 0)
    bearish_low = low[1] < low[0]? low[1] : low [0]// 形态最低点
    bearish_high = high[lookback_bars] > high[0] ? high[lookback_bars] : high[0]// 形态最高点
    bearish_range = bearish_high - bearish_low  // 形态振幅

    // === 计算止损 (SL) 和止盈 (TP) ===
    stop_loss := reversal_s ? bearish_high + (bearish_range * stopLossFib) : bearish_low - (bearish_range * stopLossFib) //止损斐波那契
    take_profit := reversal_s ?  bearish_high - (bearish_range * takeProfitFib) : bearish_low + (bearish_range * takeProfitFib) //止盈斐波那契
    is_reversal_pattern := false
    strategy.entry(reversal_s ? "short" : "Long", reversal_s ? strategy.short : strategy.long)


if is_reversal_pattern_s and (reversal_s ? strategy.position_size <= 0 : strategy.position_size >= 0)
    bearish_low = low[lookback_bars] < low[0] ? low[lookback_bars] : low[0]// 形态低点
    bearish_high =  high[1] > high[0]? high[1] : high [0]// 形态高点
    bearish_range = bearish_high - bearish_low  // 形态振幅

    // === 计算止损 (SL) 和止盈 (TP) ===
    stop_loss := reversal_s ? bearish_low - (bearish_range * stopLossFib) : bearish_high + (bearish_range * stopLossFib) //止损斐波那契
    take_profit := reversal_s ? bearish_low + (bearish_range * takeProfitFib) : bearish_high - (bearish_range * takeProfitFib) //止盈斐波那契
    is_reversal_pattern_s := false
    strategy.entry(reversal_s ? "Long" : "short",  reversal_s ? strategy.long : strategy.short)


// === 止损 (SL) 和止盈 (TP) ===
if low[0] < stop_loss and strategy.position_size >= 0
    strategy.close("Long", qty_percent = 100)

if high[0] > take_profit and strategy.position_size >= 0
    strategy.close("Long", qty_percent = 100)

if high[0] > stop_loss and strategy.position_size <= 0
    strategy.close("short", qty_percent = 100)
    
if low[0] < take_profit and strategy.position_size <= 0
    strategy.close("short", qty_percent = 100)