一.什么是动量策略

1.1概念:
预先对股票收益和交易量设定过滤准则,当股票收益或股票收益和交易量同时满足过滤准则就买入(做多)或卖出(做空)股票的投资策略。
核心:以股票的历史收益率作为主要的交易原则
1.2动量策略的设计思路

正向策略:涨的还会涨,跌的还会跌,买入涨最多的,卖出跌最多的,利用市场对信息的反应不足。
反向策略:涨太多了会跌,跌太多了会涨,买入跌最多的,卖出涨最多的,市场对信息反应过度
1.3动量策略的实现步骤

  1. 确定交易对象:股票池,考虑流动性(沪深300,创业板)
  2. 选定业绩评价周期:过去1-12个月
  3. 计算形成期收益率:过去N个月的收益率
  4. 对收益率进行排序:最佳—赢家组合,最差~输家组合
  5. 确定持仓/换仓周期:1个月,可自定义测算
  6. 连续或间隔一段时间,不断重复2-5行为
  7. 计算动量/反向策略各持有期的回报率
  8. 计算t/p统计值,判断是否存在动量效应

二.动量策略:筛选股票池

  • 流动性:成交活跃,买入卖出顺畅
  • 基本面:行业,营收,盈利增速,现金流,负债
  • 标的价格: 1手起买起卖
import data.stock as stdef get_data(index_symbol='000300.XSHG'):# 获取股票列表代码:沪深300持有个股,创业板,上证stocks=st.get_index_list(index_symbol)# 获取股票数据for code in stocks:data=st.get_csv_price(code,'2019-01-01','2021-01-04')# 预览股票数据print("================",code)print(data.tail())
def momentum():return 0if __name__=="__main__":get_data()
def get_index_list(index_symbol='000300.XSHG'):"""获取指数成分股,指数代码查询:param index_symbol:https://www.joinquant.com/indexdata:return:list,成分股代码"""stocks=get_index_stocks(index_symbol)return stocks

三.动量策略:计算动量因子

import pandas as pdimport data.stock as stdef get_data(start_date,end_date,use_cols,index_symbol='000300.XSHG'):"""获取股票收盘价数据,并拼接为一个df:param start_date::param end_date::param use_cols::param index_symbol::return datac_concat:df,拼接后的数据"""# 获取股票列表代码:沪深300持有个股,创业板,上证stocks=st.get_index_list(index_symbol)#拼接收盘价数据data_concat=pd.DataFrame()# 获取股票数据for code in stocks[0:10]:data=st.get_csv_price(start_date,end_date,use_cols,code)print("================",code)print(data.tail())#拼接多个股票的收盘价:日期 股票A收盘价 股票B收盘价...data.colimns=[code]pd.concat([data_concat,data],axis=1)# 预览股票数据# print(data_concat.tail())return data_concatdef momentum(data_concat,shift_n=1):""":param data_concat::param shift_n:表示业绩统计周期(单位:月):return:"""#转换时间频率:日->月data_concat.index=pd.to_datetime(data_concat.index)data_month=data.concat.resample('M').last()#计算过去N个月的收益率=期末值/期初值-1=(期末-期初)/期初#optional:对数收益率=log(期末值/期初值)print(data_month.head())shift_return=data_month/data_month.shift(shift_n)-1print(data_month.head())return shift_returnif __name__=="__main__":data=get_data('2019-01-01','2021-01-04',['date','close'])momentum(data,shift_n=1)

三.动量策略:生成交易信号

import pandas as pd
import numpy as np
import data.stock as stdef get_data(start_date,end_date,use_cols,index_symbol='000300.XSHG'):"""获取股票收盘价数据,并拼接为一个df:param start_date::param end_date::param use_cols::param index_symbol::return datac_concat:df,拼接后的数据"""# 获取股票列表代码:沪深300持有个股,创业板,上证stocks=st.get_index_list(index_symbol)#拼接收盘价数据data_concat=pd.DataFrame()# 获取股票数据for code in stocks[0:10]:data=st.get_csv_price(start_date,end_date,use_cols,code)print("================",code)print(data.tail())#拼接多个股票的收盘价:日期 股票A收盘价 股票B收盘价...data.columns=[code]pd.concat([data_concat,data],axis=1)# 预览股票数据# print(data_concat.tail())return data_concatdef momentum(data_concat,shift_n=1,top_n=2):""":param data_concat::param shift_n:表示业绩统计周期(单位:月):return:"""#转换时间频率:日->月data_concat.index=pd.to_datetime(data_concat.index)data_month=data.concat.resample('M').last()#计算过去N个月的收益率=期末值/期初值-1=(期末-期初)/期初#optional:对数收益率=log(期末值/期初值)shift_return=data_month/data_month.shift(shift_n)-1print(shift_return)#生成交易信号:收益率排前n的>赢家组合>买入1,排最后n个>输家>卖出-1buy_signal=get_top_stocks(shift_return,top_n)sell_signal=get_top_stocks(-1*shift_return,top_n)signal=buy_signal-sell_signalprint(signal)exit()#数据预览# print(data_month.head())print(shift_return.head())return shift_return
def get_top_stocks(data,top_n):"""找到前n位的极值,并转换为信号返回:param data:df:param top_n:int,表示要产生信号的个数:return signals:df,返回0-1信号数据表"""signals=pd.DataFrame(index=data.index,columns=data.columns)#对data的每一行进行遍历,找出里面的最大值,并利用bool函数标注0或1信号for index,row in data.iterrows():print(row.isin(row.nlargest(top_n)).astype(np.int))return signalsif __name__=="__main__":data=get_data('2019-01-01','2021-01-04',['date','close'])momentum(data,shift_n=1)

python量化交易第五章相关推荐

  1. 学习《深入浅出python量化交易交易实战》第一章(笔记)

    1.学习<深入浅出python量化交易交易实战>第一章 记录学习过程中的代码和一些坑 1.1 基础(名词解释) 1.1.1 CAPM (Capital Asset Pricing Moda ...

  2. Python 量化交易系列教程

    Python 量化交易 例如:第一章 Python 基础知识 Python 基本操作练习 Python 量化交易 Python 基本操作练习 一.基础运算子练习 二.条件判断练习 三.循环练习 四.函 ...

  3. 4、Python量化交易-双均线策略

    目录 一.数据准备 二.5日均线和30日均线 1 - 均线的概念 2 - 计算5日均线与30日均线 3 - 画出MA5和MA30 三.金叉和死叉 1 - 金叉和死叉概念 2 - 分析所有金叉日期和死叉 ...

  4. Python量化交易06——Fama-French三因子模型(Rmt,SMB,HML)

    参考书目:深入浅出Python量化交易实战 本次带来的是著名的获得了诺贝尔奖的三因子模型. 因子模型介绍 Fama和French从可以解释股票收益率的众多因素中提取出了三个重要的影响因子,即市场风险溢 ...

  5. 很燃基于掘金量化平台的《Python量化交易实战》新书介

    原 很燃!基于掘金量化平台的<Python量化交易实战>新书简介 内容简介: 在目前不断变化.蓬勃发展的中国资本市场,量化投资作为新兴的投资方法,引来越来越多的关注,使用量化投资技术的证券 ...

  6. 视频教程-python量化交易(1)-Python

    python量化交易(1) 毕业于清华大学,曾担任Google算法工程师,微软人工智能领域全球最具价值专家,微软Tech Ed 大会金牌讲师. 精通C/ C++,Python ,Go语言,Siciki ...

  7. 你应该知道的21大Python量化交易工具

    技术可用性的快速增长使个人交易者也能够进行系统和算法交易.下面为大家分享2022年 Python 量化交易使用最广泛的21大交易平台和框架.经纪自营商.数据提供商和其他有用的交易库等,这些交易库适用于 ...

  8. Python量化交易入门

    文章目录 学习目标 一.量化交易(Quantitative trading) 1.1 定义 1.2 掌握技能 二.量化交易的分类 2.1 分类 2.2 三种分类特点以及要求 趋势性交易 高频交易 三. ...

  9. python量化交易视频教程

    量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种"大概率"事件以制定策略,极大地减少了投资者情绪波动的影响,避免在市场极度狂 ...

最新文章

  1. win合适做服务器的系统,win系统做云服务器
  2. 一个ant的简单实例
  3. aws python lambda_AWS Lambda
  4. 算法笔记_188:历届试题 危险系数(Java)
  5. python元组和列表教程_Python列表和元组
  6. 使一个div垂直+水平居中的几种方法
  7. 依赖注入底层反射原理_Spring中反射与反射的原理(转载)
  8. 如何与深度学习服务器优雅的交互?(长期更新)
  9. 用户密码重设对EFS的影响
  10. python实现不重复排列组合_Python使用combinations实现排列组合的方法
  11. mysql client 升级_解决consider upgrading MySQL client问题
  12. oracle的sql的语法解析,oracle SQL解析步骤小结
  13. 王爽 汇编语言程序课程设计1
  14. python开发移动app_手机python开发
  15. Java深入理解深拷贝和浅拷贝区别
  16. 数据中台与业务中台是什么关系?_光点科技
  17. docker的目录挂载
  18. android使用Vitamio实现视频播放大小屏流畅切换
  19. 别傻了!不能只会给别人开热点,要尝试华为手机的WiFi分享功能
  20. Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operat

热门文章

  1. 全球仅通过不到 2000 位的 Elastic 认证工程师,到底难不难?
  2. 利用cookie进行模拟登录并且抓取失败
  3. php 高德地图创建标注,使用高德地图API生成带标的专属地图
  4. 算法与数据结构入门一篇就搞定
  5. 腾讯云Cannot parse privatekey: unsupported key format问题解决
  6. 基于51单片机的电子时钟设计
  7. java获取浏览器url_java 打开浏览器 url
  8. 用起这 16 个顶尖 Vue 开源项目,节约更多的时间摸鱼
  9. python ip动态代理_动态代理服务器
  10. Flutter仿美团应用开发笔记-首页 (1)