
La stratégie est un système de trading quantitatif basé sur la détection de points de jonction de la liquidité sur plusieurs périodes de temps. Il identifie les principaux niveaux de support et de résistance en analysant le comportement des prix sur trois périodes de temps différentes: 15 minutes, 1 heure et 4 heures, et prend des décisions de trading sur cette base. Le système intègre des fonctions de gestion de fonds, y compris des paramètres de stop-loss sur des montants fixes, tout en fournissant des commentaires visuels intuitifs pour aider les traders à mieux comprendre la structure du marché.
Le cœur de la stratégie consiste à détecter les pivots de prix sur plusieurs périodes de temps à l’aide des fonctions ta.pivothigh et ta.pivotlow. Pour chaque période de temps, le système utilise des lignes K de référence droites et droites (en supposant 7) pour identifier les hauts et les bas importants. Lorsqu’un nouveau pivot bas apparaît sur une période de temps donnée, le système génère des signaux multiples. Lorsqu’un nouveau pivot haut apparaît, le système génère des signaux blancs.
La stratégie de quantification de la chaleur des nœuds de fluidité à cycles multiples est un système de négociation structuré et logiquement clair. Grâce à une analyse de marché multidimensionnelle et à une gestion rigoureuse des risques, elle fournit aux traders un cadre de négociation fiable. Bien qu’il existe des risques et des limites inhérents, la stratégie devrait rester stable dans divers environnements de marché grâce à une optimisation et à une amélioration continues.
/*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")