年化17.9%:一个基于能量潮的趋势指标:OBVM

今天讲一个指标OBVM,就是OBV指数化。

量价指标: OBV (On-Balance Volume,净额成交量或叫能量潮指标

由 Joe Granville 提出,通过统计成交量变动的趋势推测股价趋势

计算公式:以某日为基期,逐日累计每日上市股票总成交量,

若隔日指数或股票上涨,则基期OBV加上本日成交量为本日OBV;

若隔日指数或股票下跌,则基期OBV减去本日成交量为本日OBV。

要计算OBVM(OBV的长短期均线),我们需要两个函数,一是OBV,二是EMA:

一个简单的只开多仓的规则:当OBVM上穿Signal line,开多仓;当OBVM下穿Signal line,平仓。这个规则只捕捉上涨趋势。

图片

策略代码如下(代码已经提交星球)

图片

from engine.datafeed.dataloader import Hdf5Dataloader

symbols = ['600519.SH']
loader = Hdf5Dataloader(symbols, start_date="20120101")
df = loader.load(fields=['ema(ta_obv(close,volume),7)',
                         'ema(ta_obv(close,volume),10)',
                         'cross_up(obvm_7,obvm_10)',
                         'cross_down(obvm_7,obvm_10)',
                         ],
                 names=['obvm_7', 'obvm_10','buy', 'sell']
                 )

from engine.env import Env
from engine.algo.algos import *
from engine.algo.algo_weights import *

bench_loader = Hdf5Dataloader(['000300.SH'], start_date='20120101')
e = Env(df, name='OBVM择时', benchmarks=bench_loader.load())
e.set_algos([
    #RunMonthly(),
    SelectBySignal(buy_rules=['ind(buy)'], sell_rules=['ind(sell)']),
    WeightEqually()
])
e.backtest_loop()
e.show_results(plot=True)
# e.save_results()

在我们的因子表达式库里补充一下函数:

def ema(se, N):
    return ta('EMA', se, N)
def _obv(close, volume):
    return talib.OBV(close, volume)


def ta_obv(close, volume):
    close.name = 'close'
    volume.name = 'volume'
    df = pd.concat([close, volume], axis=1)
    se = df.groupby('symbol', group_keys=False).apply(lambda sub_df: _obv(sub_df['close'], sub_df['volume']))
    if type(se) is pd.DataFrame:
        se = se.T
    return se

而后这样计算就可以了:

df['obvm_7'] = calc_expr(df, 'ema(ta_obv(close,volume),7)')

代码在工程的如下位置:

图片

在mplfinance的文章里讲了基于matplotlib的K线图及指标的绘制,matplotlib是个不错的库,缺点就是静态图。尽管可以通过拖动事件来重绘,但实现起来就比较复杂的,后续我们还是考虑bokeh还绘制K线图,因子食信号以及交易记录。

qlib整合mlflow做了自己的机器工作流。其实在automl领域已经有不少自动化工作流的机器学习库,除了昨天年化29.3%,大类资产ETF动量轮动,添加商品与货币ETF,实盘跟进中(代码+数据下载)后面我们会说说autogluon之外还有pycaret。

再预告一下星球里开源项目下一步要完善的一些事情:

1、bokeh绘制回测结果,重点是交易记录分析,因子信号,相关性分析等。

2、autogluon,pycaret这样的自动机器学习框架。可以简化我们写模型和调仓的压力。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/104044
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 29 日
下一篇 2024 年 7 月 29 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注