@Channelchan
2018-01-06T06:00:52.000000Z
字数 3032
阅读 86244
市场短期是投票机,长期是称重机
成交量有三种可能,分别是量增、量减、量平。
价格也有三种可能,分别是上涨、下跌、横盘。
量价理论表明价涨量增是上涨趋势的确认,反之价跌量增是下跌趋势的确认。
MA(volume,20)
OBV属于市场的领先指标,计算方法是如果当天价格高于前一天的价格,当天成交量就用加的,反之就用减的来计算出OBV指标,这样有助于分析成交量与价格的关系。
A/D 指标在OBV的基础上对价格的波幅进行了计算,真实波幅越大,指标中的成交量占比越大。

按成交量来衡量价格的权重,成交量越大价格权重越大。

from jaqs.data import DataViewfrom jaqs.data import RemoteDataServiceimport osimport numpy as npimport talib as taimport pandas as pdfrom datetime import datetimeimport matplotlib.pyplot as pltimport warningswarnings.filterwarnings("ignore")dataview_folder = 'JAQS_Data/hs300'dv = DataView()dv.load_dataview(dataview_folder)
Dataview loaded successfully.
def change_index(df):df.index = pd.Index(map(lambda x: datetime.strptime(str(x),"%Y%m%d") , df.index))return dfclose = change_index(dv.get_ts('close_adj').loc[20170105:])volume = change_index(dv.get_ts('volume').loc[20170105:])
adv10 = ta.abstract.MA(volume, 10, price='600036.SH')adv20 = ta.abstract.MA(volume, 20, price='600036.SH')fig, (ax, ax1) = plt.subplots(2, 1, sharex=True, figsize=(15,7))ax.plot(close['600036.SH'], label='600036')ax.legend(loc='upper left')ax1.bar(volume.index, volume['600036.SH'],color='g')ax1.plot(adv10, label='Volume_MA10')ax1.plot(adv20, label='Volume_MA20')plt.legend(loc='upper left')plt.show()

#OBV & A/DClose = close['600036.SH'].valuesVolume = volume['600036.SH'].valuesLow = change_index(dv.get_ts('low_adj').loc[20170105:])['600036.SH'].valuesHigh = change_index(dv.get_ts('high_adj').loc[20170105:])['600036.SH'].valuesOBV = pd.Series(ta.OBV(Close, Volume), index=close.index)AD = pd.Series(ta.AD(High, Low, Close, Volume), index=close.index)fig, (ax, ax1,ax2) = plt.subplots(3, 1, sharex=True, figsize=(15,9))ax.plot(close['600036.SH'], label='600036')ax.legend(loc='upper left')ax1.plot(OBV,'g', label='OBV')ax1.legend(loc='upper left')ax2.plot(AD, 'y', label='A/D')ax2.legend(loc='upper left')plt.show()

def ts_sum(ts, window=20):return ts.rolling(window).sum()VWAP = ts_sum(pd.Series(Volume,index=volume.index)*close['600036.SH'])/ts_sum(pd.Series(Volume,index=volume.index))plt.figure(figsize=(15,7))plt.plot(close['600036.SH'])plt.plot(VWAP)plt.show()

买入:
close>VWAP
卖出:
close
#VWAPimport rqalphafrom rqalpha.api import *import talibdef init(context):context.s1 = "000001.XSHE"context.PERIOD = 60def handle_bar(context, bar_dict):price = history_bars(context.s1, context.PERIOD+1, '1d', 'close')volume = history_bars(context.s1, context.PERIOD+1, '1d', 'volume')denominator = price*volumeVWAP = talib.SUM(denominator,context.PERIOD)/talib.SUM(volume,context.PERIOD)cur_position = context.portfolio.positions[context.s1].quantityshares = context.portfolio.cash/bar_dict[context.s1].closeif price[-1] < VWAP[-1] and cur_position > 0:order_target_value(context.s1, 0)if price[-1] > VWAP[-1]:order_shares(context.s1, shares)config = {"base": {"start_date": "2015-06-01","end_date": "2017-12-01","accounts": {'stock':1000000},"benchmark": "000001.XSHE"},"extra": {"log_level": "error",},"mod": {"sys_analyser": {"enabled": True,"plot": True}}}rqalpha.run_func(init=init, handle_bar=handle_bar, config=config)

参考以上代码用其他成交量指标做策略
