还在买白酒?算法工程师们,量化投资了解一下

文 | 阿财@知乎 

本文已获作者授权,禁止二次转载

赚取你认知中的Alpha

坚持用量化的观点去看待宇宙的终极问题:买不买,卖不卖。

很多人的在互联网这一片方寸之地,表现出来的行为是矛盾的。举个例子,相信技术指标在交易实践毫无用处的人(前面几篇文章里评论者不乏这样的观点)应该不会看知乎上讨论和教学量化的文章,他们就坚持主观交易就好了,否则拿什么东西去量化因子,基本面因子都算是广义上的技术指标。

量化交易者必须不能行为和认知产生割裂,很多人不明白,割裂了做不成量化,量化的过程其实就是:你本人价值观 ——> 选择策略方式 ——> 发掘因子 ——> 程序代码 进行拟合的过程,所以必须 想法和行为合一,就是很多人爱挂在嘴边的所谓的知行合一

其实他们的知行并不合一,因为成人的世界非黑即白的,所以我们应该明白几点:

策略反映价值观,什么人选择什么策略,是他们价值观的体现。

既然是价值观体现,那么就没有所谓的绝对高下之分,也没有什么绝对的有效无效之分,它们必然有适合的市场和适合的时间段,不要去随便用特警判官式的口吻居高临下的评判别人的策略不行。

总有初学者压根不知道自己是什么价值观,或者价值观都尚未成型,瞎胡抄别人的策略咋呼。这种行为是没用的,不是自己的认知赚来的钱,长久以往,他们的盈利最终会输回去。

认知体现了你的价值观,价值观会投射到你的量化交易策略上。没有自己认知的拿来主义的策略,是无法做演绎和迭代进化的。最终你会在连续的亏损迷茫和怀疑,在时间漫漫的推移中抄来的Alpha也就会钝化和失效。

程序员都应该看过《人月神话》,人力有时穷,个人无法做完全部的idea,你要设定一个计划,做自己的因子搜集,测试,优先级,能做的策略太多了,不可能全做。个人精力有限,比如我就放弃了基本面,用编制指数的金融专家帮我选股票基本面的方式圈定股票池。

别听任何大V跟你讲什么交易心态的鸡汤,最多讲一个月他就会转移话题到拉群——贵金属交易所开户的正路上面了。交易靠心态的话,迟早要还回去,因为人的心态是不稳定的,女性性格缺陷中有大姨妈周期,男性普遍的性格缺陷是男性易有阿斯(比女性高4倍),双向情感障碍和躁郁症。从医学统计上,有着各种各样心理问题的可以达到人群中总数的35%以上。而且性格缺陷几乎无解,心理医生,精神科都解决不了,无论是双相还是,吃药也只能维持不能根治。

一个人母胎性格说白了是天生的。如果要靠天吃饭的老天赏个好心态才能解决交易一致性问题,那交易员岂不是比天赋异禀的刘翔还稀少?那大家都只能喝西北风去了。

所以在做交易之前,先确定你的对交易的认知,钱从哪里,怎么赚到的钱,赚钱以后想干什么,把它们都写进程序里。而交易的一致性,靠的是程序,程序,程序;交易的确定性,来自于是回测统计和贝叶斯公式。

所以我可以在这里放肆的交底牌——我的量化策略来自于我的认知,也正是因为这个原因,我可以很大方的公开出来,因为不信的人就是不会信,他看不进去,这不属于他的认知,也就不用担心他会偷走我的策略,分享我的Alpha。

波浪理论

这只是我对量化投资的认知,你可以去寻找你的圣杯去。

波浪理论是证券技术分析的主要理论之一,由美国经济学家艾略特提出。一些交易员用以分析金融市场周期,预测市场趋势。拉尔夫·纳尔逊·艾略特,专业会计师,于1930年提出分析方法,认为市场价格的走势具有特定的形态。

艾略特波浪理论:
(https://zh.wikipedia.org/wiki/%E8%89%BE%E7%95%A5%E7%89%B9%E6%B3%A2%E6%B5%AA%E7%90%86%E8%AE%BA)

波浪理论更实践化和具象化的交易指导思想就是道氏理论和缠论。不是我刻意引流,但是只要稍微研究深入一点,你总会发觉缠论就在不远处向你招手,是回避不掉的。

教你炒股票1:不会赢钱的经济人,只是废人!
(http://blog.sina.com.cn/s/blog_486e105c01000461.html)

当然我对缠论持一种“酒肉穿肠过,佛主留心中”白目状态:我知道它但我不钻研它,也不妨碍我运用它。因为只要找到合适的程序代码,自己改好成适配自己的量化平台用的就行,原理我理解,所以实践中能知道这个程序代码是不是工作正确,这就够了。

任何钻研缠论的尝试很容易导致“辩经”心态,这种现象这在知乎缠论话题下的讨论中似乎极为常见。我认为这对我们推进量化交易学习进度是不利的,因为一个35岁程序员兼职做量化的时间并不算多到能拿来挥霍的程度,在某乎跟人讨论缠论“辩经”辨赢了,并不能赚到钱的。

我目前使用的缠论笔段分割代码:
(https://github.com/zengbin93/czsc/github.com)

ARIAM模型

证券市场是周期性重复的,也就是恒沙一样无数的贪婪和人性,左右了市场的波动行动,最终导致了历史总会一遍又一遍的重演。

时间序列中的预测模型是什么?
预测涉及使用其历史数据点预测变量的值,或者还可以涉及在给定另一个变量的值的变化的情况下预测一个变量的变化。预测方法主要分为定性预测和定量预测。时间序列预测属于定量预测的范畴,其中统计原理和概念应用于变量的给定历史数据以预测同一变量的未来值。使用的一些时间序列预测技术包括:

自回归模型(AR)
移动平均模型(MA)
季节回归模型
分布式滞后模型

如何通俗易懂地解释ARIMA模型:
(https://pic3.zhimg.com/v2-f2b41a923772474e80bb5955b33d9fd6_180x120.jpg)

这个知识点只需要了解就好了,因为根据实战应用,它明显没有后面的一次九项式灵光。它只是帮助我们验证一点:股票走势行情是周期性的,人性撰写的历史是一再重演的

周期分解算法

接上面的ARIAM模型,事实上我们只要稍加实践,就会发现ARIAM模型在股票的走势周期预测中拟合效果不好,为什么呢?它的分解级别不够,它只是进行了一次差分计算,事实上,股票在走势行情中大约包含了7~17个不同周期级别的分量信号。所以我们需要探索更多更有效的数学和算法途径。

信号与系统取巧的方法——EEMD经验模态分解

Mr.括号:这篇文章能让你明白经验模态分解(EMD)——基础理论篇:
(https://pic3.zhimg.com/v2-983c8b1d17943f33cb7a4fc6e5e3d942_180x120.jpg)

实践出真知,我拿沪深300指数作为范例,使用EEMD分解它的多次信号分量。

Python 代码如下,我使用CCI进行分解而不是收盘价是因为长期主升浪的股票在单边走势中,起始点和最近日期和价格差距超过2倍以上,级别差距过大,会影响到分解指标判断。

# python 实现对沪深300的 EEMD分解 解析出不同级别的自回归周期频率
import numpy as np
from PyEMD import EEMD, EMD, Visualisation
import pylab as pltfrom GolemQ.fetch.kline import (get_kline_price,get_kline_price_min,
)
from GolemQ.fractal.v0 import (maxfactor_cross_v2_func,
)
from GolemQ.utils.parameter import (AKA, INDICATOR_FIELD as FLD, TREND_STATUS as ST,FEATURES as FTR,
)if __name__ == "__main__":kline, display_name = get_kline_price_min('399300', frequency='60min',)features = maxfactor_cross_v2_func(kline.data)max_imf = 17S = features['CCI'].dropna().tail(480).valuesT = range(len(S))# EEMD计算eemd = EEMD()eemd.trials = 50eemd.noise_seed(12345)E_IMFs = eemd.eemd(S, T, max_imf)imfNo = E_IMFs.shape[0]tMin, tMax = np.min(T), np.max(T)# Plot results in a gridc = np.floor(np.sqrt(imfNo + 1))r = np.ceil((imfNo + 1) / c)plt.ioff()plt.subplot(r, c, 1)plt.plot(T, S, 'r')plt.xlim((tMin, tMax))plt.title("399300.XSHE:CCI(14)")for num in range(imfNo):plt.subplot(r, c, num + 2)plt.plot(T, E_IMFs[num], 'g')plt.xlim((tMin, tMax))plt.title("Imf " + str(num + 1))plt.show()

运行程序,实际上EEMD算法有个缺点:跟K-Means聚类和隐马尔科夫链HMM算法很像,就是它管分解,但是不管标注或者理解具体模态的含义。

模态的含义(代表主次,涨跌)必须程序员再次处理数据进行解读,在自动分解出来的结果中,我们还需要写更多的代码匹配出我们的“主级别”周期和当前周期。但是因为实践中并没有使用这个算法,我就不再列出曾经写过的主级别和当前周期适配代码了。

第二个缺点——跟小波分析,聚类分析一样,未来信息会反向传播,前面一篇文章中提到的时候已经有网友评论说小波分解和EEMD分解的这个缺陷有专有叫法叫“端点漂移”(因为我一切自己研究,所以叫法有时会自创不同)。时移窗口会发生抖动,但是不影响对波浪所处相位象限区间和趋势判断。但是这终究是不好的。所以EEMD经验模态分解我在量化交易中仅作为理论研究使用。EEMD算法再一次帮助我们验证一点:股票走势行情是周期性的,人性撰写的历史是一再重演的

最终我真正量化交易实践中运用的周期分解方法为

一次九项式拟合

本技巧的原始出处:
唐进民:多项式曲线拟合
(https://pic3.zhimg.com/v2-96702fac9fbdefb7d93aef386ee4d236_ipico.jpg)

这里使用了一个技巧就是滚动窗口计算。

直接上代码。

def strided_app(a, L, S):  '''Pandas rolling for numpy# Window len = L, Stride len/stepsize = S'''nrows = ((a.size - L) // S) + 1n = a.strides[0]return np.lib.stride_tricks.as_strided(a, shape=(nrows,L), strides=(S * n,n))def rolling_poly9(s:np.ndarray, w:int=252) -> np.ndarray:'''一次九项式滚动分解拟合'''x_index = range(252)def last_poly9(sx):p = np.polynomial.Chebyshev.fit(x_index, sx, 9)return p(x_index)[-1]if (len(s) > w):x = strided_app(s, w, 1)return np.r_[np.full(w - 1, np.nan), np.array(list(map(last_poly9, x)))]else:x_index = range(len(s))p = np.polynomial.Chebyshev.fit(x_index, s, 9)y_fit_n = p(x_index)return y_fit_n# 用法示例
features['POLYNOMIAL9'] = rolling_poly9(features['HMA10'].values, 252)

通过一次九项式拟合,策略代码自发性的寻找到周期规律——如果对象标的存在不符合周期性波动的规律(例如政策性很强的黄金股,纸黄金ETF),那么会在拟合中出现一种奇特的 ”与K线价格走势,HMA10相关性偏低的现象“。

通过核验特定指标的相关性,我就可以判断这个标的适合或者不适合我的量化策略进行交易。同样生效的算法还包括 最小递增序列的OLS线性拟合和回归树转折点算法,它们的组合,我称为:”咸鱼(波动性很差的股票)检测算法“。关于实现这种1秒钟判断一个,5分钟就可以从1700个超大股票池中判断“咸鱼”,“弱势”,“持有”,“做多”,“做空”的Python代码,我后面会写专文讨论。

就像这样

print(u'分析和展示计算结果...')
ret_codelist = featurs_printable_formatter(ret_codelist)
codelist_saltedfish, ret_codelist_saltedfish, ret_codelist = find_fratcal_saltfish(ret_codelist)
codelist_combo, ret_codelist_combo, ret_codelist = find_fratcal_bootstrap_combo(ret_codelist)
codelist_action, ret_codelist_action, ret_codelist_combo = find_action_long(ret_codelist_combo)
codelist_weak, ret_codelist_weak, ret_codelist = find_fratcal_weakshort(ret_codelist)
codelist_short, ret_codelist_short, ret_codelist_unknown = find_action_sellshort(ret_codelist)
#codelist_hyper_punch, ret_stocklist_hyper_punch, ret_codelist =
#find_action_hyper_punch(ret_codelist)
codelist_unknown = [index[1] for index, symbol in ret_codelist_unknown.iterrows()]# 将计算的标的分成四类 —— 买入判断'buy',持有判断'long',做空判断'short',
# 'slatfish'是垃圾咸鱼票,既没有价格波动性也没有想象空间
if (eval_range in ['etf', 'csindex']):full_etf_list = perpar_symbol_range('etf')full_csindex_list = perpar_symbol_range('csindex')ret_codelist = ret_features_pd.loc[(each_day[-1], slice(None)), :].copy()symbol_list = ret_codelist.index.get_level_values(level=1).unique()symbol_list_grouped = [(symbol, 'etf') for symbol in list(set(symbol_list).interp(set(full_etf_list)))] + \[(symbol, 'csindex') for symbol in list(set(symbol_list).interp(set(full_csindex_list)))]if (eval_range in ['etf']):symbol_list_grouped = [(symbol, 'etf') for symbol in symbol_list]elif (eval_range in ['csindex']):symbol_list_grouped = [(symbol, 'csindex') for symbol in symbol_list]symbol_list_grouped = list(set(symbol_list_grouped))
else:symbol_list_grouped = [(symbol, 'buy') for symbol in codelist_action] + \[(symbol, 'long') for symbol in list(set(codelist_combo).difference(set(codelist_action)))] + \[(symbol, 'weak') for symbol in codelist_weak] + \[(symbol, 'short') for symbol in codelist_short] + \[(symbol, 'saltedfish') for symbol in codelist_saltedfish] + \[(symbol, 'unknown') for symbol in codelist_unknown]

经过它们快速分类。

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 969. 煎饼排序

1. 题目 给定数组 A&#xff0c;我们可以对其进行煎饼翻转&#xff1a;我们选择一些正整数 k < A.length&#xff0c;然后反转 A 的前 k 个元素的顺序。我们要执行零次或多次煎饼翻转&#xff08;按顺序一次接一次地进行&#xff09;以完成对数组 A 的排序。 返回能使 A 排…

论文浅尝 | 用于低资源条件下知识图谱补全的关系对抗网络

论文作者: 邓淑敏&#xff0c;浙江大学在读博士&#xff0c;研究方向为低资源条件下知识图谱自动化构建关键技术研究。Ningyu Zhang, Shumin Deng, Zhanlin Sun, Jiaoyan Chen, Wei Zhang, Huajun Chen. Relation Adversarial Network for Low Resource Knowledge Graph Comple…

Spring Boot引起的“堆外内存泄漏”排查及经验总结

背景 为了更好地实现对项目的管理&#xff0c;我们将组内一个项目迁移到MDP框架&#xff08;基于Spring Boot&#xff09;&#xff0c;随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫去帮忙查看原因&#xff0c;发现配置了4G堆内内存&#xff0c;但是实际使用…

Facebook刷新开放域问答SOTA:模型训模型!Reader当Teacher!

文 | Sherry 不是小哀编 | 小轶一部问答系统发展史就是一部人工智能发展史。早在1950年的图灵测试就提出&#xff1a;如果人类无法通过问答将机器和人区分开&#xff0c;那么这个机器就可以被认为具有智能。问答系统和人工智能有着密不可分的关系。从基于规则和结构化数据的自动…

LeetCode 1038. 从二叉搜索树到更大和树(逆中序-右根左-降序)

1. 题目 2. 解题 二叉搜索树 逆中序遍历&#xff08;右根左&#xff09;是降序的 class Solution { public:TreeNode* bstToGst(TreeNode* root) {stack<TreeNode*> stk;int sum 0;TreeNode *rootcopy root;while(root || !stk.empty()) {while(root){stk.push(root);…

Inode 导致 电脑的网络适配器和访问点出现问题

1 电脑好好的&#xff0c;由于项目原因需要安装inode去访问外网的数据集。安装好inode没有什么问题&#xff0c;网络依然可以用。然后不小心重启了一下电脑&#xff0c;发现电脑所有的网络均不正常。网络诊断是电脑的适配器和访问点出现故障。根据网络上的解决方案&#xff0c;…

应用实践 | 南方科技大学研发基于新型冠状病毒知识图谱模式挖掘系统

本文转载自公众号&#xff1a;南方科技大学计算机科学与工程系。随着新型冠状病毒疫情的不断发展&#xff0c;有关疫情的各类信息也在不断更新&#xff0c;如何利用知识图谱从大量新型冠状病毒肺炎信息中高效挖掘相关频繁模式&#xff08;如病毒的宿主、传播途径&#xff09;成…

java.lang.NoClassDefFoundError: * : Landroid/support/v7/gridlayout/R$styleable 异常终极解决办法

该问题解决办法适用于任何类似问题。 问题的标准异常描述为&#xff1a;java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/gridlayout/R$styleable 今天由于项目需要&#xff0c;想在项目中使用GridLayout&#xff0c;无奈&#xff0c;标准库中的…

训练一个130亿参数的模型要用几个GPU?微软:一个就够

文&#xff5c;蛋酱、张倩源&#xff5c;机器之心现在的模型动辄数百、数千亿参数&#xff0c;普通人训不动怎么办&#xff1f;前不久&#xff0c;谷歌发布了参数量为 1.6 万亿的语言模型Swith Transformer&#xff0c;将 GPT-3 创下的参数量记录&#xff08;1750 亿&#xff0…

技术年货:美团技术沙龙合辑大放送——85个演讲,70+小时视频

你好&#xff0c;2019 再见&#xff0c;2018 又到了一年辞旧迎新的时候&#xff0c;大家应该也和美美一样&#xff0c;在忙着总结回顾和展望规划吧。 按老惯例&#xff0c;我们该献上技术年货了。今年首先出场的&#xff0c;是我们的技术沙龙大套餐&#xff01; 美团技术沙龙是…

LeetCode 442. 数组中重复的数据

1. 题目 给定一个整数数组 a&#xff0c;其中1 ≤ a[i] ≤ n &#xff08;n为数组长度&#xff09;, 其中有些元素出现两次而其他元素出现一次。 找到所有出现两次的元素。 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗&#xff1f; 示例&#xff1a;输入:…

如何恢复在 PyCharm 中误删的整个项目文件

如何恢复在 PyCharm 中误删的整个项目文件 方案1: 在误删项目的原始文件地址下新建相同文件名的空文件夹,即新文件夹与被误删项目的路径相同. 在 PyCharm 中打开该新文件夹,右键文件夹,点击 Local History 下的 Show History. 页面左侧为删除的文件信息(时间等),点击文件名右…

征稿 | ​2020年全国知识图谱与语义计算大会

China Conference on Knowledge Graph and Semantic Computing(CCKS 2020)www.sigkg.cn/ccks2020征稿启事&#xff08;第二轮&#xff09;2020年8月15日-18日&#xff0c;南昌征稿截止: 2020年5月21日第十四届全国知识图谱与语义计算大会&#xff08;CCKS: China Conference o…

新手福利:百度官方中文教程,过年也要深度学习!

很多小伙伴在后台给我留言&#xff0c;零基础如何入门深度学习&#xff1f;想要做算法工程师&#xff0c;自学了python基础&#xff0c;现在还来得及吗&#xff1f;这个问题很大。很难说一篇文章几句话就能解决这个问题。今天我给大家说一下自己的一些个人经验&#xff0c;比较…

LeetCode 232. 用栈实现队列(双栈法-队列)

1. 题目 使用栈实现队列的下列操作&#xff1a; push(x) – 将一个元素放入队列的尾部。 pop() – 从队列首部移除元素。 peek() – 返回队列首部的元素。 empty() – 返回队列是否为空。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://le…

论文浅尝 | Tree-to-sequence 学习知识问答

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究兴趣&#xff1a;知识图谱问答。来源&#xff1a;Neurocomputing 372: 64-72 (2020)链接&#xff1a;https://sciencedirect.xilesou.top/science/article/abs/pii/S0925231219312639对于知识图谱问答…

别再搞纯文本了!多模文档理解更被时代需要!

文 | Ryan都已经2021年了&#xff0c;互联网已经今非昔比&#xff0c;20年前纯文本的日子已经一去不复返&#xff0c;文字已经满足不了网页、文章的需求&#xff0c;绝大部分都会有着精心设计的表格、图片&#xff0c;甚至视频。PDF文档这种富文本格式拥有更加复杂的结构信息&a…

iOS 覆盖率检测原理与增量代码测试覆盖率工具实现

背景 对苹果开发者而言&#xff0c;由于平台审核周期较长&#xff0c;客户端代码导致的线上问题影响时间往往比较久。如果在开发、测试阶段能够提前暴露问题&#xff0c;就有助于避免线上事故的发生。代码覆盖率检测正是帮助开发、测试同学提前发现问题&#xff0c;保证代码质量…

LeetCode 199. 二叉树的右视图(DFS 按层queue)

文章目录1. 题目2. 解题2.1 DFS2.2 queue按层从右边遍历1. 题目 给定一棵二叉树&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例:输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释:1 <--…

论文浅尝 | 中科院百度微软等学者最新综述论文40+最新方法阐述知识图谱提升推荐系统准确性与可解释性...

本文转载自公众号&#xff1a;先知。【导读】近来&#xff0c;知识图谱用于推荐系统是关注的焦点&#xff0c;能够提升推荐系统的准确性与可解释性。如何将知识图谱融入到推荐系统呢? 最近中科院计算所百度微软等学者最新综述论文《A Survey on Knowledge Graph-Based Recomm…