该策略是一个基于供需区间和中线反转的交易系统,在5分钟时间框架上运行。它通过识别趋势回调至中线位置时的反转信号来进行交易,并在预先确定的供需区域设置止盈止损。策略结合了移动平均线(SMA)来确定趋势方向,通过高低点识别供需区间,利用区间中点作为重要的价格参考水平。
策略的核心逻辑包含以下几个关键要素: 1. 供需区间的确定:使用用户自定义周期(默认50个周期)的最高价和最低价来确定供应区(阻力位)和需求区(支撑位) 2. 中线计算:取供需区间的中点作为价格反转的重要参考位置 3. 趋势判断:采用简单移动平均线(默认20周期)判断当前趋势方向 4. 入场条件: - 多头:价格在均线上方(上升趋势),且在中点下方出现看涨蜡烛形态 - 空头:价格在均线下方(下降趋势),且在中点上方出现看跌蜡烛形态 5. 止盈止损设置: - 多头:止盈设在供应区,止损设在需求区 - 空头:止盈设在需求区,止损设在供应区
动态供需区间中线反转策略是一个结合了技术分析多个维度的交易系统,通过供需区间、趋势和价格形态的配合来捕捉市场机会。该策略的核心优势在于其清晰的逻辑框架和完善的风险管理体系,但同时也需要交易者密切关注市场环境的变化,及时调整参数设置。通过建议的优化方向,策略的稳定性和适应性有望得到进一步提升。
/*backtest
start: 2025-02-16 00:00:00
end: 2025-02-23 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bommytarton
//@version=6
strategy("Midline Rejection Entry with TP/SL at Supply/Demand", overlay=true)
// User inputs for Swing Length and Length for Supply/Demand Zones
length = input.int(50, title="Swing Length", minval=1)
midlineLength = input.int(20, title="Midline Length for Trend", minval=1) // Moving average length for trend
// Identify swing highs (Supply Zone) and swing lows (Demand Zone)
supplyZone = ta.highest(high, length) // Supply Zone (resistance)
demandZone = ta.lowest(low, length) // Demand Zone (support)
// Calculate the midpoint between supply and demand zones
midpoint = (supplyZone + demandZone) / 2
// Trend Detection: Use a simple moving average (SMA) for trend direction
smaTrend = ta.sma(close, midlineLength)
// Variables to store Supply/Demand Zones at the time of entry
var float entrySupplyZone = na
var float entryDemandZone = na
var float entryMidpoint = na
// Entry Conditions
// 1. Price in an uptrend (close above SMA)
longCondition = close > smaTrend and close < midpoint and close > open and open < close[1] and close[1] < open[1]
// 1. Price in a downtrend (close below SMA)
shortCondition = close < smaTrend and close > midpoint and close < open and open > close[1] and close[1] > open[1]
// Close any open trades before opening a new one
if (longCondition or shortCondition)
strategy.close_all()
// Execute the entry logic
if (longCondition)
entrySupplyZone := supplyZone // Store Supply Zone for Take Profit
entryDemandZone := demandZone // Store Demand Zone for Stop Loss
entryMidpoint := midpoint // Store Midpoint
strategy.entry("Long", strategy.long)
label.new(bar_index, low, "Open Long", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)
if (shortCondition)
entrySupplyZone := supplyZone // Store Supply Zone for Stop Loss
entryDemandZone := demandZone // Store Demand Zone for Take Profit
entryMidpoint := midpoint // Store Midpoint
strategy.entry("Short", strategy.short)
label.new(bar_index, high, "Open Short", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)
// Define Take Profit and Stop Loss Levels for Long/Short Trades
if (strategy.opentrades > 0)
// For Long trades, use Supply Zone for Take Profit and Demand Zone for Stop Loss
if (strategy.position_size > 0)
strategy.exit("Take Profit", "Long", limit=entrySupplyZone) // Take Profit at Supply Zone
strategy.exit("Stop Loss", "Long", stop=entryDemandZone) // Stop Loss at Demand Zone
// For Short trades, use Demand Zone for Take Profit and Supply Zone for Stop Loss
if (strategy.position_size < 0)
strategy.exit("Take Profit", "Short", limit=entryDemandZone) // Take Profit at Demand Zone
strategy.exit("Stop Loss", "Short", stop=entrySupplyZone) // Stop Loss at Supply Zone
// Re-Plot Supply, Midpoint, and Demand Zones after Trade Closure
plot(supplyZone, title="Supply Zone", color=color.red, linewidth=2, style=plot.style_line)
plot(demandZone, title="Demand Zone", color=color.green, linewidth=2, style=plot.style_line)
plot(midpoint, title="Midpoint", color=color.blue, linewidth=1, style=plot.style_line)