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阿尔法策略相关推荐

  1. python亲和性分析_数据挖掘入门系列教程(一)之亲和性分析

    数据挖掘入门系列教程(一)之亲和性分析 教程系列简介 该教程为入门教程,为博主学习数据挖掘的学习路径步骤.教程为入门教程,从最简单的开始.使用的编程语言为Python3.8.1,使用JupyterNo ...

  2. Python 量化投资实战教程(4) —KDJ 策略

    量化投资系列文章: Backtrader 教程 - Python 量化投资实战教程(1) Python 量化投资实战教程(2) -MACD策略(+26.9%) Python 量化投资实战教程(3) - ...

  3. Python 量化投资实战教程(2) —MACD策略(+26.9%)

    量化投资系列文章: Backtrader 教程 - Python 量化投资实战教程(1) Python 量化投资实战教程(2) -MACD策略(+26.9%) Python 量化投资实战教程(3) - ...

  4. 【新一配】量化大师系列之价值投资选股策略

    [新一配]量化大师系列之价值投资选股策略 国外证券市场比较悠久,曾出现过本杰明·格雷厄姆.彼得·林奇.詹姆斯·奥肖内西.查尔斯·布兰德斯等多位投资大师,这些投资大师有一个共同点,他们在证券市场上保持了 ...

  5. 区块链量化投资系列课程(4) - 动态平衡策略

    阅读原文:区块链量化投资系列课程(4) - 动态平衡策略 前言 沃伦 · 巴菲特的导师本杰明 · 格雷厄姆曾经在<聪明的投资者>一书中,曾经提到过一种股票债券动态平衡的交易模式. 这种交易 ...

  6. python 策略回测期货_量化投资实战教程(1)—基于backtrader的简单买入卖出策略

    都说Python可以用于量化投资,但是很多人都不知道该怎么做,甚至觉得是非常高深的知识,其实并非如此,任何人都可以在只有一点Python的基础上回测一个简单的策略. Backtrader是一个基于Py ...

  7. 【转】Python 量化投资实战教程(2) —MACD策略

    上次,我们简单地用Python 和 backtrader 使用最简单的买入卖出策略进行了一次量化投资分析: 这一次,让我们把策略变得复杂一点,使用MACD策略的信号线交叉交易法: 本系列教程源代码Gi ...

  8. 商品cta策略_《衍生品系列研究之三》:国内商品期货常用日内CTA策略测试

    研究结论 本报告主要在国内10个成交活跃的商品期货品种上测试了几种常见日内CTA 交易策略的效果,具体包括Dual Thrust 策略.ATR 策略.R-Breaker策略.菲阿里四价策略和空中花园策 ...

  9. graphviz 画决策树_数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris

    数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris 加载数据集 数据特征 训练 随机森林 调参工程师 结尾 数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iri ...

最新文章

  1. [Offer收割]编程练习赛50
  2. 通过RMAN克隆11g数据库(基于active database)
  3. 第十五届全国大学生智能车安徽赛区参赛须知和竞赛日程安排
  4. 【洛谷3648】[APIO2014] 序列分割(斜率优化DP)
  5. 数据结构——图:极大小连通子图、图的存储结构、图的遍历
  6. iptables透明网桥无法使用透明代理错误
  7. 使用参数化SQL语句进行模糊查找
  8. 温州大学《深度学习》课程课件(八、深度卷积神经网络)
  9. python传递参数格式_Python语言学习基础篇之Python发送Post请求之根据参数位置传参、数据类型、不同方式传参...
  10. python合并多个pdf_pypdf将多个pdf文件合并到一个pd中
  11. java流程控制及控制键盘输出文字 —(6)
  12. PyTorch深度学习实践
  13. 54include对象
  14. django返回指定html文件,Django返回HTML文件的实现方法
  15. postman用法_应该是接口测试神器postman最全的用法总结了
  16. 目标检测YOLO V5 C++版本
  17. c语言字符串与 浮点型,判断输入字符串是不是为浮点数
  18. 和秋叶一起学PPT之段落排版与字体(课时四、五)
  19. 科立捷对讲机频道频率_信道式对讲机和频率式对讲机怎么调频?
  20. 每周一磁 · 磁性材料的居里温度与工作温度

热门文章

  1. Nginx 从入门到实践,万字详解!
  2. Android实战技巧之十八:adb取出安装在手机中的apk
  3. AMBA总线协议-结合ahb-master对ahb协议的理解
  4. 平均数、中位数、众数的特点及应用场合
  5. 【技术科普】万纳链共识算法Iris共识算法解析
  6. 新一代智能云网盘-百宝云企业版
  7. 滴答定时器 时钟_时钟在滴答滴答:Java浏览器插件即将弃用
  8. mac 指定范围 名称模糊匹配 批量删除文件
  9. SSB的RRC配置和作用
  10. Arcgis批量导出影像数据