这是一个基于买卖量Delta值的SMA(简单移动平均线)在一年期间高低点分析的交易策略。该策略通过计算买卖量差值的移动平均线,并将其与历史高低点阈值进行比较来识别潜在的交易信号。策略采用长期的回溯期,适合中长期趋势交易。
策略的核心逻辑基于以下几个关键步骤: 1. Delta计算: 通过分析价格走势计算买卖量差值。当收盘价高于开盘价时记录为买入量,反之为卖出量。 2. SMA平滑处理: 对Delta值进行14周期的移动平均处理,以减少噪声。 3. 一年期高低点确定: 计算Delta SMA在过去一年的最高值和最低值。 4. 信号触发条件: - 买入信号: 当Delta SMA在低于一年低点70%后突破0时触发 - 卖出信号: 当Delta SMA突破一年高点90%后,跌破60%时触发
这是一个基于成交量分析的中长期趋势跟踪策略,通过分析买卖量差值的历史高低点来捕捉市场趋势。策略设计合理,风险控制到位,但需要注意市场环境的适应性和参数优化问题。通过提出的优化方向,策略还有进一步提升的空间。
/*backtest
start: 2024-02-20 00:00:00
end: 2025-02-17 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Delta SMA 1-Year High/Low Strategy", overlay = false, margin_long = 100, margin_short = 100)
// Inputs
delta_sma_length = input.int(14, title="Delta SMA Length", minval=1) // SMA length for Delta
lookback_days = 365 // Lookback period fixed to 1 year
// Function to calculate buy and sell volume
buy_volume = close > open ? volume : na
sell_volume = close < open ? volume : na
// Calculate the Delta
delta = nz(buy_volume, 0) - nz(sell_volume, 0)
// Calculate Delta SMA
delta_sma = ta.sma(delta, delta_sma_length)
// Lookback period in bars (1 bar = 1 day)
desired_lookback_bars = lookback_days
// Ensure lookback doesn't exceed available historical data
max_lookback_bars = math.min(desired_lookback_bars, 365) // Cap at 365 bars (1 year)
// Calculate Delta SMA low and high within the valid lookback period
delta_sma_low_1yr = ta.lowest(delta_sma, max_lookback_bars)
delta_sma_high_1yr = ta.highest(delta_sma, max_lookback_bars)
// Define thresholds for buy and sell conditions
very_low_threshold = delta_sma_low_1yr * 0.7
above_70_threshold = delta_sma_high_1yr * 0.9
below_60_threshold = delta_sma_high_1yr * 0.5
// Track if `delta_sma` was very low and persist the state
var bool was_very_low = false
if delta_sma < very_low_threshold
was_very_low := true
if ta.crossover(delta_sma, 10000)
was_very_low := false // Reset after crossing 0
// Track if `delta_sma` crossed above 70% of the high
var bool crossed_above_70 = false
if ta.crossover(delta_sma, above_70_threshold)
crossed_above_70 := true
if delta_sma < below_60_threshold*0.5 and crossed_above_70
crossed_above_70 := false // Reset after triggering sell
// Buy condition: `delta_sma` was very low and now crosses 0
buy_condition = was_very_low and ta.crossover(delta_sma, 0)
// Sell condition: `delta_sma` crossed above 70% of the high and now drops below 60%
sell_condition = crossed_above_70 and delta_sma < below_60_threshold
// Place a long order when buy condition is met
if buy_condition
strategy.entry("Buy", strategy.long)
// Place a short order when sell condition is met
if sell_condition
strategy.close("Buy")
// Plot Delta SMA and thresholds for visualization
plot(delta_sma, color=color.blue, title="Delta SMA")
plot(very_low_threshold, color=color.green, title="70% of 1-Year Delta SMA Low", linewidth=2)
plot(above_70_threshold, color=color.purple, title="70% of 1-Year Delta SMA High", linewidth=2)
plot(below_60_threshold, color=color.red, title="60% of 1-Year Delta SMA High", linewidth=2)
// Optional: Plot Buy and Sell signals on the chart
//plotshape(series=buy_condition, title="Buy Signal", location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text="BUY")
//plotshape(series=sell_condition, title="Sell Signal", location=location.abovebar, color=color.new(color.red, 0), style=shape.labeldown, text="SELL")