原创文章第235篇,专注“个人成长与财富自由、世界运作的逻辑与投资"。

昨天有朋友留言说,L2R效果不好,当然我不知道这位兄弟的场景。

pybroker vs qlib

pybroker的结构里,有一个特别的地方:

无论是规则型策略,还是机器学习,它默认是按symbol独立分开的。

每个函数的context是当前这个symbol的。

我的积木式是使用了它的add_before_exec来完成的,这个传入的所有的ctxs。所以,我没有调用它的add_exec_fn函数还使用onbar这个函数。

机器模型也是,它是针对每个symbol,训练一个模型,我在想,如果4000支股票,这就训练了4000个模型。——它的思路就是每个symbol都是各玩各人。但这里不是对的。比如我们想整合排序学习,就是把所有symbol统一训练,然后对它们进行综合排序。

pybroker本身号称要兼容机器学习与传统量化,确实也是这么做的,还实现了WFA模式。可是竟然变成一个symbol一个model的模式,看来作者确实不太理解AI机器学习如何落地量化金融。

而qlib相反,它的传统规则量化非常弱,基本不支持写规则,ai模型出来之后,就一个topK轮动,比如要加一些择时就非常难。二者比较互补。我的计划就是取长补短,取它们优点的地方。

DataSource vs DataSet

pybroker的DataSource非常轻,我自己实现了一个从本地加载csv的,后续可以轻松扩展从hdf5,或者mongo的。pybroker近期还实现了akshare的DataSource,非常实用。

qlib使用了自己的“数据格式”,基本就是冲着高频去的,说实话,比较“鸡肋”。日频的数据量相对下,用不着。若真是高频场景,可以使用专业的解决方案,比如flink或spark等。

由于pybroker是一个symbol一个model,它没有qlib的dataset,可以直接提供数据给机器训练使用,因此,我们借用一下qlib的dataset相关的代码,包括预处理等。

我们的目标,就是数据实现自动标注,包括label,提供给模型训练之用。

参考qlib的Alpha158库。158个因子精简为15个因子,超额收益仍然接近10%

下面的alpha相当于是一个因子库:

所有代码已经发布至星球:我的开源项目及知识星球

class Alpha:def __init__(self):passdef get_feature_config(self):return self.parse_config_to_fields()def get_label_config(self):return ["shift(close, -2)/shift(close, -1) - 1"], ["label"]@staticmethoddef parse_config_to_fields():# ['CORD30', 'STD30', 'CORR5', 'RESI10', 'CORD60', 'STD5', 'LOW0',# 'WVMA30', 'RESI5', 'ROC5', 'KSFT', 'STD20', 'RSV5', 'STD60', 'KLEN']fields = []names = []windows = [5, 10, 20, 30, 60]fields += ["corr(close/shift(close,1), log(volume/shift(volume, 1)+1), %d)" % d for d in windows]names += ["CORD%d" % d for d in windows]return fields, names

dataset使用它来对数据进行标注。

class DataSet:def __init__(self, handler=None):self.handler = handlerdef _process(self, df):if not self.handler:return dffields, names = self.handler.get_feature_config()label_fields, label_names = self.handler.get_label_config()for field, name in zip(fields, names):ind = to_indicator(name, field)df[name] = ind(df)for field, name in zip(label_fields, label_names):ind = to_indicator(name, field)df[name] = ind(df)return dfdef load(self, symbols, start_date='20100101', end_date=datetime.now().strftime('%Y%m%d')):dfs = []for s in symbols:# dirname去掉文件名,返回目录path = os.path.dirname(__file__)# print(path)df = pd.read_csv('{}/data/{}.csv'.format(path, s), dtype={'date': str})for col in ['open', 'high', 'low', 'close']:df[col] = df[col] / df[col][0]df.set_index('date', inplace=True)df.index = pd.to_datetime(df.index)df.sort_index(ascending=True, inplace=True)df = self._process(df)  # 如果有handler,同使用handler标注dfs.append(df)df = pd.concat(dfs)# df['date'] = pd.to_datetime(df['date'])df['swing'] = 1df.sort_index(ascending=True, inplace=True)return df[(df.index >= start_date) & (df.index <= end_date)]

使用Alpha这个handler,自动把因子和lable都标注好了。

机器模型

泛泛而言,机器学习在金融应用,效果可能很多时候不及一个简单的roc_20——动量策略在单边市被证明是真实有效的。而且规则型策略,我分分钟可以做一个出来,回测效果还不错的。

考虑机器学习多因子模型,是考虑它整合因子的能力,动态跟进市场的能力。当然不太可能,拿一个sklearn的demo fit一下,predict一样就可以得到一个高夏普的策略,那市场不就乱套了。金融数据低信噪比的特性,让其应用于金融投资尤其难。

从逻辑上讲,我觉得L2R是一个方面,另一个方向就是深度强化学习。而其它的提升就是找更多优质的数据,然后挖掘出更好的因子,如此而已。

StockRanker = 选股 + 排序学习 + 梯度提升树。按公开资料,bigquant是使用list wise learning to rank算法。

我们需要开发一个自己的“StockRanker”。

今天准备好数据,明天写模型——StockRanker。

今日策略——创业板布林带

今天写一个创业板布林带策略。

作为示例,规则也比较简单:

收盘价突破布林带上轨做多,突破下轨平仓。

这里我们需要扩展两个函数:cross_up, cross_down,向上突破和向上突破。

def cross_up(left, right):left = pd.Series(left)right = pd.Series(right)diff = left - rightdiff_shift = diff.shift(1)return (diff >=0) & (diff_shift <0)def cross_down(left, right):left = pd.Series(left)right = pd.Series(right)diff = left - rightdiff_shift = diff.shift(1)return (diff <= 0) & (diff_shift > 0)

定义好的指标,策略一如继往的简单:

今天代码已经同步到星球。我的开源项目及知识星球

小结:

1、机器学习特征工程dataset。

2、创业板布林带突破策略

机器学习因子库及特征表达式,创业板布林带突破策略,年化13.3%(附代码)相关推荐

  1. Boll布林带突破策略

    1.策略原理 一个很简单的策略 突破上轨,且Rsi没有超卖时做多,价格回归中轨时平仓 代码: seting = {'name': 'BB', 'symbol': 'ETHUSDT', 'kTime': ...

  2. 如何利用Python构建布林带交易策略?

    如何用Python构建布林带交易策略? 布林带是一个技术指标,广泛用于股票市场和外汇市场.它是由三条线组成的带状区域,由均线和标准差计算而得.布林带交易策略是一种利用布林带指标进行交易的策略.本文将介 ...

  3. python如何初始化一个二维数组_使用Python实现一个简单的商品期货布林指标突破策略...

    布林指标突破策略,思路非常简单.使用Python语言编写该策略,也非常容易实现,加上回测配置信息,有70行代码,实际可以更加精简,鉴于教学策略,没有使用难懂的Python语法,使用的是比较基础的语句. ...

  4. BOLL布林带定向策略

    1. 策略原理 当收盘价上穿下轨,做多 当收盘价下穿上轨,做空 代码: seting = {'name': 'BBv3', 'symbol': 'BTCUSDT', 'kTime': '15m', ' ...

  5. Boll布林带波动率策略

    1.策略原理 开仓条件:Boll开口扩大,中轨往上走,Rsi没有超买,Atr大于前值 平仓条件:Boll开口缩小,中轨往下走 2.回测结果 15mK线: 原文地址:Boll布林带波动率策略 - 苏慕白 ...

  6. alpha模型:打开量化投资的黑箱;附创业板布林带策略代码:年化15%。

    原创文章第108篇,专注"个人成长与财富自由.世界运作的逻辑, AI量化投资". 关于量化投资,我们写了不少文章.从数据准备,预处理,因子特征工程,因子分析,规则策略,模型,回测, ...

  7. mchain r语言_布林带交易策略R语言实现

    布林带(Bollinger Bands)指标是股市技术分析的常用工具之一.该指标由约翰 布林提出,基于K线图画出三条线,其中上下两条线可以分别看成是股价的压力线和支撑线,而在两条线之间还有一条股价平均 ...

  8. 【机器学习入门】(10) 特征工程:特征抽取,字典特征抽取、文本特征抽取,附完整python代码

    各位同学好,今天和大家介绍一下python机器学习中的特征工程.在将数据放入模型之前,需要对数据的一些特征进行特征抽取,方法有: (1) 字典特征抽取 DictVectorizer(),(2) 文本特 ...

  9. PHP字符串运算结果,PHP 实现后缀表达式(接受四则运算字符串,输出计算结果,附代码)...

    最近接触了一个有趣的需求:给定变量a.b.c.d等若干,要求由用户输入的普通四则运算字符串(包含加减乘除括号),算出具体的值. 例如,a=1,b=2,c=3,d=4,给出 a+b/(d-c),应计算出 ...

最新文章

  1. 独家 | 深度学习 V.S. 谜题游戏
  2. expressjs路由匹配规则
  3. 计算机网络教室课程安排表,关于计算机教学计划汇总六篇
  4. javascript 日期控件
  5. OpenCV中基本数据结构(3)_Size
  6. 每晚有1700万人逛淘宝但什么都不买,马云:我们仍可以靠他们赚钱
  7. Python实战从入门到精通第三讲——数据结构与算法1之解压序列赋值
  8. php 右键下拉菜单,iview通过Dropdown(下拉菜单)实现的右键菜单
  9. mysql 索引 范围扫描_MySql学习笔记(六):扫描范围
  10. python编写网络防火墙_firewall防火墙
  11. Jeecg框架 修改首页
  12. 有限元分析法matlab,用MATLAB进行结构的有限元法分析
  13. 计算机基础考试大一计算题,计算机基础复习(大一)计算机基础上机题库
  14. 谷歌邮箱的注册以及GEE的注册使用教程
  15. 人生之路1.20代码 第三部分
  16. 杨韬的Python/Jupyter学习笔记
  17. php形状特征提取方法,LowB沙箱-PHP动态特征提取
  18. 形容计算机很烂的网络用语,坑爹什么意思 网络术语坑爹是什么意思?
  19. 贝尔曼算法队列优化(SPFA)
  20. 修改WSL的Ubuntu环境下ls显示的文件夹文字颜色和背景色

热门文章

  1. emacs学习笔记(windows使用Emacs eww 上网)
  2. 【我眼中周星驰最经典的十大影片】之首【喜剧之王】
  3. 按摩椅申请ISO 8191 香烟阴燃测试
  4. 在国外ins未能连接到服务器,ins未能链接到服务器
  5. [.Net精华技术贴] 传智论坛2013年.Net经验分享版块精华帖汇总
  6. C灌胶机欧姆龙PLC程序 4轴伺服RS485总线控制17站
  7. c++简单使用boost
  8. C#毕业设计——基于C#+asp.net+sqlserver仪器设备管理系统设计与实现(毕业论文+程序源码)——仪器设备管理系统
  9. Google Logo 美国粘土动画大师 90年诞辰
  10. 使用 SpringBoot Admin 监控你的 SpringBoot 程序