다중 시간대 유동성 허브 히트맵 정량적 전략

MTF
생성 날짜: 2024-12-20 14:20:11 마지막으로 수정됨: 2024-12-20 14:20:11
복사: 0 클릭수: 433
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

다중 시간대 유동성 허브 히트맵 정량적 전략

개요

이 전략은 다중 시간 주기의 유동성 허브 포인트 검사를 기반으로 한 정량 거래 시스템입니다. 그것은 세 개의 다른 시간 주기의 가격 행동을 분석하여 (15 분, 1 시간, 4 시간) 중요한 지원 및 저항 수준을 식별하고 그 기반으로 거래 결정을 내립니다. 시스템은 고정 금액의 중지 및 손실 설정을 포함한 자금 관리 기능을 통합하고 있으며, 직관적인 시각적 피드백을 제공하여 거래자가 시장 구조를 더 잘 이해할 수 있도록합니다.

전략 원칙

이 전략의 핵심은 ta.pivothigh 및 ta.pivotlow 함수를 통해 여러 시간 주기에 걸쳐 가격 중추점을 검출하는 것이다. 각 시간 주기에 대해, 시스템은 좌우 참조 K선 (기본 7) 을 사용하여 눈에 띄는 고위점과 낮은 점을 결정한다. 어떤 시간 주기에 새로운 중추 낮은점이 발생하면, 시스템은 여러 신호를 생성하고, 새로운 중추 높은점이 발생하면, 시스템은 빈 신호를 생성한다. 거래 실행은 고정 금액의 중지 손실 관리를 채택하고, moneyToSLPoints 함수를 통해 달러 금액을 해당 포인트로 변환한다.

전략적 이점

  1. 다중 시간 주기의 분석은 다양한 수준의 거래 기회를 포착하는 데 도움이되는 더 포괄적인 시장 관점을 제공합니다.
  2. 허브 기반 거래 논리는 기술 분석 기반을 가지고 있으며 이해하기 쉽고 실행이 가능합니다.
  3. 통합된 자금 관리 기능으로 거래의 위험을 효과적으로 제어할 수 있습니다.
  4. 시각적 인터페이스는 위치, 스톱로스 레벨 및 수익 영역을 포함한 거래 상태를 직관적으로 표시합니다.
  5. 전략 매개 변수는 조정 가능하고, 적응력이 강하며, 다양한 시장 조건에 따라 최적화 할 수 있습니다.

전략적 위험

  1. 다중 시간 주기의 신호가 충돌할 수 있으므로 합리적인 신호 우선 순위 메커니즘을 구축해야 합니다.
  2. 고정 금액의 스톱 스톱 손실은 모든 시장 조건에 적합하지 않을 수 있으며 변동성 동력에 따라 조정하는 것이 좋습니다.
  3. 허브 점검의 지연으로 인해 입국 시기가 뒤떨어질 수 있습니다.
  4. 급격한 변동이 있을 때, 가짜 브레이크 신호가 발생할 수 있습니다.
  5. 유동성의 차이에 주의해야 합니다.

전략 최적화 방향

  1. 변동률 지표를 도입하고, 동적으로 중지 손실 수준을 조정합니다.
  2. 거래량 확인 메커니즘을 추가하여 허브의 신뢰성을 향상시킵니다.
  3. 신호 충돌 문제를 해결하기 위한 시간 주기 우선 순위 시스템을 개발
  4. 트렌드 필터를 통합하여 수평 시장에서 과도한 거래를 피하십시오.
  5. 가격 구조 분석을 추가하여 입점 시점의 정확성을 높이는 것을 고려하십시오.

요약하다

다중 시간 주기의 유동성 노드 열 도표화 전략은 구조적이고 논리적으로 명확한 거래 시스템입니다. 다차원 시장 분석과 엄격한 위험 관리를 통해 거래자에게 신뢰할 수있는 거래 프레임 워크를 제공합니다. 일부 고유한 위험과 제약이 있지만 지속적인 최적화와 개선으로 전략은 다양한 시장 환경에서 안정적인 성능을 유지할 것으로 예상됩니다.

전략 소스 코드
/*backtest
start: 2024-11-19 00:00:00
end: 2024-12-18 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © pmotta41
//@version=5
strategy("GPT Session Liquidity Heatmap Strategy", overlay=true)

// Inputs
timeframe1 = input.timeframe("15", title="Intraday Timeframe 1")
timeframe2 = input.timeframe("60", title="Intraday Timeframe 2")
timeframe3 = input.timeframe("240", title="Higher Timeframe")
leftBars = input.int(7, title="Left Bars for Pivot", minval=2, maxval=20)
rightBars = input.int(7, title="Right Bars for Pivot", minval=2, maxval=20)
takeProfitDollar = input(200, title="Take Profit $$")
stopLossDollar = input(100, title="Stop Loss $$")

// Pivot Detection Function
detectPivot(highs, lows, left, right) =>
    pivotHigh = ta.pivothigh(highs, left, right)
    pivotLow = ta.pivotlow(lows, left, right)
    [pivotHigh, pivotLow]

// Get Pivots from Different Timeframes
[pivotHigh1, pivotLow1] = request.security(syminfo.tickerid, timeframe1, detectPivot(high, low, leftBars, rightBars))
[pivotHigh2, pivotLow2] = request.security(syminfo.tickerid, timeframe2, detectPivot(high, low, leftBars, rightBars))
[pivotHigh3, pivotLow3] = request.security(syminfo.tickerid, timeframe3, detectPivot(high, low, leftBars, rightBars))

// Plot Pivots
plotshape(series=pivotHigh1, title="Pivot High 1", location=location.abovebar, color=color.red, style=shape.labeldown, text="H1")
plotshape(series=pivotLow1, title="Pivot Low 1", location=location.belowbar, color=color.green, style=shape.labelup, text="L1")
plotshape(series=pivotHigh2, title="Pivot High 2", location=location.abovebar, color=color.red, style=shape.labeldown, text="H2")
plotshape(series=pivotLow2, title="Pivot Low 2", location=location.belowbar, color=color.green, style=shape.labelup, text="L2")
plotshape(series=pivotHigh3, title="Pivot High 3", location=location.abovebar, color=color.red, style=shape.labeldown, text="H3")
plotshape(series=pivotLow3, title="Pivot Low 3", location=location.belowbar, color=color.green, style=shape.labelup, text="L3")

// Strategy Logic
buyCondition = pivotLow1 or pivotLow2 or pivotLow3
sellCondition = pivotHigh1 or pivotHigh2 or pivotHigh3

if (buyCondition)
    strategy.entry("Buy", strategy.long)

if (sellCondition)
    strategy.entry("Sell", strategy.short)

// Function to Convert $$ to Points for Stop Loss and Take Profit
moneyToSLPoints(money) =>
    strategy.position_size != 0 ? (money / syminfo.pointvalue / math.abs(strategy.position_size)) / syminfo.mintick : na

p = moneyToSLPoints(takeProfitDollar)
l = moneyToSLPoints(stopLossDollar)

// Exit Conditions
strategy.exit("Exit Buy", from_entry="Buy", profit=p, loss=l)
strategy.exit("Exit Sell", from_entry="Sell", profit=p, loss=l)

// Visualization for Stop Loss and Take Profit Levels
pointsToPrice(pp) =>
    na(pp) ? na : strategy.position_avg_price + pp * math.sign(strategy.position_size) * syminfo.mintick

tp = plot(pointsToPrice(p), style=plot.style_linebr, color=color.green, title="Take Profit Level")
sl = plot(pointsToPrice(-l), style=plot.style_linebr, color=color.red, title="Stop Loss Level")
avg = plot(strategy.position_avg_price, style=plot.style_linebr, color=color.blue, title="Entry Price")
fill(tp, avg, color=color.new(color.green, 90), title="Take Profit Area")
fill(avg, sl, color=color.new(color.red, 90), title="Stop Loss Area")

// Background for Gain/Loss
gainBackground = strategy.position_size > 0 and close > strategy.position_avg_price
lossBackground = strategy.position_size > 0 and close < strategy.position_avg_price
bgcolor(gainBackground ? color.new(color.green, 90) : na, title="Gain Background")
bgcolor(lossBackground ? color.new(color.red, 90) : na, title="Loss Background")