
이 전략은 다중 시간 주기의 유동성 허브 포인트 검사를 기반으로 한 정량 거래 시스템입니다. 그것은 세 개의 다른 시간 주기의 가격 행동을 분석하여 (15 분, 1 시간, 4 시간) 중요한 지원 및 저항 수준을 식별하고 그 기반으로 거래 결정을 내립니다. 시스템은 고정 금액의 중지 및 손실 설정을 포함한 자금 관리 기능을 통합하고 있으며, 직관적인 시각적 피드백을 제공하여 거래자가 시장 구조를 더 잘 이해할 수 있도록합니다.
이 전략의 핵심은 ta.pivothigh 및 ta.pivotlow 함수를 통해 여러 시간 주기에 걸쳐 가격 중추점을 검출하는 것이다. 각 시간 주기에 대해, 시스템은 좌우 참조 K선 (기본 7) 을 사용하여 눈에 띄는 고위점과 낮은 점을 결정한다. 어떤 시간 주기에 새로운 중추 낮은점이 발생하면, 시스템은 여러 신호를 생성하고, 새로운 중추 높은점이 발생하면, 시스템은 빈 신호를 생성한다. 거래 실행은 고정 금액의 중지 손실 관리를 채택하고, moneyToSLPoints 함수를 통해 달러 금액을 해당 포인트로 변환한다.
다중 시간 주기의 유동성 노드 열 도표화 전략은 구조적이고 논리적으로 명확한 거래 시스템입니다. 다차원 시장 분석과 엄격한 위험 관리를 통해 거래자에게 신뢰할 수있는 거래 프레임 워크를 제공합니다. 일부 고유한 위험과 제약이 있지만 지속적인 최적화와 개선으로 전략은 다양한 시장 환경에서 안정적인 성능을 유지할 것으로 예상됩니다.
/*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")