EMV指标策略

简介

EMV(Ease of Movement Value, 简易波动指标),它是由RichardW.ArmJr.根据等量图和压缩图的原理设计而成, 目的是将价格与成交量的变化结合成一个波动指标来反映股价或指数的变动状况。 旨在先于其他投资者买入/卖出。

计算方法(以日为单位举例)

(1)      A = (当日最高价 + 当日最低价)/ 2B = (前日最高价 + 前日最低价)/ 2C =  当日最高价 – 当日最低价
(2)     当日EM = (A – B ) * C / 当日成交额
(3)     EMV = N日内EM的总和

使用方法

当EMV值从下向上穿过零轴时,全仓买入;EMV值从上向下穿过零轴时,全仓卖出。

如果较少的成交量便能推动股价上涨,则EMV数值会升高,相反的,股价下跌时也仅伴随较少的成交量,则EMV数值将降低。另一方面,倘若价格不涨不跌,或者价格的上涨和下跌,都伴随着较大的成交量时,则EMV的数值会趋近于零。

EMV指标曲线大部份集中在0轴下方,这个特征是EMV指标的主要特色,由于股价下跌一般成交量较少,EMV自然位于0轴下方,当成交量放大时,EMV又趋近于零,这可以说明EMV的理论精髓中,无法接受股价在涨升的过程,不断的出现高成交量消耗力气,反而认同徐缓成交的上涨,能够保存一定的元气,促使涨势能走得更远更长。从另外一个角度说,EMV重视移动长久且能产生足够利润的行情。关于EMV和EMV的平均线,两线的交叉并无意义,而是选择以EMV指标平均线跨越0轴为讯号,所产生的交易成果将更令人满意。

优点

EMV的用法十分简单,只要看EMV线穿越零轴这一点即可。而且,较好地运用波动指标EMA不仅可以避免在市场中盲目追涨杀跌,而且还能够发现较好得操作时机。

缺点

EMV指标反应的是价格运行全过程中成交量的动态变化情况。因此,指标对价格的中长期走势更具有警示性。须长期使用EMV指标,才能获得较好的投资效果。想要短期高频操作的同学,最好不要使用EMV作为买卖指标。

代码

# !/usr/bin/env python
# -*- coding: utf-8 -*-# 策略代码总共分为三大部分,1)PARAMS变量 2)initialize函数 3)handle_data函数
# 请根据指示阅读。或者直接点击运行回测按钮,进行测试,查看策略效果。# 策略名称:EMV指标策略
# 策略详细介绍:https://wequant.io/study/strategy.emv.html
# 关键词:成交量、捕捉趋势。
# 方法:
# 1)通过价格变化以及成交量来捕捉趋势;
# 2)在上升趋势买入,在下跌趋势卖出。# 阅读1,首次阅读可跳过:
# PARAMS用于设定程序参数,回测的起始时间、结束时间、滑点误差、初始资金和持仓。
# 可以仿照格式修改,基本都能运行。如果想了解详情请参考新手学堂的API文档。
PARAMS = {"start_time": "2017-02-01 00:00:00",  # 回测起始时间"end_time": "2017-08-01 00:00:00",  # 回测结束时间"slippage": 0.003,  # 此处“slippage"包含佣金(千二)+交易滑点(千一)"account_initial": {"huobi_cny_cash": 100000,"huobi_cny_btc": 0},  # 设置账户初始状态
}# 阅读2,遇到不明白的变量可以跳过,需要的时候回来查阅:
# initialize函数是两大核心函数之一(另一个是handle_data),用于初始化策略变量。
# 策略变量包含:必填变量,以及非必填(用户自己方便使用)的变量
def initialize(context):# 设置回测频率, 可选:"1m", "5m", "15m", "30m", "60m", "4h", "1d", "1w"context.frequency = "4h"# 设置回测基准, 比特币:"huobi_cny_btc", 莱特币:"huobi_cny_ltc", 以太坊:"huobi_cny_eth"context.benchmark = "huobi_cny_btc"# 设置回测标的, 比特币:"huobi_cny_btc", 莱特币:"huobi_cny_ltc", 以太坊:"huobi_cny_eth"context.security = "huobi_cny_btc"# 设置EMV回看累积时间段context.user_data.emv_period = 14# 阅读3,策略核心逻辑:
# handle_data函数定义了策略的执行逻辑,按照frequency生成的bar依次读取并执行策略逻辑,直至程序结束。
# handle_data和bar的详细说明,请参考新手学堂的解释文档。
def handle_data(context):# 获取历史数据hist = context.data.get_price(context.security, count=context.user_data.emv_period + 2, frequency=context.frequency)if len(hist.index) < (context.user_data.emv_period + 2):context.log.warn("bar的数量不足, 等待下一根bar...")return# 每根bar的最高价high = hist["high"]# 每根bar的最低价low = hist["low"]# 每根bar的成交量(数量)vol = hist["volume"]close = hist["close"]# 计算EMVa = (high + low) / 2b = a.shift(1)c = high - lowem = (a - b) * c / volemv = em.rolling(window=context.user_data.emv_period).sum()# 当前bar的EMV值emv_current = emv[len(emv)-1]# 前一根bar的EMV值emv_prev = emv[len(emv)-2]context.log.info("当前 EMV = %s; 前一根bar EMV = %s" % (emv_current, emv_prev))# EMV从下向上穿过零轴,买入信号if emv_prev <= 0 < emv_current:context.log.info("EMV由下向上穿过0轴,产生买入信号")if context.account.huobi_cny_cash >= HUOBI_CNY_BTC_MIN_ORDER_CASH_AMOUNT:# 有买入信号,且持有现金,则市价单全仓买入context.log.info("正在买入 %s" % context.security)context.log.info("下单金额为 %s 元" % context.account.huobi_cny_cash)context.order.buy_limit(context.security, quantity=str(context.account.huobi_cny_cash/close[-1]*0.98), price=str(close[-1]*1.02))else:context.log.info("现金不足,无法下单")# EMV从上向下穿过零轴,卖出信号elif emv_prev >= 0 > emv_current:context.log.info("EMV由上向下穿过0轴,产生卖出信号")if context.account.huobi_cny_btc >= HUOBI_CNY_BTC_MIN_ORDER_QUANTITY:# 有卖出信号,且持有仓位,则市价单全仓卖出context.log.info("正在卖出 %s" % context.security)context.log.info("卖出数量为 %s" % context.account.huobi_cny_btc)context.order.sell_limit(context.security, quantity=str(context.account.huobi_cny_btc), price=str(close[-1]*0.98))else:context.log.info("仓位不足,无法卖出")else:context.log.info("无交易信号,进入下一根bar")

回测

  • 参数设置如下:
时间段 2017-02-01至2017-08-01
回测频率(context.frequency) 4h
EMV回看时间窗口 5(天)

股票市场常用的回看时间窗口一般是14天。但是由于数字货币市场自身容易暴涨暴跌的特性,回看时间太长会很难及时对市场的变化做出反应,过于滞后。因此,需要将回看窗口适当调小。大家也可以尝试一下别的时间窗口,看看效果如何。

  • 回测结果:

从回测结果中,我们看出EMV指标在捕捉行情上非常有效。几次大幅上涨都有抓住,而在下跌的时候也能比较及时的逃出,锁定收益。

现在,将回看时间调到传统的14天,我们来看一下回测结果:

现在的表现大不如前,几次暴跌都没能反映过来,将大部分收益回吐。所以,在设置指标的参数时,要区分不同产品不同行情,不能无脑照搬。

总结

EMV指标引入了成交量数据,与其他单纯通过价格来计算出的指标,能更有效的反应出一些价格背后所隐藏的东西。在数字货币市场中,EMV指标的回看时间不宜过长,防止在暴涨暴跌中不能及时应对。

转载于:https://www.cnblogs.com/fangbei/p/wequant-strategy-emv.html

WeQuant交易策略—EMV相关推荐

  1. WeQuant交易策略—简单均线

    简单双均线策略(Simple Moving Average) 策略介绍 简单双均线策略,通过一短一长(一快一慢)两个回看时间窗口收盘价的简单移动平均绘制两条均线,利用均线的交叉来跟踪价格的趋势.这里说 ...

  2. WeQuant交易策略—5日均线

    简单的价格突破策略.当前价格超过最近5个收盘价的均价,则全仓买入:低于均价,则全仓卖出 代码 # 简单的价格突破策略.当前价格超过最近5个收盘价的均价,则全仓买入:低于均价,则全仓卖出# PARAMS ...

  3. python量化外汇交易_用Python实现一个Dual Thrust数字货币量化交易策略

    Dual Thrust交易算法介绍 Dual Thrust交易算法是由Michael Chalek开发的著名量化交易策略.它通常用于期货,外汇和股票市场.Dual Thrust的概念属于典型的突破交易 ...

  4. matlab配对交易回测,精品案例 | 经典投资策略之配对交易策略

    原标题:精品案例 | 经典投资策略之配对交易策略 人不恋爱枉少年,在"全城热恋"的氛围下,股市也来凑热闹,配对交易策略油然而生.所谓"男女搭配,干活不累",成双 ...

  5. 2022年美国大学生数学建模竞赛——Problem C:交易策略

    背景 市场交易者经常买卖波动较大的资产,以实现总回报最大化为目标.通常每笔买卖都有佣金.其中两种资产是黄金和比特币. 图1:黄金日价格,美元每金衡盎司.资料来源:伦敦金银市场协会,2021年9月11日 ...

  6. python中tushare数据可以导出嘛_Python与交易策略分析tushare/baostock库介绍(附代码)...

    前言:金融数据中最典型的就是资产价格的涨跌情况.想要分析金融资产的投资策略,第一步就是历史数据的获取.tushare正是为导入历史金融资产数据而开发,它大大方便了用Python进行金融资产交易策略的探 ...

  7. python量化交易2019_2019 量化交易策略实盘总结和一些展望

    2019算是完整的跑完一年量化交易,18年是实盘开始,蒙着眼大胆瞎搞,19年小心翼翼,花了不少时间做了些理论研究.这里推荐石川,刀疤连和量子动物园这几个微信公众号,相对于18年大胆交易为主,但是不知道 ...

  8. matlab均线程序化交易,【策略分享】Matlab量化交易策略源码分享

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 策略名称:横盘突破策略 策略思路: 日内交易策略,收盘平仓: 横盘突破在过去30根K线的高低点围绕中轴上下0.5%的范围内波动时: 上轨=过去30根K线的 ...

  9. 你以为AlphaGo只是下围棋厉害?不,它还能用来优化金融交易策略参数

    提取阿尔法狗中的灵感 还记得2016年3月9日-3月15日在韩国首尔上演的围棋界终极挑战吗?在总计五轮的人与机器的对决,人类一方的代表--世界围棋冠军李世石很不幸完败于机器一方的代表--美国Googl ...

  10. 三行情书代码_用三行代码优化您的交易策略

    三行情书代码 If you want to consistently earn money with your investments, backtesting is one of the best ...

最新文章

  1. 使用virtualbox nat方式中的端口映射使用ssh服务
  2. android获取手机机型、厂商、deviceID基本信息
  3. 如何使用Arthas提高日常开发效率?
  4. 多态——面向接口编程
  5. php 数组 true,php – 对于不存在的数组键,isset()返回true的奇怪行为
  6. Semaphore(多资源多线程)
  7. python缩进格式错误修改_Python,意外的缩进错误解析,Pythonunexpectedindent,解决,方法...
  8. 【百度分享】javascript中函数调用过程中的this .
  9. 基于R语言、MATLAB、Python机器学习方法与案例分析
  10. 64位计算机安装xp,Windows XP(64位)如何安装语言包
  11. FPGA的软件下载(百度盘~)
  12. 服务端渲染SSR及实现原理
  13. python根据汉字获得拼音_python获_取一组汉字拼音首字母的方法
  14. 实现SDT(software-defined Things)的IOT案例(2)
  15. vmware vmbox 使用虚拟机安装Windows11提示电脑不符合最低系统要求的解决方案
  16. Frame-Pannel-Button综合
  17. 国内数字藏品交易平台开发市场会开放二级市场吗
  18. 高频射频计算机电缆,射频电缆是什么,它的作用又是什么
  19. 职场礼仪之西装十大禁忌
  20. android listview网络图片,Android ListView从网络获取图片及文字显示

热门文章

  1. R语言基本操作(Rstudio中)
  2. 祝贺!周润发获颁授荣誉博士
  3. jmeter之PerfMon Metrics Collector自定义查看cpu百分比
  4. ov7725图像帧率计算公式总结
  5. Python书法碑帖分割(分别以对于汉字命名)
  6. Apache Jena TDB 常用API
  7. 百练_1004:财务管理
  8. VMware vCenter Server远程代码执行漏洞复现 CVE-2021-21972
  9. WeChat微信商户号JSAPI支付 支付授权目录无法添加:添加完成后不刷新再添加一遍
  10. 史上最全的全国特产一览表,到哪就买当地最正宗的特产!!!