python alpha策略_量化策略系列教程:04阿尔法策略
Alpha、Alpha,天天就知道Alpha,今天就给你们上阿尔法喽~
此处,添加一个掘金的论坛证经社量化社区 - 证经社地址,貌似更新的还蛮快的~
1. 策略原理:
阿尔法策略:投资者在市场交易中面临着系统性风险(即贝塔或Beta、β风险)和非系统性风险(即阿尔法或Alpha、α风险),通过对系统性风险进行度量并将其分离,从而获取超额绝对收益(即阿尔法收益)的策略组合,即为阿尔法策略。从广义上讲,获取阿尔法收益的投资策略有很多种,其中既包括传统的基本面分析选股策略、估值策略、固定收益策略等等,也包括利用衍生工具对冲掉贝塔风险、获取阿尔法收益的可转移阿尔法策略。后者在国内通常被称为阿尔法对冲策略,并在近年A股市场上得到广泛应用。本策略只是展示了选股策略,并没有将贝塔风险对冲。
始终买入沪深300中市值最小的5只
先订阅000300分钟行情(也可订阅其他symbol,只是用来作行情触发)
第一个bar行情到来时在md_init中选股
选出股票池与持仓作对比
无持仓时直接按照股票池等权买入
有持仓时,不在股票池中的股票卖出
在成交回报on_order_filled中判断是否都已卖出,卖出仓位都成交以后再买入。
2. 代码解读: 2.1 Alpha.py
# !/usr/bin/env python
# -*- coding: utf-8 -*-
from gmsdk.api import StrategyBase
class Alpha(StrategyBase):
def __init__(self, *args, **kwargs):
super(Alpha, self).__init__(*args, **kwargs)
self.buy_dict = {}
self.sell_dict = {}
self.is_traded = False
def initialize(self):
pass
# 收到第一根Bar后交易
def on_bar(self, bar):
print(bar.strtime)
if self.is_traded:
return
self.is_traded = True
self.initialize()
self.handle_data()
def handle_data(self):
pass
def on_order_filled(self, order):
if order.sec_id in self.sell_dict and order.strategy_id == self.strategy_id:
self.sell_dict.pop(order.sec_id)
if len(self.sell_dict) == 0: # 由于资金每次都开满,等卖盘全部成交资金回流时再买入
cash = self.get_cash()
for bar in self.buy_dict.values():
vol = int(cash.available * 0.95 / len(self.buy_dict) / bar.close / 100) * 100
self.open_long(bar.exchange, bar.sec_id, 0, vol)
2.2 small_market_value.py
# !/usr/bin/env python
# -*- coding: utf-8 -*-
from Alpha import Alpha
'''
请在Strategy中修改个人账号密码和策略ID
'''
class Strategy(Alpha):
def __init__(self, *args, **kwargs):
super(Strategy, self).__init__(*args, **kwargs)
self.md.subscribe('SHSE.000300.bar.60') # 订阅一个symbol,在交易时间触发下单
def initialize(self):
# region 获取沪深300中当天可交易的股票
instruments1 = self.get_instruments('SHSE', 1, 1)
instruments2 = self.get_instruments('SZSE', 1, 1)
symbol_list1 = set(instrument.symbol for instrument in instruments2 + instruments1) # 获取当日可交易的股票,剔除B股
constituents = self.get_constituents('SHSE.000300')
symbol_list2 = set(constituent.symbol for constituent in constituents) # 获取沪深300成分股(剔除ST、*ST股票,以及上市时间不足3个月等股票后剩余的股票)
symbol_list = symbol_list1 & symbol_list2
symbol_list = ','.join(symbol for symbol in symbol_list)
# endregion
# region 选出市值最小的5只
market_index = self.get_last_market_index(symbol_list)
data = [mi for mi in market_index]
data = sorted(data, key=lambda mi: mi.market_value)[:5] # 市值最小的5只
# endregion
# region 为了计算仓位,获取昨日dailybar,存入buy_dict
buy_list = ','.join(d.symbol for d in data)
dailybars = self.get_last_dailybars(buy_list)
self.buy_dict = {dailybar.sec_id: dailybar for dailybar in dailybars}
# endregion
def handle_data(self):
# region 没有持仓时直接open_long
print(self.buy_dict.keys())
positions = self.get_positions()
if len(positions) == 0:
cash = self.get_cash()
for b in self.buy_dict.values():
vol = int(cash.available * 0.95 / len(self.buy_dict) / b.close / 100) * 100
self.open_long(b.exchange, b.sec_id, 0, vol)
return
# endregion
# region 有持仓时结合持仓获取buy_dict,sell_dict
for p in positions:
if p.sec_id in self.buy_dict:
self.buy_dict.pop(p.sec_id)
else:
self.sell_dict[p.sec_id] = p
# endregion
for p in self.sell_dict.values(): # 先卖出,卖盘成交时再买入,若资金足够也可以直接买入
self.close_long(p.exchange, p.sec_id, 0, p.volume)
def on_order_status(self, order):
pass
if __name__ == '__main__':
my_strategy = Strategy(
username='username', # 请修改账号
password='password', # 请修改密码
strategy_id='strategy_id', # 请修改策略ID
mode=2,
td_addr='localhost:8001')
ret = my_strategy.run()
print('exit code: ', ret)
如果想了解相关的python函数和掘金接口函数,走下方通道:
有不了解的可以给小编留言哦,小编会细心为大家解答~
python alpha策略_量化策略系列教程:04阿尔法策略相关推荐
- python亲和性分析_数据挖掘入门系列教程(一)之亲和性分析
数据挖掘入门系列教程(一)之亲和性分析 教程系列简介 该教程为入门教程,为博主学习数据挖掘的学习路径步骤.教程为入门教程,从最简单的开始.使用的编程语言为Python3.8.1,使用JupyterNo ...
- Python 量化投资实战教程(4) —KDJ 策略
量化投资系列文章: Backtrader 教程 - Python 量化投资实战教程(1) Python 量化投资实战教程(2) -MACD策略(+26.9%) Python 量化投资实战教程(3) - ...
- Python 量化投资实战教程(2) —MACD策略(+26.9%)
量化投资系列文章: Backtrader 教程 - Python 量化投资实战教程(1) Python 量化投资实战教程(2) -MACD策略(+26.9%) Python 量化投资实战教程(3) - ...
- 【新一配】量化大师系列之价值投资选股策略
[新一配]量化大师系列之价值投资选股策略 国外证券市场比较悠久,曾出现过本杰明·格雷厄姆.彼得·林奇.詹姆斯·奥肖内西.查尔斯·布兰德斯等多位投资大师,这些投资大师有一个共同点,他们在证券市场上保持了 ...
- 区块链量化投资系列课程(4) - 动态平衡策略
阅读原文:区块链量化投资系列课程(4) - 动态平衡策略 前言 沃伦 · 巴菲特的导师本杰明 · 格雷厄姆曾经在<聪明的投资者>一书中,曾经提到过一种股票债券动态平衡的交易模式. 这种交易 ...
- python 策略回测期货_量化投资实战教程(1)—基于backtrader的简单买入卖出策略
都说Python可以用于量化投资,但是很多人都不知道该怎么做,甚至觉得是非常高深的知识,其实并非如此,任何人都可以在只有一点Python的基础上回测一个简单的策略. Backtrader是一个基于Py ...
- 【转】Python 量化投资实战教程(2) —MACD策略
上次,我们简单地用Python 和 backtrader 使用最简单的买入卖出策略进行了一次量化投资分析: 这一次,让我们把策略变得复杂一点,使用MACD策略的信号线交叉交易法: 本系列教程源代码Gi ...
- 商品cta策略_《衍生品系列研究之三》:国内商品期货常用日内CTA策略测试
研究结论 本报告主要在国内10个成交活跃的商品期货品种上测试了几种常见日内CTA 交易策略的效果,具体包括Dual Thrust 策略.ATR 策略.R-Breaker策略.菲阿里四价策略和空中花园策 ...
- graphviz 画决策树_数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris
数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris 加载数据集 数据特征 训练 随机森林 调参工程师 结尾 数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iri ...
最新文章
- [Offer收割]编程练习赛50
- 通过RMAN克隆11g数据库(基于active database)
- 第十五届全国大学生智能车安徽赛区参赛须知和竞赛日程安排
- 【洛谷3648】[APIO2014] 序列分割(斜率优化DP)
- 数据结构——图:极大小连通子图、图的存储结构、图的遍历
- iptables透明网桥无法使用透明代理错误
- 使用参数化SQL语句进行模糊查找
- 温州大学《深度学习》课程课件(八、深度卷积神经网络)
- python传递参数格式_Python语言学习基础篇之Python发送Post请求之根据参数位置传参、数据类型、不同方式传参...
- python合并多个pdf_pypdf将多个pdf文件合并到一个pd中
- java流程控制及控制键盘输出文字 —(6)
- PyTorch深度学习实践
- 54include对象
- django返回指定html文件,Django返回HTML文件的实现方法
- postman用法_应该是接口测试神器postman最全的用法总结了
- 目标检测YOLO V5 C++版本
- c语言字符串与 浮点型,判断输入字符串是不是为浮点数
- 和秋叶一起学PPT之段落排版与字体(课时四、五)
- 科立捷对讲机频道频率_信道式对讲机和频率式对讲机怎么调频?
- 每周一磁 · 磁性材料的居里温度与工作温度