上一节我们讲解了MACD MACD主要是判断股价的中长期趋势和反转
今天要讲的WVAD主要是判断买方和卖方谁比较强势 只是 我自己的理解
WVAD(William's Variable Accumulation Distribution),中文名称:威廉变异离散量 其主要的理论精髓,在于重视一天中开盘到收盘之间的价位,而将此区域之上的价位视为压力,区域之下的价位视为支撑,求取此区域占当天总波动的百分比,以便测量当天的成交量中,有多少属于此区域。成为实际有意义的交易量。


第一步 A =开盘价 -收盘价
第二步 B= 最高价-最低价
第三步 C= (A/B)*成交量
WVAD= N 日ΣC 求和
WVAD5 = (C1+C2+C3+C4+C5)/5
应用法则
1.WVAD是测量股价由开盘至收盘期间,多空双方的战斗力均衡。
2.WVAD为正值时,代表多方占优。当WVAD由负值变成正值的一刹那,为买入点。
3.WVAD为负值时,代表空方占优。当WVAD由正值变成负值的一刹那,为卖出点。
4.当趋向指标中ADX低于PDI、MDI时,本指标失效。
5.WVAD指标可与EMV指标搭配使用。
回测代码如下
第一部分 准备工作
import numpy as npimport pandas as pdstart = '2017-01-01' # 回测起始时间end = '2018-01-01' # 回测结束时间universe = DynamicUniverse('ZZ500') # 证券池,支持股票、基金、期货、指数四种资产benchmark = 'ZZ500' # 策略参考标准freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测refresh_rate = 1 # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟# 配置账户信息,支持多资产多账户accounts = {'fantasy_account': AccountConfig(account_type='security', capital_base=10000000)}##买入卖出阈值buy_threshold = 0sell_threshold = 0def initialize(context):wvad = Signal('WVAD') #默认24天context.signal_generator = SignalGenerator(wvad)def handle_data(context):timing(context)
第二部分 买入策略及仓位控制
选择出当天刚WVAD>0的股票 均仓买入 每只股票的仓位不超过10万。
选择出当天WVAD<0的股票 如果有持仓 则全部卖出
def timing(context):return timing_Basic_WVAD(context)def timing_Basic_WVAD(context):##在WVAD>0的时候买入 在WVAD<0的时候卖出(策略)##基于仓位管理的需要 每只股票的最大投资为100000元(风控)account = context.get_account('fantasy_account')current_universe = context.get_universe( exclude_halt=True)security_position = account.get_positions()cash = account.cashbuy_list = []for sec in current_universe:if context.signal_result['WVAD'][sec] > buy_threshold and sec not in security_position:buy_list.append(sec)elif context.signal_result['WVAD'][sec]<sell_threshold and sec in security_position:account.order_pct_to(sec,0)cash += security_position[sec].amount *context.current_price(sec)d = min(len(buy_list),int(cash)//100000)for sec in buy_list:account.order(sec,100000/context.current_price(sec))
跑了一下 回测结果也比较一般。

缺点改进
以WVAD是否穿越零轴线,作为买卖标准时有很严重的延误性,往往股价已冲高许多时,才会出现买入信号,反之亦然。也有使用WVAD和WVAD的6日平均线做比较进行研判,但误差率较高,特别是在卖出信号的研判上。改进方案:
首先,将计算公式中的成交量改为成交额,使用成交量或使用成交额对于个股的研判并没有太大的区别,但对基金和大盘的研判效果却大相径庭。其次,针对WVAD设置两条平均线,分别计算WVAD的5天和21天移动平均线,放弃原来单一使用WVAD的研判方法。改进后的WVAD计算公式:
WVAD=当日收盘价-当日开盘价÷当日最高价-当日最低价×成交额
WVAD5=当日收盘价-当日开盘价÷当日最高价-当日最低价×成交额的5日累加÷5
WVAD21=当日收盘价-当日开盘价÷当日最高价-当日最低价×成交额的21日累加÷21
改进WVAD的应用原则:当WVAD的5天线上穿WVAD的21天线时,为买入信号。当WVAD的5天线下穿WVAD的21天线时,为卖出信号。
如:600345长江通信于本月16日发出买入信号,当天股价仅微涨2分钱,其后的两天,该股又平静地拉出两根小阳线,直到上周三下午近2点时该股突然发力上冲,至上周末与发出信号时相比,绝对涨幅已接近3元。该股历史上与此相同的突破有5次,最终都未能演变成大黑马,仅给投资者带来短线利润。不过,这次的情况和以前有很大的不同,其最终的涨幅可能尚不止于此。改进WVAD的应用技巧:
1、5天线位于21天线之下的时间越长,效果越好。如果在5天线位于21天线下之前两者有一段粘合在一起的时间更好。
2、5天线位于21天线之下时,5天线距离21天线越远越好,但有个前提,对于前期暴涨过的股无效。
3、5天线上穿21天线的瞬间,上穿力度越大越好,上穿角度越陡越好。
4、当5天线和21天线粘合在一起,处于纠合缠绕状态时,该指标失效。
5、对于刚上市的新股,由于该指标波动过大,无法应用。
6、以上应用技巧对于卖出信号的研判同样有效,只要相反应用就可以,不再复述。




