리소스 로딩... 로딩...

유동성 가중화 이동 평균 모멘텀 크로스오버 전략

저자:차오장, 날짜: 2025-01-17 15:45:55
태그:LWMAEMAVOLstdev크로스

 Liquidity-Weighted Moving Average Momentum Crossover Strategy

전반적인 설명

이 전략은 유동성 가중화 이동 평균에 기반한 거래 시스템으로, 가격 움직임과 거래량 사이의 관계를 통해 시장 유동성을 측정합니다. 빠른 선이 느린 선 위에 넘어가면 구매 신호를 생성하고 느린 선이 넘어가면 판매 신호를 생성하기 위해 빠르고 느린 이동 평균을 구성합니다. 이 전략은 특히 비정상적인 유동성 이벤트에 초점을 맞추고 더 정확한 거래 기회를위한 배열에 주요 가격 수준을 기록합니다.

전략 원칙

핵심 메커니즘은 시장 유동성을 가격 움직임에 대한 부피의 비율을 통해 측정하는 데 의존합니다. 구현은 다음 단계를 따르습니다. 1. 유동성 지표를 계산합니다. 부피는 폐쇄 가격과 오픈 가격의 절대 차이로 나니다. 2. 유동성 경계를 설정: EMA 및 표준편차를 사용하여 비정상적인 유동성을 식별 3. 가격 배열 유지: 유동성 경계가 위반 될 때 가격을 기록 4. 이동 평균을 구성: 유동성 이벤트에 기초하여 빠르고 느린 EMA를 계산 5. 거래 신호를 생성: 이동 평균 크로스오버를 통해 입구 및 출구 지점을 결정

전략적 장점

  1. 유동성 인식: 거래량과 가격 움직임을 결합함으로써 시장 활동을 더 정확하게 포착합니다.
  2. 이벤트 추적: 배열 구현을 통해 주요 가격 수준을 기록하여 놓친 기회를 방지합니다.
  3. 역동적 적응: EMA의 감소 가중량은 시장의 더 나은 조정
  4. 위험 관리: 교차로를 통해 명확한 출입 신호를 제공합니다.
  5. 사용자 정의 가능성: 다양한 시장 조건에 맞게 여러 개의 조정 가능한 매개 변수

전략 위험

  1. 매개 변수 민감성: 전략의 효과는 매개 변수 설정에 크게 달려 있습니다.
  2. 지연: 이동 평균 기반 시스템의 고유 지연
  3. 시장 의존성: 특정 기간과 시장에서 불안정한 성과
  4. 가짜 브레이크: 높은 변동성 동안 잘못된 신호를 생성할 수 있습니다.
  5. 거래 비용: 빈번한 거래로 인해 상당한 비용이 발생할 수 있습니다.

최적화 방향

  1. 필터 구현:
  • ADX 같은 트렌드 확인 지표를 추가합니다.
  • 거짓 신호를 필터링하기 위해 변동성 지표를 사용
  1. 출입 시기를 개선합니다.
  • 지원 및 저항 수준을 포함
  • 부피 분출 확인을 고려하십시오.
  1. 매개 변수 선택 최적화:
  • 적응 매개 변수를 구현
  • 시장 조건에 따라 동적으로 조정
  1. 리스크 관리 강화:
  • 스톱 로스 및 수익 취득 메커니즘을 추가
  • 위치 크기를 측정하는 시스템을 구현

요약

이 혁신적인 전략은 유동성 분석과 기술적 인 지표를 결합하여 시장 유동성 이상 현상을 모니터링함으로써 전통적인 이동 평균 크로스오버 시스템을 최적화합니다. 특정 시장 조건에서 유망한 결과를 보여주지만 안정성과 적용성을 향상시키기 위해 추가 최적화가 필요합니다. 거래자는 라이브 구현 전에 철저하게 테스트하고 더 견고한 거래 시스템을 위해 다른 지표와 결합하는 것을 고려해야합니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//Liquidity ignoring price location

//@version=6
strategy("Liquidity Weighted Moving Averages [AlgoAlpha]", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3)

// Inputs
outlierThreshold = input.int(10, "Outlier Threshold Length")
fastMovingAverageLength = input.int(50, "Fast MA Length")
slowMovingAverageLength = input.int(100, "Slow MA Length")
start_date = input(timestamp("2018-01-01 00:00"), title="Start Date")
end_date = input(timestamp("2069-12-31 23:59"), title="End Date")

// Define liquidity based on volume and price movement
priceMovementLiquidity = volume / math.abs(close - open)

// Calculate the boundary for liquidity to identify outliers
liquidityBoundary = ta.ema(priceMovementLiquidity, outlierThreshold) + ta.stdev(priceMovementLiquidity, outlierThreshold)

// Initialize an array to store liquidity values when they cross the boundary
var liquidityValues = array.new_float(5)

// Check if the liquidity crosses above the boundary and update the array
if ta.crossover(priceMovementLiquidity, liquidityBoundary)
    array.insert(liquidityValues, 0, close)
    if array.size(liquidityValues) > 5
        array.pop(liquidityValues)

// Calculate the Exponential Moving Averages for the close price at the last liquidity crossover
fastEMA = ta.ema(array.size(liquidityValues) > 0 ? array.get(liquidityValues, 0) : na, fastMovingAverageLength)
slowEMA = ta.ema(array.size(liquidityValues) > 0 ? array.get(liquidityValues, 0) : na, slowMovingAverageLength)

// Trading Logic
in_date_range = true
buy_signal = ta.crossover(fastEMA, slowEMA) and in_date_range
sell_signal = ta.crossunder(fastEMA, slowEMA) and in_date_range

// Strategy Entry and Exit
if (buy_signal)
    strategy.entry("Buy", strategy.long)

if (sell_signal)
    strategy.close("Buy")

// Plotting
fastPlot = plot(fastEMA, color=fastEMA > slowEMA ? color.new(#00ffbb, 50) : color.new(#ff1100, 50), title="Fast EMA")
slowPlot = plot(slowEMA, color=fastEMA > slowEMA ? color.new(#00ffbb, 50) : color.new(#ff1100, 50), title="Slow EMA")

// Create a fill between the fast and slow EMA plots with appropriate color based on crossover
fill(fastPlot, slowPlot, fastEMA > slowEMA ? color.new(#00ffbb, 50) : color.new(#ff1100, 50))


관련

더 많은