이 전략은 유동성 가중화 이동 평균에 기반한 거래 시스템으로, 가격 움직임과 거래량 사이의 관계를 통해 시장 유동성을 측정합니다. 빠른 선이 느린 선 위에 넘어가면 구매 신호를 생성하고 느린 선이 넘어가면 판매 신호를 생성하기 위해 빠르고 느린 이동 평균을 구성합니다. 이 전략은 특히 비정상적인 유동성 이벤트에 초점을 맞추고 더 정확한 거래 기회를위한 배열에 주요 가격 수준을 기록합니다.
핵심 메커니즘은 시장 유동성을 가격 움직임에 대한 부피의 비율을 통해 측정하는 데 의존합니다. 구현은 다음 단계를 따르습니다.
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))