
该策略基于改动的能量潮指标(OBV)和MACD进行交易信号判断,属于量价综合策略。它融合了股价指数MACD和改动OBV作为量价综合信号,旨在发现股票量价强弱突破的交易机会。
计算简单移动平均线SMA,判断大盘趋势。
计算改动OBV。它根据收盘价和前一日收盘价的关系改动OBV的计算方式,使OBV更敏感。
在改动OBV上计算MACD。MACD由快线、慢线和MACD柱组成,可发现量能变化趋势。
当MACD金叉且向上时,判断为买入信号。
当MACD死叉且向下时,判断为卖出信号。
结合大盘SMA判断,避免不必要的交易。
改动OBV更加敏感,可提前捕捉到量能变化。
MACD可清晰判断量能变化趋势和关键点位。
量价综合信号,提高信号准确率。
SMA判断大盘趋势,有助过滤误信号。
策略思路清晰易理解,参数优化空间大。
改动OBV容易产生误信号,需要配合其他指标过滤。
MACD参数设置不当会错过交易机会或产生误信号。
需要关注股票本身信息,避免因个股问题导致损失。
需关注市场环境,不适用于特殊行情场景。
回测数据拟合风险,实盘可能效果下降。
测试不同SMA周期组合,优化大盘趋势判断。
测试MACD参数设置,优化量能变化判断。
增加其他指标过滤误信号,如KDJ、RSI等。
添加止损策略,控制单笔损失。
优化资金管理策略,提高整体盈利效果。
测试不同股票策略参数差异。
该策略融合改动OBV和MACD指标,实现了量价结合,能够提前捕捉股票量能态势的变化,从而产生交易信号。相比单一使用OBV或MACD,该策略可以提供更可靠的买卖时机。但该策略也存在一定的误信号风险,需要进一步优化指标组合和参数设定,并辅以资金管理手段,才能在实盘中获得稳定收益。总体来说,该策略思路清晰,值得进一步测试优化,以发掘其潜力。
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © stocktechbot
//@version=5
strategy("Altered OBV On MACD", overlay=true, margin_long=100, margin_short=100)
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © stocktechbot
//@version=5
//SMA Tredline
out = ta.sma(close, 200)
outf = ta.sma(close, 50)
outn = ta.sma(close, 90)
outt = ta.sma(close, 21)
outthree = ta.sma(close, 9)
//sma plot
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
plot(out, color=color.blue, title="MA200", offset=offset)
plot(outf, color=color.maroon, title="MA50", offset=offset)
plot(outn, color=color.orange, title="MA90", offset=offset)
plot(outt, color=color.olive, title="MA21", offset=offset)
plot(outthree, color=color.fuchsia, title="MA9", offset=offset)
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
chng = 0
obv = ta.cum(math.sign(ta.change(close)) * volume)
if close < close[1] and (open < close)
chng := 1
else if close > close[1]
chng := 1
else
chng := -1
obvalt = ta.cum(math.sign(chng) * volume)
//src = input(title="Source", defval=close)
src = obvalt
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
//hline(0, "Zero Line", color=color.new(#787B86, 50))
//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
//plot(macd, title="MACD", color=col_macd)
//plot(signal, title="Signal", color=col_signal)
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
//BUY Signal
mafentry =ta.sma(close, 50) > ta.sma(close, 90)
//matentry = ta.sma(close, 21) > ta.sma(close, 50)
matwohun = close > ta.sma(close, 200)
twohunraise = ta.rising(out, 2)
twentyrise = ta.rising(outt, 2)
macdrise = ta.rising(macd,2)
macdlong = ta.crossover(macd, signal)
longCondition=false
if macdlong and macdrise
longCondition := true
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
//Sell Signal
mafexit =ta.sma(close, 50) < ta.sma(close, 90)
matexit = ta.sma(close, 21) < ta.sma(close, 50)
matwohund = close < ta.sma(close, 200)
twohunfall = ta.falling(out, 3)
twentyfall = ta.falling(outt, 2)
shortmafall = ta.falling(outthree, 1)
macdfall = ta.falling(macd,1)
macdsell = macd < signal
shortCondition = false
if macdfall and macdsell and (macdLine < signalLine) and ta.falling(low,2)
shortCondition := true
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)