
Chiến lược này là một hệ thống giao dịch định lượng dựa trên phát hiện các điểm trung tâm lưu động trong nhiều chu kỳ thời gian. Nó phân tích hành vi giá trong ba chu kỳ thời gian khác nhau (khoảng 15 phút, 1 giờ và 4 giờ) để xác định các mức hỗ trợ và kháng cự quan trọng và đưa ra quyết định giao dịch dựa trên đó. Hệ thống tích hợp các chức năng quản lý tiền, bao gồm cài đặt dừng lỗ với số tiền cố định, đồng thời cung cấp phản hồi trực quan trực quan để giúp thương nhân hiểu rõ hơn về cấu trúc thị trường.
Cốt lõi của chiến lược này là phát hiện các điểm trung tâm giá trên nhiều chu kỳ thời gian thông qua các hàm ta.pivothigh và ta.pivotlow. Đối với mỗi chu kỳ thời gian, hệ thống sử dụng các đường K tham chiếu bên trái và bên phải (được mặc định 7) để xác định các điểm cao và thấp đáng chú ý.
Chiến lược định lượng nhiệt độ trung tâm lưu động nhiều chu kỳ là một hệ thống giao dịch có cấu trúc, logic rõ ràng. Nó cung cấp cho các nhà giao dịch một khuôn khổ giao dịch đáng tin cậy thông qua phân tích thị trường đa chiều và quản lý rủi ro nghiêm ngặt. Mặc dù có một số rủi ro và hạn chế vốn có, nhưng thông qua việc tối ưu hóa và cải tiến liên tục, chiến lược này có khả năng duy trì hiệu suất ổn định trong nhiều môi trường thị trường.
/*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")