Quantinsti-博客中文翻译-三-
Quantinsti 博客中文翻译(三)
高斯分布:它是什么,如何计算,等等
马里奥·比萨
在这个博客中,我们了解了高斯分布的一切。我们将揭示数据集中最常见的分布之一的一些细节,深入研究计算高斯分布的公式,将其与正态分布进行比较,等等。
我们将涵盖:
- 什么是高斯分布?
- 为什么叫高斯分布?
- 高斯分布和正态分布的差异
- 高斯分布是如何计算的?
- 使用 Python 计算高斯分布
- 金融中的高斯分布
- 现代经济学和高斯分布
- 什么是有效市场假说?
- 什么是布莱克-斯科尔斯-默顿模型?
- 什么是有效前沿投资组合理论?
- 高斯分布的例子
什么是高斯分布?
当我们在统计学中处理数据时,最基本的分析之一是检查数据分布。
根据数据的性质,我们可以找到不同的分布。例如二项式分布、泊松分布、柯西-洛伦兹分布等。
高斯分布被广泛用于描述价格行为,在本文中,我们将试图更好地理解这种分布及其对金融界和风险控制的影响。
为什么叫高斯分布?
高斯分布这个名字来源于数学家卡尔·弗里德里希·高斯(Carl Friedrich Gauss)在研究误差的随机性时认识到了曲线的形状。
或者为了纪念它的发现者,有时它被命名为拉普拉斯-高斯分布,因为高斯的研究是以拉普拉斯的研究为基础的。
高斯分布和正态分布的差异
高斯分布如此普遍,以至于经常被称为正态分布。
在高斯分布中,大多数数据都集中在具有一定离差或方差的测量值周围。具体来说,高斯分布是对称的,并且具有恒定的均值和方差。
因此,当我们已经有一组服从高斯分布的已知值时,这允许我们对未知值进行预测。如果均值为零,方差为一,我们称之为标准正态分布。
高斯分布,正态分布,钟形曲线,高斯钟形...所有这些术语指的是同一个东西。正态或高斯分布在自然界中被反复发现,如人/动物的身高或体重、赛跑速度、智商等。
高斯分布是自然界中最常见的数据分布之一,因此,它被称为正态或标准分布。或者因为图形的形状,它也经常被称为高斯钟。
高斯分布是如何计算的?
高斯函数数学形式如下:
(\ operator name { f }(x)= a* \ exp(-\ frac {(x-b)^{2}} {2c^{2}}))
对于任意实常数(a),(b)和非零 (c)。
高斯函数在统计学中被广泛用于描述正态分布,因此经常被用来表示具有期望值和方差(\sigma^2 = c^2).的正态分布随机变量的概率密度函数
在这种情况下,高斯函数的形式为:
(\ operator name { g }(x)= \ frac { 1 } { \ sigma \ sqrt { 2 \ pi } } \ exp(-\ frac { 1 } { 2 } \ frac {(x-\mu)^{2}} {\sigma^{2}}))
使用 Python 计算高斯分布
让我们看看如何用 Python 计算高斯分布:
如何为你的交易策略获得资金?
原文:https://blog.quantinsti.com/get-funding-trading-strategy/
为了让你的交易策略获得资金,你必须考虑很多因素。这些因素可以是你过去交易策略的成功记录,策略的绩效指标,教育背景等等。
你必须确保,除了必要的因素之外,你去的是你可以信任和依赖的来源。这个指南帮助你了解如何为你的交易策略获得资金。它包括:
- 为什么你的交易策略需要资金?
- 获得交易策略资金的先决条件
- 在获取资金的交易策略中检查什么?
- 融资渠道
- 关联限制
为什么你的交易策略需要资金?
这个问题的答案无疑是清楚的。
所以,同样的策略,在一段时间内用你自己的资金给你带来了好的回报,但什么都不缺,只缺资金!
当你有一个成功的交易策略时,你一定会想到帮助自己获得更多回报。你为什么不应该呢?毕竟你也一样努力过!
一旦你知道该找谁,该拥有什么来说服潜在的资助者,寻找资金并不像看起来那么复杂。
交易策略获得资金的先决条件
在你接近潜在的投资者之前,你必须准备好一些东西,让你看起来像一个认真的交易者。
以下是联系资助者时需要考虑的要点:
- 令人信服的教育背景
- 市场知识和经验
- 良好的记录
- 检查策略中的风险
让我们详细了解一下上面提到的这两点。
令人信服的教育背景
嗯,金融、数学和计算机科学方面的教育背景应该是令人信服的,因为投资者可以对你创造成功战略的能力建立信任。
上面提到的主题可以在以下方面有所帮助-
- 财务 -良好的财务知识意味着你很好地了解财务管理,并能够创建具有正确参数的策略,如止损单、限价单等。
- 数学——数学背景意味着你可以计算一只股票、行业甚至市场发生特定事件的概率或可能性。
- 计算机科学 -计算机科学的教育背景意味着你的编码技能能够创造当代的算法交易策略。
市场知识和经验
在请求潜在投资者为你的交易策略提供资金时,市场知识和交易经验是一个很好的切入点。这一点很重要,因为你在市场中的经验表明你知道市场行为的来龙去脉。
市场经验使你非常适合制定交易策略,因为很明显,你知道最大风险在哪里。
此外,作为一个在市场上有经验的人,人们会认为你已经在大量的尝试和错误之后获得了经验,你知道在特定的事件中什么是最好的!
良好的记录
你的策略给了你很好的回报。
但是从什么时候开始?
3 个月?
6 个月?
你是如何跟踪表演的?
什么格式?
Excel 表格?
你的手册?
在你的经纪人软件上?
事实是,如果你想从任何人那里获得大笔资金,大多数潜在的投资者都可以被至少 2 年的良好回报所说服。
检查策略中的风险
你必须始终检查你的交易策略中的风险,确保你利用了风险管理实践,如投资组合优化、对冲等。
虽然,有一些交易者是高风险承担者。尽管如此,仍有一些人喜欢将资金投入相对稳定的资产。因此,即使你能够以相对较低的风险,每年持续获得个位数的利润,你也是优秀的。
在获取资金的交易策略中检查什么?
交易者必须检查绩效指标以获得交易策略资金,这些指标是:
- 最大水位下降
- 波动性
- 夏普比率
- Sortino 比率
最大水位下降
最大提取额是评估投资组合风险的关键指标之一。在您的交易或投资期间,您的投资组合会多次贬值。这些价值的减少被称为提取。
这些提款值的最大值给了我们一个投资组合可能遭受的最大损失的估计。从技术上讲,它被定义为一个投资组合从高峰到低谷的最大损失。
它可以用公式表示为:
最大压降=谷值-峰值/谷值
在 Python 的帮助下,您可以计算资产的最大消耗并将其可视化。下面,您可以在图形表示中看到最大压降的样子。

Maximum drawdown
在找出不同证券的提款后,交易者必须选择与其他证券相比有较低或最低最大提款的证券。较低的最大提款权表明投资价值略有波动,因此金融风险程度较低,反之亦然。
换句话说,你的资本出现“重大”损失的可能性要小得多。
波动性
证券在一段时间内的上下波动被称为波动性。波动性衡量证券的风险。一般来说,波动性越高,证券的风险就越大。如果一种证券的价格在一段较长的时间内缓慢波动,则被认为波动性较小。
相反,如果一种证券的价格在一小段时间内快速波动,它就被认为更不稳定。波动性是通过计算一段时间内年化回报率的标准差来衡量的。
因此,你的策略应该包括交易这些不太波动的证券。
夏普比率
夏普比率衡量交易策略中风险调整后的回报。夏普比率越高,交易者每单位风险的回报就越多。夏普比率越低,交易者赚取额外回报的风险就越大。
夏普比率由以下等式给出:
夏普比率= (Rp - Rf) / σ
其中,
Rp =平均投资组合收益T3】Rf =无风险利率
σ =投资组合的标准差
例如,你有一个投资组合,你期望年回报率为 12%。让我们假设无风险利率是 7%,你的投资组合有 8%的标准差。
您投资组合的夏普比率计算如下:
夏普比率= (12% - 7%)/ 8% = 0.625
然而,为了使用夏普比率,你需要比较两个投资组合的夏普比率,并找出哪一个给你更多的风险调整后的回报。换句话说,夏普比率越高,每单位风险的回报就越大。
Sortino 比率
索蒂诺比类似于夏普比。唯一的区别是夏普比率包括波动的向上和向下运动,而索蒂诺比率只代表波动的向下运动。
就像夏普比率一样,索提诺比率越高,单位风险的回报越好。
由于大多数交易者只关心波动性的下降,sortino 比率代表了风险下降的更现实的情况。
使用 sortino 或 sharpe 比率评估策略的选择完全取决于个人,无论他/她想要分析总波动还是波动的下行。
Sortino 比率计算如下:
排序比= (Rp - Rf) / σd
其中,
Rp =预期收益
Rf =无风险利率
σd =负资产收益的标准差
例如,一家 XYZ 公司的年回报率为 11%,下跌偏离度为 9%。无风险利率为 3%。XYZ 的索提诺比率计算如下:
Sortino 比率= (11% - 3%) / 9% = 0.88。
你可以找到两个投资组合的排序比率,然后比较它们,找出哪个投资组合的排序比率更高,因为排序比率越高,意味着风险回报越高。
融资渠道
现在我们将讨论一些资金来源,一个拥有成功交易策略的交易者可以接近这些来源。看看我下面列出的一些潜在资助者,他们是:
- 家人和朋友
- 业主资本
- 与经纪人的协议
- 公众
家人和朋友
获得交易策略资金的最方便快捷的途径是联系你的家人和朋友。当然,这并不意味着你应该利用他们的情感纽带,迫使他们资助你的策略。
这只意味着你可以说服你的家人和朋友为你的交易策略提供资金。你的朋友甚至可能是社交媒体上信任你的人。
你可以通过向他们展示你的交易策略如何保持最小的风险和最大化回报的可能性,让你令人信服的演讲建立在事实的基础上。你必须解释所有的风险,慷慨地给他们一份丰厚的回报。
自有资本
你也可以通过与自营交易公司合作来筹集资金,让他们相信你成功的交易策略(有良好的业绩指标)。
你与自营交易公司的伙伴关系应该基于这样的条款:你和公司共同商定一定比例的回报,以换取你的策略。
与经纪人的协议
为了给你成功的交易策略筹集资金,你可以和一个经纪人达成协议,你可以和他合伙交易证券。就像与一家自营交易公司合作筹集资金一样,你可以与一家经纪公司就回报达成某些条款。
公众
如果你是一个可以通过社交媒体社区向公众推销交易策略的人,那么你可以通过获得他们的信任来从他们那里筹集资金。
你需要检查一些事情,以确保你被认为是一个真实的个人和交易者。我把这些必要点总结如下:
- 你的家人或/和朋友可以在你的社交社区(作为个人和交易者)上担保你的真实性,以帮助公众(通常是陌生人)确定你的身份。
- 除了为你担保的知识之外,重要的是你要向公众提供你的详细资料,比如真实的国家身份证。
- 此外,你可能还需要一些执照来继续筹集资金。您可能需要获得类似另类投资基金(AIF)或对冲基金、基金管理公司(FMC)或投资组合管理服务(PMS)等牌照。基于资产类别、司法管辖区和投资者的类型。
关联限制
接下来,我们将了解为您的交易策略筹集资金的相关风险。接受策略资金的交易者需要同时遵守赞助商的规章制度。
这些规则包括每日损失限额、更少的最大提款和优化策略等。因此,当你筹集资金投资你的交易策略时,你也需要尊重出资人的风险管理实践。
结论
为你的交易策略获得资金有点复杂,但不是不可能。当你希望有更多的资金用于成功的交易策略时,你需要考虑以下几点。还有,有各种各样的资金平台值得一试!
如果你也想知道更多关于创建一个成功的交易策略,并得到同样的资助,你必须参加这个为期 6 个月的完整的算法交易课程。它可以帮助你能够学习各种方法来创造一个良好的交易策略来筹集资金。
注意:原帖已于 2022 年 7 月 29 日更新,以保证准确性和及时性。
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
加密货币算法交易入门
原文:https://blog.quantinsti.com/getting-started-cryptocurrency-algorithmic-trading/
加密货币的有限商业用途阻碍了我们许多人对加密货币形式的大量投资。而且每一单比特币都是一笔重金投资,考虑到 1 单单位金额接近 7276 美元。投资好坏?时间会证明这一点。
然而,它的受欢迎程度和轰动效应引起了我们的兴趣。正在进行的辩论——加密货币将成为未来的货币——每天都在寻找新的平台,并且不会失去现有平台的魅力。
这种货币的提倡者有他们自己新颖的方式。我读过一篇文章,阐述了使用加密货币的十种不同方式。其中一个包括一家接受加密货币的咖啡馆。这家咖啡馆恰好位于大黄蜂交易所附近,这是多伦多第一家机器人电话亭。引用的其他例子包括商业途径,这是第一个开始接受比特币作为货币的商业途径,第一个在线旅行社,第一所接受加密货币的大学和第一个使用比特币的众筹平台。
用于商业目的的加密货币交易平台的渗透仅限于每个类别中的个别事件,但用于交易已经获得了相当大的普及。影响加密货币价格变动的宏观和微观变量非常不稳定,价格波动也是如此。这一事实使得加密货币成为日内和高频交易者非常有利可图的选择。加密货币最受欢迎的方面是交易的透明度,也称为“区块链效应”。
一种所有人都可以看到的公开账簿的通用货币,具有异常高的价值和高波动性,为什么加密货币不会成为本世纪最受欢迎的辩论?
寻找更多关于如何开始加密货币交易的指导?

EPATian 人 Garv Khurana 一直致力于一个加密货币专用算法交易平台的模型。让我们带你了解一下他从精算师到最近一次创业的历程。
我们与加尔夫·库拉纳的对话
What is your educational and professional background?
我是精算专业人士。当我开始学习 EPAT 课程时,我在一家英国保险公司工作。现在我正在开发一个端到端的算法交易平台,在不同的交易所进行加密货币交易。我有工程学位,有处理经济模型、使用统计方法的背景, 并且了解风险识别和缓解。
How do you formulate your own trading strategy?
我使用 Node.js 从不同的比特币交易所检索订单簿。在这些订单簿上,我通常以 20 秒的时间间隔对我的策略进行回溯测试。 异步地,信号生成和订单执行模型与前述交易所连接以进行交易 这是跨 Node.js、R、Java 和 AngularJS 创建的。这项工作花了我大约 4 个月的时间学习语言,另外两个月让我开始开发。
How do you know about QuantInsti & Why did you choose QuantInsti? What's your experience so far?
在我开始学习算法交易的时候,Quantinsti 总监 Rajib Ranjan Borah 在 YouTube 上的一次演讲让我报名参加了 EPAT 项目。我时间紧迫,想要一个结构化的算法交易基础课程。我要找的是 Quantinsti 提供的。这是一个全面且要求很高的项目,需要我全身心的投入,几乎所有的时间和周末的时间。事后看来,我尽了最大努力跟上课程进度,并努力充分利用课程提供的资源。然而,如果我在课程进度上有更多的灵活性,我的学习质量会好得多。
Would you recommend QuantInsti to others who wish to engage in algorithm trading?
是的,我期待 Quantinsti 的进一步指导。
What do you think of EPAT and how does it add value to your career?
有了 EPAT,我找到了一个结构化的方法,用算法来执行我的交易策略。 现在,我可以更好地实施自己的战略或在贸易公司找到工作。
What do you have to say about the employment opportunities offered by QuantInsti?
我定期得到关于职位安排机会的最新消息,并参加了几次面试。我发现了一个由其他交易者组成的小网络,我经常与他们交流,寻求帮助或合作。 能够与行业专家交流是我加入 EPAT 的原因之一,这里有一群经验丰富的新手交易者来提升技能,补充他们的经验。
下一步
你是否热衷于学习更多关于算法交易的知识?联系我们,了解关于理财策略的不同世界观。 QuantInsti 帮助人们获得适用于各种交易工具和平台的技能。算法交易(EPAT) 课程中的高管课程涵盖了统计学&计量经济学、金融计算&技术和算法&量化交易等培训模块。EPAT 教你成为成功交易者所需的技能。
基尼指数:决策树、公式和系数
决策树通常在实现机器学习算法时使用。决策树的层次结构通过遍历树的节点引导我们到达最终结果。每个节点都由一个属性或特性组成,当我们沿着树向下移动时,这个属性或特性会被进一步分解成更多的节点。但是我们如何决定:
- 哪个属性/特征应该放在根节点?
- 哪些功能将充当内部节点或叶节点?
为了决定这一点,以及如何分裂这棵树,我们使用分裂措施,如基尼指数,信息增益等。在这篇博客中,我们将学习所有关于基尼指数的知识,包括使用基尼指数来分割决策树。
在这个博客中找到一切,它涵盖了:
什么是基尼指数?
基尼指数(Gini Index)或基尼系数(Gini inexture)衡量的是随机选取某个变量时,该变量被错误分类的程度或概率。
但是“不洁”的真正含义是什么呢?
如果所有的元素都属于一个类,那么它可以被称为纯的。基尼系数在 0 和 1 之间变化,
其中,
‘0’表示所有元素都属于某个类或者只存在一个类(纯),而
‘1’表示元素随机分布在各个类中(不纯)。
基尼系数为“0.5”表示元素平均分布在某些类别中。
用于执行决策树技术的类似基尼指数的术语
我们正在讨论类似于基尼系数的组成部分,以便基尼系数在决策树技术执行中的作用更加清晰。
决策树的本质在于将整个数据集划分为树状的垂直信息结构,以根节点为顶部划分信息的不同部分。
在决策树模型中,每个节点都是一个属性或特征,包含决策树模型的必要信息(按顺序向下)。在决定决策树模型的每个节点时,需要记住以下几点:
- 哪些功能将位于决策树开始的根节点。根节点上的信息应该是整个信息的基础。例如,如果我们要为一只股票创建决策树模型,我们可以在根节点提到这只股票的数据(OHLCV)。
- 决定哪些最准确的要素用作内部节点(沿树垂直向下),也称为叶节点。
谈到也导致执行决策树技术的其他术语,类似于基尼指数,这些术语如下:
- 分割措施
- 信息增益
分割措施
由于不止一个属性参与决策过程,因此有必要确定每个属性的相关性和重要性。因此,将最相关的特征放置在根节点,并通过分割节点进一步向下遍历。
随着我们在树中进一步向下移动,杂质或不确定性的水平降低,从而导致更好的分类或每个节点的最佳分割。信息增益、基尼指数等拆分指标。被用来决定同样的事情。
信息增益
信息增益用于确定哪个特征/属性给了我们关于一个类的最大信息。
- 信息增益基于熵的概念,熵是不确定性、杂质或无序的程度。
- 信息增益旨在降低从根节点到叶节点的熵水平。
熵的相关性
熵是数据集中无序度或杂质度的量度。基尼指数是一种旨在降低数据集中熵值的工具。
换句话说,熵是杂质的度量,或者我们可以说,是数据集值的随机性。
低度无序(无无序)意味着杂质水平低。熵是在 0 和 1 之间计算的。数字“1”表示更高水平的无序或更多的杂质。
尽管在数据集中可以存在大于 1 的其他数量的组或类。在机器学习(和决策树)的情况下,1 表示相同的意思,即更高层次的无序,也使解释变得简单。因此,决策树模型会将较大的无序度分类为 1。
熵通常是最低的无序(无无序)意味着杂质水平低,较高的无序(最大无序)意味着杂质水平高。测量熵是为了减少更多杂质带来的不确定性。
在下图中,你可以看到一个倒“U”形,代表图中熵的变化。在图像中,x 轴代表数据值,y 轴代表熵值。

Variation of entropy against data points
上图显示,熵在两个极端(左右两侧)最低(无无序),在图的中间或倒“U”形曲线处最大(高度无序)。
因此,在两个极端(左和右),没有熵(杂质),因为每个类都有属于该类的所有元素。另一方面,在中间,熵线延伸到最高点以创建一个“U”形,其中来自两个类别的所有元素随机分布,这意味着存在熵(杂质)。
从我们的观察中可以清楚地看到,两个极端(左和右)都是纯的,没有熵。
熵的公式
为了找出不确定性或高度无序,熵的公式如下:
$ $ e(s)= \sum_{i=1}^c-p _ I log _ 2p p _ I $ $
其中,
‘p’,表示熵的概率,E(S)表示熵。
基尼指数公式
基尼指数的公式如下:
其中,
‘pi’是对象被分类到特定类别的概率。
在构建决策树时,我们倾向于选择基尼系数最小的属性/特征作为根节点。
基尼指数示例
现在让我们看看基尼系数交易的例子。我们将为决策树模型提供一组特定的数据,这组数据对于机器来说是可读的。
现在,让我们使用示例数据,按照以下方式计算过去趋势、未平仓合约、交易量和回报的基尼指数:
| 过去趋势 | 未平仓利息 | 交易额 | 返回 |
| 积极的 | 低的 | 高的 | 向上 |
| 否定的;消极的;负面的;负的 | 高的 | 低的 | 向下 |
| 积极的 | 低的 | 高的 | 向上 |
| 积极的 | 高的 | 高的 | 向上 |
| 否定的;消极的;负面的;负的 | 低的 | 高的 | 向下 |
| 积极的 | 低的 | 低的 | 向下 |
| 否定的;消极的;负面的;负的 | 高的 | 高的 | 向下 |
| 否定的;消极的;负面的;负的 | 低的 | 高的 | 向下 |
| 积极的 | 低的 | 低的 | 向下 |
| 积极的 | 高的 | 高的 | 向上 |
基尼指数的计算
我们现在将使用以下公式计算基尼系数
- 计算过去趋势的基尼指数
- 计算未平仓利息的基尼指数
计算过去趋势的基尼指数
由于过去的趋势 10 次中有 6 次是正的,4 次是负的,因此计算如下:
p(过去趋势=正):6/10
p(过去趋势=负):4/10
- If(过去趋势=正&回报=涨),概率= 4/6
- If(过去趋势=正&回报=负),概率= 2/6
基尼指数= 1 - ((4/6)^2 + (2/6)^2) = 0.45
- If(过去趋势=负&回报=正),概率= 0
- If(过去趋势=负&回报=跌),概率= 4/4
基尼指数= 1 - ((0)^2 + (4/4)^2) = 0
- 基尼系数的加权和可以计算如下:
过去趋势的基尼指数= (6/10)0.45 + (4/10)0 = 0.27
计算未平仓合约的基尼指数
对于未平仓利息,未平仓利息在总共 10 次中有 4 次是高的,6 次是低的,计算如下:
p(未平仓利息=高):4/10
p(未平仓权益=低):6/10
- If(未平仓利息=高&回报=高),概率= 2/4
- If(未平仓利息=高&回报=低),概率= 2/4
基尼指数= 1 - ((2/4)^2 + (2/4)^2) = 0.5
- If(未平仓利息=低&回报=高),概率= 2/6
- If(未平仓利息=低&回报=低),概率= 4/6
基尼指数= 1 - ((2/6)^2 + (4/6)^2) = 0.45
- 基尼系数的加权和可以计算如下:
未平仓权益基尼指数= (4/10)0.5 + (6/10)0.45 = 0.47
计算交易量的基尼指数
交易量 7 倍高,3 倍低,计算如下:
p(交易量=高):7/10
p(交易量=低):3/10
- If(交易量=高&回报=涨),概率= 4/7
- 如果(交易量=高&回报=低),概率= 3/7
基尼指数= 1 - ((4/7)^2 + (3/7)^2) = 0.49
- If(交易量=低&回报=高),概率= 0
- 如果(交易量=低&回报=低),概率= 3/3
基尼指数= 1 - ((0)^2 + (1)^2) = 0
- 基尼系数的加权和可以计算如下:
交易量基尼指数= (7/10)0.49 + (3/10)0 = 0.34
基尼指数的属性或特征
| 属性/特征 | 基尼指数 |
| 过去趋势 | Zero point two seven |
| 未平仓利息 | Zero point four seven |
| 交易额 | Zero point three four |
从上表中,我们观察到“过去的趋势”具有最低的基尼指数,因此,它将被选为决策树如何工作的根节点。
确定决策树的子节点或分支(向下的特征)
我们将重复相同的过程来确定决策树的子节点或分支。
我们将为过去趋势的“正”分支计算基尼指数,如下所示:
| 过去趋势 | 未平仓利息 | 交易额 | 返回 |
| 积极的 | 低的 | 高的 | 向上 |
| 积极的 | 低的 | 高的 | 向上 |
| 积极的 | 高的 | 高的 | 向上 |
| 积极的 | 低的 | 低的 | 向下 |
| 积极的 | 低的 | 低的 | 向下 |
| 积极的 | 高的 | 高的 | 向上 |
计算过去正趋势的未平仓合约基尼指数
正面过去趋势的未平仓合约 6 次中有 2 次是高的,6 次中有 4 次是低的,正面过去趋势的未平仓合约基尼指数计算如下:
p(未平仓利息=高):2/6
p(未平仓权益=低):4/6
- If(未平仓利息=高&回报=高),概率= 2/2
- If(未平仓利息=高&回报=低),概率= 0
基尼指数= 1 - (sq(2/2) + sq(0)) = 0
- If(未平仓利息=低&回报=高),概率= 2/4
- If(未平仓利息=低&回报=低),概率= 2/4
基尼指数= 1 - (sq(0) + sq(2/4)) = 0.50
- 基尼系数的加权和可以计算如下:
未平仓利息的基尼指数= (2/6)0 + (4/6)0.50 = 0.33
计算交易量的基尼指数
交易量在 6 次中有 4 次是高的,在 6 次中有 2 次是低的,计算如下:
p(交易量=高):4/6
p(交易量=低):2/6
- If(交易量=高&回报=涨),概率= 4/4
- If(交易量=高&回报=低),概率= 0
基尼指数= 1 - (sq(4/4) + sq(0)) = 0
- If(交易量=低&回报=高),概率= 0
- 如果(交易量=低&回报=低),概率= 2/2
基尼指数= 1 - (sq(0) + sq(2/2)) = 0
- 基尼系数的加权和可以计算如下:
交易量基尼指数= (4/6)0 + (2/6)0 = 0
基尼指数的属性或特征
| 属性/特征 | 基尼指数 |
| 未结清权益 | Zero point three three |
| 交易额 | Zero |
我们将使用“交易量”特征进一步分割节点,因为它具有最小的基尼指数。
结论
基尼系数是一个强有力的衡量数据集中的随机性、杂质或熵的指标。基尼指数旨在减少决策树模型中从根节点(在决策树的顶部)到叶节点(决策树的垂直分支)的杂质。
通过欧内斯特·陈博士提供的关于决策树的课程,您可以了解如何减少决策树模型中的杂质。你将了解更多不同的分割方法,包括基尼指数、信息增益等。以及如何使用人工智能技术预测市场和寻找交易机会。快乐学习!
如果你也对发展终身技能感兴趣,这些技能会帮助你提高交易策略。在这个 algo 交易课程中,你将接受统计学&计量经济学、编程、机器学习和量化交易方法的培训,因此你精通每一项在量化&算法交易中出类拔萃所必需的技能。现在就了解更多关于 EPAT 的课程吧!
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
改变算法交易的前景
原文:https://blog.quantinsti.com/global-algorithmic-trading-landscapes-geographies/
https://www.youtube.com/embed/5eLG1mCOHX0?rel=0
阿努普里亚·古普塔
跨不同交易所和国家的算法交易
本次网络研讨会基于 2014 年 6 月 16 日至 20 日在伦敦举行的第 4 届年度会议“金融领域的行为模型和情绪分析”的部分讨论。
在本次会议中,演讲者 quantin STI & irage capital Advisory 的联合创始人 Rajib Ranjan Borah 先生比较了全球不同地区的算法交易。他在亚太(APAC)、欧洲和中东(EMEA)以及美洲的主要交易所分享了他对算法交易的见解和经验。该报告包含了 30 多个交易所每月和每年的股票和期权交易量数据。
还以易于理解和实施的方式列出了全球不同国家/地区所需的法规。他们提到了有利可图的市场的关键方面,以便交易者对全球市场有一个快速的第一印象。本文还解释了 ETF 和暗池等基本术语,这些术语对于理解交易所之间的实际差异非常重要。为了帮助观众欣赏整个算法交易设置背后的技术,Rajib 还以简化的方式解释了算法交易系统的复杂系统架构。
在本帖中,我们将对本次网络研讨会讨论的内容做一个简短的总结。
作为一名交易经理,你如何决定在哪些地区交易?
算法交易的好处是当你能够增加你的盈利交易时。有两种方法可以做到这一点;您可以在现有市场上增加更多仪器或数量,也可以在全球不同地区扩展您的业务。大多数大中型对冲基金在尽可能多的市场进行交易。他们如何决定在一个新的地方开始交易?关键决定因素有以下四种类型。
法规——在那个地区开始交易有多容易?
在你开始在一个新的地域交易之前,需要回答几个问题:
- 是否允许算法交易给外人?
- 哪些工具允许进行算法交易?
- 新地理对算法交易员有什么样的规定?
- 那个国家对算法交易员征收什么样的金融交易税?
在本节中,我们将针对不同地区的不同国家考察所有问题。在亚洲,新加坡、香港、日本、马来西亚是监管相对宽松的市场。但是,在决定在一个国家进行交易之前,还需要考虑其他因素。
技术——在技术上连接到那个市场可行吗?
在接听一个关于在一个新的地域拓展业务的电话之前,仔细考虑该市场相关的技术协议是很重要的。会议讨论了在研究连通性交换时应该关注的技术方面。
其中一个方面是技术协议家族做的交换,你想交易的,属于其中。最流行和最广泛的协议是 FIX 协议(金融信息交换)。然而,不同的交易所使用十几种不同类型的协议来加密市场数据。例如,伦敦证券交易所使用千年本地交易。印度国家证券交易所使用 NEAT。了解您连接到新交换机的可行性非常重要。它是否遵循您当前交换所遵循的相同协议?如果是这样的话,那么你切换到新的交易所应该不会太复杂。
数量——值得吗?
高频交易或算法交易通常在成交量交易上赚钱。这种技术利用非常低的差价,并利用大量交易来获利。如果在一个交易所没有大量的交易发生,那么进入这个市场就没有太多的好处。
在本次会议中,演讲者比较了全球 40 家交易所的以下数据:
- 股票交易量
- 索引
- 股权融资
- 货币
- 利率
- (同 EngineTestFacilities)发动机试验设备
- 商品
对于交易者来说,在决定在哪个市场交易哪个工具之前,手头有这样的数据是至关重要的。日本在亚洲是一个非常好的市场,除了大宗商品之外,各种商品的交易量都很大。然而,出于同样的原因,这也是一个竞争非常激烈的市场。这就给我们带来了下一个非常关键的决定性因素。
竞争——你能赚钱吗?
如果市场上已经有很多大玩家,就很难与他们竞争。因此,需要了解新地理中的竞争水平。Rajib 比较了不同地区现有的竞争情况。
//www.slideshare.net/slideshow/embed_code/key/3l4ptvT7r53UuT
前方的路
在过去的十年里,交易中的技术创新已经被广泛接受并变得相当流行。全球范围内的各种交易已经转向标准化的技术协议。
随着技术成本的下降,大多数市场参与者都可以获得技术,交易中的技术创新可能会达到极限。预计在下一阶段,交易阿尔法将再次转向统计优势,而不是技术优势。
下一步
如果你是一名散户交易者或专业技术人员,想要建立自己的自动化交易平台,今天就开始学习算法交易吧!从基本概念开始,如自动交易架构、市场微观结构、策略回溯测试系统和订单管理系统。你也可以报名参加 EPAT,这是业内最广泛的算法交易认证项目之一。
黄金价格预测:使用 Python 机器学习的逐步指南
原文:https://blog.quantinsti.com/gold-price-prediction-using-machine-learning-python/
有可能预测黄金价格的走向吗?
是的,让我们使用机器学习回归技术来预测最重要的贵金属之一黄金的价格。
我们将创建一个机器学习线性回归模型,该模型从过去的黄金 ETF (GLD)价格中获取信息,并返回第二天的黄金价格预测。
GLD 是直接投资实物黄金的最大 ETF。 ( 来源)
在我们使用 python 中的机器学习来预测黄金价格的旅程中,我们将涉及以下主题。
导入库并读取黄金 ETF 数据
首先:导入实现这个策略所需的所有必要的库。
谷歌股票历史价格下载工具箱
原文:https://blog.quantinsti.com/google-finance-download-historical-prices/

亚历克斯·博伊科夫的客座博文
利用谷歌股票历史价格建立交易策略
你好,我叫亚历克斯·博伊科夫。我是 WFAToolbox 开发团队的一员。这个应用程序为提供了使用谷歌股票历史价格在 MATLAB 中开发算法交易策略的最简单方法。该工具箱将帮助您解决从 20 多个股票交易所免费获取每日和当日历史股票价格的问题,包括上海证券交易所(SSE),孟买证券交易所(BSE)等。
你们中有人以前遇到过以下问题吗?你从某人那里听说,或者在网上读到,一些资产的一个有趣的策略(例如,新兴市场石油公司的对交易,这些公司之间高度协同整合,并且有足够的流动性)你惊呼:“哦,我的上帝,当然在这里!啊,要是我有那些“俄罗斯天然气工业股份公司”和“卢克石油公司”的盘中历史数据,我就能检验一下了!”。就在那时,你开始疯狂地在所有你知道的网站上寻找免费的历史数据,从在谷歌、论坛、博客等网站上激烈搜索开始。然后你打开自来水厂,访问一些昂贵的数据馈送公司的“定价”页面;最后,在花了漫长而又令人厌倦的一天时间寻找引语后,你变得绝望了。你决定去谷歌金融网站,你看到你需要的谷歌股票历史价格数据。你歇斯底里地惊叫:“为什么!为什么我不能直接从谷歌金融下载呢……”
在 WFAToolbox ,我们经常会遇到这种情况。只要我们还没有决定改变这种局面。与此同时,我们开发了一个应用程序,极大地简化了在 MATLAB 上对算法交易策略的测试和分析,我们还添加了一个特殊模块,允许您从来自美国、欧洲、亚洲和澳大利亚的 20 多个证券交易所下载 100,000 多个谷歌股票的每日和当日历史价格。
WFAToolbox 提供的一些其他功能包括:
- 构建策略规则
- 进行向前分析
- 执行交易策略的优化
- 性能结果的丰富可视化
- 并行处理技术的使用
- 在 Excel 等中轻松分析策略和投资组合结果。
特别是对于 QuantInsti 博客,我们从 MATLAB 中编译了一个独立的应用程序,允许任何用户(无论有没有 MATLAB)上传 csv 格式的 Google 股票历史价格报价,以便进一步导入其他程序和在 Excel 中工作。我们已经尽了最大努力使申请对这项工作来说尽可能容易。

我们用 MATLAB 创建算法交易策略。我们认为它比 R 和其他解决方案有很多优势,其中最主要的优势是能够添加来自 Mathworks 和第三方开发人员的模块(例如,我们的应用程序—WFAToolbox—Walk-Forward Analysis Toolbox)。
前向分析是一种持续的、适应性的方法,用于评估交易系统的稳健性。它结合了“样本内优化”和“样本外验证”的多个循环。
MATLAB 的其他优势包括:
- 易于学习的语言,允许编写一个完整的回溯测试程序
- 提供矢量化操作,加快策略程序的执行时间
- 许多先进的统计和数学内置模块有助于创建策略
- 大量第三方软件包可用于量化交易
- 非常适合测试包含大量股票和其他资产的策略
- 丰富的图形交互式可视化输出,用于评估战略绩效
在算法交易高管课程(EPAT)中,有两个由 E . P . Chan 博士主讲的关于量化动量策略的专题讲座。他广泛使用 MATLAB 来说明动量策略的实际实施。
下一步
在我们的下一篇文章“使用 Python 对股票数据的基本操作”中,我们将展示使用 Python 对股票数据执行的基本操作,以分析和构建算法交易策略。我们使用 Python 运行一些可以在股票数据上执行的基本操作,并从从 CSV 文件中读取股票数据开始。
更新
我们注意到一些用户在从雅虎和谷歌金融平台下载市场数据时面临挑战。如果你正在寻找市场数据的替代来源,你可以使用 Quandl 来获得同样的信息。
声明:
这些客座博文中提供的观点、意见和信息仅属于作者个人,并不代表 QuantInsti 的观点、意见和信息。本文中所做的任何陈述或共享的链接的准确性、完整性和有效性都不能得到保证。我们对任何错误、遗漏或陈述不承担任何责任。与侵犯知识产权相关的任何责任由他们承担。
算法交易的增长和未来
原文:https://blog.quantinsti.com/growth-future-algorithmic-trading/
回顾原始时代,当火是人类最伟大的成就时,谁能在他们最疯狂的梦想中想到我们人类今天所取得的成就?
我经常惊讶于从公元前 300 年的基本欧几里得算法到现代算法的奇妙交易之旅。看看信息在地球上传播的速度。
今天,算法交易是近年来谈论最多的技术之一。它通过消除人为错误和改变当今金融市场的互联方式,赋予了交易公司在快速发展的市场中更大的权力。它的使用归功于大多数市场,甚至归功于商品交易,如图所示:

我们很想知道与这个问题有关的许多其他因素。我们想知道算法交易的未来会是什么样子。
我们渴望学习交易的秘密,它会为我们举行。
这正是我们在这篇博客中所探索的。
为什么要选择算法交易?
过去几年,算法交易无可挑剔地崛起。一些表现最好的对冲基金将其成功归功于此。算法交易没有人类的情感,没有延迟,以技术为导向,快节奏,即时准确地执行交易指令。
目前,交易发生在微秒到纳秒的范围内,仅一毫秒就占了市场交易每年数百万的收入。除了易用性、定制化等,匿名性、成本和速度是算法交易的许多理想品质中的几个。

随着交易领域的地理位置加速变得无关紧要,全球任何市场上发生的事件几乎同时发生,并产生积极影响。
随着进化而进化才公平。
谁在赶时髦?
- 主要贸易公司
- 经纪商
- 零售商
- 高水平投资的跨国投资银行
这已经对所有领域产生了多米诺骨牌效应,因为这些方面是相互关联的,并对彼此的机会、发展和进步产生了显著的影响。

图表 1 和 2——资料来源:莫顿·格兰茨、罗伯特·基塞尔;图表 3 -资料来源:汤森路透
随着许多国家的大多数交易在算法交易的基础上实现自动化和可靠性,它极大地改变了交易场景。这无疑给了我们更多开始使用它的理由。
令人惊讶的是印度正在迎来一场经济和技术革命,这场革命将彻底改变数字世界!

更快的速度意味着快速高效的警戒、监控、安全和强健的架构。编程和构建系统的知识,谨慎的使用和彻底的测试将帮助分析交易者以万无一失的方式实施正确的策略。即使该系统变得自力更生,也需要通过不断的评估来检查其进展和功能,这将带来具有多种特征的不断增长的职业机会。
定量研究分析师、衍生品交易员、商业分析师、顾问、定量分析师、策略分析师的工作岗位将出现在衍生品、交易、电子做市和风险管理领域。
算法交易的法规
法规管理并致力于消除对特定市场的任何威胁。但在这样做的时候,它不得不经常扼杀创新,并保持检查到位,以避免不当行为或滥用。至关重要的是,监管机构应精通算法的操作,并具有灵活性,能够在需要时参与新的立法。
最近,欧洲的立法鼓励自动化,许多监管方面的改进和变化都支持算法交易和高频交易(HFT) ,因为它带来了透明度和问责制。这为其成长和扩散铺平了道路。
面临的挑战主要是在已经支离破碎的市场中风险评估能力和运营效率不足。
机器学习和算法交易
机器学习通过提供强大的工具从全球各地处理的数据中提取模式,在算法的基础上增加了一层智能,使技术有机会实时研究它。智能机器很可能会引领整个交易革命,因为它的发展和更新的技术正日益占据主导地位,例如:
- 量子计算
- 加密货币
- 区块链技术
- 云计算
- 金融科技
- 大数据
- 物联网 IoT 等。
机器学习与以下技术的结合可以创造奇迹:
- 纳米技术在贸易中的应用
- 允许 HFT 在 74 纳秒内执行的定制芯片可能会进一步发展,以吸引价值数百万的投资
- 超高速微波传输技术,以光速传输数据
- 使用加密货币提供服务的公司数量可能会增加
- 诸如将延迟进一步降低到 20 纳秒以下等成就。
人工智能和算法交易
人工智能可能能够在没有任何影响的情况下进行交易,因为它将推动交易策略的改进。

未来的交易系统
未来的系统可以研究我们在整个交易历史过程中存档的所有历史数据,轻松地分析这些数据,找出趋势,什么可行,什么不可行。它还可以教会自己轻松预测未来市场,同时交易多个账户和策略以分散风险,并拒绝或接受实时出价和报价。
如果市场不喜欢你的交易策略规则,系统的自学习算法会根据不同的模式调整交易,并改变规则以适应市场条件。
它可以同时检查全球多个市场状况,节省大量时间,并消除任何微小的时间差距或发生错误的可能性。
随着交易变得有意识并意识到买/卖出错的影响,或者市场波动在交易所下降并在没有任何人为干预的情况下迎接挑战以从中恢复,市场崩溃可能会成为过去。因此,我们可以期待消除某些差异,如闪存崩溃。
算法可以直接编程到芯片中,以提高效率和简化通信。特定的全局调节和断路开关也可以被编程。
想象一下一个如此强大的系统,它具有大数据和连接的广阔范围,如物联网的快速互联网速度和千兆次浮点运算处理能力,整合了结构化和非结构化数据,利用实时全球新闻,在一个算法引擎中包含实时社交媒体和全球当前和历史股票数据。
现在这将是一件大事。
额外内容
以下是我们在算法交易的提问环节中遇到的一些最常见的问题。
问:如果我有一个显示真实的回溯测试和前向测试结果的程序,我将来应该如何处理它以保持它在市场上持续盈利?
回复:一种策略的持续盈利可能是一件困难的事情,不会发生你有一种策略却一直从中赚钱的情况。这是我们的参与者问得最多的问题之一。你需要把它看做一门生意,交易是一门严肃的生意,它不仅仅是买卖,尽管那是你最终要做的事情,最终它是关于生意的。任何业务都是关于你保持的利润和你获得的竞争优势,如果你有一个交易策略,你认为它会继续为你赚钱,它可能不会这样工作。
拥有竞争优势很重要,交易策略也是如此,你需要不断调整它,因为市场会不断变化,更重要的是市场微观结构会不断变化。最好是不断改进你的策略,基本上每天你都要向前迈一步,因为你不能静止不动,希望走完全程。
问题:algo 交易在加密货币热潮中的作用是什么?
回复:没什么大不了的,很不一样的球类运动。很少有来自世界各地的国际 EPAT 参与者一直致力于加密货币相关项目,并且还创建了使用自动化工具进行加密货币交易的系统,因为一些加密货币交易所确实提供了超额 API。这是有的,但我不认为算法交易有任何作用。这肯定不是因为人们使用算法来购买加密货币,而是因为人们试图以任何可能的方式进行投资,是的,波动性非常不同。所以再次回答这个问题,我不认为算法交易目前在加密货币领域有任何作用。
问题:人工智能算法会改变 algo 交易的未来吗?
回复:除了大机构之外,它肯定会给个人和散户交易者很多权力,因为有了人工智能和人工智能,不仅仅是执行速度的问题。为了更快地执行,你需要高端的基础设施,这对于许多交易者来说不成问题。但是,许多分析可以在云上完成,如果你不得不拥有物理基础设施,那么与物理基础设施相比,云已经变得便宜得多,这就是你训练算法所需要的。在 ML 和 AI 中有许多算法,如强化、监督等。因此,所有这些算法对于零售商来说都是可用的和可获得的,具有高计算能力和可承受的成本。这将改变算法交易的发展方式,算法交易将在未来完成所有交易,我们预计散户的参与将超过高频交易或少数大型机构。
从无人驾驶汽车到送餐无人机,自动化是前进的方向,金融业不能被排除在外。因此,越来越多的自动化和工具将不断出现,因为人们越来越意识到并学习所有这些东西,将会有更好的工具以更好的价格为他们提供,不仅是对大型机构,对零售也是如此。
下一步是什么?
我们都熟悉算法交易的历史和算法交易的演变,我们大多数人都亲眼目睹了这些变化,或者参与了这些永远改变了世界的非凡时刻。但在这个过程中,这些时刻改变了人们的生活,将底层经济推向顶层,并将一个拥有算法交易知识的普通人与业内一些最优秀的人相提并论。
未来的交易将基于许多我们无法想象的新技术。绝对值得等待,看看我们在未来的交易中处于什么位置。
未来就是算法。交易进化的下一步是算法。这是巨大的。
谁不想成为这个奇妙旅程的一部分呢!你也可以 从基本概念 开始,比如自动交易架构、市场微观结构、策略回溯测试系统和订单管理系统,然后铺好自己的路。
如果你想学习算法交易的各个方面,那么你需要参加由 QuantInsti 提供的最全面的算法交易课程 EPAT,该课程为你提供成为成功交易者所需的技能。
免责声明:本文 中提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。
印度 FIX 大会特邀演讲人
原文:https://blog.quantinsti.com/guest-speaker-at-fix-conference-india/
QuantInsti 董事兼教员 Suneeth Reddy 先生是 2013 年 3 月 5 日在印度孟买国际贸易中心中央广场举行的印度 FIX 会议的 HFT 小组讨论会的发言人之一。
该会议不仅涵盖了印度机构交易/HFT 社区面临的最紧迫的问题,还推动了行业行动和对话,以帮助解决行业挑战。与会代表对此次活动的参与人数之多、发言者之多以及会议方案的设计感到惊讶。
关于 FIX(金融信息交换协议)
FIX 是行业驱动的消息标准,它正在改变全球金融服务行业的面貌,因为公司使用该协议以电子、透明、经济高效和及时的方式进行交易。FIX 是开放免费的,但不是软件。更确切地说,FIX 是一种规范,软件开发人员可以根据自己的意愿围绕它创建商业或开源软件。作为市场领先的交易通信协议,FIX 是许多订单管理和交易系统不可或缺的一部分。然而,它的力量并不引人注目,因为这些系统的用户可以从 FIX 中受益,而无需了解该语言本身。
点击此处阅读更多。
在我们的 YouTube 频道上可以看到会议的一些录像片段。
吉他手、企业家,现在是算法交易员| Akshat 的故事
原文:https://blog.quantinsti.com/guitarist-entrepreneur-algo-trader-epat-success-story-akshat-rohatgi/
“对知识的投资回报最大”——本杰明·富兰克林
你知道吗,音乐、交易和算法可以是完美的结合。
作为一名经济学毕业生,一名首席吉他手,现在是 EPAT 认证的 Algo 交易者,我们向您介绍优秀证书持有人,EPATian,Akshat Rohatgi。
Akshat 是名为“FinZ Capital”的联合创始人,拥有多项证书和执照,例如世界上最年轻的 CFTe 特许持有人、特许市场技术员(CMT 一级、二级和三级)、CAIAA、CAIAA Gateway 学者、经济学(荣誉)、交易员、认证另类投资经理(CAIM)以及最后但并非最不重要的跆拳道国家银牌获得者。
他在这里分享他在算法交易世界的旅程中学到的东西。这是他的成功故事!
嗨 Akshat,告诉我们关于你自己的情况!
你好!我是 Akshat Rohatgi,目前在德里。我在德里大学完成了学士学位。我是一名金融科技爱好者,也是一家名为“FinZ Capital”的公司的联合创始人。
目前,我一直在寻找量化交易领域的各种机会。我试图提升自己的技能,用量化交易中最重要的技能之一,那就是编码。在几个月前完成 EPAT 项目后,我开始学习 C++和 Python。
我喜欢旅行和探索未知的地方。我参观了拉达克和喜马偕尔的几个地方。在过去的两三年里,骑自行车也是我的爱好之一。
在过去的 10 年里,我一直是一个名为 Elexron 的乐队的首席吉他手。我们开始是一个当地的乐队,后来在 IIT 著名的场地演出,并赢得了 IIT 巴特那比赛。我既专注于我的学业,又享受着我生命中的时光。
音乐是我七年级时开始的爱好。它变成了一种激情,然后变成了一项职业,持续了大约 2 年。由于我来自一个小城市,没有太多的机会或专业人士可以教我发展所需的技能。
然而,在音乐领域,你可以获得某些证书,比如文凭。我在伦敦三一学院攻读我的学位。在新冠肺炎期间,没有太多的机会,所以我想在这方面提升自己,并参加了这些认证。
你是如何从艺术领域转向算法交易的?
我一生中最大的灵感来自我的祖父。我一直想进入金融或商业领域,因为我的祖父是成本和管理会计师,也是印度审计和会计服务官员。他也是印度石油公司的财务总监。我从他那里学到了炒股的知识。
我更倾向于经济学,理解宏观经济学的巨大概念。然后我在德里大学攻读经济学学士学位。
由于新冠肺炎,我通过在线讲座完成了我的学士学位。因此,我花时间学习了许多补充数据的宏观经济学和数学课程。由于金融是数据驱动的,所以你需要了解 R 编程语言和数据分析之类的东西。
为了熟悉金融的各个方面和组成部分,我参加了许多研讨会,并学习了 Python、R 以及 CMT、CFTe 和 CAIA 等课程。
我看了很多关于金融的博客和书籍。我偶然看到一本塞巴斯蒂安·马拉比写的书,书名是《比上帝更有钱》。它是关于另类投资和对冲基金的。
翻了一遍,我找到了一个叫 CAIA(特许另类投资分析师)的认证。它基本上是另类投资或对冲基金的 CFA。我发现这很有意思,于是继续努力,并在 2021 年通过了第一关,并参加了第二关的考试。
学习所有这些课程让我熟悉了对冲基金的概念,它们是如何运作的,以及它们是如何转向更数据驱动的技术的。这让我开始研究如何在量化交易和算法交易中提升自己的技能。
在我的研究中,我遇到了一些课程,其中之一是 EPAT。我通读了这些评论,它们给了我很大的激励。原因是 EPAT 有非常有经验的教职员工,该学院有超过 12 年的声誉,我在他们的网站上读到了一些成功的故事。这就是我如何进入 EPAT 和量化交易。
作为一名学生,你是如何学习算法交易的?
2019 年开始交易,本科第 1 年。我的好奇心促使我参加了一个技术分析课程,教授实时技术分析以及如何应用它。
按照这个课程,我在 2019 年 10 月开始交易,一个月内赚了 10%。从那以后,我成为了一名交易者。
当时我很年轻,是个交易新手。我以前只看烛台模式,但我的交易风格随着时间的推移而演变。我仍然是一个全权交易者,我用数据来支持我的全权决定,并回测我做出的所有假设。
我不太精通 Python,有时会卡住。我尝试在回溯测试的帮助下完善我的策略。所以,我仍然使用我的判断力,我仍然手动交易。没有太多的自动化,或任何高频交易,因为我是一个散户,还在学习。
我相信自从我经历了 EPAT,我的决定已经有了很大的改善。我能够对 Nitesh 教给我们的所有想法进行回溯测试。我使用了我在 EPAT 学到的那些额外的技巧。我也用一点 Python。目前,我在交易股票和指数期货,但所有这些交易都是手动的。
算法交易占美国算法交易所有订单或交易量的 70%。而且在未来,所有的决定肯定都是自动的。
但我也理解人类在交易自动化中扮演的重要角色。人们必须创建这些算法,并构建一个算法将起作用的假设。所以我把这两件事平行看待。
我意识到我需要学习的东西。我想拥有:
- 金融知识,
- 宏观经济学,
- 地缘政治-地缘政治如何影响微观经济,
- 编码的知识和技能,
- 得出数据驱动决策的技能。
这是学习算法交易的主要原因。
在注册 EPAT 之前,我参加了 Quantra 提供的一些免费课程,只是想了解一下会教些什么。我也阅读了一些博客和成功的故事。我就是这样进入 EPAT 的,这段旅程很棒。
我是通过自己的研究来了解 EPAT 的,我也和一些以巴提人交谈过。我在 LinkedIn 上联系了他们,他们中的一些人是 CMT 特许持有者。我只是和他们简单谈了一下,只有正面的评价。我还想说,对学生来说,EPAT 是一个经济的选择,因为他们可以得到“学生折扣”。
如果你想获得一门真正帮助你实际学习自动化交易并成为一名成功的 algo 交易者的课程,EPAT 是最物有所值的选择之一。只要相信自己,实践一切。
你在 EPAT 的经历是怎样的?
这种体验非常棒。从教职员工开始,E. P. Chan 博士的讲座非常精彩。他的讲座超出了我们的预期。课程进度很快,我们都面临同样的挑战。
课程是在周末,我们被分配了许多任务,总是让我们保持警觉。EPAT 的前几周是理论性的,然后它采取非线性方法上涨。你会获得很多关于领域、编码、市场微观结构、NLP、机器学习等等的新信息。
当然,在最初的两个月之后,一切都会开放。这是真正的挑战开始的时候,也是让你全神贯注于课程的关键。
我对市场微观结构和机器学习感兴趣。由于我有经济学背景,我在统计学和计量经济学方面有坚实的基础。但即使我不是来自技术背景,我也意识到这些统计学和计量经济学技术是机器学习的基础。因此,我总是期待着机器学习讲座。
编码最初很有挑战性,但现在我使用机器学习算法进行交易。
在追求学业的同时学习算法交易有挑战性吗?
我学习 EPAT 更多的是出于需要,而不是挑战。我的其他证书,比如 CFTe 和 CAIA,基本上都是理论性的。教授的模型可以被应用,但是我们没有被教授这样做的基本方法。相比之下,他们不像 EPAT 那样实际。
无论在 EPAT 教了什么,假设、框架或理论概念、训练策略和编码在实际意义上都是非常有益的。这让我们更容易理解如何在现实世界中使用这些理论。
我以前的学位都是理论性的,所以我不得不自学很多实际应用。我在学士学位学的编码和 EPAT 没有可比性。在我看来,EPAT 和其他认证最显著的区别是它的实用性。对于贸易或金融领域的任何职位,你都必须具备实用知识和编码技能。EPAT 特别在这两方面帮助你。
有时候管理我的时间很有挑战性。然而,在过去的三年里,我所取得的成绩比我预想的要好。管理我的时间有时非常困难,因为我偶尔会在特许考试中落后于时间表,同时因为新概念的引入,EPAT 讲座变得越来越难。
校友小组、安置小组、讲座期间与依帕坦人的互动、教员和整个体验共同创造了一个奇妙的组合。我认为它是物有所值的。然而,实践教学是最好的部分,因为它涉及算法交易的实践经验。
你未来的计划是什么?
我当时在创业,FinZ Capital。我们正在开发一篮子股票,可以根据定量和统计参数定期进行再平衡。然而,我们无法产生预期的结果。所以我现在正集中精力攻读硕士学位和一些金融课程。
我未来 10 年的长期目标包括推出自己的量化或数据驱动型对冲基金。我不会把它局限于对冲基金,而是一家在 10 年内投资于多个资产类别的资产管理公司。
我也想在各种金融领域获得经验,比如一些好的投资银行、对冲基金或私募股权基金。因此,我可以获得多种多样的经验。
你对那些希望以算法交易为职业的学生有什么话要说?
这个领域竞争激烈。所以你必须时刻保持警惕,提升自己的技能。如果你想进入 HFT,那么你需要非常精通 C++,因为这一切都是为了最大限度地减少执行时间。
如果你想进入中频或低频交易公司,或量化或数据驱动的对冲基金,那么,你肯定应该对 Python 有很好的实践经验。因为编码语言在那里是非常必要的。
万一你陷入困境,你也应该有一个非常符合逻辑或良好的推理方法。不熟悉统计或数学的人可能会发现很难进入 Algo 交易。
但是,这是可以学习的。如果你有兴趣并愿意在这个领域努力,你可以在 EPAT 的帮助下创造奇迹。尽你最大的努力学习所教的一切,并完成你的作业。此外,由于教授的许多主题都相当复杂,所以请自行研究。
最终重要的是你对量化交易还是高频交易充满热情。因为这两个是技术性的,有竞争力的,才能长久。
最后,由于我是技术分析的长期从业者,我想建议,即使在获得了非常数据驱动的优势后,你也应该学习历史。因为市场上有句话叫“历史不会重演,但确有韵律”。
你可以通过研究任何类型的历史来预测未来的价格或事件,无论是宏观经济事件、技术分析还是图表。它有很多潜在的好处。
这是一个很好的建议,Akshat。学习是一切的关键。谢谢你分享你旅程的细节和你经历中的教训。我们相信你的故事不仅会激励学生,也会激励有抱负的专业交易者。
我们祝愿你在未来的努力中取得成功。我们有信心,你一定可以很快实现自己的梦想,开办一家高频交易公司。
这个算法交易课程是开始你的职业生涯和发展成为算法交易者的技能的绝佳方式。它涵盖了统计学&计量经济学、金融计算&技术和机器学习等主题。它通过 EPAT 项目提供难以置信的指导,为你的交易生涯做准备。
免责声明:为了帮助那些正在考虑从事算法和量化交易的人,这个成功的故事是根据 QuantInsti EPAT 项目的学生或校友的个人经历整理的。成功案例仅用于说明目的,不用于投资目的。EPAT 方案完成后取得的成果对所有人来说可能不尽相同。T3】
“Wannacry”的黑客需要比特币,作为一名交易者,你为什么要在乎?
原文:https://blog.quantinsti.com/hackers-wannacry-ransom-ware-demand-bitcoins-trader-care/
Sushant Ratnaparkhi
一种名为“Wannacry”、“Wcry”或“WNCRY”的勒索软件成为头条新闻已经有一段时间了。如果你的电脑只显示这个窗口,那你就有麻烦了。

175 个国家【1】超过 20 万台电脑被 Wannacry 感染。这种恶意软件像猫追狗视频一样传播开来。
什么是勒索软件?
这是一个恶意软件,由一群不怀好意的人编写的一段代码,它未经你的同意就控制了你的电脑(当然!),然后它会加密您的所有数据并将其锁定。被锁定的数据只能通过这些黑客拥有的密钥来访问,所以如果你想拿回你的数据,你必须付钱给他们。赎金不是什么新鲜事,宝莱坞的恶棍们早就这么做了,只是这次是你的数据,而不是女儿。
然而,这里要注意的有趣的事情是,这种勒索软件不需要用户采取任何行动来激活自己并在网络上传播。用户操作类似于下载附件、安装未知或盗版软件,或者访问可疑网站——这就是传统黑客利用愚蠢人类的方式。“Wannacry”黑客之所以能够做到这一点,是因为 Windows 7(尤其是 x64)【2】操作系统中的一个漏洞。这个漏洞是由美国国家安全局发现的,但没有报告给微软(原因很明显),但最终它被泄露出去,黑客利用了这一点。
有趣的东西,但这不是我们想要关注的部分。我们的重点是这个勒索软件的支付部分——比特币。黑客只接受比特币支付,但为什么呢?作为交易者,它对你有什么用?这将是一个很长的帖子,所以你为什么不发消息给你的妻子,说你会晚一点吃晚饭。开始了,
什么是比特币?
比特币是第一种去中心化的加密货币,这意味着一个政府或组织无法控制或监管它,相反比特币货币由公众管理。
简单地说,比特币只是一个在线钱包中的一个数字(就像常旅客里程一样),这个钱包有一个与之相关的价值(在撰写本文时,1 比特币= 2550 美元),比特币可以交易到其他免费获得的比特币钱包。以下是比特币钱包的样子:

这些交易被记录在一个叫做区块链的在线分类账中。区块链是一系列块,每个块包含几个公开的交易数据。
现在,这是最好的部分,而不是有一个簿记员维护分类账薄并为所有人确认交易(其他所有金融机构都是如此),在比特币中,有超过 15 万个簿记员,他们每个人都保留一份更新的分类账副本。拥有如此多的簿记员是比特币如此特殊的原因,一旦系统识别出一个有效的区块,它就会在所有簿记员的位置进行更新。所以没人能篡改账本数据。这就是所谓的“分布式分类账”。该分类账提供了在任何给定时间点谁拥有什么的数据。
这里的簿记员被称为矿工,顾名思义,他们通过基于现有最新块的输入来解决数学散列来挖掘块。这些矿工拥有超级怪异但功能强大的计算机,设计为每分钟进行数万亿次哈希计算,因为数学计算非常困难,这是有原因的。由于有这么多的簿记员,区块链需要有一个机制,将确保记录保存在一个有组织的方式,每个人都有相同的更新副本的分类账。因此,通过让这些矿工进行如此繁重的数学运算,第一个得到正确结果的人可以宣布他的区块为正式区块,也是链中的最新区块(当然是在确保他的区块中有所有有效交易之后)。通过这种方式,矿工们必须努力工作才能将他们的区块开采到区块链。
但是为什么任何一个头脑正常的人会想成为一名矿工呢?因为无论哪个矿工首先解决了新区块的正确计算,都会因为添加该区块而获得 12.5 比特币(31875 美元)(之前更高)的奖励;这基本上是说,成功的矿工已经帮助社区维护和增长账本(区块链),所以这是你的奖励(现在就去买柠檬汽水)。一旦创建了一个新块,每个人都会更新他们的区块链,并根据新创建块的输入开始解决下一个块。如今,创建一个区块所需的平均时间约为 10 分钟(比当前银行为海外交易等待数天的结算时间要快得多)。

这是一个街区的样子,忽略广告。

一个区块一旦正式,就是永久的;没有人可以对其进行任何更改(即使是创建该块的人也不行),因此消除了“伪造账簿”的任何可能性。您可以在此处查看此区块下每笔交易(632)的详细信息;参见下面的示例

各个领域的人已经开始探索区块链的其他应用。将信息分发给公众,同时维护实际细节的隐私,可以帮助许多其他企业的土地记录,点对点应用程序,如汽车租赁等。帮助解决管理不善或记录不良的数据库问题。你可以在这里阅读更多关于区块链的应用。
比特币的开发者将可流通的比特币数量限制在 2100 万个,目前有 1630 万个比特币在流通。这是为什么呢?因为没有人(即使是比特币的创造者)能够通过在任何时间点向市场注入更多货币来影响货币价值。新的比特币是通过挖掘过程引入的,一旦总发行量达到 2100 万,就会停止流通。之后,矿商可以通过向客户收取象征性的交易费来赚钱,目前每笔交易收取 0.0001 比特币,这取决于交易所。
截至 2017 年 5 月 26 日的比特币企业快照!

我希望这已经让你对比特币是什么以及它是如何运作的有了一个基本的概念。如果你还有更多问题,可以在下面的评论区问我,或者看看这个 FAQ列表。
黑客为什么爱比特币?
匿名!即使所有的交易都是公开的,你也看不到任何一个地址的主人的详细信息(即使是提供钱包服务的公司)。在传统银行中,找出黑客将钱转移到哪里是可能的(无论多么困难),这里的就是以前勒索软件黑客被关闭的一个例子。现在,让我们来看看是什么让比特币成为一种伟大的交易工具。
为什么比特币是更好的交易工具?
(I)没有人能够操纵这种货币
没错!与政府发行的可以随意膨胀的货币不同,比特币的供应量在数学上被限制在 2100 万个比特币,这一点永远不会改变。唯一定义比特币价值的是它的需求(而不是供给)。鉴于供应有限的事实,我个人认为比特币的价值只会在未来升值。
(二)比特币不可能伪造或膨胀
与纸币不同,比特币是不可伪造的。这是因为区块链,区块链知道哪个比特币属于哪个账户,这些数据是公开的,所以即使你试图向区块链提交伪造的交易,它也会拒绝你的阻止。然而,比特币可能会被盗,前提是你对自己的私钥不小心。如果有人获得了你的私钥,然后把你的比特币转到他/她的钱包里,你就完了;即使你证明这是一次抢劫,没有人可以回去取消交易,因为区块链不能被任何人编辑。
(iii)您可以使用它们在世界任何地方以极低的成本向任何人发送或接收任何金额的资金。
这使得比特币成为一种有利可图的吸引力,并保证人们将继续使用比特币进行交易,除非有类似的更好的选择。在比特币中,支付是不可能被屏蔽的,比特币钱包也不可能被冻结。除了关闭整个世界的互联网,并保持关闭,比特币网络是不可阻挡和不受审查的。
所有这些原因使得比特币成为投资的理想案例。
如何交易比特币?
由于没有权威机构可以控制比特币,所以像利率、通货膨胀、货币注入这样的事情不会影响比特币的价值。会影响的只是供给和需求,但既然比特币的供给也是预定义的,留给我们的也只是需求。有几个因素会影响比特币的需求。
这些是需求可能上升或下降的一些情况。
㈠受欢迎程度
比特币每一次人气暴涨都会升值,鉴于比特币是新生事物,概念略显复杂,人们对其存在误解,往往会产生疑虑。但随着他们理解比特币的根本差异和价值主张,需求将会激增。
㈡竞争
如果可能的话,会有另一种加密货币出现,它将提供比比特币更好的功能,并可能被更广泛地接受。在这种情况下,对比特币的需求将随着其价值下降。
㈢政府干预
各国政府确实可以选择在各自国家禁止比特币。例如,中国央行在 2013 年 12 月禁止金融公司交易比特币【4】这一消息发布后,比特币的价值下跌。鉴于我们的政府变得如此不安全,我们可以预期未来会有类似的事件发生。但从长远来看,价值只会升值。
㈣网络攻击
2014 年 2 月,一群黑客在一家主要的比特币交易所发起了 DDoS 攻击【5】,导致比特币交易暂时停止。消息传出后,比特币的价值开始下跌,接下来的几天价格下跌超过 10%。然而,这是在 2014 年,现在交易所的数量已经增加,这降低了此类攻击的脆弱性。
这张图表显示了比特币自诞生以来的美元价值。【6】

在写这篇文章的时候,比特币对美元的价值是最高的,每比特币 2550 美元。我还想让你看看 2009 年以来关于比特币兴趣的谷歌趋势报告。人们谈论比特币和它的价值有直接的关联。

只要没有负面消息,受欢迎程度可以成为预测比特币需求的一个简单指标。如果这个图表稳步上升,我们可以预计比特币的需求和价值也会上升。
注意事项
比特币是一种非常不稳定的交易工具,专家经常建议远离短期交易,因为它很容易引发保证金追缴。然而,如果你保持长期的投资眼光,你可以期待好的回报。
在我看来,加密货币是未来,无论是比特币还是其他东西。当然,没有人喜欢失去对事物的控制,尤其是政府,对于像货币这样有价值的东西也是如此。政府试图收回控制权的情况会很糟糕,但从长远来看,分散化的货币将给我们的金融体系和生活带来很多改善。
量化交易实践介绍[网上研讨会]
原文:https://blog.quantinsti.com/hands-on-introduction-quantitative-trading-webinar-18-february-2022/
https://www.youtube.com/embed/xl8TNhsBG0o?rel=0
演示幻灯片
//www.slideshare.net/slideshow/embed_code/key/BiLAbuJv0ShzT9
Introduction to Quantitative Trading - Investment Management Club of Yale University and QuantInsti from QuantInsti
关于会议
这是一个 60 分钟的会议,向你介绍量化交易的世界。它涵盖了量化交易的组成部分,并以循序渐进的方式用代码示例解释了创建量化交易算法的过程。除此之外,本课程还包括量化交易算法的评估,以及使用 Blueshift 实时部署这些算法。
会话大纲
- 什么是量化交易?
- 如何创建量化交易策略?
- 量化交易系统的完整流程
- 带代码的量化交易策略示例
- 使用蓝移进行量化策略的回溯测试和部署
- 互动问答
先决条件和学习材料链接
- 完成免费自学课程: Python for Trading - Basic
- QuantInsti 在 Blueshift 上注册
- 建议阅读:算法交易——一个粗略的现成指南
扬声器

varun Kumar pot hula(quantin STI 的定量分析师)
Varun 拥有金融工程硕士学位。他拥有交易员、全球宏观分析师和 algo 交易策略师的工作经验。目前,作为一名量化分析师,他在 QuantInsti 的内容和研究团队工作,他的贡献有助于为算法和量化交易领域的学习者提供服务。
本次活动于:
2022 年 2 月 18 日星期五
美国东部时间上午 10:00 | IST 时间晚上 8:30 |太平洋时间上午 7:00
头肩底图案
In this post, we will review the well-known technical analysis pattern called Head and Shoulders and we will analyze the trading rules that will allow us to take advantage of this price configuration to take a position in the market.
Candlestick patterns are one way to interpret the price trend of a particular asset.
The main points we will review in this post are:
The Head and Shoulders pattern is one of the best-known patterns in technical analysis. It’s a complex and subjective pattern formed on market top or bottom.
The formation is considered a trend reversal pattern because, after an uptrend/downtrend, the price begins to get congested and ends up turning around.
People all over the world know and pay attention to this price formation and there are many attempts to systematize the detection and exploitation of this figure - the Head and Shoulders pattern in Trading.We are going to describe here the Head and Shoulders Top pattern, the bottom pattern must be considered a mirror of this and inverting the criteria too.
The formation of a Top Head and Shoulders pattern is a price configuration that requires a rising trend.
- 最初,像上升趋势中的任何其他峰一样,形成了一个峰,
- 形成比第一峰值高的第二峰值,
- 形成低于第二峰值的第三峰值。
The first and third peaks are shoulders and the second peak, the highest, is the head.Let's see step by step how the head and shoulders pattern is formed. Here we can see the iShares Silver Trust (SLV) chart.
第一步
Initially, we have an uptrend, at this moment it’s not possible to distinguish or even intuit the pattern we are looking for. At the moment we only have a rising trend. In the below picture, we can see a new recent peak with retracement. 
第二步
In the second step, the price makes a new peak higher than the previous one and again with retracement that penetrates the ground of the previous peak or support level. This is interesting, as if the retracement were greater than the first peak, we would still consider it a rising trend.
Anyway, we can only observe that the rising trend is in doubt, although we can not assume that the figure of head and shoulders is forming, we can draw a support line between the two bottoms. 
第三步
In the last step, a third peak is formed, smaller than the previous one, this one can surpass the first peak or not and also has retracement. Finally, we can distinguish a possible figure of head and shoulders, although it is not complete until the retracement of the third peak, breaks the support line that we had drawn that, now, we can call it neckline.
It is necessary to wait for the pattern to be completed with the neckline breakout because sometimes the price remains to consolidate for a while or continues its course upwards.
If the price breaks the neckline, we can estimate a price target for a short position; the target is estimated by measuring the height from the neckline to the peak of the head and projected from the break point down. This objective should be considered an estimate and is very useful for calculating the hypothetical risk/benefit of operation with this figure. 
Sometimes a pullback to the neckline occurs offering new opportunities for short selling and a stop-loss can be placed above the neckline.The volume is an aspect to take into account although it is not determinant.
- 在第一个高峰期,交易量很高,这通常与上涨趋势相对应。
- 在第二个高峰,即头部,交易量通常低于第一个,这是一个明确的指标,表明新的高峰没有得到许多购买的支持,至少没有第一个高峰那么多。最后,
- 在第三个峰值中,交易量低于第二个峰值,再次表明价格没有能够克服前一个峰值,交易量也没有强大到足以让价格继续上涨。
- 在突破中,成交量通常会再次增长,尽管这不是必要条件,但却是一个好信号。
Below we can see the complete figure with the annotations that reflect the described steps. 
It can be clearly seen how the first peak (the right shoulder) is formed from the end of December 2018 until the middle of January 2019 approximately.
Then the head begins to form to its maximum just at the beginning of February, to begin to fall and form the second bottom in mid-February.
At this point, a hypothetical neckline could be drawn as a support line, which would only be confirmed if the third shoulder is formed.
Finally, from February 15 to the end of February the second shoulder is formed and we can confirm the neckline, when the breakout occurs, we can take short positions with a price objective equal to the height that goes from the base to the peak of the head.
It is also interesting to note the volume, which in the first shoulder is greater than the volume that occurs in the head and the third shoulder, then shoot in the breakout.This price formation has a good success rate according to Bulkowski studies, the pattern is completed when the bottom of the third peak crosses the neckline. It’s common for the price to present a pullback and offer a second opportunity to trade the formation.
The target for the take-profit can be estimated by measuring the vertical from the neckline to the peak of the head. This distance is projected from the breakout point and marks a fairly approximate target price.
It is usual to adjust a stop-loss above the neckline and if the price exceeds the second shoulder (third peak) it is worth taking upward positions.The Head and Shoulders formation is a very subjective figure and therefore it’s difficult to characterize mathematically, which would give us the possibility of systematizing operations when this price configuration occurs.
Even so, there is no doubt that there are many eyes on this configuration and many traders eager to see the figure completed.
Bulkowski has statistically characterized the behaviour of the figure, but it is under his expert judgment that determines whether or not the Head and Shoulders pattern exists, that is to say, it is a subjective interpretation.There have been numerous other attempts to mathematically characterize the figure and therefore systematically check the ability of the figure to generate positive returns.
The most notable examples are:
- 技术分析的基础:计算算法、统计推断和实证实施由安德鲁·w·罗、哈里·马迈斯基和王江进行的研究,他们使用了核回归估计器,以及
- 由 Terence Tai Leung Chong 和 Ka-Ho Poon 研究的一种新的“海飞丝”价格模式识别算法对之前的算法进行了改进,使用噪声过滤器来提高准确性。
These studies still need to geometrically characterize the figure, and this is the biggest problem.
On the other hand, Shengnan Li’s Searching for Head and Shoulders Bottom Patterns under Directional Changes study uses the Directional Changes technique to determine the price configuration. Yet, it also faces the problem of geometric characterization of the figure.
Discovering patterns in price in a systematic way for Head and Shoulders configuration or other patterns of technical analysis remains a relevant study area where Machine Learning and Digital Signal Processing (DSP) techniques probably offer the most promising techniques.The Head and Shoulders pattern is a widely known pattern and deserves the attention of numerous traders around the world. Like all price configurations, they are difficult to characterize and therefore systematically exploit.
A source of information to take into account for the technical analysis patterns is the library of patterns of Bulkowski, who defines them strictly and has characterized them statistically.
In order to systematize the exploitation of technical price configurations, there are numerous studies and it is an open research field, the mentioned studies must be taken into account.
Apart from understanding patterns to make effective decisions, you can build indicators to perform a better analysis of the trends in the market which will only help in making you a better trader.
You can learn to use 15+ trading strategies including Statistical Arbitrage, Machine Learning, Quantitative techniques, and Options pricing models and more. This learning track is perfect for traders and quants who want to learn and use Python in trading.
References
- 技术分析:金融市场技术人员的完整资源。
- 托马斯·n·布尔考斯基的模式网站。
Disclaimer: All investments and trading in the stock market involve risk. Any decisions to place trades in the financial markets, including trading in stock or options or other financial instruments is a personal decision that should only be made after thorough research, including a personal risk and financial assessment and the engagement of professional assistance to the extent you believe necessary. The trading strategies or related information mentioned in this article is for informational purposes only.
如何在对冲基金找到工作?
对于几个极度倾向于金融市场的人来说,在对冲基金找到一份工作一直是他们的梦想。这些人每天都在关注金融市场。在本文中,我们将从求职者的角度讨论对冲基金的这一角色。
本文涵盖:
- 什么是对冲基金?
- 对冲基金的工作类型
- 教育要求和所需技能
- 在对冲基金开始职业生涯的更多技巧/方法
- 利弊
- 顶级对冲基金名单
什么是对冲基金?
对冲基金是一种投资基金,它利用投资者汇集或积累的财富。对冲基金的主要目标是实施这样的交易策略,帮助所有投资者尽快获得最大收益。因此,他们关注短期收益。此外,他们利用借来的或杠杆资金来达到最大化投资者回报的目的。虽然,由于杠杆基金涉及的风险,美国和欧洲的对冲基金在 2007-08 年的金融危机后受到监管,危机的主要原因是银行和金融机构的债务增加。
接下来,我们将看到对冲基金的工作类型。
对冲基金的工作类型
作为对冲基金专业人士,你有各种各样的工作机会可供选择。让我们简单了解一下对冲基金的工作类型。
这些是:
- 执行交易员
- 投资分析
- 投资组合经理
执行交易员
执行交易者是那些提出新想法并执行新想法的人。同样,一些交易者执行想法,但不产生想法。
投资分析师
这些人投入大量精力进行研究,产生新的想法,并帮助经理们做出有关投资的关键决策。投资分析师也被称为研究分析师。
投资组合经理
投资组合经理是做出关于买/卖什么和在哪里投资的关键决定的人。他们还负责确认投资分析师的研究和发现的真实性和正确性。如果研究中有任何差异或问题,他们会要求投资分析师审查报告并加以纠正。此后,投资组合经理为投资者做出买入/卖出的最终决定。
展望未来,我们将了解进入对冲基金所需的教育要求和技能。
教育要求和所需技能
要想成为对冲基金的员工,你需要拥有以下专业之一的学士学位:
- 金融
- 会计
- 统计数字
- 经济学
- 工程/数学
除了学士学位,其他首选资格包括:
- 工商管理硕士
- 金融硕士(金融硕士)
- 特许金融分析师
- CFP(国际金融理财师)
- CTFA(注册信托和财务顾问)
- CAIA(特许另类投资分析师)
- FRM(金融风险经理)
基本上,你最好有一些证书和研究金融市场的热情。此外,在其中一个领域拥有专长,将对你作为对冲基金员工的职业生涯大有帮助。这是因为每个领域都提供了特定角色所独有的知识。例如,对金融和会计有透彻的了解可以帮助你进行投资分析。
此外,比任何资格证书更重要的是,在该领域丰富的经验将帮助你在你所选择的角色中获得最大的专业知识。
此外,在对冲基金中,有些技能可以帮到你,它们是:
- 定量分析——在定量相关的工作中,你会发现自己获得了最好的技能发展时间。你可以选择经济学家或金融分析师的职位,甚至可以写一篇论文来获得这项技能。
- 管理投资——这是对冲基金最重要的技能之一。有了管理自己投资的经验,你也可以准备好管理对冲基金的投资。
- 善于讨论技术细节——你应该善于用通俗的语言讨论复杂的分析或技术信息,以便能够用一些术语帮助投资者。
- 强大的数学和统计技能——这些技能在对冲基金中可能是也可能不是必须的。在工作中应用机器学习模型可能需要一些数学知识,如线性代数。
- 风险管理-你必须了解管理风险,因为对冲基金有时是高风险投资,同时也获得高回报。你也可以成为对冲基金的初级风险分析师。
接下来,我们将讨论更多的技能/方法,让你在对冲基金开始职业生涯。
在对冲基金开始职业生涯的更多技巧/方法
因此,主要问题是,对冲基金在招聘时还会寻找什么?
当然,一系列的面试问题以及努力准备一些真正重要的话题,如逻辑推理、Python 等。预先投资将极大地帮助量化分析师进入对冲基金。
此外,我们上面讨论的技能并不是进入对冲基金并开始职业生涯的唯一途径。要想在对冲基金谋得一份工作,你还必须投资其它一些东西,它们是:
- 阅读
- 实习
- 持续学习
- 专业/贸易经验
- 保持专注
- 建立工作关系网
阅读
想要在对冲基金中找到一份工作,还需要尽可能多地获取相关知识。并且,没有什么比阅读大量投资导向的书籍更好的了。你可以在网上找到一些非常有知识的书籍,你可以参考。只有从百忙之中抽出多达 20 分钟的专门阅读,才能帮助你获得足够的知识。
实习
为了学习交易的秘密和事先获得专业知识,你必须早点开始,成为一名实习生。在彻底阅读并获得一些良好的理论知识后,下一步是获得一些实践经验。通过实习,你将获得一个极好的机会去了解对冲基金的工作。
持续学习
理解好的和坏的投资是最重要的。你必须反思那些表现良好的投资,并从那些表现不佳的投资中吸取教训。在对冲基金开始职业生涯时,持续学习也非常重要。
专业/贸易经验
在对冲基金的良好职业经历是开启你职业生涯的最佳方式。学习如何牢牢把握估值和擅长 excel 可以在许多方面帮助你。此外,你需要相信自己的决策,找出市场中的最佳位置。这样,你的技能将被视为一种资产。
保持专注
一旦你开始一个角色,最好在你的职业生涯中坚持下去,而不是试图跳到另一个角色。这样,任何新的招聘在任何时候都不会成为你的麻烦。除了你对两个角色感到困惑,你的雇主也会怀疑你对一个团队的承诺和奉献。
建立工作关系网
人脉是在对冲基金找到工作的另一个重要方面。当你希望第一次做某件事时,除了阅读、获得经验或实习,你还必须与那些已经熟悉角色并能帮助你进入角色的人建立联系。通过这种方式,你可以从他们进入这个行业的步骤中学到很多。
既然你已经了解了在对冲基金工作所需的工作类型、教育要求和技能,让我们进一步看看顶级对冲基金的名单。
展望未来,让我们找出在对冲基金工作的利弊。
利弊
在对冲基金工作给你带来了很多选择,同时也带来了一些好处,但也有一些不好的方面。
让我们先来看看在对冲基金工作的好处:
- 对冲基金规模较小,给员工提供了更大的控制权
- 它提供了一个非常有回报的职业,因为有些人还被发现年薪 500 万美元
- 在对冲基金中,你通常会有机会快速晋升,因为对冲基金会对你的努力给予很好的补偿
现在,我们将找出对冲基金的缺点,它们是:
- 大量的竞争会让你不知所措
- 责任相当多,因为对冲基金要对所有投资者的钱负责
展望未来,你现在可以在下一个副题中探索顶级对冲基金的名单。
值得工作的顶级对冲基金列表
世界上有几家对冲基金,在其中的顶级公司工作可以为任何员工提供突破。提供最佳员工满意度的公司是行业中最大的公司。
让我们看看我从和购买的对冲基金列表,并找出为什么它们被认为是最好的:
德·肖
这家公司获得了最高的排名,因为员工给它的评分是 90 分(满分 100 分),这使它成为所有竞争对手中最好的公司。德肖以纯量化基金起家,利用计算机驱动的分析结合基本面策略。这就是该公司也被称为“quantamental”的原因。
两项适马投资
Two 适马投资公司的员工评分为 80 分(满分为 100 分),排名第二,仅次于德肖公司。由于其工作文化、对员工的高额报酬和设施,这家公司被评为第二大最佳对冲基金。
城堡
Citadel 的工作文化评分为 4.3 分(满分为 5 分),员工薪酬也相当不错,在员工总体满意度中排名第三。它为所有员工提供了成长和赚钱的机会。
另外,从 Glassdoor 的评论来看,有两家对冲基金被员工认为是最好的,它们是:
布里奇沃特
Bridgewater Associates 的员工评价为 4.1 分(满分 5 分),首席执行官 100%认可,在工作文化和薪酬方面享有良好声誉。
文艺复兴首都
在 Renaissance,员工的满意度为 3.6 分(满分为 5 分),该公司不仅被视为一个体面的工作场所,还被视为一家定期支付高薪的公司。
结论
由于进入对冲基金是许多人的梦想,因此获得该领域的全面知识并按照要求行事非常重要。要在对冲基金开始你的职业生涯,你必须尽早开始,尽可能多地获得实践领域的知识。除了知识之外,在你涉足对冲基金并开始职业生涯之前,获得该领域的经验也至关重要。
本文中提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。
巴西|一位对冲基金经理用 ML 扩展他的技能
原文:https://blog.quantinsti.com/hedge-fund-manager-machine-learning-quantra-success-story-thiago/
Thiago 的 20 年历程始于在巴西一些最大的银行工作,后来在世界金融之都纽约工作,最后回到巴西经营一家对冲基金。
尽管拥有丰富的经验和成熟的技能,但 Thiago 希望突破界限,将尖端的机器学习技术融入交易,并克服情绪影响交易决策的古老问题。
Thiago 与我们分享他的学习经验。
大家好,
我是蒂亚戈,来自巴西。在巴西完成商学学位后,我在巴西的一些大银行工作,之后去了纽约,在那里工作了一段时间,然后回到巴西,通过当地的对冲基金在巴西市场交易。我已经在金融市场工作了 20 年。
我想排除交易中的情感因素,因此我想采用一种定量的、系统的方法,并进行彻底的回溯测试。我对应用机器学习概念很感兴趣,利用我以前的技术分析知识和我强大的金融背景。
带着这个目标,我在 Quantra 平台上学习了“机器学习交易:回归”课程。我真的很喜欢这门课,内容很中肯,很符合标准。我真的很期待在 Quantra 上追求更多的课程。
感谢您与我们分享您的想法,Thiago。很高兴看到像你这样有经验和知识的人在交易中不断追求新的创新。我们很高兴成为你进步的一部分。
Quantra 是多个机器学习课程的所在地,这些课程深入研究如何利用不同的 ML 技术进行交易。这些课程旨在让您从基础开始,并以结构化的方式指导您学习高级机器学习技术。立即注册!
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
赫斯顿模型:公式,假设,限制,等等
以重香重香
赫斯顿期权定价模型,或赫斯顿模型,被认为是对布莱克-斯科尔斯模型的改进,布莱克-斯科尔斯模型采用了一些不反映现实世界的假设。主要假设是波动率在期权有效期内保持不变。
当然,我们知道基础资产的波动率往往会波动,很少会保持不变。史蒂文·赫斯顿提出了一个数学模型,该模型将波动率保持为一个不可预测的值,并遵循随机过程。此外,Heston 的模型为我们提供了一个封闭的解决方案,极大地简化了流程,并在社区中得到更广泛的采用。让我们继续前进,看看这个博客将涵盖的主题。
如果你想重温期权术语,可以去我们的期权交易基础博客重温一下。好吧!让我们现在开始。
布莱克-斯科尔斯模型的局限性
布莱克-斯科尔斯模型对交易者来说是一个启示,它使得期权定价相对简单。然而,为了实现这种简单性,Black Scholes 模型假设波动率保持不变。此外,无风险收益率也保持不变,以获得一个保持变量最小的模型。Black Scholes 模型还假设股票不支付股息,并且在到期日之前不能行使相应的期权。如果你想在 Excel 中看到布莱克·斯科尔斯,请访问我们的Excel 期权交易博客。令人惊讶的是,布莱克·斯科尔斯模型仍然有效,并在世界范围内被采用。
但这并没有阻止研究人员试图修改模型,使其尽可能接近市场动态。因此,在模型给我们一个价格之后,有一些方法可以将红利计算在内,等等。但是史蒂文·赫斯顿采取了不同的方法。他设法推导出一个数学模型,表明波动是一个随机过程,因此,是一个随机过程。这种假设符合市场的普遍情绪。现在来详细看看。
赫斯顿模型公式及实例
让我们首先理解为什么我们必须小心翼翼地将波动性视为一个常数。假设你保持波动率不变。现在你画一个图,x 轴代表不同的执行价格,y 轴代表一组期权的隐含波动率。结果你会发现一条曲线。我们称之为波动微笑。可以参考这篇博客了解隐含波动率以及如何绘制波动率微笑。这是因为深度价外期权的隐含波动率较高,而当我们转向价内或价内期权时,隐含波动率通常会降低。
令人惊讶的是,据说波动微笑在 1987 年崩盘前很少见。崩盘后,交易员们意识到,无论 OTM 期权多么罕见,都有可能发生。
该图看起来像这样:

根据布莱克·斯科尔斯模型,这应该是一条平坦的线。为了确保期权价格尽可能接近真实世界,赫斯顿模型提出了一个随机波动率模型,该模型将绕过这一限制,并保持其为封闭形式的解决方案,从而保持模型的相对简单性。
现在,我们知道波动性是一种证券在一段时间内的上下波动。从技术上来说,它是以一段时间内年化回报率的标准差来衡量的。或者简单地说就是收益方差的平方根。
事实上,赫斯顿模型有两个函数,布朗运动,基础资产价格,和方差的方差。
瞬时方差基于用于市场利率建模的考克斯-英格索尔-罗斯模型(CIR 模型)。它的假设是,利率是均值回归的,永远不会是负数。方差的“平方根”用于仅保留正值。
现在,让我们来看看模型方程并了解其组成部分:
赫斯顿模型方程及其分量
这里,r 是无风险利率,v t 是瞬时方差
And, $$ dv_t = k(θ-v_t)dt +ξ{\sqrt v_t}* dW_t^v $$ Here,
ξ是波动率的波动率
k 是 vt 回到 0 的速率
θ是长期价格方差
注意:
此外,两个布朗运动是负相关的。一种解释是,股价的大幅下跌增加了波动性。
其中,ρ为相关性。
赫斯顿实际上提供了他在论文中使用的以下默认参数。它们如下,
- ξ是波动率的波动率
- k = 2
- θ = 0.01
- Vt = 0.01
- ξ = 0.1
- 期权到期= 0.5 年
- r = 0
- 执行价格= 100。
- ρ = 0
利用这个等式,赫斯顿得出了一个欧式看涨期权的价格如下
这里 x = log(S ), p(x)是标的资产价格的概率密度函数。
当然,时间 T 是看涨期权的到期时间,时间 T 可以是你想计算期权价格的时间。
为了在实践中使用该方程,我们使用快速傅立叶变换函数,该函数将概率密度函数从 x 空间转换到 u 空间。
方程式如下:
当然,我们会用蒙特卡罗产生各种可能性或路径。现在让我们进入问题的核心。现在我们来看看构建 Heston 模型的 python 代码。为了温习 Python 的基础知识,你可以在 Quantra 上注册 Python for Trading 课程。
使用 quantlib 包的 Python 中的 Heston 模型
(感谢 Chamundeswari Koppisetti 提供代码。)
我们将考虑定价没有离散红利和障碍的普通期权。
我们在这里考虑了默认的五个赫斯顿参数(注意,这些参数可以使用各种优化技术校准到市场参数)。
我们现在将构建随机波动赫斯顿过程。
期权的当前价格是使用基于傅立叶变换的解析赫斯顿模型引擎计算的
输出如下所示:
选项 _ 价格 7.03
因此,通过这种方式,我们可以使用 quantlib python 包来构建 Heston 模型。如果您想在不使用软件包的情况下构建 Heston 模型,请继续阅读下面的内容。
我们用欧拉法对同样的期权进行定价,将 SDE 积分,生成蒙特卡洛路径,然后取平均值。
输出类似于我们使用 quantlib 包时收到的输出
输出:
Seven point zero two
因此,通过这种方式,我们可以使用 python 构建 Heston 模型。在高级期权交易课程中,你可以探索更高级的概念,如离差交易、奇异期权、伽玛刷单。虽然赫斯顿模型可以说优于布莱克-斯科尔斯模型,但它也有自己的局限性。让我们在下一节看到它。
赫斯顿模型的局限性
赫斯顿模型的主要限制之一是模型中参数的存在,这些参数必须仔细校准以提供对期权价格的合理估计。此外,我们发现赫斯顿模型在预测短期期权的期权价格时会受到影响,因为该模型未能捕捉到高的隐含波动率。它也比阻止交易者使用期权的布莱克-斯科尔斯模型更复杂。
结论
我们已经看到了赫斯顿模型如何通过假设波动率是随机过程来改进布莱克-斯科尔斯期权定价模型。我们还研究了该模型的组成部分,并了解了其相对于 Black Scholes 模型的局限性。您可以通过启动 Quantra 上的期权交易学习轨道开始交易,尝试自己的期权交易策略。
免责声明:本文中提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。
交易中关于止损的隐藏真相
原文:https://blog.quantinsti.com/hidden-truths-stop-loss-trading/
塔尔顿资本管理公司和 EPAT 学院的管理合伙人尤安·辛克莱博士
止损单,或通常所说的止损,是指如果你持有的公司股票达到预先确定的价格,为了避免巨额损失,向经纪人发出的卖出(或买入)订单。在交易领域,止损被视为风险控制和资金管理的重要组成部分。通常,他们认为止损的效用是不言而喻的。
"如果你限制你的损失,你怎么会破产呢?"“减少你的损失,让你的利润奔跑”。“失败者加失败者”。但是就像他们一样,有比看起来更多的东西,停止使用的效果是相当复杂的,坦率地说,很有趣。
在本文中,我们将介绍以下概念:
- 交易中使用止损的隐性成本
- 止损对你预期收益的影响
- 分解一些关于使用止损的常见论点
- 止损是另一种趋势跟踪工具吗?
- 固定止损和跟踪止损哪个好
交易中使用止损的隐性成本
首先,我们将了解止损对我们交易结果的分布有什么影响。图 1 显示了一个假设的交易结果示例。该交易的平均回报率为 10%,标准差为 15%。

图 1:我们交易策略的回报分布。
然而,我们也可以看到相当数量的交易是亏损的(这里有近 11%的交易亏损超过 15%)。一个自然的想法是引入止损,以某种方式“切断”分布的左侧。
人们很容易认为止损的使用只是通过将损失限制在某个水平来截断分布的下行。重新绘制分布图来反映这种直觉给了我们图 2,在 15%的下跌水平引入了止损,所以所有的损失都限制在 15%。

图 2:添加止损点后的期望分布。
然而,稍微想一想就足以看出这种分布是不可能的。被止损的交易不会消失。他们的结果仍然需要考虑(数学上,概率密度函数的积分仍然必须是 1)。所以我们下一步推测这些交易集中在止损点附近。但这还是忽略了重要的一点。
许多交易在期末是小赢家,会被提前止损。请注意,大赢家仍然存在,因为这些交易大部分是以赢家的身份开始的,从来没有回头看,但是止损点的存在会大大减少小赢家的数量。这是使用止损的隐性成本。
止损对你预期收益的影响
为了了解使用止损的确切效果,我模拟了 10,000 GBM 路径,代表每天检查一次交易的表现。同样,预期的最终回报是 10%,标准差是 15%,止损是 15%。结果如图 3 所示。

图 3:添加止损时的真实分布。
这里有几点需要注意。首先,平均回报受到止损的负面影响。“未止损”投资的平均回报率为 10 %(正如我们为模拟计划的那样),但当我们添加止损时,这一回报率降至 8.8 %。这是假设(未停止的)结果遵循正态分布的数学必然性。
通过增加止损点,我们消除了大输家(在这种情况下,大于 15%),但我们也消除了后来会恢复到止损水平以上的交易。因为正态分布在平均值附近的密度比在两翼的密度大,所以边际交易比大输家多。
止损不仅仅是止损。它们极大地改变了回报分布的形状,降低了平均回报。增加止损点不会把失败的策略变成成功的策略。我们添加止损的唯一原因是我们喜欢止损分布的形状,也就是说,我们喜欢用大量的小亏损和较少的小盈利来换取一些大亏损。
虽然这是事实,但现实世界要复杂得多。回报不是正态分布的,结果会随着时间而变化。同样,交易者也没有理由只对收益最大化感兴趣。安全和风险控制对经济和心理都很重要。
之前的模拟只针对一个特定的过程:具有正漂移的几何布朗运动。如果稍微困难一点,对交易有更复杂、更现实的结果的情况进行类似的分析是可能的。我们可以加上厚尾、崩溃和偏斜。我们也可以让一次交易的结果依赖于之前的交易。所有情况下的结果基本上是一样的:止损降低了平均回报,并将回报分布变成了双峰。
但在回报过程未知且肯定不正常的实际市场中会发生什么呢?让我们离开理论的领域,进入真实的市场。
显然,许多投资者喜欢使用止损。事实上,有些人坚持止损是绝对必要的,他们认为止损的正确使用是整体长期成功的一个很好的预测。我们不应该因为某个名人说过这样的话就接受它,而是应该研究为什么会这样。考虑到大多数模拟测试显示止损是要花钱的,这些交易者在想什么呢?
分解一些关于使用止损的常见论点
止损限制损失
对于任何特定的交易来说,这都是千真万确的。忽略滑点和交易成本,当我们使用止损时,我们不能在任何投资上损失超过某个预先定义的金额。但是,正如我们在简单模拟中所看到的,总的来说,这可能只是一种错觉。使用止损实际上会让我们长期亏损,所以这个理由当然需要更多的理由。
止损是一种纪律
的确,如果你总是使用止损,那么你就表现出了纪律性。但是纪律需要持续地应用合理的方法,而不仅仅是持续地做一些事情。所以这个答案真的根本不是答案。
在每项投资中投入一定数量的风险是很重要的(1%或 2%通常是给定的数量)
为什么这很重要?这也需要证明,而不仅仅是陈述。此外,交易规模和风险控制与为每一个头寸设定亏损是不同的问题。
止损实际上是一个预先设定好的出口。当我们不想再处于这个位置时,我们会被阻止。
当我们不想处于某个位置时,退出这个位置是一个极好的主意。如果我们用止损来形式化这一点,那么它们是完全合理的。但我们需要更多地思考这意味着什么。如果我们退出一个仓位纯粹是因为价格变动了一定的幅度,那么我们就是趋势跟踪。我们含蓄地说,已经发生的变化预示着未来的变化。这值得重复。基于价格的止损是一个趋势跟踪系统。因此,如果我们明确押注于势头,它们可能是很有意义的。
相反,如果我们交易的是我们预期会恢复的东西,它们就没有多大意义。在这种情况下,我们将在我们认为未来利润潜力最大的时候退出交易。
让我们详细看看前面的观点。换句话说,我们应该卖出对我们不利的头寸的原因是,只有当我们预计这种走势会继续时。损失已经发生;我们需要考虑我们当前的风险,而不是已经发生的损失的沉没成本。如果我们只是根据价格波动来止损,我们是说价格方向决定了未来的价格方向,也就是说,我们是在跟踪趋势。
这意味着任何止损规则的测试实际上都是趋势跟踪策略的测试。止损和风险控制关系不大。它们实际上是对我们优势来源的一种陈述。让我们看看这种说法是否有分量。
止损是另一个趋势跟踪工具吗?
作为一个有趣的小练习,看看这会导致什么,我测试了一个非常简单的交易想法。
我以 5 分钟为间隔采样了 10 年的间谍价格(分笔成交点数据在理论上可能更好,但数量太多了)。
每天开始时,我买 100 股 SPY 股票并持有一天,然后在收盘时卖出。结果如下所示,如图 4 所示。
日均利润:$0.49
夏普比率:0.066
总利润:$1225
日均最高利润:$699
日均最高亏损:$794
赢%:54.3%
平均赢/平均亏:0.85

图 4:间谍买入并持有日策略的结果。
毫不奇怪,这么简单的想法执行起来并不是特别好。现在我们加了一个止损点,把我们的买入并持有交易转变为趋势跟踪策略。具体来说,我们计算了过去 20 天每日回报的标准差,如果我们在任何一天损失了超过一半的金额,就停止我们的多头头寸。这些只是我脑海中闪现的第一批参数,但结果相对于选择来说相当稳健(除非我们做一些疯狂的事情,比如将止损点设置得如此之大,以至于永远不会被触及)。所以我们使用一个固定的停靠点,每天早上重新设置。结果如下所示,如图 5 所示。
日均利润:$1.79
夏普比率:0.298
总利润:$4464
日均最高利润:$699
日均最高亏损:$396
赢%:47.0%
平均赢/平均亏:1.18

图 5:停止间谍策略的结果。
增加止损点可以明显改善结果。这很好,但这并不是这个练习的重点。关键是我们现在有了趋势跟踪策略的经典统计数据。买入并持有交易的盈利率为 54.3%,但增加止损点后,盈利率降至 47%。但这被平均输赢比的提高所弥补有余。
我知道对随机条目的测试远不是一个新的想法,但我倾向于认为它们完全被误导了。在我看来,这个结论的部分原因是由于这个名字的误导性。非随机出场的随机进场并不是真正的随机。退出很容易被视为进入现金头寸。但是我在更重要的一点上错了:实施止损的趋势跟踪策略确实有效。
总之,止损是要花钱的,它们是一种趋势跟踪工具,而不是一种风险控制方法。
固定止损和跟踪止损哪个更好
这里有点离题,但一个常见的问题是,在距离我们的进场价格给定距离处使用固定止损或移动跟踪止损,使其与最高投资额保持一定距离,这两者之间是否有任何真正的区别。我们来详细看看这个。
跟踪止损是一个非常令人欣慰的策略。它似乎能保护我们免于目睹胜利者变成失败者的痛苦经历。它确实是这样做的。但是如此吸引人的东西真的是免费的吗?为什么不是所有的投资者都这样做呢?
跟踪止损比固定止损成本高。它实际上减少了更多的回报。这是因为一些可能成为大赢家的职位没有机会充分实现他们的潜力。当使用固定止损时,一些投资受益于远离止损,有机会发展。跟踪止损总是在起作用。
调整我们之前的模拟证实了这一点。在止损之前,我们有一个均值为 10%,标准差为 20%的分布。但是现在我们加了一个止损点,这样它总是比交易高点低 15%。
跟踪止损的增加降低了交易的平均回报率,只有 4.7%。这远远低于未止损的回报,也低于使用固定止损时的回报。图 6 显示了我们使用跟踪止损时的分布。

图 6:使用追踪止损时模拟交易的回报分布。
在这种情况下,分配现在与未停止的投资完全不同。
一般形态的出现是因为一些交易开始很糟糕,并在最糟糕的水平被止损。有些赚了一点钱,然后回落,在最初止损点上方被止损,如此类推,直到我们到达那些永远不会被止损的。因为这个止损点在降低交易的期望值方面更昂贵,投资者必须非常确定这是他正在寻找的分布。
所以这个问题确实有一些价值。跟踪止损确实不同。我不确定他们是否更好。这种选择将取决于个人偏好。
结论
我们可以说,虽然止损确实让你对你持有的风险数量有了保证,但却损害了你对自己设计的策略的预期回报。此外,我们还将止损单视为趋势跟踪工具,而非风险控制措施。
这个内容是即将出版的《持仓期权交易》一书的一部分。
免责声明:股票市场的所有投资和交易都有风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。
Python 中的层次聚类
原文:https://blog.quantinsti.com/hierarchical-clustering-python/
随着原始数据的丰富和分析的需要,无监督学习的概念逐渐流行起来。无监督学习的主要目标是发现未标记数据中隐藏的和令人兴奋的模式。最常见的无监督学习算法是聚类。聚类分析的应用范围从医学到人脸识别到股票市场分析。在这篇博客中,我们讨论层次聚类。
这篇文章的结构如下。
- 什么是层次聚类?
- 聚类之间的差异&分类
- K-Means 之间的差异&层次聚类
- 层次聚类的类型
- 凝聚层次聚类
- 如何识别两个聚类是否相似?
- 什么是树状图?
- 分裂式层次聚类
- Python 中的层次聚类
- 层次聚类的利与弊
什么是层次聚类?
分层聚类是一种无监督学习,它将相似的数据点或对象分组到称为聚类的组中。你脑海中出现的问题是什么是聚类和无监督学习。让我们试着找到这个。
聚类和分类的区别
分类和聚类都试图基于各种特征的相似性将数据点分组到一个或多个类别中。区别在于两者的工作方式。分类是一种监督算法,其中有预定义的标签(yi)分配给每个输入数据点(Xi)。

然而,聚类是一种无监督算法,其中标签缺失意味着数据集仅包含输入数据点(Xi)。

另一个主要区别是,由于分类技术具有标签,因此需要训练和测试数据集来验证模型。在聚类中,没有标签,因此不需要训练和测试数据集。
分类算法的流行例子有:
聚类算法的例子有:
- 分层聚类
- k 均值聚类
- 均值漂移聚类
- 谱聚类
在本文中,我们将深入研究分层集群的细节。
K-Means 和层次聚类的区别
我们为什么需要层次聚类的答案就在 K-means 聚类的过程中。
我们将用通俗的语言来理解 K-means 聚类。
为我们的问题考虑这个未标记的数据。我们的任务是使用 K-means 聚类将未标记的数据分组到聚类中。

第一步
第一步是决定聚类的数量(k)。假设我们已经决定将数据分成两个集群。
第二步
一旦聚类被决定,我们随机初始化两个点,称为聚类质心。

第三步
在第三步中,该算法转到每个数据点,并根据它是更接近红色聚类质心还是绿色聚类质心,将这些点分成各自的类。

第四步
在第四步中,我们移动质心步长。我们计算所有红色点的平均值,并将红色聚类的质心移动到那里,并对绿色聚类进行同样的操作。

我们将执行第 3 步和第 4 步,直到群集质心不再移动。也就是说,在本例中,该点的颜色将不会进一步改变。
K-means 过程看起来不错吧?
是的,但是有一个问题,或者我们可以说是这个过程的局限性。在算法的开始,我们需要决定聚类的数量。但是我们不知道开始时需要多少个集群。
分层聚类弥合了这一差距。在层次聚类中,我们不需要一开始就定义聚类的个数。让我们看看它是如何工作的。
层次聚类的类型
有两种类型的分层聚类:
- 凝聚层次聚类
- 分裂层次聚类
凝聚层次聚类
凝聚层次聚类是最常见的层次聚类类型,用于根据相似性将对象分组。这是一种自下而上的方法,每个观察从自己的聚类开始,随着一个观察在层次结构中向上移动,聚类对被合并。
凝聚式层次聚类是如何工作的?
假设您有一些数据点,您希望将它们分组到相似的集群中。

第一步:第一步是把每个数据点看成一个聚类。

第二步:识别相似的两个聚类,使其成为一个聚类。

步骤 3: 重复该过程,直到只剩下单个簇

如何识别两个集群是否相似?
其中一个方法是找出集群之间的距离。
距离的度量(相似性)
两个聚类之间的距离可以基于从一个聚类到另一个聚类所画的直线的长度来计算。这就是通常所说的欧几里德距离。
欧几里得距离:平面或三维空间中两点之间的欧几里得距离测量连接两点的线段的长度。这是表示两点间距离的最明显的方式。
如果(x1,y1)和(x2,y2)是二维空间中的点,那么它们之间的欧几里得距离是
(x2-x1)2 - (y2-y1)2
除了欧几里德距离,还开发了其他几种度量来测量距离,例如:
- 汉娩距
- 曼哈顿距离(出租车或城市街区)
- 闵可夫斯基距离
距离度量的选择应该基于研究领域或你试图解决的问题。
例如,如果您试图在一个统一的网格上测量对象之间的距离,如棋盘或城市街区。那么曼哈顿距离将是一个合适的选择。
连锁标准
选择距离度量后,需要确定距离的计算起点。一些常见的链接方法有:
单连锁:单连锁或最近连锁是两个聚类中一对观测值之间的最短距离。
完全连锁:完全连锁或最远连锁是两个聚类中一对观测值之间的最远距离。
平均链接:平均链接是一个聚类中的每个观察值到另一个聚类中的每个观察值之间的距离。
质心连接:质心连接是两个簇的质心之间的距离。在这种情况下,您需要找到两个集群的质心,然后在合并之前计算它们之间的距离。
Ward's-linkage: Ward's 法或最小方差法或 Ward's 最小方差聚类法将两个聚类合并为单个聚类后,两个聚类之间的距离计算为误差平方和的增加量。这种方法试图选择连续的聚类步骤,以最小化每一步的平方和误差的增加。
链接标准的选择基于领域应用。平均连接和完全连接是层次聚类中两种最流行的距离度量。然而,当没有明确的理论依据来选择关联标准时,Ward 的方法是默认选项。
集群数量如何选择?
在层次聚类中,为了选择类的数目,我们使用了称为树状图的概念。
什么是树状图?
树状图是一个树形图,显示了观察值之间的层次关系。它包含了层次聚类算法的内存。
只要看一下树状图,你就能知道星团是如何形成的。让我们看看如何为下面的数据点形成树状图。

观测值 E 和 F 通过任何其他点彼此最接近。因此,它们被组合成一个集群,并且将它们连接在一起的链路的高度也是最小的。下一个彼此最接近的观察值是 A 和 B,它们被组合在一起。
这也可以在树状图中观察到,因为 A 和 B 之间的块的高度略大于 E 和 F。类似地,D 可以合并到 E 和 F 簇中,然后 C 可以合并到 E 和 F 簇中。最后,A 和 B 与 C、D、E 和 F 结合在一起,形成一个单独的簇。

阅读树状图时需要注意的重要一点是:
- 块的高度代表簇之间的距离,并且
- 观察之间的距离代表不同。
但是问题仍然是一样的,我们如何使用树状图找到聚类的数量,或者我们应该在哪里停止合并聚类。通过在树状图中画一条水平线,观察值被分配到聚类中。

一般来说,我们切割树状图的方式是切割最高的垂直线。在上面的例子中,我们有两个集群。一个分类有观察值 A 和 B,另一个分类有 C、D、E 和 f。
分裂层次聚类
分裂式层次聚类在解决现实世界的问题时并不常用。它的工作方式与聚集聚类相反。在这种情况下,我们从所有数据点作为一个单独的集群开始。
在每次迭代中,我们分离不相似的最远的点或聚类,直到每个数据点被认为是一个单独的聚类。这里我们将单个聚类分成 n 个聚类,因此称为分裂聚类。
Python 中的层次聚类
为了演示层次聚类在 Python 中的应用,我们将使用 Iris 数据集。虹膜数据集是最常见的数据集之一,用于机器学习中的插图目的。
虹膜数据具有三种类型的虹膜花,它们是因变量中的三个类别。它包含四个自变量,即萼片长度、萼片宽度、花瓣长度和花瓣宽度,单位均为厘米。我们将原始类与使用层次聚类方法形成的类进行比较。
输入数据
我们将从 sklearn 库中导入数据集。
如何在高频交易公司找到工作?
如果你拥有 HFT 领域的知识和专业技能,在高频交易公司工作不仅令人兴奋,而且也很有回报。关于在 HFT 公司工作的所有深入信息,这篇文章包括:
- 什么是高频交易?
- 在 HFT 公司的职位
- 所需资格
- 所需技能
- 职位描述
- 申请 HFT 公司
- 与 HFT 公司合作的利弊
什么是高频交易?
高频交易是算法交易的一个特殊类别,其特点是持有证券的周期从微秒到几分钟不等。HFT 需要强大的计算机和卓越的网络架构来高速处理数据。HFT 需要低延迟的响应时间和高交易量,系统才能成功运行。HFT 还需要实时数据和对市场微观结构的深刻理解。
HFT 策略主要分为做市、、统计套利、动量、均值回复、多空、突破等。高频交易有助于:
- 增加流动性——流动性是指资产转换为现金的能力和容易程度,而不会在很大程度上影响市场上的当前资产价格。
市场流动性是指市场允许股票、债券或衍生产品等资产在无需支付巨大买卖差价的情况下进行买卖的程度。
随着交易数量的增加,订单可能会增加市场的流动性。
- 价差缩小——HFT 交易员可能会提供最具竞争力的买卖价格,这可能会导致买卖价差缩小。价差是一种证券的即时最佳要价和即时最佳买价之差。它基本上是卖方愿意接受的最低价格和买方愿意支付的最高价格之间的差额。如果一只股票的买入价是 49 美元,卖出价是 50 美元,那么买卖差价是 1 美元。
- 提高市场效率——HFT算法在短时间内整合了大量信息。高频交易技术是最快的,因为它可以在几分之一秒内处理市场信息并投资于有收益的资产。因此,市场迅速准确地反映价格,没有人为失误。算法不受人类情感的影响(不像人类),因此,为有收益的投资合乎逻辑地提供市场信息。
接下来,让我们来了解一下 HFT 公司的不同角色。
在 HFT 公司的角色
在这篇关于高频交易基础知识的文章中,我们对 HFT 公司的不同角色进行了全面的解释。在 HFT 公司,主要有以下四种角色:
- 定量分析师/模型开发人员
- 战略制定者
- 商人
- 网络/系统管理员
定量分析师/模型开发人员
如果你对自己构建模型感兴趣,并想申请一个定量分析师/模型开发员的职位,学习定量技能,并掌握使用定量工具的工作知识,如 R、Matlab、Python。
战略制定者
对于策略开发人员角色,您需要编写策略代码,或者维护和修改现有的策略。最有可能的是,你将与一位开发交易模型的定量分析师一起工作,你将被要求把策略编码到一个执行平台中。
交易员
对于交易角色,你的金融知识和解决问题的能力都很重要。如果你擅长解谜和解决问题,你会喜欢金融世界的错综复杂。
网络/系统管理员
涉及维护高频交易平台和编码策略的核心开发工作通常使用 C++或 JAVA。因此,磨练你的 C++或核心开发语言是绝对必要的。
每个角色在特定领域的专业化方面都占有适当的重要性。作为一名有抱负的 HFT 公司员工,你必须找到自己的位置,然后申请相应的工作。
让我们进一步看看 HFT 公司雇员的资格方面。
要求的资格
高频交易是一个非常技术性的学科,它吸引了来自不同科学和工程领域的最优秀的候选人-数学,物理,计算机科学和电子工程。
在发达国家,你需要一个计算机科学或物理/数学的博士学位,或者一个 MFE 学位,才能成为一名定量分析师。然而,在发展中国家,知名大学的计算机科学/数学工程学位或金融 MBA 学位也是有效的。除此之外,你当然需要对解决问题和编码的热情。综上所述,你有很大的机会成为高频交易公司的量化分析师或量化开发员。
关键要点:
虽然学位让简历看起来不错,但如果你没有学位,不要把它当成障碍。在你的简历中展示大量的实际工作,你可以被业界认为是一名潜在的员工。
尽管有一点是肯定的,你需要做好心理准备投入大量时间学习(书虫?大概是的!)并且需要作为一个量化交易者或者量化开发者做出真正好的实际努力。
为获得 HFT 公司职位的资格,需要参加的一些课程包括:
工程/MBA
许多高频交易候选人直接从相关领域的大学毕业。这和科技行业的校园没什么不同,尽管它有助于在你的简历中展示一些相关的东西。从顶级技术学校(IITs、BITS、NIT)中挑选出最优秀的本科生,然后对他们进行在职“培训”,这种情况也很常见。
金融交流经历
对交易所内部运作有深刻见解的个人将受到高度追捧,因为他们可能有能力帮助研究能够利用交易所架构的新算法。
所需技能
高频交易公司的精英管理方式通常允许在项目中有很大的自主权。
如果你希望在一个自我启动的环境中与非常聪明和有能力的人一起工作,那么高频交易可能适合你。
例如,在 HFT 的一家公司, iRage ,你将解决一些极具挑战性的工程问题,并塑造这个利润丰厚的行业的未来,同时与其他优秀的程序员、分析师和交易员一起工作。
注:iRage 是 QuantInsti 的已知合作伙伴。
准备快速进化
高频交易者的角色非常有竞争力,因为你必须不断改进你的系统。虽然在大多数情况下是值得的,但如果 exchange 改变其架构,几个月的辛勤工作和研究付诸东流也会令人沮丧。此时,可能会出现新的监管环境,或者竞争对手可能会以比您更快的速度利用某个流程。但是你需要确保自己快速进化,并做好面对这种逆境的心理准备。
企业家和精英思维
现在,大多数高频交易公司的规模都很小,通常不到 100 人。因此,你应该拥有强大的创业文化和精英思维。鉴于此,algo 交易总工资中的奖金部分是你基本工资的倍数。因此,你需要证明自己有创收的能力,才能获得奖金。这个过程的另一面是,你通常可以在公司内部“创造自己的角色”。
更长的工作时间
此外,你必须做好比平时工作更长时间的准备。由于这些角色的工作时间通常比许多人习惯的要长,每天工作 10-15 个小时并不少见。然而,快节奏的增长、智力刺激和薪酬通常超过了工作量。
低延迟/大数据/机器学习领域的行业专业知识
低延迟软件开发专家通常很受欢迎。大数据或机器学习领域的专业知识是你进入这个领域的另一种方式。
要想被高频交易公司聘用为量化交易员,大多数方法都需要广泛的技术技能。这些技能需要来自一门或多门硬科学,如数学、物理、计算机科学或电子工程。
接下来,我们将看看在 HFT 公司工作的职位描述。
工作说明
作为 HFT 公司的一名员工,你需要承担我们在下面的工作描述中提到的重要工作职责,以便让你有一个公平的概念。所以,在 HFT 的公司,你会:
- 工作在技术和定量研究的最前沿,这将要求你与时俱进地掌握新技术
- 需要有高度积极的态度来进行研究和开发完全自动化的系统策略
- 需要从头开始创建新的系统策略,然后你将从利润分享模式中受益
- 需要帮助改进现有策略,进行交易后分析,日常交易活动等。
- 需要对金融/算法交易感兴趣,最好有金融领域和衍生产品的知识,但不是必须的
- 需要适应快节奏的工作环境和陡峭的学习曲线
此外,让我们继续讨论如何申请一家 HFT 公司的潜在雇员。
申请一家 HFT 公司
在申请 HFT 公司时,你可以直接向 HFT 公司申请,也可以通过招聘机构获得帮助。招聘人员通常可以帮助你在你希望加入的公司/企业中找到最适合你的工作。此外,建议你在各方面努力工作,以获得 HFT 公司的工作,即使你有良好的教育背景。
最重要的方面是:
- 研究缺失的技能
- 列出职业机会
- 建立关系网和准备面试
- 专业发展
研究缺失的技能
非常重要的一点是,即使你有很好的教育背景,你也要发现自己是否错过了一些个人技能。如果你需要开发同样的东西,认真对待它并在它的基础上构建是非常重要的。
您可以从在线提供的课程中受益,如金融市场中的机器学习和深度学习以及使用 Python 的自动交易,以获得更多专业知识。
上市下跌公司
第二个最重要的步骤是列出你渴望拥有的职业机会/公司。
你可以申请几家顶级的 HFT 公司,它们是:
- 图像(image)
- 雪绒花
- 摩根斯坦利
- 高盛
准备面试
强烈建议你从在 HFT 公司任职的个人那里获得专业帮助。还有,一定要积极准备面试问题。对于这一点,网络可以真正帮助你。通过使用 LinkedIn 等平台,你可以通过展示你的技能和才华来帮助自己获得面试机会。获得几次面试的经验也能帮助你为更好的机会做好准备。
职业发展
最后,也是最重要的一点,即使找到了工作,你也不能失去与职业发展的联系。从专业角度了解整个行业的新机遇和新发展可以帮助你提升自己的能力。这不仅有助于你在其他公司的飞跃,也有助于你为你已经工作的公司做出卓越的贡献。
现在,让我们找出与 HFT 公司合作的利弊。
与 HFT 公司合作的好处
高频交易使你能够利用快速技术投资有利可图的交易头寸。
但是,它并不都是美好的,也有一些不应该被忽略的缺点。这种比较很重要,这样你可以权衡利弊,并据此决定下一步。
让我们先讨论一下利弊,看看在高频交易公司工作时什么是最好的:
- 新时代和成功的技术
- 美好未来
- 增长机会
新时代和成功技术
在一家提供成功的新时代技术的公司工作有助于员工,因为你仍然从事于一个快速发展的行业,从而为你提供一份稳定的工作。
范围和职业
鉴于 HFT 在发展中经济体和新兴市场的快速增长趋势和需求,各种交易所一直在努力教育其会员,培养这一技术驱动型领域所需的技能。因此,作为一名 HFT 公司的员工,你一定会有一个光明的未来。
增长机会
在 HFT 的公司,发展机会是巨大的,因为在 HFT 的公司,晋升和奖金的机会更高。
结论
这篇文章旨在为你提供关于高频交易和 HFT 公司工作方面的必要信息。虽然在 HFT 公司工作是很多人的梦想,但如果你有合适的知识、资格和技能,你就能更接近于在同一家公司工作。
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。T3】
高频交易(HFT):历史,基础,事实,特征,等等
高频交易是算法交易的子集,由高频交易算法执行。HFT 的心脏或核心是以下几个部分的结合:高速计算机系统&实时数据供给(快速跟踪交易和订单)。
在这篇文章的结尾,你将会很好的掌握关于高频交易,高频交易算法等有用的知识。
本文涵盖:
- 什么是高频交易?
- 高频交易是如何运作的?
- 高频交易指令
- 高频交易的历史
- 关于高频交易的事实
- 高频数据特征
- 高频交易策略
- 谁使用高频交易?
- 高频交易岗位
- 印度顶级高频交易公司
- 全球顶级高频交易公司
- 设立高频交易台的要求
- 高频交易的监管要求
- 高频交易与长期投资
什么是高频交易?
高频交易是股票市场中的一种交易行为,以极高的速度下达和执行许多交易指令。从技术上讲,高频交易使用 HFT 算法来分析多个市场,并以最有利可图的方式执行交易指令。
高频交易者利用先进的技术创新,比市场上任何人都更快地获得信息。有了这些信息,交易者就能够用他的高频交易算法快速执行交易指令。
协同定位是一种便于快速获取信息并快速执行交易的做法。
毕竟,有了所有的交易策略和强有力的分析,还能剩下什么呢?
答案是高交易频率,因为它考虑了在特定时间间隔内交易次数的频率。选择高频是因为它有助于高速交易,也是交易者收益最大化的因素之一。
高频交易是如何运作的?
高频交易主要是一个等待时间的游戏(Tick-To-Trade),这基本上意味着你的策略对即将到来的市场数据的反应有多快。
这家名为【Bleeding edge】的公司实际上谈论的是一位数微秒甚至亚微秒级的延迟(超高频交易)与更新、更复杂和定制的硬件。
总而言之,在过去的 20 年里,买家希望支付的价格和卖家希望获得的报酬之间的差距已经大幅缩小。其中一个原因是准确性的提高。HFT 还向市场注入了更多流动性,降低了买卖价差。
高频交易订单
高频交易包括四种类型的 HFT 订单,我们已经在下面的信息图中讨论过了。

接下来,让我们看看 HFT 的历史和有趣的事实。
高频交易的历史
有趣的是,“快速信息”传递的现象可以追溯到 17 世纪。
- 17 世纪- 内森·梅尔·罗斯柴尔德利用科技,比伦敦政府更早知道威灵顿公爵在滑铁卢战胜了拿破仑。
- 19 世纪- 据说,汤森路透的创始人朱利叶斯·路透(Julius Reuter)在 19 世纪使用了包括电报电缆和一队信鸽在内的技术组合来运行新闻传递系统。通过这种方式,朱利叶斯·路透得到的消息比任何人都要早。
- 1983 - 纳斯达克推出了成熟的电子交易,促使以计算机为基础的高频交易逐渐发展到高级阶段。
- 2000 年代-2000 年代初,HFT 在股票订单中所占比例不到 10%,但这一比例已经迅速增长。
- 2001 - 到了 2001 年,HFT 已经有了几秒钟的执行时间,而且还在继续提高。
- 2005 年至 2006 年- 根据纽约证券交易所的数据,2005 年至 2009 年间,高频交易量增长了 164%。
- 到 2010 年,这一时间缩短到了毫秒,今年晚些时候缩短到了微秒。
- 2012 - 随后,每笔交易都在 2012 年的几纳秒内开始执行。
关于高频交易的事实
潜伏
速度并不像被低估的等待时间那样重要。延迟意味着数据传输到目的地所需的时间。因此,定价过低的延迟变得比低延迟(或高速)更重要。
速度
根据彭博的说法,速度仍然很重要,但这是内在的,而不是外在的。传统的 HFT 意味着订单进入市场和你有能力接受订单之间的时间很短。它主要由外部传输延迟组成,企业很快学会了快速做出内部决策,这对结果来说是无关紧要的。
决策
内部决策时间用于决定最佳交易,这样即使是第一个选择交易的人,交易也不会变得毫无价值。因为高频交易在很多方面都是独一无二的,很明显你想知道是什么特征使它如此。
证券市场为调整供求或价格而进行的买卖
高频交易公司将其业务描述为“做市”。每个做市商都通过显示特定数量证券的买卖报价来发挥作用。一旦收到买家的订单,做市商就从自己的库存中卖出股票并完成订单。因此,这一过程增加了市场的流动性。因此,它被称为做市策略。
信号
信号(买/卖信号)的准确性是最重要的,因为如果信号传递不正确,收益可能会很快变成损失。所以,HFT 确保每一个信号都足够精确,以如此高的速度触发交易。
逐滴答数据
市场数据的变化触发高频交易系统在几百纳秒内产生新的订单。因此,收集的数据可能包含数十亿行数据!
协同定位
这意味着将高频交易机构和自营交易员拥有的计算机放在交易所计算机服务器所在的同一场所。因此,协同定位使拥有高性能服务器的 HFT 公司能够更快地进入市场。
资产类别
高频交易自营公司交易股票、期货、债券、期权、外汇等。任何时间任何地点的 HFT,因此成为外汇交易的首选。
高端系统
仅仅停留在高频率的游戏中就需要持续的维护和升级来满足需求。为了实现这一目标,银行和其他金融机构投入大量资金开发全球超高速计算机硬件和执行引擎。
熟练的专业人员
高频交易专业人士的需求越来越大,薪酬也越来越高。金融和计算机科学的理论和实践的坚实基础是成功实施高频环境的共同前提。
太好了!接下来,让我们探索高频数据的特征。
高频数据的特征
随着零延迟竞赛的继续,高频数据作为 HFT 的一个关键组成部分,仍然处于研究人员和市场分析师的扫描之下。
有了高频数据的一些特征,对交易方的理解就好得多了。HFT 中涉及的数据扮演着重要的角色,就像任何类型的交易中涉及的数据一样。
随着对 HFT 数据的深入了解,你将能够理解高频交易的技术层面。本节旨在为我们的读者揭示其中的一些特征,它们是:
观察之间不规则的时间间隔
在任何一个交易日,流动性市场都会产生成千上万个分笔成交点,形成高频数据。本质上,该数据在时间上是不规则间隔的,并且与规则间隔的当天结束(EOD)数据相比是海量的。
HFT 包括分析这些数据来制定交易策略,这些策略的执行延迟非常低。因此,数学工具和模型融入高频数据的特征变得非常重要,如不规则的时间序列和其他一些我们将在下面概述的数据,以做出正确的交易决策。
非正态资产回报分布(例如,厚尾分布)
高频数据呈现厚尾分布。为了理解厚尾,我们需要先理解正态分布。正态分布假设样本中的所有值将在平均值上下均匀分布。
因此,大约 99.7%的所有值都在平均值的三个标准偏差范围内,因此极端事件发生的概率只有 0.3%。
做 HFT 的定量分析师需要模拟尾部风险以避免重大损失,因此尾部风险对冲在高频交易中很重要。
下图显示了相对于正态分布的厚尾分布。

Source: lexicon.ft.com
此外,高频数据显示:
- 波动聚类和
- 收益率绝对值的长期相关性(长记忆性)。
波动聚类
在金融学中,波动性聚类指的是 Mandelbrot (1963)指出的观察结果,即“大变化往往伴随着大变化,或者符号和小变化往往伴随着小变化。”
长期依赖(长记忆)
长程相关性(LRD),也称为长记忆或长程持续性,是在分析空间或时间序列数据时可能出现的现象。这与两点的统计相关性随时间间隔或两点间空间距离的增加而衰减的速率有关。必须注意的是,如果相关性比指数衰减更慢,通常是类似幂的衰减,则通常认为现象具有长程相关性。
高计算负载和相关的“大数据”(以及与之相关的问题)
HFT 玩家依赖微秒/纳秒延迟,并且必须处理大量数据。为 HFT 利用大数据会带来一系列问题。
高频交易公司需要拥有最新的最先进的硬件和最新的软件技术来处理大数据。否则,它会增加处理时间,超出可接受的标准。
市场微观结构噪音
市场微观结构噪声是利用高频数据观察到的现象,与观察到的价格偏离基价有关。噪声的存在使得一些参数(如已实现的波动性)的高频估计非常不稳定。高频数据中的噪声可能由多种因素引起,即:
- 买卖反弹
- 不对称信息
- 价格变化的离散性
- 订单到达延迟
买卖反弹
当一只股票的价格不断从买入价变为卖出价时,就会出现这种情况(反之亦然)。股票价格的变动只发生在买卖价差内,这就产生了反弹效应。这种买卖反弹的出现会导致高波动性读数,即使价格保持在买卖窗口内。

信息不对称
在信息不一致的情况下,高频交易者很难对股价做出正确的估计。
价格变化的离散性
由于价格变化的离散性,没有形成稳定性,因此,根据这种信息进行估计是不可行的。
订单到达等待时间
等待时间是指订单到达股票市场或进一步执行所需的时间。在高订单到达延迟的情况下,交易者不能将其订单执行决策建立在交易最有利可图的时候。
另一方面,在订单到达延迟较低的情况下,订单可以在最有利可图的时刻到达市场。
接下来,让我们来看看有趣的高频交易策略。
高频交易策略
HFT 公司使用不同类型的高频交易策略,每种策略的最终目标和基本原理都各不相同。这些策略是基于对市场的分析,因此,决定了你交易的成败。
因此,重要的是只提出最适合你的策略。HFT 战略的一些重要类型是:
订单流量预测高频交易策略
订单流预测策略试图通过各种手段提前预测大玩家的订单。然后,他们在他们之前建立交易头寸,并锁定利润,因为这些大型参与者的交易会产生后续价格影响。
执行高频交易策略
执行 HFT 策略寻求在不造成重大价格影响的情况下执行各种机构参与者的大订单。其中包括:
- ****【成交量加权平均价格】策略——该策略用于以较好的平均价格执行大额订单。它是一段时间内交易价值与交易总量的比率。
- ****【TWAP】(时间加权平均价格)策略——该策略用于在不影响价格的情况下买入或卖出大宗股票。
流动性准备–做市策略
高频交易做市商需要首先建立报价,并不断更新报价以响应其他订单提交或取消。报价的这种连续更新可以基于高频交易做市商所遵循的模型的类型。在此过程中,HFT 做市商往往会为每笔交易提交和取消大量订单。
自动化高频交易套利策略
HFT 套利策略当两种类似的工具之间产生差价时,试图获取小额利润。指数套利可以认为是同样的一个例子。标准普尔 500 期货和 SPY(一个追踪标准普尔 500 指数的 ETF)之间的价格变动应该彼此一致。
如果价格变动不同,那么指数套利者会立即使用他们的自动 HFT 策略通过套利来获取利润。为了有效地做到这一点,高频交易套利策略需要快速执行,以便在其他参与者加入之前,迅速从错误定价中获得最大收益。
除了上面讨论的,还有其他高频交易策略,如:
- ****回扣套利策略寻求赚取交易所提供的回扣。
- 基于低延迟新闻源的 HFT 策略。
- ****冰山和嗅探器用于检测和应对试图隐藏大宗交易的其他交易者。
谁用高频交易?
属于以下类别的公司使用高频交易:
- 独立自营公司(Independent Proprietary companies)——这些公司倾向于对自己的运营保持保密,其中大多数都是做市商。
- 经纪-交易商自营柜台 -这些传统的经纪-交易商公司拥有独立的与客户业务无关的高频交易柜台。
- 对冲基金 -由对冲基金组成的公司将重点放在统计套利上,以利用资产类别&证券中的低效率定价。
此外,为了根据您的交易结果随机应变,我们有一个精心设计的课程“高级算法交易策略”,如果您正在寻找一些东西来增强您的交易体验,这应该会有所帮助。
好了。我们将在前面看看在 HFT 公司的职业方面。
高频交易工作
一旦你成为一名合格的候选人,你可以从全球范围内选择一些重要的职位。我们将在这里讨论的所有角色都是非常重要和有益的。看看下面的列表,包括:
- 定量分析师/模型开发人员
- 战略制定者
- 商人
- 网络/系统管理员
量化分析师 /模型开发者
如果你对自己构建模型感兴趣,并想申请一个定量分析师/模型开发员的职位,学习定量技能,并掌握使用定量工具的工作知识,如 R、Matlab、Python。
战略制定者
对于策略开发人员角色,您需要编写策略代码,或者维护和修改现有的策略。最有可能的是,你将与一位开发交易模型的定量分析师一起工作,你将被要求把策略编码到一个执行平台中。
交易员
对于交易角色,你的金融知识和解决问题的能力都很重要。如果你擅长解谜和解决问题,你会喜欢金融世界的错综复杂。
网络/系统管理员
涉及维护高频交易平台和编码策略的核心开发工作通常使用 C++或 JAVA。因此,磨练你的 C++或核心开发语言是绝对必要的。
有一些 HFT 公司通常专注于套利和量化策略。这类公司的名单很长,但这些公司可以满足你在其中一家公司找一份定量分析师或定量开发员工作的需要。
我们在另一个博客中分享了细节,以及你如何探索和学习高频交易工作。
印度顶级高频交易公司
- 塔研究(古尔冈)
- 高盛(班加罗尔/孟买)
- 摩根斯坦利(孟买)
- 伊拉克首都(孟买)
- 埃斯特顾问公司(古尔冈)
- 四眼(古尔冈)
- 加速贸易技术公司(班加罗尔)
- 多拉特集团(孟买)
- 雪绒花(孟买)
- 阿普特(古尔冈)
- 公开期货(德里)
- LLP 引力研究中心(Gurugram)
- Alphagrep 证券公司(孟买)
全球顶级高频交易公司
- Citadel 证券公司(美国纽约)
- Flow Traders NV(荷兰阿姆斯特丹)
- GSA 资本合伙公司(英国伦敦)
- IMC Trading BV(荷兰阿姆斯特丹)
- 跳跃式交易(美国芝加哥)
- KCG 控股公司(美国汉普顿路)
- 虚拟金融公司(美国纽约)
****注意:如果你想在量化交易领域发展事业,EPAT 是最适合你的 algo 交易课程。EPAT 提供最全面的课程,由领先的行业从业者和专家授课。一旦完成,你将获得终身职业援助。
建立高频交易平台的要求
这一部分对那些希望建立自己的高频交易平台的交易者来说尤其重要。基本上,你需要一些我们在这里列出的东西,它们是:
注册公司
首先,你需要注册你想交易的公司。这可以通过两种方式实现:合伙或作为个人。值得注意的是,如果你想和其他投资者一起建立对冲基金,你可能需要监管机构的批准。****
交易和运营资本
HFT 公司的资本是进行交易和经营的必要条件。这有助于您安排所需的一切,从路由器/调制解调器和交换机等基本网络设备到系统的协同定位。
进入市场
如果你不想直接成为交易所的会员,你也可以通过经纪人。这涉及较少的合规规则和监管要求。然而,另一方面是,你将不得不支付经纪费。
基础设施要求
对于基础设施,您将主要需要:
审计与合规
所有在印度的 HFT 公司都必须接受每半年一次的审计。审计只能由交易所(例如美国的纽约证券交易所)网站上列出的注册审计师进行。对于审计,您需要维护订单日志、交易日志、控制参数等记录。在过去的几年里。
接下来,我们将讨论 HFT 的监管要求。
高频交易的监管要求
在世界各地,已经实施了许多法律来阻止可能对金融市场有害的活动。一些专家一直认为,一些针对 HFT 活动的监管规定对市场无益。
他们表示,一方面,我们有高频交易者作为做市商,他们拥有订单流驱动的信息和速度优势。另一方面,我们的交易者对这种延迟并不敏感。
总体而言,实证结果表明,这些针对 HFT 的监管措施并不一定会提高市场质量。之所以如此,是因为他们未能提供足够的证据,证明像闪电崩盘这样的市场突然失灵。
高频交易中的一些监管变化如下:
金融交易税
FTT 被用来限制 HFT 相关的过度交易。此外,这种做法导致政府收入增加。在适当的水平上,FTT 可以削减高频交易,而不会损害其他类型的交易,包括其他形式的非常快速、高速的交易。
让我们举几个与 FTT 有关的国家为例。
欧盟 FTT - 据欧洲议会报道,2013 年 2 月 14 日,欧盟委员会提议在 11 个成员国中引入 FTT,但以“加强合作”为手段。
但在 2015 年 3 月 25 日,议会意识到并遗憾地表示,成员国没有加强合作。虽然这一问题在委员会中仍未解决,但该国定期得到讨论。
最近,重新做出了决定,并于 2019 年 6 月 14 日向理事会通报了进展情况。
英国 FTT - 需要注意的是,征收交易税并不新鲜,例如,英国自 1964 年以来一直以印花税的形式征收 FTT,对股票的购买者收取 0.5%的费用。****
这帮助政府在 1999-2000 年间筹集了大约 50 亿欧元。反对 FTT 的人强烈认为,征税计划不足以打击投机交易活动。
由于缺乏令人信服的证据证明金融交易税降低了短期波动性,金融交易税不太可能降低未来的风险。
瑞典 FTT-瑞典 FTT 在 1984 年至 1991 年间被应用,希望能获得额外的税收收入并统治金融市场。但是,众所周知,这是 FTT 实施的一个典型失败。****
此外,瑞典对股票交易征收近 50 个基点的税,导致超过一半的股票交易量从瑞典转移到伦敦。事实证明,这是一个糟糕的收入来源,也是一个不足以监管股票市场的机制。
此外,这篇由 BNY·梅隆撰写的文章概述了截至 2018 年全球范围内目前已实施和提议的 FTT 法案。
关于过量订单提交和取消的规定
现在,我们来看另一个监管变化。就是在很短的时间内大量订单的提交和取消,这是 HFT 最突出的特点。
值得注意的是,向高订单交易比率的交易商收取费用被认为是为了抑制高频交易公司的有害行为。
此外,如果收取较高的订单交易比或实施税收以阻止操纵活动,速度较慢的交易者可以更积极地交易。这种税应该能够总体上改善流动性。
根据 2019 年 8 月 13 日的商业标准,监管机构正在研究对订单交易比高的交易员征收“激增费用”的概念。
回扣结构
返利结构是另一个监管变化。当限价单交易者得到回扣补偿时,市价单交易者则被收取费用。因此,当交易者(通常是高频交易者)发送限价单来做市时,向市场提供流动性,这反过来为交易所提供流动性。
这对于提交大量限价单的交易者来说肯定是有吸引力的,因为该定价方案为限价单交易者提供了更小的风险。
还存在一种与市场接受者定价相反的收费结构,称为交易商定价。它包括向市场订单交易者提供回扣,并收取费用以限制订单交易者,这种做法也在某些市场中使用。
这种结构总体上不利于高频交易者,专家们认为,这些市场通常不太透明,这可能对市场不利。
断路器
为了防止极端的市场波动,正在使用断路器。断路器在减少市场崩溃方面是有效的。
为了防止类似 1987 年 10 月的市场崩溃事件,纽约证券交易所为交易所引入了熔断机制。当股价跌破某个阈值时,这个熔断机制会暂停整个市场的交易。
让我们以当前场景中的真实世界为例,在 3 月份,由于冠状病毒爆发,市场多次遭遇熔断机制。这导致市场因股价暴跌而暂停 15 分钟。
2020 年 3 月 15 日,据美国消费者新闻与商业频道报道, S & P 500 在开盘后立即暴跌约 8%,触发一级断路器,导致交易暂停 15 分钟。T4 道琼斯工业平均指数开盘暴跌 2250 点。美国东部时间上午 9 点 46 分市场重新开放。
美国总统唐纳德·特朗普(Donald Trump)在新闻发布会上表示,冠状病毒最严重的时期可能会持续到 8 月,发达经济体“可能”会陷入衰退,随后股市收盘跌至盘中低点。
道琼斯指数暴跌 2997 点,经历了自 1987 年“黑色星期一”市场崩盘以来最糟糕的一天。标准普尔 500 收盘下跌近 12%。
订单处理中的结构性延迟
订单处理过程中的随机延迟(几毫秒)会抵消 HFT 的一些策略,这些策略可能会营造一种技术军备竞赛和赢家通吃的环境。
在这里,更快的交易者的优势在随机延迟下显著下降,而他们仍然有提高交易速度的动力。如果提高交易速度的好处会大幅减少,这将阻止高频交易商参与徒劳的军备竞赛。
展望未来,我们将看到 HFT 与长期投资有何不同?
高频交易与长期投资
关于高频交易和长期投资的比较,有很多争论和讨论。这里必须提到的是,市场上长期投资者对 HFT 有各种各样的看法。
我们不要去争论什么是好什么是坏,这是一个非常主观的问题,让我们看看 HFT 和长期投资有什么不同。
HFT 在市场中以零头寸开始和结束。这个想法是在很小的利润空间内快速买卖,赚取极小的利润。因此,HFT 部署的阵地相当小。如果一个高频交易者必须使用 5000 万现金进行交易,他/她将持有大量头寸,比如说 5 亿,也就是说,几乎是资本的 10 倍。
另一方面,长期投资者从大量资本开始,在很长一段时间内赚取高额利润。这需要大量资本,导致交易成本增加,但也带来了更高的利润率和预期的利润一致性。下表总结了这些要点:
对比高频交易和长期投资
| 差异 | 高频交易 | 长期投资 |
| 利润率 | 小的 | 大的 |
| 交易成本 | 小的 | 大的 |
| 资本需求 | 小的 | 大的 |
| 利润的一致性 | 高的 | 低的 |
| 总利润潜力 | 高的 | 大的 |
****(免责声明:上表是对高频交易和长期投资的概述,以及对一些公司/机构的分析,可能会因上述变量而有所不同。)
精彩!这就把我们带到了文章的结尾,当然我们也谈到了高频交易中一些最受欢迎的话题。
结论
因为我们的目标是让这篇文章内容丰富,能够满足所有读者的需求,所以我们包含了几乎所有与高频交易和 HFT 算法相关的概念。
如果你正在开始你的量化交易之旅,请查看 Quantra 关于量化交易策略和模型的课程,该课程教授基本的技术交易策略,如基于趋势的策略和布林线策略,它们也可以在实时市场上交易。立即注册!
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。****
如何通过 Python 股票 API 获取历史行情数据
原文:https://blog.quantinsti.com/historical-market-data-python-api/
由克里斯托夫·勒鲁和雷希特·帕查内卡拍摄
作为一个量化交易者,你总是在寻找创造和优化你的交易策略。回溯测试是这个过程中非常重要的一部分。对于回溯测试,访问历史数据是必要的。但是找到合适的历史价格数据来回溯测试你的交易策略是一项非常艰巨的任务。
虽然简单的谷歌搜索可以给你任何股票的收盘数据,但下载并为你的策略代码做好准备可能是一项任务。如果你正在创建一个需要许多不同资产类别的投资组合,那么所需要的时间将是巨大的。如果您只需运行几行代码并接收数据,不是更简单吗?
这个博客将会做到这一点。我们将研究免费和付费的解决方案,所有这些解决方案都有一个围绕其服务的易于使用的 Python Stock API 包装器。对于每种类型的解决方案,我们将查看哪种资产类型(股票、ETF、外汇、商品期货、期权、国债,甚至是密码)。这些资源提供了关于如何以各种方式检索它的信息,当然还有 python 代码中的一个例子。
这篇文章的结构如下:
使用 Python Stock API 免费解决历史数据
从正确的来源获取财务数据非常重要。虽然有许多免费的数据提供者,但你必须确保质量是好的。自由数据的问题是,在读数中可能会有一些不一致,或者有时几个字段也是如此。
因此,一旦检索到数据,就要对其进行检查。现在,让我们详细看看一些提供者。
雅虎!金融——使用 Python 股票 API 获取数据
雅虎!金融是雅虎网络的一部分,于 2017 年被出售给威瑞森媒体。
按月流量计算,它是美国最大的商业新闻网站,提供财经新闻、数据和评论,包括股票报价、新闻稿、财务报告和原创内容。
他们提供关于加密货币的市场数据,常规货币,商品期货,股票和债券,基本面和期权数据,以及市场分析和新闻。
雅虎曾经有自己的官方 API,但这在 2017 年被关闭,它在 2019 年的某个地方重新活跃起来。
代码示例是在 Google Colab 中制作的,但是当然可以在任何 jupyter notebook 服务器或本地 python 文件中执行(预先安装了依赖项)。我们将使用著名的 matplotlib 来绘制我们的数据。
使用 Python stock API 获取单个资产的数据
首先,我们从检索单个 ETF 的每日历史价格数据开始,让我们以 SPDR 标准普尔 500 ETF 信托(SPY)为例,绘制这些数据。
算法交易、HFT 和新闻交易的历史
原文:https://blog.quantinsti.com/history-algorithmic-trading-hft/
1602 年——阿姆斯特丹证券交易所
阿努普里亚·古普塔
据估计,2013 年 70%的美国股票是通过自动交易实现的。根据分析师的说法,算法交易占印度现金股票总量的三分之一,几乎占衍生品部分总量的一半。尽管 HFT 是金融新闻中最具争议的话题之一,但它仍被广泛使用,并不断扩大其在新兴市场的影响力。让我们回顾一下这种技术驱动的交易技术的历史和所涉及的风险。
证券交易所的设立
从贸易历史的开端开始,我们可以追溯到四个世纪前的 1602 年。
VOC(荷兰东印度公司或 Vereenigde Oost-in dische Compagnie)股票的二级市场始于 17 世纪的第一个十年。1602 年,荷兰东印度公司启动了阿姆斯特丹从一个区域性集镇向主导性金融中心的转变。随着易于转让的股票的引入,几天内买家就开始交易它们。很快,公众开始参与各种复杂的交易,包括远期、期货、期权和空头突袭,到 1680 年,阿姆斯特丹市场上使用的技术和我们今天使用的一样复杂。
高频交易的早期开端
高频交易是为了提高信息传播的速度。一个 HFT 交易者利用尖端的技术创新比任何人都更快地获得信息,然后比任何人都更快地执行他的交易指令。有趣的是,快速信息传递的现象可以追溯到 17 世纪的 T2。一个有趣的轶事是关于内森·梅尔·罗斯柴尔德在伦敦政府之前知道惠灵顿公爵在滑铁卢战胜了拿破仑。
汤森路透的创始人朱利叶斯·路透在 19 世纪(T2)使用了包括电报电缆和一队信鸽在内的综合技术来运行新闻传送系统。你可以在这篇文章中阅读所有关于路透社通讯页面的内容,这篇文章描述了历史上第一次高频交易创新。
二十世纪股票市场的发展
“美国股市最大的结构性变化可能是 1900 年至 1929 年左右铁路的消亡,以及 1982 年至 2007 年左右金融业的崛起,”拉塞尔·纳皮尔说。
股票市场的历史就是经济变化的历史。
金融市场中订单流的计算机化始于 20 世纪 70 年代初,一些里程碑式的事件是纽约证券交易所“指定订单周转”系统(DOT,以及后来的 SuperDOT)的引入,该系统以电子方式将订单发送到适当的交易站,由交易站人工执行。“开盘自动报告系统”(OARS)帮助专家确定市场清算开盘价(SOR 智能订单路由)。
创新市场体系由迈克尔彭博于于 1983 年推出。1981 年,所罗门兄弟公司的普通合伙人迈克尔·彭博获得了 1000 万美元作为合伙协议。为所罗门设计了内部电脑化财务系统后,彭博建立了自己的创新市场系统(IMS)。美林向 IMS 投资了 3000 万美元,帮助开发彭博终端计算机系统,到 1984 年,IMS 向所有美林客户出售机器。

社会和技术剧变是人类历史上反复出现的主题,推而广之,也是股票市场的主题。
算法交易的开始
20 世纪 80 年代末和 90 年代发展了完全电子化执行和类似电子通信网络的金融市场。在美国,十进制将最小报价单位从 1/16 美元(0.0625 美元)改为每股 0.01 美元,这可能鼓励了算法交易,因为它通过允许买卖价格之间的较小差异改变了市场微观结构,降低了做市商的交易优势,从而增加了市场流动性。
直到 1998 美国证券交易委员会(SEC)授权电子交易所为计算机化的高频交易铺平了道路。HFT 执行交易的速度比人快 1000 倍。从那时起,高频交易(HFT)变得非常普遍。
高频交易的繁荣
到 2001 年,HFT 交易的执行时间只有几秒钟。到 2010 年,这一时间缩短到毫秒,甚至微秒,随后在 2012 年缩短到纳秒。21 世纪初,高频交易占股票订单不到 10%,但这一比例增长迅速。根据纽约证券交易所的数据,在 2005 年和 2009 年之间,的高频交易量增长了 164%。
瞬间崩溃
截至 2010 年,美国 56%的股票交易是由 HFT 完成的。2010 年 5 月 6 日,一笔价值 41 亿美元的电脑销售引发了5 月闪电崩盘,道琼斯指数在一个交易日内暴跌 1000 点。近 1 万亿美元的市值被抹去,在 5 分钟的时间内下跌了 600 点,随后才恢复。美国证券交易委员会和 CFTC 将此次崩盘主要归咎于 HFT 公司。

交易技术的创新
2011 ,标志着纳米交易技术的推出之年。一家名为 Fixnetix 的公司开发了一种可以在纳秒(相当于十亿分之一秒)内执行交易的微芯片:
1 纳秒= 0.000000001 秒
基于新闻的黎明交易
【2012 年 9 月 Dataminr 投资 3000 万美元推出全新服务,将社交媒体流转化为可操作的交易信号。这有助于报道最新的商业新闻,比传统的新闻报道快 54 分钟。该平台能够识别许多独特的【微趋势】,为客户提供独特的见解,帮助他们预测世界可能很快会关注什么。其中一些信号包括现场聊天、消费者产品反应、利基在线社区的讨论转移以及公众注意力的增长和衰退模式。

检测 Twitter 上每天分享的超过 3 . 4 亿条消息的语言和传播模式是实时分析引擎的一些功能,该引擎处理公共推文的聚合。
在 2012 年期间,HFT 席卷了股票市场,并负责 70%的美国股票交易。IT 公司在 HFT 技术上投资数百万。一种专门为 HFT 制造的新计算机芯片在 0.000000074 秒内准备好交易;一条拟议中的3 亿美元的跨大西洋电缆正在建设中,目的只是为了将纽约市和伦敦之间的交易时间缩短 0.006 秒。

美国联邦调查局对社交媒体的监控以及社交媒体对证券日益增长的即时影响,2013 年 4 月 2 日日日日日证交会日日和【CFTC】日日对通过社交媒体发布上市公司公告实施限制。
Twitter 数据被用于交易
在美国证券交易委员会和 CFTC 于 2015 年 4 月 4 日实施限制后仅仅两天,彭博终端公司就将实时推文整合到其经济数据服务中。彭博社交速度追踪关于特定公司的异常聊天记录。

影响股票市场的异常新闻事件的一个值得注意的例子是从 2013 年 4 月 23 日日下午 1:05 分——这一天美联社账户发送了一条错误的推文,称白宫遭到两次爆炸袭击;这在华尔街引起了广泛的恐慌。道琼斯指数在 3 分钟内暴跌 143 点(1%),从 14699 点跌至 14555 点。

首次同地办公
将 HFT 公司和自营交易者拥有的计算机放置在交易所的计算机服务器所在的同一场所。这使得 HFT 公司能够比其他投资者提前一秒了解股票价格。对交易所来说,协同定位已经成为一项有利可图的业务,交易所向 HFT 公司收取数百万美元的“低延迟访问”特权费
为了追求速度,总部位于丹佛的数据中心公司 CoreSite 运营着一个设施,交易者可以在华盛顿市中心安装所谓的“协同定位”计算机。
快,快,最快
整个想法是获得联邦数据的速度比那些耐心等待数据以光纤线路传输到纽约、新泽西和芝加哥市场的交易员快几毫秒。所有这一切——信息从华盛顿到新泽西、纽约和芝加哥的市场服务器的传输、翻译和交易——都比人类思维的速度快。一个人眨眼需要 300 毫秒。但是参与这场电信军备竞赛的公司将一毫秒视为胜利或失败的边缘。
在过去的 20 年里,买家希望支付的价格和卖家希望得到的报酬之间的差距已经大幅缩小。其中一个原因是精确度的提高,股票价格已经从零头交易变成了便士交易。HFT 方面还向市场注入了更多流动性,消除了买卖价差,这在以前是不可能做到的。
下一步
如果你是一名散户交易者或专业技术人员,想要建立自己的自动化交易平台,今天就开始高频交易培训!从基本概念开始,如自动交易架构、市场微观结构、策略回溯测试系统和订单管理系统。你也可以报名参加 EPAT,这是业内最广泛的算法交易课程。
从酒店到 Algo Trading 的旅程|澳大利亚迭戈
Diego Palacio 来自澳大利亚,拥有超过 15 年的工作经验。他是一个非常热情的人,多年来已经获得了无数的技能。
我们很高兴分享他的旅程,从在酒店行业工作,做各种工作,转向销售和营销,现在终于进入算法交易领域。迭戈还持有算法交易管理课程(EPAT)的优秀证书。
这是他的故事。
嗨,迭戈,给我们介绍一下你自己吧!
你好,我叫迭戈·帕拉西奥。我来自哥伦比亚,大约 13 年前移民到澳大利亚。我来到这个美丽的国家学习英语,现在这里是我的家。我在财务规划行业做总经理。
我毕业于东方大学,获得了工商管理学士学位。我还获得了邦德大学的金融硕士学位和彭博的一些专业证书。
我是一个非常简单的人。哥伦比亚的文化非常注重家庭,我非常感谢我的家人能和我在一起。他们的支持非常重要,我尽量多花时间和他们在一起。天气很好,我们有很多烧烤,去海滩,看电影系列,尽量享受生活。
新冠肺炎彻底改变了世界。我们最近经历了很多停工期。但是我觉得我们生活在澳大利亚是非常幸运的。事实上,我可以在家工作,这让我能够更经常地了解市场。它为我提供了一个保持健康的工作生活平衡的机会。
我喜欢在业余时间看书。我也一直在学习,我喜欢参加短期课程来获得新的技能。足球是我的激情之一,我会尽可能的看马竞的比赛。最近,我和我的妻子一起园艺,这是非常放松的。
我是耶稣的信徒,我的见证是,我所取得的一切都是因为他在我生命中的存在。
我们很想听听你从 BBA 到金融,再到现在的算法交易的旅程!
我一直对市场很感兴趣。与投资组合管理和投资分析相关的工作一直令我感兴趣。在澳大利亚,有多种执照要求,很难在那个领域获得机会。
由于语言不通,我的工作经历是从酒店行业当洗碗工开始的。一开始,我过得很艰难,签证限制只允许我做兼职。
尽管如此,我还是在那个行业工作了七年,并且有机会从一名厨师一步步升到餐厅经理。有了接待经验后,我转到了销售部门。这非常具有挑战性,作为一名职业球员,我真的获得了成长。
语言不再是障碍,因此,我决定攻读金融硕士。我想回到金融行业,提高我的生活质量,并通过我的职业生涯获得满足感。
硕士期间的一门课程是金融交易系统,我接触了 R 语言。我明白编码技能有多强大。然而,我从没想过我自己也能做到。
硕士毕业后,我开始在一家财务规划公司工作,担任准规划师。该职位涉及投资分析和 Excel 建模。有了这个,我的市场敞口增加了,我对量化金融产生了浓厚的兴趣。
我做了几个月的 Paraplanner 经理,然后被提升为项目经理/业务分析师,在那里我学到了更多关于数据科学、编码和系统的知识。
我的同事向我介绍了 Python,这让我开始了算法交易,这让我享受到了金融和编码两个世界的精华。就在那时,我决定涉足量子金融,并找到了 EPAT。
EPAT 在你的生活中扮演了什么角色?
当我决定涉足量化金融时,我研究了多种选择,很难找到一门课程完全专注于算法交易。
有可能找到主题与交易和金融相关的短期课程,但它们并不是我想要的。这就是 EPAT 出现的时候。它的课程很有挑战性,涵盖了所有重要的科目。
课程中涉及的许多主题是我在理论上知道的,但从未有机会实际应用。EPAT 帮助我提高了编程技能,并将我的金融知识运用到实际场景中。
我不是 IT 人士,EPAT 项目对我来说有点挑战性。但是,关键是要循序渐进,花时间和精力。这样,看起来很难的事情变得更容易,也更享受。
我必须说,教员们的支持是惊人的,经理们在每一条道路上都指引着我,他们帮助我回答问题。当然,我为自己目前的编码技能感到自豪,而且总是有更多需要改进的地方!
由于我所在的时区,很难参加所有的现场讲座。我发现 EPAT 的 LMS 非常方便,因为它允许我事后观看讲座。
最后,EPAT 在我的生活中有一个重要的角色。事实上,我可以回来并终生访问这些内容,这使我能够及时了解最新的变化。我不得不不断回顾那些我还没有应用到我的策略中的话题。
你给所有有抱负的算法交易者的信息。
我真的相信任何人都可以成为算法交易者,不管你来自什么背景。如果你没有任何编码经验,也不要着急,一步一步来就好。
对自己有耐心,庆祝你的“胜利”,随着时间和努力,你将实现你的目标。
不要指望你会一头扎进课程中,找到一个简单的课程,EPAT 项目无疑是具有挑战性的,但课程设计良好,得到的支持将帮助你克服学习道路上的任何挑战。
最后,你将学到的技能可以应用到不同的知识领域,学习 Python 是非常有用和有价值的。
谁可以学习算法交易
这是一个可靠的建议,迭戈。纪律、奉献、团队合作和目标设定能帮助你实现的目标是无限的。我们相信你的旅程会激励很多人。感谢您与我们分享您的旅程,我们祝您在成为成功的 Algo 交易者的旅途中好运。
如果你也想用终生的技能来武装自己,这将永远帮助你提升你的交易策略。这门 algo 交易课程的主题包括统计学和计量经济学、金融计算和技术、机器学习,确保你精通在交易领域取得成功所需的每一项技能。现在就来看看 EPAT 吧!
免责声明:为了帮助那些正在考虑从事算法和量化交易的人,这个成功的故事是根据 QuantInsti EPAT 项目的学生或校友的个人经历整理的。成功案例仅用于说明目的,不用于投资目的。EPAT 方案完成后取得的成果对所有人来说可能不尽相同。T3】
如何成为一名独立的算法交易员?
原文:https://blog.quantinsti.com/how-become-independent-algorithmic-trader/

算法交易是使用计算机程序来自动化你的策略,以获得更高的利润。你可以选择通过一个结构化的综合课程来获得开始交易所需的基本技能,或者你可以自学。协助可以为你提供正确的方向,从而最大限度地减少寻路的时间。
QuantInsti 的算法交易(EPAT)高管课程(T1)是一门全面的课程,在六个月的时间里,它可以帮助你建立自己的算法交易公司,或者开始独立交易。课程结构提供的理论和实践知识为如何管理和回溯测试数据、编程语言和交易策略提供了专业指导。
该课程广泛涵盖期权、衍生品和风险以及开始交易所需的自动交易系统。EPATians 人还接受 excel 基础知识、数据可视化、各种模型应用等方面的培训。使用模拟和理解结果预测未来股票价格的随机行走模型,资本资产定价模型。
我们向您介绍了我们的一位 EPATian 员工劳伦斯·特劳德·K·拉吉,他在技术领域已经工作了二十多年,领导过不同的业务部门。
以下是 Raj 先生对他的经历的描述。
What did you learn from this course?
成功完成 EPAT 课程后,我现在看待市场的方式与我在课程开始前完全不同。EPAT 给了我很好的实践经验和概率思维知识,回测了许多算法策略、市场微观结构、买卖价差、衍生品市场交易等。EPAT 课程由各自领域的专家授课,这进一步丰富了我的经验。
我想感谢两位老师,他们的讲座对我的学习产生了深远的影响。
Nitesh Khandelwal 先生:感谢他关于 ATR 策略、excel 编程的会议,以及他对我的最终项目的支持。
Yves Hilpisch 博士:让 Python 易于理解。他关于如何对策略进行编码和回溯测试并将其付诸实践的会议极大地激励了我开发 Python 编程技能。
今天,我已经成功地从零开始开发了我的算法交易系统,并开始了我自己的交易公司。
What is your educational and professional background?
我来自一个非金融和非编程的背景。在我 20 多年的职业生涯中,主要是在技术支持方面,我曾以各种角色和身份管理过团队,包括在 Sify、戴尔、Tesco、微软等公司担任技术支持总监。在经历了多年的支持后,我想换个方向做一些完全不同的事情,重新开始我的学习过程。股票市场最让我兴奋,因为它不断变化的性质,高度竞争,具有挑战性和专注的工作环境。
我选择股票交易作为我的下一个职业发展方向。我开始阅读算法交易书籍和关于市场、股票交易、策略等的网络文章。在将近一年的时间里,我开始了日内手工交易,以获得实践经验。手工交易的经历是成功和失败的混合体,我总觉得缺少了什么。我觉得需要一个结构化的学习过程。
How do you know about QuantInsti & Why did you choose QuantInsti?
我参加了 2016 年 10 月 Zerodha 主办的 QuantInsti 的会议。从那时起,我开始了解 Quantinsti 和他们的 EPAT 项目。这门课程符合我的要求。EPAT 让我对市场、市场微观结构、算法、策略和交易的基本编程技巧有了基本的了解。
How did you find the employment opportunities offered by QuantInsti?
虽然我选择了自己交易,但是实习机会非常有趣,EPAT 课程提供了足够的基础知识来抓住这些机会。
Would you recommend QuantInsti to others who wish to engage in algorithm trading?
当然,这个课程会帮助任何对算法交易有热情的人。
下一步:
和 Raj 一样,你是否热衷于学习更多关于算法交易的知识?联系我们,了解不同的金融策略世界观。 QuantInsti 帮助人们获得适用于各种交易工具和平台的技能。算法交易(EPAT)的高管课程涵盖了统计学&计量经济学、金融计算&技术和算法&量化交易等培训模块。EPAT 让你具备成为成功交易者所需的技能。
对冲基金如何使用杠杆?
原文:https://blog.quantinsti.com/how-hedge-funds-use-leverage/

作者布兰登·姆西曼加
定义“对冲”
生活中总有我们希望能够摆脱的东西,我们希望,通常不受贪婪支配的非常聪明的人迟早会有惊人的新发现来保护自己免受未来风险的可能性。正是因为人们了解不确定性的影响,所以在某种意义上,他们常常希望“消除”这种变化的风险。如果我们认为即使有了这些新发明,我们也能够摧毁改变的机会,那就太天真了,因为这个世界并不完美,但正是完美和不完美的平衡让这个星球和平地在其轴上。
让我们说,我们都知道,当冬天来临的时候,感染流感的几率会翻倍,所以当冬天开始降临的时候,人们会接种疫苗,脱掉厚重的夹克和鹅毛羽绒被,作为预防流感的措施。就像一个安全网。就像金融界的一切事物一样,我们也有许多具有相似特征的事物。例如,一份保险单可以消除你遭遇意外时的经济压力,但这些东西都不是免费的。我们毕竟是金融部门,我们的主要目的是让我们的钱增长。因此,在投资方面,我们也开发了某些工具,以消除放弃你的钱来购买一项有望在未来产生回报的资产所涉及的一些风险,这就是对冲。
对冲就是进行投资以降低未来亏损的风险,因为价格是不稳定的,我们无法控制。套期保值通常在我们处理未来要买卖的东西时使用。根据定义,对冲基金是一种受管理的投资组合,它适应不同的投资策略头寸,通过押注未来价格的波动来获取更高的利润。对冲基金基本上是一种投资基金,需要相当高的最低投资资本,由私人实体管理。
使用杠杆
杠杆是利用借来的资本或股本进行投资,期望获得的利润将大于应付利息。在投资行业中,杠杆是一个非常重要的工具,对冲基金也利用杠杆。
对冲基金目前正借入更多资金购买股票,通过纽约证券交易所经纪商发放的贷款已达到 4 年来的最高点。这表明信心正在增强,信心水平可能会达到 2008 年的水平。据摩根士丹利称,投机股价涨跌的对冲基金经理的杠杆率达到了至少自 2004 年以来从未有过的水平。
纽约证交所杠杆率上升是一个积极迹象,表明对冲基金经理和投资者等人士的信心有所增强。这也表明,投资者有足够的信心,以积极的预期向对冲基金经理提供信贷。经济增长的一个必要条件是投资者应该有一个积极的预期。
然而,杠杆意味着,如果股市下跌,对冲基金可能会遭受更大的损失。如果市场继续朝着同一个方向发展,风险会带来一些高回报。对冲基金经理押注,低于 60 年平均水平 9.8%的创纪录收益和估值,将有助于推动标准普尔 500 指数逼近 2007 年 10 月创下的纪录。
对对冲基金行业来说,今年将是非常重要的一年,投资者和对冲基金经理都将密切关注市场。杠杆率上升可能表明对冲基金和机构投资者感到放心。许多对冲基金利用杠杆持有超过其资本的多头和空头头寸。然而,值得注意的是,对冲基金并不总是利用杠杆。
使用过多杠杆的负面影响是,它可能对金融体系产生灾难性影响。对冲基金和投资行业中的其他公司可以积极地使用杠杆来增加利润,但从消极的方面来看,当使用杠杆导致损失时,损失也会增加。一些投资者已经对自 2008 年以来从未见过的创纪录高杠杆水平表示担忧。人们担心股价下跌会导致股市和经济螺旋式下降。这一点很重要,因为一些投资者正在筹集资金,而且对冲基金的杠杆水平必须受到密切关注和监管,以防止在股市价格大幅下跌的情况下出现巨额亏损。
很明显,对于对冲基金经理来说,杠杆是一个非常重要和有用的工具,但当公司使用过多杠杆时,可能会给金融体系带来问题。最成功的对冲基金经理确切知道什么时候使用杠杆是有利的,什么时候可能是不利的。
您可能还想了解金融机构的风险管理、银行的资产负债管理以及风险和资产管理的职业机会。
技术和金融专家如何成为 Quants?
原文:https://blog.quantinsti.com/how-technical-financial-experts-become-quants/

股票市场提供了广泛的职业机会。如果你从事业务开发、战略或技术方面的工作,这篇文章将告诉你如何转向盈利方面。良好的行业工作知识会给你巨大的推动。
你了解市场框架的功能和交易所的工作流程。你已经知道是什么影响了上市公司的长期头寸。制定交易策略和适用的技术理解(比如编程语言和平台)是成为量化分析师所需要的。确定你的财务目标,起草你自己的战略,获得技术敏锐度,你就可以开始了。实现你目标的一个方法是聪明方法。
请继续阅读,了解 Maxime Fages T1 是如何加入 QuantInsti 的,他有着强大的并购和公司战略背景。获得认证后,马克西姆创办了自己的量子研究公司。德瑞克,Maxime 在这个新项目中的合作伙伴也是 QuantInsti 的校友,他们两人是在认证课程中认识的。他们的合资企业金罗盘做得非常出色,现在是我们的招聘合作伙伴之一。
下面是马克西姆·法吉斯的详细讨论
Tell us a little about yourself?
我是法国人,但已经在新加坡生活了 4 年多。事实上,我的妻子,我的儿子里昂和我都是公关,新加坡对我们来说越来越像家了。我一直对科技有浓厚的兴趣。我是一名训练有素的工程师,我喜欢在家里试验新的处理或可视化框架。为了休息,我制作电子音乐,冲浪,或者在家附近,我发现了巴西柔术,我喜欢它。
When did you discover your passion for the financial market? (especially quantization and algorithmic transactions)
我来自 M&A 那边。我一直在为一笔大宗交易的资产定价,最终有机会进入一家初创基金。虽然我最初的角色是一名专家,但我很快接手了投资组合构建的重要部分。新兴基金的风险状况至关重要,我很快发现我需要新的工具和概念来管理它。尽管我对 Excel 掌握得很好(可能现在仍然如此),但所需的数据量和处理量实在是太多了。我发现了 R,以及一些非常有趣的风险定价概念。例如,预期短缺。
How did you come into contact with QuantInsti's EPAT project?
在那次经历之后,我在芝加哥商品交易所工作,负责亚洲战略。这是一家不可思议的公司,拥有无可否认的最广泛的产品范围,我非常喜欢在那里的工作。我在亚洲交易时段研究了 CME 产品的微观结构,因为对客户来说,什么比流动性更重要?
我渴望看到事情的执行方面,并寻找一个程序。我从一个自营交易客户那里听说了它,它的形式、范围和持续时间都符合我的要求。
How was your study experience?
太糟糕了!在有固定工作的同时管理个人研究,并在周六和周日参加网络会议是一项艰巨的任务。好的一面是,大部分内容对我来说都很新奇,而且是由从业人员教授的。我发现他们很容易接近,并热衷于在课后通过电子邮件甚至打电话来回答问题。
我特别热衷于使用执行系统,超越托管服务器模型,评估机器学习的潜力。那时,我和德里克的互动非常频繁,交换研究论文或有趣的 githubs。我们有一个雄心勃勃的范围,所以我们问,并获准作为一个团队工作。我们最终得到了一个有趣的交易系统,它使用基于云的模型来进行 WTI 当天的交易。
When and how did you come up with the idea of starting your own quantitative research company?
在 EPAT 之后,我们继续实验。在 TeamViewer 和微信上聊了 6 个多月后,我们终于见面了。我们在曼谷相遇,因为它位于新加坡和北京的中间,非常不真实!我们的一个共同点是,我们都是期货和期权的人,虽然量化技术和算法交易正在成为主流,但期货仍然不太容易获得。
因此,在不止一个方面,黄金罗盘源于我们对期货的热情,以及我们想要分享期货交易中许多令人难以置信的酷事情的愿望。我们对未来有雄心勃勃的计划,包括开源对交易栈的全面研究,以及投资组合模拟和报告。不过现在,我们解决的是作为德里克的客户和我的战略家的需求。交易所、经纪商和资产管理公司都意识到了客户日益复杂的需求。内部研究费用昂贵,而且越来越受到监管。因此,他们需要一个可靠的提供商来设计关于他们分发的产品的突出和可操作的内容。
So far, how is your golden compass plan going?
难以置信的满足!不幸的是,我们受到严格的 NDA 的约束,但我们确实有几个大型区域交易所作为客户,我们看到他们的工作性质越来越考验我们的技能。我们拥有坚实的基础设施和非凡的人才(包括我们通过 QI 聘用的一些人才)。漫长的白天和夜晚,但它令人难以置信的兴奋。
What does the future look like? (for the company and the whole industry)
整个资产管理行业都面临压力。波士顿咨询集团发布了一份有趣的报告,概述了该行业的结构变化。十多年来,AuM 的净流量一直很低,产品组合正转向被动或更便宜的选择。这让 AM 的利润率面临压力,每个人都在关注成本。在这种情况下,系统基金表现相当不错,但我坚信,许多资产配置者甚至个人现在都希望尽可能地做自己的聪明贝塔或阿尔法。
这对我们来说是一个积极的趋势,因为我们的研究旨在让交易者更接近可行的解决方案。下一步是开源量化技术,我们也已经接触到编写策略。不过,这是未来,目前,我们需要管理增长和销售渠道。
How does EPAT help you? Would you recommend it to others?
首先,对我来说,这是一次与德里克的不可思议的相遇,但我也很感激校友们不断扩大的影响。我也打电话给教员或 QuantInsti 的团队寻求支持,总是得到可靠的答案。课程非常有趣,并提供了一个很好的基础。当然,如果你想成为分散策略专家或执行策略专家,你需要付出更多的努力,但至少你有一个大致的方向。
有抱负的量化分析师或企业家的动机
你是否也梦想成为一名量化交易者或者创办自己的交易公司?我们确信马克西姆的故事鼓舞了你的计划。加入我们强大的领先校友和全球教师队伍。查看算法交易(EPAT)中的执行程序。课程涵盖统计学&计量经济学、金融计算&技术和算法&定量交易等培训模块。EPAT 让你具备成为成功交易者所需的技能。立即报名!
请分享你作为算法交易者/定量分析师的评论和经验。我们很想听听你鼓舞人心的职业旅程!
如何用 R 设计 Quant 交易策略?
原文:https://blog.quantinsti.com/how-to-design-quant-trading-strategies-using-r/

这篇博客简要介绍了使用 R 进行策略回溯测试的概念。在深入研究使用 R 的交易术语之前,让我们花一些时间来理解 R 是什么。r 是开源的。目前有超过 4000 个附加包,18000 多个 LinkedIn 群组成员和近 80 个 R Meetup 群组。这是一个完美的工具,用于统计分析,尤其是数据分析。CRAN 提供了一个软件包列表以及所需的基本安装。根据需要进行的分析,有许多可用的软件包。为了实现交易策略,我们将使用名为 quantstrat 的软件包。
任何基本交易策略的四个步骤
- 假设形成
- 测试
- 改善
- 生产
我们的假设被表述为“市场是均值回归的”。均值回归理论认为价格最终会回到平均值。第二步是测试假设,我们根据假设制定策略,并计算指标、信号和绩效指标。测试阶段可以分为三个步骤,获取数据、编写策略和分析输出。在这个例子中,我们考虑漂亮的蜜蜂。它是由高盛管理的交易所交易基金。NSE 具有巨大的仪器体积,因此我们考虑这一点。下图显示了相同的开盘价-最高价-最低价-收盘价。

我们绘制收盘价的布林线。

我们设定了一个阈值来比较价格的波动。如果价格上升/下降,我们更新阈值列。收盘价与高波段和低波段进行比较。当穿过上带时,这是卖出的信号。同样,当穿越较低波段时,是买入信号。编码部分可总结如下:-
- 添加指标
- 添加信号
- 添加规则
下图给出了该策略输出的俯视图。

因此,我们的假设,市场是均值回复是支持的。因为这是回溯测试,所以我们有空间改进交易参数,提高我们的平均回报和实现的利润。这可以通过设置不同的阈值水平、更严格的进场规则、止损等来实现。人们可以选择更多的数据进行回溯测试,使用 Bayseian 方法设置阈值,将波动性考虑在内。
一旦你对后验测试结果支持的交易策略有信心,你就可以进行实时交易了。生产环境本身是一个很大的话题,超出了本文的范围。简单来说,这包括在交易平台上写策略。
网络研讨会视频
https://www.youtube.com/watch?v=LkjpZ-pirGM
下一步
一旦你学会了使用 R 设计一个 quant 交易策略的基础,你可以看一看用 R 编码的交易策略的例子,也可以学习一下如何开始使用 R 中的 quantmod 包。你也可以看看我们的交互式自定进度 10 小时长的数据营课程'在 R 建模量化交易策略'
如何设置自动交易[网上研讨会]
原文:https://blog.quantinsti.com/how-to-set-up-automated-trading-17-march-2022/
https://www.youtube.com/embed/CcWLRe9vM7c?rel=0
演示文稿
https://www.slideshare.net/slideshow/embed_code/key/K2Y0UzgxJUIz8L?hostedIn=slideshare&page=upload
关于会议
自动化无处不在!在我们生活的世界里,你可以获得某些没有人监督的产品。自动化正在改变整个行业,贸易世界会被甩在后面吗?
加入我们这个有趣的会议,在这里我们讨论交易过程,以及我们如何自动化某些任务,以最大限度地提高我们的效率。我们还将简要介绍如何实现交易策略的自动化。
会议大纲如下:
- 什么是自动化?
- 对自动化的需求
- 交易的过程
- 交易流程各个方面的自动化
- 创建简单的基于规则的策略
- 自动化简单的交易策略
- 问与答(Question and Answer)
关于演讲者

雷希特·帕查内卡尔(Quant 分析师,QuantInsti)
雷希特·帕查内卡在 IIM·印多尔完成了他的计算机工程,接着又完成了他的 PGDM。他是 Quantra 内容团队的一员,研究股票和固定收益证券。工作之余,他喜欢阅读市场中的异常数据,并怀着浓厚的兴趣关注特斯拉公司(Tesla Inc .)。
本次活动于:
2022 年 3 月 17 日星期四
东部时间上午 9:30 | IST 时间晚上 7:00 |新加坡时间晚上 9:30
赫斯特指数:计算,价值和更多
在这篇博客中,我们将讨论时间序列分析中的一个重要概念:赫斯特指数。我们将借助一个例子来学习如何计算它。
首先让我们了解一下什么是赫斯特指数。
赫斯特指数定义
赫斯特指数被用来衡量时间序列的长期记忆。它与自相关有关(你可以阅读更多关于自相关和自相关的内容。)以及它们随着值对之间的滞后增加而减小的速率。
赫斯特值
赫斯特值大于 0.5
如果赫斯特值大于 0.5,那么它将表明一个持续的时间序列(大致相当于一个趋势市场)。
赫斯特值小于 0.5
如果赫斯特值小于 0.5,那么它可以被认为是一个反持续时间序列(大致翻译为横向市场)。
赫斯特值为 0.5
如果赫斯特值是 0.5,那么它将表明一个随机游走或一个不可能根据过去数据预测未来的市场。
如何计算赫斯特指数
为了计算指数,我们需要将数据分成不同的块。例如,如果您有过去 8 天的 BTC/美元的返回数据,那么您将它分成两半,如下所示。
以下 8 个观察值的示例仅用于说明目的 1 :
| 数据 | 组块 1 |
| Zero point zero four |
| Zero point zero two |
| Zero point zero five |
| Zero point zero eight |
| Zero point zero two |
| -0.17 |
| Zero point zero five |
| Zero |
1 在实际应用中,子序列的长度通常要长得多,并且会影响 R/S 统计的均值和标准差。
然后,我们将数据分成如下 3 个不同的缝隙:
- 第 1 部分-8 个观察值中的一个
- 第 2 部分——两大块,每块 4 个观察值
- 第 3 部分-四大块,每块两个观察值
| 数据 | 组块 1 |
| Zero point zero four |
| Zero point zero two |
| Zero point zero five |
| Zero point zero eight |
| Zero point zero two |
| -0.17 |
| Zero point zero five |
| Zero |
| 数据 | 组块 2 | 组块 3 |
| Zero point zero four | Zero point zero two |
| Zero point zero two | -0.17 |
| Zero point zero five | Zero point zero five |
| Zero point zero eight | Zero |
| 数据 | 组块 4 | 组块 5 | 组块 6 | 组块 7 |
| Zero point zero four | Zero point zero five | Zero point zero two | Zero point zero five |
| Zero point zero two | Zero point zero eight | -0.17 | Zero |
将数据划分为区块后,我们对每个区块执行以下计算:
第一步
首先,我们用 n 次观察来计算数据块的平均值,
M = (1/n) [ h(1)+h(2)+...+h(n) ]
| 数据 | 组块 1 |
| Zero point zero four |
| Zero point zero two |
| Zero point zero five |
| Zero point zero eight |
| Zero point zero two |
| -0.17 |
| Zero point zero five |
| Zero |
| 数据 | 组块 2 | 组块 3 |
| Zero point zero four | Zero point zero two |
| Zero point zero two | -0.17 |
| Zero point zero five | Zero point zero five |
| Zero point zero eight | Zero |
| 数据 | 组块 4 | 组块 5 | 组块 6 | 组块 7 |
| Zero point zero four | Zero point zero five | Zero point zero two | Zero point zero five |
| Zero point zero two | Zero point zero eight | -0.17 | Zero |
第二步
然后我们计算 n 次观察的标准偏差
s(n) = STD( h(1)+h(2)+...+h(n))
| 表示 | Zero point zero one one |
| 标准 | Zero point zero seven two |
| 表示 | 0.048 | -0.025 |
| 标准 | Zero point zero two two | Zero point zero nine nine |
| 表示 | Zero point zero three | Zero point zero six five | -0.075 | Zero point zero two five |
| 标准 | 0.0141 | Zero point zero two one | Zero point one three four | Zero point zero three five |
第三步
然后我们通过从观察值中减去平均值来创建一个以平均值为中心的序列,
x(1) = h(1) - M x(2) = h(2) - M ... x(n) = h(n) - M
| 以平均值为中心的序列的累积和 | Zero point zero two nine |
| Zero point zero three eight |
| Zero point zero seven six |
| Zero point one four five |
| Zero point one five four |
| -0.028 |
| Zero point zero one one |
| Zero |
| 以平均值为中心的序列的累积和 | -0.008 | Zero point zero four five |
| -0.035 | -0.100 |
| -0.033 | -0.025 |
| Zero | Zero |
| 以平均值为中心的序列的累积和 | Zero point zero one | -0.015 | Zero point zero nine five | Zero point zero two five |
| Zero | Zero | Zero | Zero |
第四步
然后,我们通过对以平均值为中心的值求和来计算累积偏差,
Y(1) = x(1) Y(2) = x(1) + x(2) ... Y(n) = x(1) + x(2) + ...+ x(n)
| 均值中心数列(h(n)-M) | Zero point zero two nine |
| 标准 | Zero point zero zero nine |
| 均值中心数列(h(n)-M) | -0.008 | Zero point zero four five |
| 标准 | -0.028 | -0.145 |
| 均值中心数列(h(n)-M) | Zero point zero one | -0.015 | Zero point zero nine five | Zero point zero two five |
| 标准 | -0.010 | Zero point zero one five | -0.095 | -0.025 |
第五步
接下来,我们计算范围(R),即累积偏差的最大值和最小值之间的差值:
| 范围 | Zero point one eight two |
| 范围 | Zero point zero three five | Zero point one four five |
| 范围 | Zero point zero one | Zero point zero one five | Zero point zero nine five | Zero point zero two five |
第六步
最后,我们计算范围 R 与标准偏差 s 的比率。这也称为重新调整的范围。
| 范围 | Zero point one eight two |
| R/S(范围/标准) | Two point five two eight |
| 平均 R/S | Two point five two eight |
| 范围 | Zero point zero three five | Zero point one four five |
| R/S(范围/标准) | One point six one seven | One point four six seven |
| 平均 R/S | One point five four two | |
| 范围 | Zero point zero one | Zero point zero one five | Zero point zero nine five | Zero point zero two five |
| R/S(范围/标准) | Zero point seven zero seven | Zero point seven zero seven | Zero point seven zero seven | Zero point seven zero seven |
| 平均 R/S | Zero point seven zero seven | | | |
第七步
一旦我们有了所有块的重新标度范围,我们就计算每个分区的平均值,并记下它以及该分区的每个块中的样本数,如图所示。

| 范围 | Zero point one eight two |
| R/S(范围/标准) | Two point five two eight |
| 平均 R/S | Two point five two eight |
| 范围 | Zero point zero three five | Zero point one four five |
| R/S(范围/标准) | One point six one seven | One point four six seven |
| 平均 R/S | One point five four two | |
| 范围 | Zero point zero one | Zero point zero one five | Zero point zero nine five | Zero point zero two five |
| R/S(范围/标准) | Zero point seven zero seven | Zero point seven zero seven | Zero point seven zero seven | Zero point seven zero seven |
| 平均 R/S | Zero point seven zero seven | | | |
第八步
接下来,我们计算每个区域的大小和每个区域的重新调整范围的对数值。
| 总结 |
| 尺寸 | R/S | 日志大小 | R/S 日志 |
| eight | Two point five two eight | Two point zero seven nine | Zero point nine two seven |
| four | One point five four two | One point three eight six | Zero point four three three |
| Two | Zero point seven zero seven | Zero point six nine three | -0.347 |
结果
赫斯特指数“H”只不过是每个区间的对数(R/S)与每个区间的对数(大小)的曲线斜率。
这里 log(R/S)是因变量或 y 变量,log(size)是自变量或 x 变量:
| 赫斯特指数 | 0.918 |
结论
这个赫斯特指数值表明我们的数据是持久的,但我们必须记住,我们的数据集太小,无法得出这样的结论。
例如,如果你想用 python 中的‘hurst’库计算 Hurst 指数,它要求你至少给出 100 个数据点。
我们希望你已经从这篇博客中学会了如何计算赫斯特指数。在我们关于加密货币的高级课程中,我们展示了赫斯特指数和另一个技术指标如何产生优化的交易信号。
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
交易中的假设检验-逐步指南
原文:https://blog.quantinsti.com/hypothesis-testing-trading-guide/
在这篇博文中,我们将了解什么是假设形成,以及如何在交易中进行假设检验。
建立量化交易策略需要一个严格的方法。任何量化交易系统都由四大部分组成:
- 假设形成-寻找策略
- 回溯测试和优化假设——获取数据,编码策略,分析性能
- 自动化策略-链接到经纪公司
- 风险管理-最佳资本分配、买卖规模等。
假设形成是关于你对市场的看法。如果你认为市场趋势看涨,你可以买入该资产;如果你认为市场趋势看跌,你可以做空该资产。但是为了验证假设,你需要进行假设检验。
假设检验
假设检验是对关于人口的假设或想法进行检验的系统化方法。在假设检验中,我们通过测量样本中的行为来了解更多关于人群的信息,因为样本与人群有些关联。例如,如果俏皮 50 指数中所有股票的回报率为 3%,并且我们从指数中随机选择 10 只股票,那么样本平均值的平均值将等于总体平均值。
假设你是一名分析师,你认为 Nifty 50 指数中所有股票的平均回报率都高于 3%。你假设收益是正态分布的。
假设检验方法
假设检验的方法可以概括为四个步骤:
第一步: 陈述假设
陈述假设是假设检验既定流程的第一步。它包括陈述无效假设和替代假设。
零假设:
在假设检验中,零假设通常是我们想要拒绝的假设。它通常用 Ho 表示,并且总是包含某种形式的等号。
在我们的例子中,零假设是:
何:μ< = 3的。
μ为总体均值。
替代假设:
备选假设是当零假设被拒绝时将被接受的陈述。它通常用 Ha 表示。
在我们的例子中,另一个假设是:
ha:μ****>
第二步:设置判定标准
决策必须基于数据集的某些参数,这就是正态分布、显著性水平、单尾和双尾检验的概念出现的地方。
常态分布
正态分布是一种概率分布,其中大部分数值位于平均值附近,其他数值对称地位于平均值之上或之下。
对于正态分布,68%的值落在平均值的一个标准偏差内。95%的值落在平均值的两个标准偏差内,99.7%的值落在平均值的三个标准偏差内。

显著性水平
显著性水平或显著性水平用于设定标准,根据该标准做出关于零假设的决定。它被定义为当假设为真时,检验统计量偶然拒绝原假设的概率。它用α或α 来表示。如果我们选择 0.05 的显著性水平,这意味着当假设为真时,我们有 5%的机会拒绝零假设。显著性水平为 0.01 意味着当零假设为真时,有 1%的机会拒绝零假设。
通常,显著性水平是在计算检验统计之前指定的,因为检验统计的结果可能会影响显著性水平的选择。
单尾检验
单尾检验意味着假设检验,其中拒绝区域出现在抽样分布的一侧。如果总体参数是“小于”或“大于”,那么我们使用单尾检验。例如,如果 Nifty 50 所有股票的回报率都大于 3%,那么进行的假设检验就是单尾检验。


双尾检验
双尾检验表示假设检验,其中拒绝区域位于抽样分布的两侧。如果总体参数的特征是“等于”或“不等于”,那么我们使用双尾检验。例如,如果 Nifty 50 的所有股票的回报率等于 3%,那么它是一个双尾测试,我们可以拒绝基于任何一个尾的观察的零假设。

替代假设决定了是将显著性水平置于抽样分布的一个尾部还是两个尾部。如果μ 是一个总体参数的实际值(如均值或标准差),μ 0 是我们假设的总体参数的值,那么:
| 替代假设 | 测试类型 |
| h1:μ≤t1【0】T2 | 双尾检验 |
| h1:μ>0 | 单尾(右) |
| h1:μ<0 | 单尾(左) |
第三步:计算测试统计量
在假设检验中,检验统计量被定义为从样本中提取的数量,用于决定是拒绝还是接受零假设。
计算检验统计量的一般公式是
检验统计量=【-样本统计量-根据空值的参数值】 / 样本统计量的标准误差(SE)
标准误差=标准差/ √(样本数)
第四步:做决定
关于假设检验的决定是通过比较两个值做出的。
- 测试统计
- 临界值:临界值是检验分布上的一个点,它与检验统计量进行比较,以确定是否拒绝零假设。是显著性水平 (α ) 、概率分布以及检验是单尾还是双尾的函数。
单尾和双尾检验(正态分布)在三种常用显著性水平下的临界值。
| 显著性水平****【α】 | 单尾检验 | 双尾检验 |
| 0.05 (5%) | +1.625 或-1.625 | 1.96 |
| 0.01 (1%) | +2.33 或-2.33 | 2.58 |
| 0.001 (0.1%) | +3.09 或-3.09 | 3.30 |
对于双尾检验,显著性水平 (α ) 对半分开,放在正态分布的每个尾部,如上图双尾图所示。
如果检验统计量的值小于或等于临界值,我们拒绝零假设,并声明结果具有统计学意义。如果检验统计量大于临界值,那么我们不能拒绝零假设,我们声明结果没有统计学意义。

其中,
Zα =显著性水平的临界值
错误类型
假设检验中有两类错误:第一类和第二类。
第一类错误:
类型 I 错误被定义为当零假设为真时拒绝零假设。犯 I 型错误的概率是α。α值为 0.05 表示当你拒绝零假设时,你愿意接受 5%的错误概率。选择较低的α值可以减少 I 型误差。
第二类错误:
当零假设是假的,我们没有拒绝它,我们犯了第二类错误。犯第二类错误的概率是β。我们可以通过增加样本量来降低犯第二类错误的风险。
结论
为了创造一个有利可图的交易策略,你需要有一个假设,为了验证一个假设,你需要进行假设检验。假设检验涉及的步骤有:
- 陈述假设
- 设定决策标准
- 计算测试统计数据
- 做决定
假设检验通常是我们开始制定交易策略的第一步。你可以通过检查算法交易策略包来浏览不同的策略。
建议阅读:
关于算法交易你需要知道的一切
免责声明:股票市场的所有投资和交易都有风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。
在交互式代理 API 中实现 Python 的 IBPy 教程
原文:https://blog.quantinsti.com/ibpy-tutorial-implement-python-interactive-brokers-api/
我希望您在参加我们关于使用 Python 与交互式经纪人进行 交易的网上研讨会时过得愉快。我认为这将是一个非常好的主意,给你一个关于交互式经纪人 API** 和使用 IBPy 在 IB 的 TWS 中实现 Python 的简要见解。**
随着我们的进行,你将需要一个交互式经纪人模拟账户和 IBPy。在本文快结束时,您将使用交互式代理 API 运行一个简单的订单路由程序。
我们涵盖的内容:
对于那些已经了解交互式经纪人(IB)及其界面的人来说,你可以很好地理解为什么我更喜欢 IB 而不是其他在线经纪人。但是,对于没有使用过 IB 的人来说,这可能是他们首先想到的问题:
为什么要互动券商?
互动经纪人是我的首选,原因很简单:
- 在 100 多个市场进行国际投资
- 极具竞争力的佣金率
- 低利润率
- 非常友好的用户界面
- 大量订单类型可供选择
上面说的五点,对任何一个初学者来说最重要印象最深的就是第二点和第四点了吧?
交互式代理 API 可以在专业环境中使用,即使是对它完全陌生的人也可以使用。交互式代理 API 与 Java、C++和 Python 的连接也令人印象深刻。
够了,是时候进入下一步了。我可以理解,你们中的大多数人一定已经迫不及待地想在交互式经纪人 API 面板上一试身手了。毕竟,没有人会拒绝一些既友好又有利可图的东西。
你可以很容易地在互动经纪人网站上设置你的账户。有一个选项,您可以选择免费试用包。
算法交易者更喜欢交互式经纪人,因为其相对简单的 API。 在这篇文章中,我将告诉你如何通过使用一个叫做 IBPy 的桥在交互式经纪人 API 中实现 Python 来自动化交易。
由于交互式经纪人为多种多样的交易者提供了一个平台,因此,它的 GUI 包含了无数的功能。这个独立的应用程序在交互式经纪人上被称为交易员工作站或【TWS】。
除了交易者工作站之外,Interactive Brokers 还有一个 IB 网关。这个特殊的应用程序允许 IB 服务器使用命令行界面访问它。Algo 交易者通常更喜欢用这个而不是 GUI。
IBPy 是什么?T3】
IBPy 是用于访问交互式经纪人在线交易系统的 API 的第三方实现。
IBPy 实现了 Python 程序员可以用来连接 IB、请求股票行情数据、提交股票和期货订单等功能。
IBPy 的目的是以一种可以从 Python 调用的方式来构思用 Java 编写的本机 API。IBPy 中最重要的两个库是 ib.ext 和 ib.opt。
通过 IBPy,API 执行订单并获取实时市场数据。该架构本质上利用了客户端-服务器模型。
在 Python 中实现 IB
首先,您必须有一个 Interactive Brokers 帐户和一个 Python 工作空间来安装 IBPy,然后,您可以将它用于您的编码目的。
安装 IBPy
正如我之前提到的, IBPy 是一个 Python 模拟器为基于 Java 的 交互式代理 API 编写的。IBPy 有助于将 Python 中的算法交易系统的开发变成一个不那么麻烦的过程。
为此,我将把它作为与互动经纪人 TWS 进行各种互动的基地。这里我假设你的系统上安装了 Python 2.7,否则你可以参考这里提到的安装指南。
在 Ubuntu 上安装 IBPy
采集
IBPy 可以从 GitHub 仓库获得。
Ubuntu 系统需要以下代码:
sudo apt-get install git-core
创建子目录
mkdir ~/ibapi
T1】下载 IBPy
cd ~/ibapi
git clone https://github.com/blampe/IbPy
cd ~/ibapi/IbPypython setup.py.in install
太好了!你已经在你的 Ubuntu 系统上安装了 Python。
在 Windows 上安装 IBPy
去 github 库,从https://goo.gl/e6Idr6下载文件
解压缩下载的文件。将此文件夹移动到 Python 的安装目录,以便它可以识别此包:
\ \ anaconda 2 \ Lib \ site-packages
现在,使用 windows 命令提示符打开安装程序,并键入以下命令:
python setup.py install
在这之后,你必须让你的交易工作站(TWS)投入运行。
安装交易员工作站
互动经纪人交易工作站或 TWS 是图形用户界面,让所有注册用户的互动经纪人交易系统。别担心,即使你事先没有编程或编码知识,TWS 也会让你做交易工作。
你可以从互动经纪人的网站下载 TWS 安装程序,并在你的系统上运行。
你可以从这里下载 TWS 的演示:https://www.interactivebrokers.com/en/index.php?f=19903&invd = T
重要提示:
在旧版本的 TWS 中,用户可以选择两个不同的程序。第一个是互动经纪公司的 TWS ,第二个是我之前已经谈到的 IB 网关。虽然它们是不同的应用程序,但是,它们只能一起安装。
**IB 网关运行在较低的处理能力上,因为它没有像交易工作站那样改进的图形用户界面。然而,结果和其他数据以原始代码的形式显示在 IB 网关上,这使得对于某些不具备足够编码知识的用户来说不太友好。T3】
**您可以使用这两个界面中的任何一个进行互动经纪人的工作。两者的功能保持不变,即在您的系统和交互式代理服务器之间传递信息。不用说,Python 应用程序将从交互式代理的服务器端获得完全相同的消息。T3】
安装走查
下载应用程序后,您会在浏览器底部找到可执行文件。出现安全警告提示时,单击运行。
- 现在,点击下一步。
- 单击“完成”完成安装。
- 点击桌面图标,启动 TWS 应用程序。

由于我要使用模拟账户,因此,点击 没有用户名?T3】
- 输入您的电子邮件地址,然后点击登录:

交互式券商面板的配置
到目前为止,旅程还算顺利,不是吗?如果你同意我的观点,那就太好了。在安装了 TWS 和/或 IB 网关之后,在交互式经纪人服务器上实施我们的策略之前,我们必须对配置进行一些更改。只有更改这些设置后,软件才能正确连接到服务器。
程序
- 转到 TWS 的 API 设置
- 勾选启用 ActiveX 和 Socket 客户端
- 将插座端口设置为未使用的端口。
- 将主 API 客户端 ID 设置为 100
- 创建一个可信 IP 地址并设置为 127.0.0.1



运行第一个程序
那么,配置完成了吗?
太好了!我们现在准备运行我们的第一个程序。
在你开始输入这些代码之前,确保你已经启动了 TWS(或 IB 网关)。很多次,我都被问到为什么代码运行时会出现错误信息。
就像我在上一节提到的,你的系统通过 TWS 或 IB 网关连接到交互式经纪人的服务器。所以,如果你还没有打开它,那么你一定会得到一个异常消息,不管你开发代码有多聪明。
让我们开始一步一步地编写代码。
打开 Spyder(开始-所有程序- Anaconda2 - Spyder)
在 Spyder 控制台上,我将输入我的代码。

步骤 1 -我们从导入代码所需的模块开始:
使用 Python 与交互式经纪人进行回溯测试和实时交易
https://blog . quantities . com/ibridgeppey-网络研讨会-2019 年 11 月 14 日/
https://www.youtube.com/embed/qLsxbiZgTho?rel=0
2019 年 11 月 14 日星期四
东部时间上午 9:00 | IST 时间晚上 7:30 |新加坡时间晚上 10:00
会议大纲:
- IBridgePy 安装
- 一个简单的算法交易策略,每日收盘反转
- 浏览该策略中使用的代码和基本函数
- 回溯测试使用 IBridgePy 中 IB 的历史数据的策略
- 使用本地 csv 文件中的历史数据对策略进行回溯测试
- 如何生活贸易战略
- 向多个帐户下订单
- 根据策略分析交易结果
还有更多...
扬声器简介:

刘辉博士-教员,QuantInsti
算法交易执行计划他是 IBridgePy (与交互式经纪人交易的开源软件)的作者,也是 Running River Investment LLC 的创始人。他的主要交易兴趣是美国股票和外汇市场。Running River Investment LLC 是一家私人对冲基金,专门使用 Python 开发自动化交易策略。
他在中国清华大学获得材料科学与工程学士和硕士学位,在美国弗吉尼亚大学获得博士学位。他在美国印第安纳大学获得工商管理硕士学位,在印第安纳大学的研究兴趣是定量分析。
https://www.slideshare.net/slideshow/embed_code/key/nNyzbEHb5KscvT
Backtesting And Live Trading With Interactive Brokers Using Python With Dr. Hui Liu from QuantInsti
刘辉博士的 IBridgePy 的最新回溯测试特性
原文:https://blog.quantinsti.com/ibridgepys-latest-backtesting-features-by-dr-hui-liu/
https://www.youtube.com/embed/zK9SoKdxCpI?rel=0
A session on** '****IBridgePy’s Latest Backtesting Features**' was exclusively held for EPATians and was conducted by Dr. Hui Liu.
会议的主要收获
- IBridgePy 的基础函数。
- 建立交易策略的基本步骤。
- 使用 IB 的历史数据进行回溯测试策略。
- 使用用户提供的历史数据的回溯测试策略。
- 分析回溯测试结果。
关于演讲者
刘辉博士是 IbridgePy(与交互式经纪人进行交易的开源软件)的作者,也是 Running River Investment LLC 的创始人。他的主要交易兴趣是美国股票和外汇市场。Running River Investment LLC 是一家私人对冲基金,专门使用 Python 开发自动化交易策略。
市云与交易策略
原文:https://blog.quantinsti.com/ichimoku-cloud-trading-strategy/
由维布·辛格和阿希什·加尔格
Ichimoku 云指示器是一种源自日本的技术指示器和一种由日本配方师拥有约 30 年专利的指示器。
它包括计算一种证券价格的高、低、收盘价的五条中短期线,并在这五条线中的两条线之间画出一个区域,通常被称为市云。
这些线有助于确定时间序列数据的方向、动量和支撑位阻力水平。Ichimoku 云指标也产生买卖交易信号,通常与烛台一起绘制,以实现更好的决策和更清晰的图形。
线条的计算很简单,选择的时间段也有些随意:
- Tenkan Sen 或转换线:(20 期-高点+ 20 期-低点)/2
- Kijun Sen 或基线:(60 期-高+ 60 期-低)/2
- 寇森森 A 或领先跨度 A:(基线+转换线)/2
- 寇森森 B 或领先跨度 B: (120 周期-高+ 120 周期-低)/2
- 池口跨度或滞后跨度:(30 期前收盘)
价格行动的方向
市云形成于领先区间 A 和领先区间 B 之间,有助于决定价格的力量和方向。
例如,当价格高于市云时,价格行为的方向或趋势是向上的。类似地,当价格低于市云时,价格动作的方向是向下的,当价格在市云的某个位置时,方向是平坦的。
价格的强势动作
强度可以使用前导跨距 A 和 B 线之间的差异来估计。当领先跨度 A 增加并高于另一跨度线时,差额的增加表明上升趋势的力量。
这也意味着市云变得越来越厚。类似地,领先跨度 B 在另一跨度线上的增长表明下降趋势的强度,市云的厚度再次增加,尽管方向相反。
Python 代码和交易策略
下面的 Python 代码加载名为比特币的加密货币的 OHLC 数据。然后,它使用熊猫和 matplotlib 功能计算、绘制各种组件和 Ichimoku 云。
ICICI 轴对

此视频是 QuantInsti 于 2013 年 6 月 1 日举办的量化交易策略在线研讨会的录像。
网络研讨会视频
https://www.youtube.com/watch?v=vau7GwumxRo
Excel 模型
Rajib Ranjan Borah 受邀参加 IGIDR 关于算法交易监管的圆桌会议
原文:https://blog.quantinsti.com/igidr-roundtable-regulating-algo-trading/

日期: 3 路2015 年 9 月地点:孟买 BKC 索菲特酒店
英迪拉·甘地发展研究所(IGIDR)的金融和研究小组(FRG)最近就印度算法交易的相关法规进行了一次圆桌讨论活动。来自金融机构(买方和卖方交易公司、监管机构、合规和风险专业人士、交易所专业人士等市场参与者)和金融相关学术界的 30 多名专业人士参加了此次活动。该活动于 2015 年 9 月 3 日在孟买 BKC 索菲特酒店举行。
QuantInsti 的 Rajib Ranjan Borah 应邀参加了“SEBI 应该如何考虑监管算法交易”的专题讨论。同一小组的其他发言者包括 Balasubramanium Venkataramani 先生(孟买证券交易所首席商务官)、Kumar gora dia(Tower Research Capital India)和 Ravi Varanasi(国家证券交易所业务发展主管)。
鉴于算法交易在金融市场中日益突出的地位,以及最近关于 SEBI 考虑监管算法交易行业的消息,该事件的主题是最近印度算法交易行业讨论的热门话题。鉴于广泛的参与(专业人员和学术研究人员;所有关键部门的财务专业人员;大多数主要的国内和国际金融机构-买方和卖方)和这个主题的中心地位;这个极具互动性的活动引发了一些关于算法交易的好处和挑战的积极讨论。
讨论了关于算法交易在印度的流行和影响的研究。讨论了算法交易的全球法规及其相对于印度法规的变化。
以下是活动的详细议程。
议程
| 10:00 - 10:10 | 简介苏珊·托马斯, IGIDR 金融研究小组 |
| 10:15 - 10:45 | 算法和高频交易初级读本 Gangadhar Darbha ,印度储备银行 |
| 10:50 - 11:15 | 印度的算法交易:数据说明了什么? Nidhi Aggarwal , IGIDR 金融研究组 |
| 11:20 - 11:50 | 监管地点:全球视角文卡特什·潘查帕吉桑,IIM·班加罗(前布里奇沃特协会和高盛) |
| 12:00 - 13:00 | 小组讨论和现场讨论:SEBI 应如何考虑在 进行监管 Balasubramaniam Venkataramani,首席商务官-BSEKumar gora dia,业务发展主管&运营-Tower Research Capital IndiaRajib Borah,董事-iRage CapitalRavi vara nasi,业务发展主管- |
| 13:00 - 14:00 | 午餐 |
如需了解更多活动详情和活动演示,请访问活动现场http://ifrogs.org/EVENTS/roundtablehft1.htmlT5】
从 IIT、哈佛到现在的 EPAT -阿努拉格的学习之旅
原文:https://blog.quantinsti.com/iit-harvard-epat-journey-anurag-sharma/
如果你从事的是与交易不同的职业,你可能会想知道如何学习算法交易。如果你有交易的知识,你可能会渴望更好地理解事物,以此来调整你的职业生涯。
Anurag 面临着类似的情况,你可以理解。他拥有印度理工学院(IIT 孟买)的计算机科学学士和硕士学位,以及哈佛大学的管理基础证书。他想学习算法交易,因此,为了学习和提高,他投入时间学习。我们采访了阿努拉格,与我们分享他的故事。
讨论是这样进行的。
你好,阿努拉格,给我们介绍一下你自己吧!
嗨!我是阿努拉格·夏尔马。我在美洲银行工作,拥有孟买 IIT 大学的计算机科学学士和硕士学位,并在哈佛商学院学习管理。
我是徒手格斗的三级黑带武术家,完成了 10 年的训练。我喜欢阅读技术书籍,并且一直在学习很多关于金融的知识。
在疫情期间,需要时间来适应在家工作的新形式,以及处理缺乏互动的问题。这让我有更多的时间来完成《EPAT》的学习。
你在学习工程和金融职业后学习 Algo 交易的背后有什么故事?
我于 2007 年在孟买的 IIT 获得了计算机科学的硕士和学士学位(双学位)。成为机械警察比赛的一部分是我在 IIT 的美好回忆。我在一家咨询公司实习过两次,一次是开发项目,另一次是基于两个实体之间的关系创建社交图。
我的室友在一家教育机构工作,所以我和他一起加入,并获得了一个很好的机会,自己创建了一个端到端的交易系统。之后,我于 2013 年加入美国银行,开发交易程序以支持银行和全球市场使用的应用程序。
我被算法交易吸引了——它有即时的奖励和即时的惩罚,不像常规交易,你必须等待一段时间才能意识到赚或赔的价值。
工作一年后,我的经理建议我再学习一些对我的职业有帮助的知识。这让我开始寻找课程,就在那时我找到了 EPAT。从那时起,我开始对算法交易感兴趣。
因为我有计算机科学的背景和对数学的理解,这看起来是一个很好的挑战机会。是的,它更生活在大自然中。
你是怎么知道 EPAT 的,为什么选择它?
由于我的职业更接近于网络开发人员,我想考虑从事定量金融方面的职业。我在网上搜索量化金融课程,就是这样找到了 QuantInsti。
我发现 EPAT 的课程结构在本质上是非常完整的。这是一个完美的起点,因为它涵盖了从市场到金融工具的基础以及市场如何运作的所有内容。
EPAT 对算法交易有最好的介绍——它是什么,它是怎么做的,你如何用算法交易。显然,即使在那之后,一个人还需要学习很多东西,但我认为 EPAT 提供了一个很好的起点,这一点毋庸置疑。一种是从基本策略开始,以及如何编码它们,并把它们付诸实施。
我们开发的应用程序基本上是交易者直接使用的,所以这对我很有用,因为现在我可以更好地了解他们的需求,并获得手头概念的完整概述。
简言之,EPAT 帮助我了解了交易者的心理。T3】
起初,我很茫然,因为我会从网上搜索或同事那里得到一些零碎的信息——都是些支离破碎的信息。但是有了 EPAT,我能够把它们准确地组合在一起。这正是我想要达到的目标。
你认为 EPAT 最大的特点是什么?你喜欢它的什么?
课程的前半部分提供了一个很好的基础,让你对交易、交易策略和基础设施有一个很好的了解。从 excel 表格中的策略开发到 Python 编码都是流畅、无缝的,并且解释得非常清楚。
它会在课程开始时培养学生的兴趣。对于一个刚接触 algo 交易的人来说,这很容易理解。
第二部分是证券衍生品期权,尤安·辛克莱博士对此做了很好的阐述。
我现在对金融市场有了更好的理解。一个教训是,风险管理是一个非常重要的方面。不在于你冒多大的风险,而在于你有多少次是正确的。
我更清楚战略的内容、方式和原因,需要注意什么,回溯测试等等。
我的支持经理 Subash 给了我极大的帮助。他非常迅速地在几分钟内回答了我的问题,不管是在什么时候。在整个过程中,他主动确保我一切顺利。
你有什么话想和那些有抱负的量化分析师分享吗?
你可以把你的情绪放在一边,用一种更数学、更逻辑的方式来处理事情。
我读过几本书——我最喜欢的作家马特·戴维斯给了我一条很好的建议(他被评为优秀的交易者之一)。即使你 50%的时间是错的也没关系,如果你 100 次中有 49 次是对的,你就是优秀的交易者,重要的是,你需要很好地管理你的风险。
我认为关注风险管理很重要——这是优秀交易者和优秀预测者的区别。
阿努拉格,谢谢你对 EPAT 的溢美之词。我们很高兴能够提供正确的指导,帮助您实现目标。
看到你是如何从学习 It 发展到进入像美国银行这样的好机构是非常有趣的。此外,你不仅学会了算法交易,为你的职业生涯增值,还获得了 EPAT 卓越证书。恭喜你!
EPAT 是一门综合课程,涵盖的主题从统计学和计量经济学到金融计算和技术,包括机器学习等等。开始你的探索,与 EPAT 一起提升你的算法交易知识。点击查看。
免责声明:为了帮助那些考虑从事算法和量化交易的人,这个案例研究是根据一个学生或 QuantInsti 的 EPAT 项目的校友的个人经历整理的。案例研究仅用于说明目的,并不意味着用于投资目的。EPAT 项目完成后所取得的成果对所有人来说可能并不一致。
新冠肺炎和油价战争对交易的影响
原文:https://blog.quantinsti.com/impact-covid-19-oil-price-trading/
众所周知,新型冠状病毒首先袭击了中国,导致中国经济放缓,进而影响了股市。另一个对股市打击更大的重大事件是俄罗斯和沙特阿拉伯之间的油价争端。
在这篇文章中,我们将从不同的方面来讨论当前市场下滑的情况以及交易方面同时发生的变化。就新冠肺炎和石油价格战对交易的影响而言,我们从以下几个方面来看待这种情况:
提款后的未来回报
在本节中,我们将根据历史股票市场崩盘情景的数据计算平均未来回报。为此,我们考虑了过去股市崩盘的数据。有了这些数据,我们已经剔除了股市崩盘情况下的提款后果。让我们根据对股市崩盘历史数据的分析,来看看在不久的将来有哪些可能性。
使用 IBridgePy 在交互式代理 API 中实现 Python
原文:https://blog.quantinsti.com/implement-python-in-interactive-brokers-api/

作者:哈里·库马尔·克里什纳摩尔提
在上一篇关于在交互式代理 API 中实现 Python 的 IBPy 教程中,我谈到了交互式代理、其 API 以及使用 IBPy 实现 Python 代码。在这篇文章中,我将谈论使用包装器在 IB 的 C++ API 中实现 python,该包装器由刘辉博士编写。
关于刘辉博士
刘辉博士是 Running River Investment LLC 的创始人,这是一家专门使用 Python 开发自动化交易策略的私人对冲基金。Hui 是 IBridgePy 的作者,IBridgePy 是一个著名的 Python 交易平台,允许交易者快速实施他们的交易策略。刘辉博士在中国清华大学获得材料科学与工程学士和硕士学位,在美国弗吉尼亚大学获得博士学位。他在美国印第安纳大学获得工商管理硕士学位,在印第安纳大学的研究兴趣是定量分析。
刘博士的 IBridgePy 是一个包装器,它将帮助你使用 Python 在交互式经纪人 API 中进行交易。QuantInsti 就此主题举办了一次非常成功的网上研讨会,我们有创纪录的注册人数(1000+)参加了由刘博士亲自主持的网上研讨会。我将在本文末尾分享网上研讨会的链接。
T2】
杂交
IBridgePy 是最灵活、最友好的 Python 包之一,可用于在交互式代理 API 上实现 Python。和 IBPy 很不一样。
如何?
嗯,是第三方实现的应用编程接口,用来访问 IB 的交易员工作站。而 IBridgePy 的工作方式不同;它没有重新实现交互式代理的 API。相反,它帮助 Python 直接调用 IB 的 C++ API,因为它充当包装器。由于 IBridgePy 直接调用 IB 的 C++ API,因此,我们可以预计程序中的错误和异常会更少。
为什么?
原因很简单:互动经纪人 C++ API 由互动经纪人官方维护。事实上,当互动经纪人将有其平台的新版本时,API 也将更新。
使用 IBridgePy 有什么好处?
IbridgePy 有一些关键特性,这些特性使它对用户更有益,我将列举如下:
- 灵活性
- 易用性
- 隐私
灵活性
IBridgePy 最棒的一点是,你可以用它来交易任何种类的证券。你可以交易股票、期货、期权、外汇等。刘博士开发 IBridgePy 的动机之一是使应用程序更加灵活。在 IBridgePy 上,您可以使用任何 python 包并从任何地方访问数据源。
易于使用
交互式代理 API 的复杂性已经完全被 IBridgePy 的用户友好界面所掩盖。您将不必付出任何额外的努力来管理您的订单,或者编写代码来从服务器获取历史数据或报价,因为包装器会处理这些事情。
隐私
隐私是非常重要的,当你把你的证书交给一个运行在不同服务器上的第三方程序时,隐私是一个被忽视的因素。但是,IBridgePy 是在你的电脑上运行的,所以你的隐私完全在你的掌控之中。
谁应该使用 IBridgePy?
- 喜欢自动交易的人
- 那些想把它作为市场或股票筛选工具的人
如何安装 IBridgePy?
您可以简单地访问 IBridgePy 网站的下载部分,下载与您的 python 版本相匹配的安装文件。运行文件并安装必要的文件。
先决条件
您应该在系统上安装以下程序:
- 互动经纪人 TWS。我们已经在之前的文章中详细讨论了如何安装交互式经纪人 TWS。
- 或者,您也可以使用 IB 网关(随 TWS 一起提供)
- 您还应该在系统上安装一个 python 包。Anaconda Navigator 是运行 python 文件的好资源。
- 您应该有 IbridgePy(和一组示例程序),您可以通过向上面提到的 IbridgePy 的电子邮件发送请求来获得。
TWS 还是 IB 网关?
TWS 和网关都可以用来交易。如果你对这个行业比较陌生,那么我会推荐 TWS,因为它对用户更友好。然而,如果你想节省时间,避免 IB 系统重启,那么就使用 IB 网关。
我们将遵循与前一篇文章相同的步骤。当登录屏幕出现时,检查 IB 网关并继续。当 IB 网关打开时,我们进入其配置,就像我们对 TWS 所做的那样。

随后将手动配置 IB 网关。接下来,点击设置。虽然这里没有什么可改变的,但是我们可以根据您的需要设置端口,尽管不建议这样做。

我们也将设置 TWS,就像我们在上一篇文章中所做的一样。配置后重新启动 TWS。

准备 IDE
本教程的下一个重要步骤是准备 Python 的 IDE。如果您使用的是 Python(XY),那么您必须启动可执行文件并从那里运行 spyder:

一旦 Spyder 启动,请遵循以下步骤:
- 进入视图然后窗格并检查编辑器和控制台
- 点击工具,然后选择 PYTHONPATH 管理器,将文件夹添加到 Python 路径中。在这里你将点击添加路径并选择你解压 IBridgePy 的文件夹。
![configuring IB Gateway to run python in IB API]()
- 点击关闭以接受它。
- 重启 Spyder。
运行示例程序
在 Spyder IDE 中单击 RUN_ME.py,方法是单击文件,然后单击打开。

RUN ME.py 是程序,你可以把它作为入口来运行,但是例子移动均线* cross.py 是保存交易策略的文件。
在此之后,请确保您登录到 IB TWS 或 IB 网关。点击绿色三角形或按 F5 键。
解码代码结构
就像我在上一篇文章中讨论的程序结构一样,我也将在这里讨论代码结构。
我们定义了 initialize() ,这是一个内建的方法来声明只运行一次的变量。

接下来我们定义 handle_data() ,这也是一个进行交易决策的内置方法。这里给出了两个输入(上下文,数据)。上下文包含了 initialize() 中声明的变量。而数据是每天或每分钟接收的直播馈送。

第 16 行~第 19 行:你可以通过注释掉其他算法来选择一个你想要执行的算法
第 20 行:您的互动经纪人账户代码
第 21 行:handle _ data(context,data)函数的频率或多长时间运行一次,60 表示每分钟运行一次,1 表示每秒运行一次。
第 22 行:有 4 个级别显示结果
- 错误:仅显示错误信息
- 信息:典型用户将使用它来了解您的算法的结果
- 调试:当你调试你的算法时,你可能知道更多的信息
- 如果你真的想知道发生了什么,你会看到大量的信息
IBridgePy 的三块基石
以下是构成 IbridgePy 基石的三个最引人注目的内置函数:
- 显示实时价格
- 请求 _ 数据
- 下订单
实时报价
每当你需要实时报价时,那么你可以使用内置函数显示真实时间 _ 价格T4】
在上面一行中,您将看到使用的参数是现金、欧元、美元,这些参数将返回指定货币的实时汇率。
同样,你可以用 STK、T2、美元来代替,用美元来表示苹果股票的价值。STK 是安全类型,我们在上一篇关于使用 IBPy 在交互式代理 API 中实现 Python 的文章中已经详细讨论过。
获取历史数据
request_data 是用于从交互式代理获取历史数据的函数。您还必须指定一个参数历史数据。

涉及的参数
- 使用这些参数,我们选择需要获得历史数据的工具,在上面的例子中是 SPY,它是一个跟踪 S&P500 指数的 ETF
- 接下来,我们指定时间间隔,在我们的示例中是‘1 天’
- 回溯周期是下一个参数,我们在其中指定所需历史数据的周期。在我们的示例中,它是‘50d’表示从今天开始往回 50 天。
- 检索到的历史数据保存在 pandas 数据帧中,该数据帧保存在 hist(数据类的一个属性)中,保存在名为 data 的字典中。
输出

请求多个历史数据
就像您从交互式代理请求特定时间段的历史数据一样,您也可以一次获取多个历史数据。看看下面的代码:

我指定了间谍和 AAPL,指定的时间间隔分别是 1 分钟 (1 分钟)和 1 天。指定的周期分别为 1 D & 10 D (D =天数)。类似地,我们也在输出函数中指定了需求。
输出

下订单
下单是我们整个流程中的重要步骤,下面是我们如何使用 IBridgePy 在交互式经纪人上下单:
- 下达市价订单:订单(符号('证券'),x)
这里 security 是目标证券,例如 SPY,x 是股份数。–x 表示卖出,x 表示买入。
例如,订单(符号(' SPY '),100)
-
目标安全是间谍
-
行动是当 n > 0 时购买 100 股
-
如果是-100,那么负数意味着卖出,-100 =卖出 100 股
-
order_target(symbol('SPY '),100)将根据您的持仓通过买入或卖出来调整头寸,直到您持有 100 股
-
下限价单/止损单
- order(symbol('SPY '),100,LimitOrder(213.42))下达限价订单,以每股 213.42 美元的价格购买 100 股 SPY 股票
- order(symbol('SPY '),-100,StopOrder(213.42))下达止损单,以每股 213.42 美元的价格卖出 100 股 SPY 股票
-
强烈建议使用 order_status_monitor()跟踪您所下订单的状态

就像在前面的教程中一样,我们已经指定了一个 orderId,这里我们还指定了一个函数 orderId,它是您的订单请求的唯一标识。对于市价订单,您应该将“已完成”作为订单请求的终点,这意味着订单已经在交互式经纪人处执行。
对于限价单和止损单,预期状态为“已提交”,这意味着订单已被 IB 接受,正在等待执行。对于高流动性证券,完成交易不会花费太长时间(几秒钟)。
IbridgePy。交易者单个账户是该模块的名称,随后是请求购买 100 股。接下来是账户余额。
你可以在这里观看刘辉博士网上研讨会的录像。
多年来,我们已经看到试图安装 IBridgePy 的用户所面临的一些常见障碍,我们写这一节是因为我们相信这将有助于简化过程,让用户更专注于他们想要的东西,即应用他们的交易策略。
我无法下载 IBridgePy,该链接将我带到 404 页面。你能帮我做这件事吗?
请使用此链接下载 IBridgePy。您还必须创建一个帐户来访问这些文件。
当我想在 Spyder 上运行 RUN_ME.py 时,它给了我一种不同的语言,为什么呢?
类似于:strategies/PK×o # iWüà4yjìZ ~ pòa;
在 Spyder 上访问之前,您需要先解压缩从 Download 下载的 zip 文件——最容易回溯测试和实时交易的 Python 平台。
我得到以下错误:
“从 IBridgePy 导入 IBC PP”
“导入错误:DLL 加载失败:找不到指定的模块。”
我该怎么办?
如果下载的 IBridgePy 版本与您系统中的 python 不匹配,就会出现错误。该错误的另一个原因是您的系统上安装了多个 python 版本。解决方法是从你的系统中卸载不匹配的 Python。
求解步骤:
- 检查是否下载了正确的 IBridgePy 版本。(它解决了大多数问题)
- 如果您使用的是 Windows,请确保使用了 Anaconda。
- 检查是否安装了多个 Python 版本。如果是,卸载未使用的 python 版本。或者,使用正确的 Python 执行 RUN_ME.py。
- 您可以使用不同版本的 python 在 Spyder 上执行 RUN_ME.py,方法是:
- 工具→首选项→ Python 解释器→设置所需 Python 解释器的路径
- 您也可以通过用所需的 python 版本在蟒蛇上创建一个新环境,然后使用该环境运行 Spyder 或 Jupyter 来实现这一点。
我收到以下错误消息:
" error message =无法连接,因为客户端 id 已被使用。请使用唯一的客户端 id 重试。
这是 IB API 最新版本中的一个已知问题。无论何时启动 TWS,都会分配一个客户端 id,在代码结束时,客户端 id 仍然是活动的。因此,下次运行代码时,您将会看到一条错误消息,提示客户端 id 已经在使用中。当 IB 在 IB API 中发布修复程序时,此问题将得到永久解决。
不幸的是,与此同时,您可以在再次运行代码之前重启内核。重新启动时,将使用新的客户端 id,从而解决问题。
关于这一点的视频指南可以从这里获得:使用 Python 与交互式经纪人进行交易:无法连接,因为客户端 id 已经在使用中。
我得到以下错误:
导入错误:python37.dll 的模块使用与此版本的 Python 冲突
确保从网站上下载了正确版本的 IBridgePy。这个版本应该与您的 spyder 环境使用的 python 版本一致。如果没有,就会有冲突。
如何知道运行 Sypder 的客户端能够连接到 IB TWS/网关上的服务器?
运行 RUN_ME.py 后,您会得到类似以下内容的帐户摘要:
IBridgePy 版本 9.1.4
文件名= example_show_positions.py
开始初始化交易者####
账户余额 DU229341
经纪人 _ 服务 _ 工厂。broker service _ callback::_ get _ account _ info _ one _ tag:EXIT,没有基于 account code = du 229341 tag = TotalCashValue 的值
活动账户代码为['DU229341 ',' DU229347']
我在 spyder 上使用模拟账户运行 RUN_ME.py 时出现以下编码错误:
" unicode decode 错误:“charmap”编解码器无法解码位置 1035 的字节 0x9d:字符映射到<未定义的> "
您可以添加 encoding="utf8 ",在 configuration.py 文件的第 83 行中突出显示。该文件位于 C:\Users...\ IBridgePy _ Win _ Anacondaxx _ YY \ configuration . py
用 open(os.path.join(os.getcwd(),' Strategies ',fileName),encoding="utf8 ")作为 f:
script = f.read()
**在学习 IBridgePy 课程后,我试图从交互式经纪人那里下载价格数据用于回溯测试,交互式经纪人的平台抛出一条错误消息:
IBridgePy 版本 5 . 2 . 3
fileName = example _ get _ historical _ data . py
# # #开始初始化交易者####
..............................................
初始化交易者完成# #
STK、间谍、美元的历史数据**
经纪人 _ 客户 _ 工厂。回调:errorId = 13 error code = 162 error message =历史市场数据服务错误消息:美国运通 STK
broker_client_factory 没有市场数据许可。回调:EXIT IBridgePy version = 5.2.3
发生了异常,使用%tb 查看完整的回溯。
如果您在获取数据时使用的是模拟账户,那么您将无法访问所有的报价机。您的访问权限将主要限于外汇对。在这种情况下,尝试下面的代码来获取数据。
使用卡尔曼滤波器实现配对交易[EPAT 项目]
原文:https://blog.quantinsti.com/implementing-pairs-trading-using-kalman-filter/

本文是作者在 QuantInsti 提交的算法交易(EPAT)的 高管课程的一部分的期末项目。请务必检查我们的项目 页面 ,看看我们的学生在构建什么。
**### 简介
一些股票会同步波动,因为同样的市场事件会影响它们的价格。然而,特殊的噪音可能会使它们暂时偏离通常的模式,交易者可以利用这种明显的偏离,期望股票最终会回到它们的长期关系。具有这种关系的两只股票构成“一对”。我们在之前的文章中已经讨论过配对交易背后的统计数据。
这篇文章描述了一个基于这样的股票对的交易策略。文章的其余部分组织如下。我们将讨论交易单个货币对的基础,选择交易货币对的整体策略,并给出一些初步结果。最后,我们将描述改善结果的可能策略。
配对交易
让我们考虑两只股票,x 和 y,这样
y = \ alpha+\ beta x+e
\alpha 和 \beta 为常数, e 为白噪声。参数{\ alpha,beta }可以从两个股票的价格的线性回归中获得,并得到价差
e = y-(\ alpha+\ beta x _ { t })**
设这个利差的标准差为\sigma_{t}。此价差的 z 值为
z = e/\ sigma _ { t }**
交易策略
交易策略是,当 z 得分高于阈值,比如说 2、时,可以做空价差,即卖出 1 个单位的 y,买入\beta 个单位的 x。我们预计 x 和 y 之间的关系在未来将保持不变,最终 z 得分将降至零,甚至变为负值,然后可以平仓。通过在价差高的时候卖出,在价差低的时候平仓,这种策略希望在统计上能够盈利。相反,如果 z 分数低于下限,比如说-2,该策略将执行价差,即买入 1 个单位的 y 并卖出\beta 个单位的 x,当 z 分数升至零或以上时,可以平仓以实现利润。
有几个问题使得这个简单的策略在实践中难以实施:
- 常数α和β实际上并不是常数,而是随时间变化的。它们不是市场上可观察到的,因此必须进行估算,有些估算比其他的更有利可图。
- 长期关系可能破裂,价差可能从一个平衡移动到另一个平衡,使得变化的{\alpha,\beta}给出“开盘做空”信号,并且价差保持上升到新的平衡,使得当“收盘做多”信号出现时,价差高于进场值,导致亏损。
这两个事实都是不可避免的,战略必须考虑到它们。
确定参数
参数{\alpha,\beta}可以根据 y 的价格对 x 的价格的线性回归的截距和斜率进行估计。请注意,线性回归是不可逆的,即参数不是 x 对 y 的回归的倒数。因此对(x,y)与(y,x)不同。虽然大多数作者使用普通最小二乘回归,但有些人使用总体最小二乘,因为他们假设价格也有一些日内噪声。然而,这种方法的主要问题是我们必须选择一个任意的回顾窗口。
在本文中,我们使用了与指数移动平均相关的卡尔曼滤波器。这是一个自适应滤波器,它迭代地更新自己,同时产生α、β、e 和σ。我们使用 python 包 pykalman,它具有 EM 方法,可以在训练期间校准协方差矩阵。
出现的另一个问题是是否回归价格或回报。后一种策略要求在多头和空头头寸中持有等量的美元,即投资组合必须每天重新平衡,增加交易成本、滑点和买卖价差。因此,我们选择使用价格,这在下一小节中是合理的。
长期关系的稳定性
长期关系的稳定性是通过确定这些对是否协整来确定的。请注意,即使这两个组合没有直接进行协整,它们也可能是为了正确选择杠杆比率。一旦参数如上所述被估计,扩展时间序列 e_{t}通过扩展的 Dickey Fuller (ADF)测试来测试平稳性。在 python 中,我们从 statsmodels 模块中的 adfuller 函数获得这一点。结果给出了不同置信水平的 t 统计量。我们发现,在 1%的置信水平下选择的配对并不多,所以我们选择 10%作为阈值。
一个缺点是,为了进行 ADF 测试,我们必须选择一个回望周期,这将重新引入我们使用卡尔曼滤波器避免的参数。
选择板块和股票
交易策略部署了初始资本。为了分散投资,将选择五个部门:金融、生物技术、汽车等。将选择一个培训期,并根据最小方差投资组合方法决定分配给每个部门的资本。除了初始投资,每个部门都是独立交易的,因此下面的讨论仅限于单个部门,即金融部门。
在金融领域,我们根据大市值选择了大约 n = 47 个名字。我们正在寻找流动性高、买卖差价小、能够卖空股票等的股票。一旦定义了股票领域,我们可以形成 n (n-1)对,因为如上所述(x,y)与(y,x)不同。在我们的金融投资组合中,我们希望在任何给定的时间保持最多五对。在我们想要进入一个位置的任何一天(例如开始日期),我们在所有的 n (n-1)对上运行一个筛选,并且根据一些标准选择顶部的对,其中一些将在下面讨论。
选择配对
对于每一对,从卡尔曼滤波器获得信号,我们检查是否|e| > nz \sigma,其中 nz 是要优化的 z 得分阈值。这确保了这一对有一个入口点。我们首先执行这个测试,因为它不贵。如果货币对有一个进入点,那么我们选择一个回望期,进行 ADF 测试。
该程序的主要目标不仅是确定符合标准的货币对列表,而且根据与货币对的预期盈利能力相关的一些指标对它们进行排名。
一旦排名完成,我们就进入对应于前两对的位置,直到我们的投资组合中总共有五对。
结果
在下文中,我们在 Cal11 上校准了卡尔曼滤波器,然后使用校准后的参数在 Cal12 中交易。接下来,我们在投资组合中只保留了一个股票对。
在所示的测试中,我们将每笔交易的最大允许亏损保持在 9%,但在一种策略中允许最大亏损 6%,在另一种策略中只允许 1%。正如我们从上面看到的,随着每笔交易最大允许亏损的收紧,业绩会有所改善。夏普比率(假设指数为零)分别为 0.64 和 0.81,而总 P&L 为 9.14%和 14%。
阈值是基于训练期间的模拟来选择的。
未来工作
- 制定更好的筛选标准,以确定最有潜力的配对。我已经有了几个想法,这将是正在进行的研究。
- 优化回顾窗口和买入/卖出 Z 值阈值。
- 在培训期间收集更详细的统计数据。目前,我只收集了前 5 名的统计数据(基于我的选择标准)。然而,在将来,我应该记录所有通过的配对的统计数据。这将表明哪些交易最有利可图。
- 在训练期间,我用交易的总 P&L 来衡量盈利能力,从进场到出场信号。然而,我也应该记录最大利润,这样我就可以确定一个更早的出场门槛。
- 运行模拟几年,即一年校准,下一年测试。这将产生几年的样本外测试值。另一个要优化的窗口是训练周期的长度以及卡尔曼滤波器必须重新校准的频率。
- 将该方法扩展到金融以外的其他部门。
- 探索其他过滤器,而不只是卡尔曼滤波器。
接下来的步骤
如果你是一名程序员或科技专业人士,想开始自己的自动化交易平台。从日常从业者的实时互动讲座中学习自动交易。算法交易(EPAT)高管课程(T1)涵盖统计学&计量经济学、金融计算&技术和算法&定量交易等培训模块。现在报名!
注:
本文中介绍的工作是由作者 Dyutiman Das 先生开发的。构成本文基础的底层代码没有与读者共享。对于那些对使用卡尔曼滤波器实现配对交易感兴趣的读者,请找到下面的文章。
链接:使用卡尔曼滤波器的统计套利作者乔纳森·金莱**
隐含波动率:从理论到实践
原文:https://blog.quantinsti.com/implied-volatility-webinar-7-mar-2017/
https://www.youtube.com/embed/y8cbF81rIRw?rel=0
隐含波动率:从理论到实践
波动性是期权交易中的一个基本概念,所有的交易者都有一套如何交易的理论,然而,并不是每个人都清楚它到底是什么。
网上研讨会将涵盖
- 不同类型波动的介绍
- 隐含波动率背后的理论(四)
- 如何使用隐含波动率
- 利用 IV 的各种特性的众多交易策略中的一些
- 可用的在线资源,即学术和从业者研究
- 各种 CBOE 指数帮助你开始
分享您的问题/疑问,我们将尽最大努力在网上研讨会中讨论它们!
扬声器
阿纳夫·谢斯
金融分析与投资管理硕士(FAIM 女士) 加州圣玛丽学院

拥有近 20 年经验的 Sheth 博士是加州圣玛丽学院的全职教授。在此之前,他是德勤税务公司的经济学家,也是加州大学伯克利分校(包括哈斯商学院)多个系的讲师。
他几乎一直在学习、研究和教授波动性,并为许多公司的衍生品合约提供咨询。
他在《投资和计算经济学杂志》等期刊上发表了大量同行评议的期刊论文。此外,他的作品已经在世界各地的几个会议上展示过。他在 2011 年出版了他的第一本书——随机现金流下的最优操作策略。他于 2014 年创办了咨询公司 Gaji Analytics,并于 2015 年成为金融分析平台 ProfitModeler 的技术联合创始人。他还是几家活跃的管理公司和对冲基金的研究员,并经常应邀为硅谷的金融科技公司提供建议。他拥有劳伦斯大学的经济学-数学和哲学学士学位;行为经济学硕士学位;金融工商管理硕士学位;和罗格斯大学的定量金融学博士,与已故数学家拉里·谢普一起工作。
工作之余,他还对爬山(四次攀登喜马拉雅山)、长跑(完成了三次马拉松)和公开水域游泳(完成了从阿卡特兹到三藩市的游泳)感兴趣。
谁应该参加?
- 期权交易商
- 对隐含波动率感兴趣的交易员/定量分析师/分析师
- 对冲基金经理和顾问
- 学生和学者
隐含波动率:什么,为什么&如何!
“当长期趋势失去动力时,短期波动性往往会上升。”——乔治·索罗斯
这句话听起来很有趣,很吸引人,但是你怎么知道市场对波动的预期是什么呢?此外,有没有一种方法来计算未来的波动性,这将有助于我们在期权交易领域建立多头或空头头寸?听起来很有趣,对吧!!
好了,我们已经得到了你所有的关于“期权交易中的隐含波动率”的问题。用于描述从期权被市场参与者购买之日到其到期日的预期市场波动性的术语被称为“隐含波动性(IV)”。但是在我们进入隐含波动率的特殊和明显的特征之前,让我们看一下这篇文章的子主题。
理解隐含波动率
在我们深入了解隐含波动率的基础知识之前,你应该知道期权交易的基础知识。
我们将首先简要介绍波动性。
波动性:
波动性是金融市场最重要的支柱之一。简而言之,波动性是指金融资产价格的上下波动。这些变动是由几个因素造成的,包括需求和供给、情绪、公司行为、贪婪和恐惧等。
现在我们知道了波动性是什么,让我们现在来理解隐含波动性的真正含义!!
什么是隐含波动率?
隐含波动率(IV)是期权市场预期未来波动率的度量。本质上,隐含波动率过去和现在都被认为是 Black-Scholes-Merton 模型(一个流行的期权定价模型)的组成部分,它代表与基础资产相关的未来波动率。
但是,你知道吗,它并不是市场上唯一可用的波动性指标。历史波动率和已实现波动率是市场中其他不同类型的波动率指标。
历史波动
历史波动率表示基础资产价格在过去一段时间内的偏离或变化。通常,历史波动率以一年为周期计算,即 252 个交易日。交易员用它来比较基础资产的当前波动水平和历史波动水平。每当当前和历史波动之间有差距时,交易者就根据机会建仓。然而,历史波动率的问题是,它是一个向后看的指标,这意味着它是基于过去的回报,而不是最可靠的波动形式。
已实现波动率
另一方面,已实现波动率是未来将发生的实际波动率。对于过去发生的波动,称为历史波动,对于未来发生的波动,称为已实现波动。
那么,我们为什么要在期权市场中使用隐含波动率呢?
在考虑了市场预期后,隐含波动率的值已被考虑在内。市场预期可能是重大市场事件、法院裁决、高层洗牌等。本质上,与历史波动率相比,隐含波动率是一种更好的估计未来波动率的方法,历史波动率仅基于过去的回报。
数学背后的 IV
我们现在将向前推进,理解隐含波动率背后的数学原理,以及如何计算期权隐含波动率。
计算 IV 并不像看起来那么简单。为了计算看涨或看跌期权的隐含波动率,我们首先需要理解 BSM 模型背后的数学原理。就本文的目的而言,我们不会深究 BSM 模型的概念,但我们肯定会对什么是 BSM 模型有一个概述,以便隐含波动率的计算看起来相似且易于理解。
布莱克·斯科尔斯·默顿模型:
Black-Scholes-Merton 模型是交易者在交易欧式期权时最常用的期权定价模型。它有两个独立的公式来计算看涨期权和看跌期权。
计算买入期权的参数有:
- ST-基础资产的现货价格(当前价格)
- k–标的资产的执行价格
- r-无风险利率(连续复利)
- σ–基础资产回报的波动性
- t-t——到期时间(年)
- n——正态分布的累积分布函数
看涨期权的定价:

看跌期权的定价:

看起来有点复杂吧?不要担心,一旦你输入参数值,它就像任何其他简单的方程。
例如:如果参数如下:
现货价格(St): 300 执行价格(K): 250 无风险利率(r) = 5%到期时间(T-t) = 0.5 年(6 个月)看涨价格= 57.38
我们如何找到具有上述参数的看涨期权的隐含波动率?我们就简单的用迭代或者试错的方法。
使用 15%的 IV 可以得到 56.45 的买入期权价格,使用 25%可以得到 59 的买入价格。
从上述试错法可以清楚地看出,IV 是 15 - 25%范围内的值。20 呢?。它给我们的买入价格是 57.38!!同样的技术也可以用于相应的看跌期权。一旦你掌握了这种技术,那就太容易了!
使用 python 计算 IV
好了,现在我们知道了隐含波动率的概念,为什么不创建一个计算器来计算期权的 IV 呢?毕竟学到的知识要实际应用!!
我们将使用 python 创建一个隐含波动率计算器,以方便计算期权的 IV。
Python 代码:
## Let us first import all the required libraries for IV Calculation.
# Data manipulation
import numpy as np
import pandas as pd
import datetime
import mibian
# We will now use the mibian library to calculate the implied volatility.
##The syntax for the variable values is in the format as mentioned below :
# BS([UnderlyingPrice, StrikePrice, InterestRate, Daystoexpiration],callPrice=x)
# Python code :
c = mibian.BS([145.65, 145, 5, 30], callPrice=3.89)
# Input Code :
c.impliedVolatility
输入代码的输出:
18.24951171875
这意味着看涨期权的隐含波动率为 18.249%(近似值)
这不是很简单吗?!Python 计算复杂的数学模型如 Black-Scholes-Merton 公式非常快速简单。同样的机制也可以用来计算看跌期权隐含波动率。
影响市场隐含波动率的因素
让我们来看看影响期权交易中隐含波动率的某些因素:
供给和需求 -随着基础资产需求的增加,隐含波动率也增加,期权价格也增加!当然,这种现象在需求低的时候正好相反。随着需求下降,高 IV 倾向于向平均 IV 值移动,同时供应开始稳定。一旦市场预期开始下降,这一切就会发生,并导致期权价格下降。
到期时间 -到期时间,更好地称为 theta,衡量期权到期的剩余时间,直接影响期权的 IV。例如,如果到期时间很短,IV 通常会较低。然而,如果期权的到期时间比通常情况下相对较长,IV 就会很高。逻辑上也说得通!怎么会?由于到期时间很长,标的资产的价格更有可能向执行价格移动,这对期权卖方来说风险太大。为了补偿卖方承担的风险,期权价格相对高于平时,IV 也是如此。
市场状况 -大多数基础资产直接受到市场情绪或上市机构未来将发生的事件的影响。收益公告、法院裁决、高层管理人员变动等是导致高 IV 期权的一些市场事件,因为市场不确定基础资产可能移动的方向。
静脉注射的用途
隐含波动率在期权市场上被交易者频繁使用,原因多种多样。下面列出了静脉注射的各种用途:
预测波动率 -隐含波动率被交易员用来了解基础资产的预期波动率范围。例如,让我们考虑一个看涨期权,其标的资产目前的交易价格为 100 美元,执行价格为 103 美元,溢价为 5 美元。如果此类看涨期权的隐含波动率为 20%,则标的资产的预期范围为高于当前交易价格 20%和低于当前交易价格 20%。这告诉我们,下限应该是 100 = 100 - 20 = 80 的 100 - 20%。上限在 100+100 的 20% = 100+20 = 120。这种情况下隐含波动率的范围是 80 - 120。
对冲现金头寸 -交易员经常需要对冲头寸,以降低与初始或主要头寸相关的风险。如果期权的当前 IV 相对低于年化 IV 或全年 IV,交易者可以以低溢价购买期权,并等到 IV 增加。随着 IV 的增加,期权费的价值也会增加,因此期权合约的总价值也会上升!
卖出期权——与套期保值相反,期权卖方(option sellers)在 IV 较高时卖出期权,从而为他们所承担的风险赚取高额溢价。这里的问题是,对于他们销售的保险(期权),到期时间不断减少。经过一段相当长的时间后,交易对期权卖方有利。
基于事件的交易 -每当有关于上市公司的收益或法庭裁决的消息时,IV 通常很高。当未来可能不确定时,就会发生这种情况。在这种情况下,有见识或有经验的交易者会围绕隐含波动率制定期权策略。例如,交易者使用日历价差策略,多头或空头价差策略从高 IV 中获利。
在布莱克-斯科尔斯-默顿(BSM)模型中的用法:隐含波动率是 BSM 模型中的一个关键参数。随着隐含波动率或市场对波动率的预期增加,期权价格也会增加。这在隐含波动率和期权价格之间建立了直接关系。因此,IV 构成了 Black Scholes Merton 模型的一个内在性质。
口译四
可视化和解释隐含波动率的方法不止一种,我们将具体研究每一种方法。
数据表 -嗯,可视化静脉注射号码的最基本方法是通过数据表格式。现在,在期权市场,它被称为期权链。以下是美国股票的期权链:苹果(股票代码:AAPL)

来源****:****(注:期权数据每天更新,因此您将能够在给定的链接上看到当天的期权价格)
**从上图可以清楚地看出,相同执行价格的隐含波动率对于看涨期权和看跌期权是不同的。此外,对于不同的执行价格,隐含波动率随着市场预期的变化而波动。注:隐含波动率不是一个基于方向的参数,因此它仅表示基础资产未来可能变动的价格范围。不同执行价格的看跌期权和看涨期权的隐含波动率的这种变化以“波动率微笑”和波动率偏斜为特征。当 OTM 和 ITM 看涨或看跌期权的隐含波动率(IV)最高,而 ATM 期权的隐含波动率(IV)最低时,就会出现波动率微笑。在波动率偏斜的情况下,不同的执行价格对相同的标的资产具有不同的隐含波动率。
这两种解释都用于期权市场,以便更好地可视化。下面,我们已经从看涨期权执行价格和隐含波动率相对提到了波动率偏态的例子。

图表 -好了,现在我们已经理解并解释了期权链数据表中的隐含波动率,我们将通过图表来可视化隐含波动率,并从图表中解释 IV 水平。

资料来源:IVolatility.com
在图表中,我们有过去一年的隐含以及 30 天的历史波动数据。
市场参与者使用历史隐含波动率水平来衡量对 IV 的理解,例如,3 个月前 IV 在哪里,以及今天基于机会的交易在什么水平。
交易者还使用历史和隐含波动率的过去趋势来了解 HV 和 IV 一起是高于还是低于以前的时期。如果你今天开始交易期权,这是你衡量隐含波动率水平的首选工具。如前所述,隐含波动率水平在特定时间点的高低取决于多种因素。
隐含波动率(IV)等级 - IV 等级是计算过去一年或 52 周隐含波动率的另一种流行方法。它是用来计算当前 IV 水平与年化水平相比是高还是低的。有一个特殊的公式来计算 IV 等级,下面提到:
(当前 IV - 52 周低 IV / 52 周高 IV - 52 周低 IV) * 100
例如:让我们考虑一下第四章图表部分提到的苹果公司(股票代码:AAPL)的例子。目前静脉注射率为 32.5%,52 周最低静脉注射率为 18%。52 周高 IV 是 34%。所以让我们来算一下:
32.5% - 18% / 34% - 18% = 14.5% / 16% = 90.625%.
解释 IV 等级也很容易。直观上,IV 等级是指当前 IV 和 52 周低点 IV i 之间的差异。在这种情况下,它是 90.625%。这意味着 IV 目前比平时高,由于 IV 高,交易者会有兴趣卖出期权。高 IV 意味着高期权价格,因此对期权卖方非常有利。购买具有高 IV 的期权的期权购买者由于在稍后的时间点 IV 的降低而面临损失。
隐含波动率(IV)百分位数 - IV 百分位数是另一种看待或解释 IV 的有趣方式。IV 百分位数仅指当前 IV 低于当前 IV 百分比值的天数,与总交易日数相比,即 252 个交易日。
IV 百分位=当前 IV 下的交易天数/一年内的交易天数。
例如:如果当前 IV (30%)下的天数为 100。交易日数为 252。IV 百分位= 100/252 = 39.68 百分位(近似值)。
下面是日期为 2019 年 11 月 26 日的印度股票的数据表,其中包含用于可视化 IVR 和 IVP 的 IV 排名和 IV 百分位!
| 符号 | ⅳ级 | 第四百分位 | 隐含波动率 |
| 塔塔通信 | Eighty-six point nine nine | Ninety-eight point four seven | Forty-eight point two |
| 苏珊?苏珊 | Ninety-three point one seven | Ninety-eight point five four | One hundred and eighty-four point one three |
| 国家图书馆 | Seventy-three point seven four | Ninety-six point six five | Sixty-one point one eight |
| CGPOWER | Eighty-one point one two | Ninety-six point four | One hundred and six point two nine |
| BOSCHLTD | Seventy-eight point one six | Eighty-seven point nine four | Thirty-six point six five |
| 雷蒙德(男子名) | Seventy-one point six three | Ninety-five point four three | Forty-seven point three three |
| 想法 | Seventy-three point zero four | Ninety-six point two seven | One hundred and sixty-seven point five one |
| NBCC | Seventy-two point zero five | Ninety-eight point seven four | Ninety point four three |
| 工业基准黑(industrial reference black) | Seventy-one point four three | Ninety-three point five three | Eighty-seven point three eight |
| TV18BRDCST | Ninety-seven point one | Ninety-seven point eight four | Eighty point one five |
| 捷达航空公司 | One hundred | One hundred | Four hundred and eighty-three point seven three |
让我们以两种股票为例,即塔塔通信有限公司(TATACOMM)和苏司兰能源有限公司(Suzlon),推导出与隐含波动率相关的 IVP 概念。TATACOMM 的隐含波动率(IV)为 48.2 %,而 SUZLON 的隐含波动率为 184.13%。鉴于两种股票期权的 iv 之间存在巨大差距,从逻辑上看,IVP 也应该有巨大差异。然而,在现实中,塔塔通讯的 IVP 是 98.47,而苏司兰是 98.54,只有 0.07 个百分点的差别!
这意味着,即使塔塔通信的 IV 为 48.2%,它仍处于与苏司兰相似的最高水平之一。因此,在使用 IV 进行期权交易之前,你应该知道一个期权的历史 IV 值是多少,以及它目前的位置。这正是隐含波动率百分位数的应用变得至关重要的地方,它有助于我们确定当前 IV 值与过去一年(252 个交易日)IV 值的比较。
历史 IV 与已实现波动率 -从历史上看,IV 有一个大部分大于已实现波动率的趋势。市场预期不断波动,这意味着它们总是高于或低于基础资产的已实现波动率值。在下面的例子中,我们展示了道琼斯指数隐含波动率和已实现波动率(实际发生的波动率)之间的比较,以形象化相同的概念。蓝线代表已实现波动率,黄线代表隐含波动率。由于市场预期的波动,隐含波动率大多高于实际波动率。

使用 IV 的交易策略
鉴于隐含波动率和期权价格之间存在正相关关系,交易者使用隐含波动率作为他们策略的关键参数。这可能包括基本期权策略,如多头价差、空头价差和备兑买入策略。隐含波动率的使用也可以在使用远期波动率的交易策略或期权定价中看到。此外,高级期权策略如铁鹰和改进的蝴蝶策略涉及隐含波动率的使用。
结论
最后,我们来到了本文的结尾。我们学习了隐含波动率的概念,为什么使用它,以及它是如何在期权交易中使用的。我们理解了 Black - Scholes-Merton 模型,并通过重复公式学习了如何计算 IV。我们还学习了如何使用 python 计算 IV。总而言之,现在你知道了隐含波动率,你知道 IV 作为期权交易参数的重要性。然而,由于期权交易需要风险管理和完善的策略执行思维,从这篇文章中学到的知识可以作为交易期权的补充工具!
免责声明:股票市场的所有投资和交易都有风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。**
在 Zipline 中导入 CSV 数据进行回溯测试
原文:https://blog.quantinsti.com/importing-csv-data-zipline-backtesting/
由普里扬卡·萨赫
在我们的上一篇关于 Python 中 Zipline 包介绍的文章中,我们创建了一个移动交叉策略的算法。回想一下, Zipline 是一个用于交易应用的 Python 库,用于创建一个事件驱动的系统,该系统可以支持回溯测试和实时交易。
在上一篇文章中,我们还学习了如何在 Zipline 上实现移动平均交叉策略。Zipline 中的策略代码直接从雅虎读取数据,执行回溯测试并绘制结果。我们建议您在继续学习之前,先温习一下前一篇文章中提到的一些基本概念:
- 安装(如何在本地安装 Zipline)
- 结构(用 Zipline 编写代码的格式)
在本文中,我们将更进一步,学习使用不同来源的数据对 Zipline 进行回溯测试。我们将学习:
- CSV 格式 OHLC 数据的导入和回测
- 从 Google Finance 导入和使用数据进行研究/分析
- 计算并打印回测结果,如 PnL、交易数量等
这篇文章为严肃的 quants 和 DIY 算法交易者提供了指导,这些交易者希望独立地使用 Python 或 Zipline 软件包对他们的交易想法进行 T2 回溯测试和假设测试。在本帖中,我们将假设数据来自美国市场。通过对代码进行一些编辑和添加,可以使用其他市场的数据集进行分析。我们将在以后的帖子中分享相同的内容。
滑索上的部分代码——我们已经知道的

现有方法的问题?
Zipline 提供了一个内置函数“loads bars from_yahoo()”,该函数从 yahoo 获取给定范围内的数据,并使用该数据进行所有计算。虽然很容易使用,这个功能只适用于雅虎数据。使用这个函数,我们不能对不同的数据集进行回溯测试,例如
- 商品数据——雅虎不提供
- 以 csv 格式创建和保存模拟数据集
到目前为止,我们一直在使用这个内置函数来加载 Python IDE 中的股票数据,并进一步使用它。为了能够在 Zipline 中读取 csv 或任何其他数据类型,我们需要了解 Zipline 是如何工作的,以及为什么导入数据的常用方法在这里不起作用!
Zipline 接受面板表格中的数据。要了解 Zipline 如何处理和理解数据,我们必须了解一点 Python 中的数据结构。
Panda 中的数据结构
Pandas 基本上以三种形式构建数据:系列(1D)、数据框(2D)、面板(3D)
- 系列:
它是一个一维标签数组,能够保存任何数据类型(整数、字符串、浮点数、Python 对象等)。).轴标签统称为索引。
创建系列的基本方法是调用:
s = pd。系列(数据,索引=索引)
series 接受不同种类的对象,如 Python 字典、ndarray、标量值(如 5)。
- 数据帧:
它是一个带有行和列的二维标记数据结构。列可以是不同的类型或相同的类型。
它是最常用的熊猫对象之一,接受不同类型的输入,如 1D 数组的字典、列表、字典或序列;二维 numpy.ndarray 结构化或记录阵列;一系列。
- 面板:
面板是一种较少使用的数据结构,但可以有效地用于三维数据。
三个轴命名如下:
- items: axis 0,每一项对应于其中包含的一个 DataFrame
- major_axis: axis 1,它是每个数据帧的索引(行)
- minor_axis: axis 2,它是每个数据帧的列
Zipline 只理解面板格式的数据结构。
虽然很容易导入。csv 数据在熊猫作为一个数据帧,这是不可能的,在 Zipline 直接做同样的事情。然而,我们发现了这个问题的一个迂回之处:

这是一项强大的技术,可帮助您从不同来源导入数据,例如:
- 在 zipline 中导入 CSV 格式的 OHLC 数据(我们将展示如何)
- 从雅虎以外的在线资源读取数据,这些资源与 Panda 连接(我们将展示如何连接)
- 在 Zipline 中从 Quandl 读取数据(这是留给你的一个练习!)
让我们从三个步骤开始吧!
-
Import data in python
我们可以使用任何方法将数据作为数据帧导入,或者只是导入数据并将其转换为数据帧。这里,我们将使用两种方法来获取数据:DataReader & read_csv 函数。
使用 DataReader 从 Google 读取数据
Pandas 提供了一个 Datareader 函数,允许用户指定日期范围和来源。你可以使用雅虎、谷歌或任何其他数据源。
#code
pip install pandas
import pytz
from pandas.io.data import DataReader
from collections import OrderedDict
data = OrderedDict()
start_date = '9/17/2011'
end_date = '6/24/2015'
data['SPY'] = DataReader('SPY',data_source='google',start=start_date, end=end_date)
print data['SPY'].head()
type(data['SPY'])
这是打印前 6 行时数据帧的样子:

使用 read_csv 函数导入一个 csv 文件
Pandas 提供了另一个函数 read_csv,它从指定的位置获取 csv 文件。请注意,CSV 应该采用正确的格式,以便在 Zipline 中被策略算法调用时能够以正确的方式运行。
CSV 文件格式:
第一栏是“日期”栏,第二栏是“开仓”,第三栏是“高位”,第四栏是“低位”,第五栏是“收盘”,第六栏是“成交量”。任何列都不应为空或缺少值。
读取 CSV 文件:
#code
import pandas as pd
datas = OrderedDict()
data['SPY'] = pd.read_csv('SPY.csv', index_col=0, parse_dates=['Date'])
print data['SPY'].head()
type(data['SPY'])
请注意上面的代码:
股票的名称是“SPY ”,我们已经在保存 CSV 文件“SPY.csv”的目录中,否则您还需要指定路径。
-
Convert data frame into panel
通过上述方法导入 Python IDE 的数据保存为 Dataframe。现在我们需要将其转换为面板格式,并修改长轴和短轴。
#code
panel = pd.Panel(data)
panel.minor_axis = ['Open', 'High', 'Low', 'Close', 'Volume']
panel.major_axis = panel.major_axis.tz_localize(pytz.utc)
Zipline 接受['开盘','高','低','收盘','成交量']数据作为短轴,以 UTC 时间格式将'日期'作为长轴。因为如果我们没有 UTC 格式的日期,我们就使用“tz_localize(pytz.utc)”来转换它。
现在“面板”是以面板格式保存的数据集“数据”。这是面板格式的外观:

-
Use this new data structure panel to run your strategy
我们使用这个新的数据结构‘Panel’来运行我们的策略,在‘initialize’或‘handle _ data’部分没有任何变化。策略逻辑和代码保持不变。我们只是在运行策略时插入新的数据结构。
#initializing trading enviroment
algo_obj = TradingAlgorithm(initialize=initialize, handle_data=handle_data, capital_base = 100000.0)
#run algo
perf_manual = algo_obj.run(panel)
就是这样!现在,您可以轻松地在 CSV 数据文件上运行之前解释的移动交叉策略!来吧,试试看!
您可以获取 Quandl(US data)数据,并尝试在其上生成信号。
对滑索进行回溯测试
在前一篇文章中,我们测试了一个简单的移动交叉策略,并绘制了每个交易日的现金和 PnL。现在,我们将计算 PnL 和整个交易期间的交易总数。
回想一下,结果会自动保存在“perf_manual”中。使用同样的方法,我们可以计算任何我们需要的性能比率或数字。
#code
#calculation
print "total pnl : " + str(float(perf_manual[["PnL"]].iloc[-1]))
buy_trade = perf_manual[["status"]].loc[perf_manual["status"] == "buy"].count()
sell_trade = perf_manual[["status"]].loc[perf_manual["status"] == "sell"].count()
total_trade = buy_trade + sell_trade
print "buy trade : " + str(int(buy_trade)) + " sell trade : " + str(int(sell_trade)) + " total trade : " + str(int(total_trade))

看起来这个策略损失了 50%以上的初始资本!
要更改初始资本和其他参数来优化您的回溯测试 excel 结果,您需要相应地初始化 TradingAlgorithm()。‘资本基数’用于定义初始现金,‘数据频率’用于定义数据频率。例如:
algo_obj = TradingAlgorithm(initialize=initialize, handle_data=handle_data, capital_base = 80000.0)
(默认情况下,资本为 100000.0。)
通过 TradingAlgorithm()函数的官方文档来尝试了解更多!
我们的下一篇文章将向您介绍 python 中的 zipline 包及其优点,如何安装它,并使用它来编写金融贸易的移动交叉策略。
你可以通过对历史数据进行回溯测试来提高交易成功的可能性。Quantra 的这个关于回溯测试交易策略的课程正是你从交易中获得最大收益所需要的。从基本步骤、数据、规则、风险管理等方面学习一切。立即注册!
重要提示:我们不建议再使用 zipline,因为这个库在过去两年中没有得到有效的管理。
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
注意:我们注意到一些用户在从雅虎和谷歌金融平台下载市场数据时面临挑战。如果您正在寻找市场数据的替代来源,您可以使用 Quandl 进行同样的操作。
下载数据文件
- mac_excel_ zipline.txt
独立算法交易者和他们的成功秘诀
原文:https://blog.quantinsti.com/independent-algo-traders-recipe-success/
这篇文章讨论了帮助独立算法交易者成功的各种因素,包括帮助他们独立成功的原因、规则和要点。
以下是我们将在这篇博客中讨论的内容:
技术的简易性,强大系统的支持,以及在全球范围内的便捷性——甚至把交易带到了个人。这导致了独立算法交易员的崛起。它们正迅速成为金融发展的未来。
当被问到:独立的 Algo 交易者能成功吗?”,我的第一反应是“为什么不呢?".
决定成功和失败的不是你做了什么,而是你如何去做。
其次,问这个问题是怎么回事?没有任何原因,独立交易者不能成功,这已经成为一个“神话”。
另一方面,值得注意的是,许多活跃的交易者曾经是短线交易者。在某些情况下,这种增长可能是缓慢而稳定的,因为学习曲线占据了你大部分的时间。但是如果做得好,如果你训练得足够多,并且正在实施,你可能会在早期就学会一些东西。
那么,独立算法交易者如此成功的原因是什么?
独立算法交易者成功的秘密
因为这是简单的理解,一个独立的算法交易者将自己交易,这意味着不分割利润,只支付交易费用,避免经纪人。
让我们来了解一下他们成功的原因。
从失败中学习-我们从错误中学习。而且往往来自失败。成功的交易者似乎坚持不懈地尝试收支平衡,并开始从交易中获利。简而言之,他们只是比你训练得好而已。
多种有利可图的交易 -经验丰富的交易者很快意识到哪些交易策略对他们有利,哪些对他们不利。增加盈利交易策略的数量可以补偿他们的损失。
分析一下这个! -工具深入分析和解释数据,为您提供一些令人难以置信的结果。有些是免费的,有些是付费的。
纪律 - 交易者必须站在自己的立场上思考。他们不能懈怠。算法交易确保你的情绪、直觉和预感不会影响你的交易策略和结果。简而言之,他们创造了一个有利于灌输纪律的氛围。
洞察市场——交易者专注于理解市场本身的心理——市场如何运动,趋势如何运作,等等。人们经常误解交易者是根据他们的心理来解释和分析市场的。他们这样做了,但据他们所知。
利用他人的知识和经验 -整合许多交易者的观点有可能提出一个令人信服的论点,并为你建立一个独特的观点。你的导师、交易伙伴、他们的经历,或者只是电视上一个谈论市场的人,可能会给你一些智慧,也许会触动你的心弦。
好的达成 - 算法交易允许交易者更有效地建立策略,使用各种建模技术,更好地管理风险,利用各种工具等。这有助于他们进入市场。
有抱负的交易者应该向独立的算法交易者学习什么?
你总是向成功人士、你的偶像和业内中坚分子寻求灵感和建议。交易者模仿他们,模仿他们的动作,像圣经一样遵循他们的话语。
然而,不仅仅如此。有许多品质帮助他们在这个领域站稳了脚跟。哪些?让我们看看。
继续前进——对于任何交易者来说,学习不应该停止。随着技术每天都在发展,我们应该保持与时俱进。
交易&重复——找到你的导师,向他们学习。如果没有,交易者通常更喜欢通过查看市场记录来了解当天市场发生了什么。他们研究它们,分析它们,然后将发现付诸实践。
不要把注意力放在问题上——交易者会想“如何解决这个问题?”而他们应该问“问题的起源是什么?”。Future.io 举办的网上研讨会揭示:交易者通常认为交易中的心理问题通常是潜在问题的结果,而不是问题本身。成功处理这一问题意味着找出并解决其原因。
潜意识学习——因为你在频繁地监控,并且保持警惕的目光,你每年都有超过 200 次的学习试验。在内心深处,你的大脑下意识地捕捉到了这一点。专注,你就会得到。
发现它,夏洛克! -确定最成功的策略,通常首选使用最广泛且基于规则的策略。
培养技能 -他们不断地培养自己的技能。无论是决策还是理解模式的能力,或者是根据以前的经验预测市场动向的能力。
模拟器和交易者 -使用模拟工具可以增强你的学习经验,当你在模拟器下不知不觉地训练时,你可以理解多种市场情景。
交易过程 -交易过程可以控制。何时交易,如何交易,交易什么,完全取决于交易者。
最重要的是,你必须真实地面对自己,问自己这个问题:
这是给你的吗?
但是如果你对此不满意,在一天结束的时候,如果你发现自己失望了,那么你应该足够明智地明白你需要继续前进。
让你对交易的热情驱动你
是你的激情常常驱使你走向成功。如果你被挣扎吓住了,或者对市场失望了,仍然充满激情地追求交易,它可能会驱使你走向成功。
作为一个成功的独立交易者,从如何成为一个独立交易者,在这个博客里有很好的解释。如何成为独立的算法交易员?
从手工交易转到算法交易的里沙夫的旅程,追求制药并成为一名量化分析师的艾瑞兹,或者成为独立算法交易者的劳伦斯·特劳德·K·拉杰——许多这样的成功故事已经证明这个问题是错误的。
就像你生活中的其他冒险一样,你可能会在尝到成功的滋味之前跌倒。但是寻求正确的帮助,你可能会重新站起来。许多交易者甚至在开始前就退出了。
让你很好奇,不是吗?
你将如何整合所有这些?你将如何学习这一切?
但最重要的是,你将从哪里学到这些?
在这个领域成长或计划在算法和量化交易领域开始你的职业生涯永远不会太晚。你可以通过算法交易(EPAT)的执行程序学习算法交易的各个方面,这个程序为你提供成为成功交易者所需的技能。立即报名!
交易中的独立事件:它是什么,真实生活的例子,等等
独立事件是数学、计量经济学和金融学的重要组成部分。不影响彼此结果的事件是独立事件。特别是就金融市场的交易领域而言,独立事件扮演着重要的角色。
当交易一个可交易的项目(比如股票、商品等)时。)的金融市场并不影响其他项目的同时交易,它是一个独立的事件。
让我们通过这篇文章了解更多关于独立事件的信息,文章包括:
- 什么是独立事件?
- 独立事件的例子?
- 非独立事件和独立事件的区别
- 交易中独立事件的真实例子
- 交易者如何利用独立事件?
- 独立事件和条件概率的区别
什么是独立事件?
独立事件是指不依赖于任何事件而发生的事件。例如,抛两枚硬币可以得到任何结果,正面或反面。两次翻转的结果将相互独立。
因此,如果事件 A 的发生概率不受另一事件 B 的发生的影响,那么 A 和 B 被认为是独立事件。
考虑一个滚动骰子的例子。如果 A 是事件“出现的数字是奇数”,B 是事件“出现的数字是 3 的倍数”,那么
P(A)= 3/6 = 1/2,P(B) = 2/6 = 1/3
独立事件的示例
在日常生活中,我们都会遇到一些独立的事件。
独立事件的一般示例
其中一个例子可以是同时滚动两个骰子。两次掷骰的结果将相互独立。由于这两个事件互不影响对方的发生,所以它们被认为是独立的事件。

Independent events
交易领域中独立事件的示例
再举一个例子,让我们考虑一下交易领域。在金融市场的交易中,交易者可以交易股票、商品和现金的投资组合。在这种情况下,交易是相互独立的,因为一个市场的交易是独立于另一个市场的交易的。
此外,要注意的重要一点是,为了分散投资,交易者可以同时交易一只股票(比如微软)和一种商品(比如石油)。
相依事件和独立事件的区别
| 独立事件 | 依赖事件 |
| 一个事件的结果不会影响另一个事件的结果。 | 一个事件的结果会影响另一个事件的结果。 |
| 如果两个事件,比如说 A & B 事件是独立的事件,那么这两个事件发生的概率是 P (A 和 B) = P(A)xP(B) | 如果两个事件是相关事件,那么这两个事件发生的概率是 P (A 和 B) = P(A)xP(B|A) |
交易中独立事件的真实例子
当新冠肺炎疫情爆发时,大多数行业都遭受了损失,但也有少数行业,表现良好。电子商务、健康和卫生行业等行业在疫情期间表现良好。谈到电子商务行业,新冠肺炎疫情增加了网上购物的需求。
相反,其他一些行业,如酒店业、航空业等。由于全球人员流动/旅行减少而遭受损失。
让我们看看两只股票,即 PK 或 Park Hotels & Resorts(酒店行业)和 EBAY(电子商务行业)在新冠肺炎高峰期的表现。
在这里,我直观地展示了数据,以使分析更加清晰。
指数套利——一种自动化期权交易策略
原文:https://blog.quantinsti.com/index-arbitrage-automated-options-trading-strategy/

在本帖中,我们将讨论自动化套利交易(指数套利)以及在没有自动化的情况下实现这一想法的复杂性。如果你是期权交易的新手,那么你可以查看 Quantra 上的虚拟期权交易免费课程。
指数由一篮子股票组成。指数的价格取决于成份股的价格。如果所有股票的价格上涨 5%,那么指数价格也上涨 5%。
你认为在波动性的情况下也会这样吗:如果所有股票的波动性增加 5%,指数波动性也会增加 5%吗?答案是‘不一定’!指数波动取决于股票之间的相关性。让我们看看如何。
在股票 A 和股票 B 相关性较低的情况下,即使股票 A 和股票 B 的波动率都在增加,但指数波动率基本保持不变。另一方面,当相关性高时,指数的所有元素都在一起移动,因此当股票的波动性高时,指数的波动性也高。

股票和指数期权
用于指数期权定价的波动性取决于用于股票期权定价的波动性和股票之间的相关性。
波动率用于给指数期权定价 =函数(波动率用于给股票期权定价,股票之间的相关程度)
根据市场上指数期权的价格,我们可以找到用于给指数期权定价的隐含波动率。
同样,根据市场上股票期权的价格,我们可以找到用于给股票期权定价的隐含波动率。
通过在上面的函数中插入这两个值,可以找到股票之间的平均隐含相关性水平。
交易我们对平均隐含相关水平的看法
如果说你当前的相关性是 0.4,你期望相关性会上升。这意味着所有股票将一起波动,因此指数波动性将相对上升。类似地,如果相关性预期下降,那么相对于股票期权,指数波动性预期下降。

当相关性预期上升时= >指数期权的波动性预期上升= >买入指数期权和卖出股票期权的权重比率。
我们为什么要进行自动套利交易?
- 指数篮子的近似值
比方说,篮子里有股票 A (43%的权重)和股票 B (34%的权重)。你把它近似为 44 和 33,那么这个比例现在变成 4/3。然而,实际上一个指数中有许多股票。什么样的近似值能以最小的误差给出最小的股票规模?最重要的是,批量大小可能不同。这涉及需要自动化的复杂数学。
- 通过合并个股和指数的希腊值计算总投资组合希腊值。
例如,当你在指数 Nifty 篮子上交易时,你的投资组合有一个特定的 Delta、Vega 和 Gamma,用于 Nifty 和 consistent 股票,如 SBI、Reliance、TCS 等。对于净投资组合,需要计算希腊 delta、vega 和 gamma。这需要经常实时进行。
- 随着市场的变动,头寸必须从一组期权执行转移到另一组。
为了更透彻地理解自动套利交易,你可以在这里浏览这次讨论的录音,
https://www.youtube.com/watch?v=2OqpdT9HuIU
你可以在 Quantra 上报名参加这个免费在线 python 课程,了解基本术语和概念,这将有助于你的以旧换新选择。
下一步
你可能也喜欢阅读关于量化交易策略的文章,比如关于统计套利的“统计套利策略和“神话,以更好地理解套利策略。
指数期货-简要指南!
本文讨论了金融市场中期货的基础知识及其类型,即所谓的指数期货。如果你想探索指数期货以及如何利用它,那么这篇文章将很好地服务于你的目的。
接下来,我们将讨论指数期货,本文涵盖:
- 什么是期货?
- 指数期货:什么和为什么?
- 股指期货的运作
- 股指期货如何预测市场?
- 期货价格的计算
- 股指期货交易方式
什么是期货?
在金融市场上,期货意味着持有者有义务在未来某一固定日期以预定价格交易资产的合同。其中涉及的双方是资产的买方和卖方。在到期日,买方必须购买,卖方必须出售资产。他们总是以现金结算合同。
在结算合同之日,他们交换市场上的现价和合同中确定的价格之间的差额。这个差额就是卖方的利润(万一价格下跌)或损失(万一价格上涨)。
期货合同起源于那些商品制造商或生产者,他们需要在销售发生之前得到价格保证。渐渐地,经过一段时间,它们开始被用作衍生品。
好吧!展望未来,我们将看看什么和为什么指数期货的一部分。
指数期货:什么和为什么?
指数期货不过是一种期货合约,用来交易股票指数。持有或购买指数期货合约意味着你已经同意在预定的价格和日期交易特定的股票指数。此外,由于股票市场上没有交易或交割的基础实物资产,指数期货以现金结算。
为什么要交易指数期货?
由于交易指数期货有其自身的优势,我们将在这里看一看。交易指数期货有三个主要原因,它们是:
- 投机
- 对冲
- 资本建设
猜测
有了指数期货合约,你可以推测其价值,并根据推测的价值决定投资。这样你就可以用现金结算做空或做多。
对冲
有了指数期货,你可以通过持有多只股票来对冲你的股票。当你持有多只股票进行指数期货交易时,你可以通过做空期货合约来抵消亏损的风险。
资本建设
你可以得到一个很好的资本持有人的位置,因为有了指数期货,除了上面提到的优势,你还可以利用合约。杠杆意味着你可以借出持有期货的资金。这样,如果你投机和投资得好,你可以建立资本。
让我们向前看,看看指数期货现在是如何运作的。
股指期货的运作
股指期货的工作原理是交易主要(如 DJIA,间谍)和小型以及中型股票指数。有趣的是,最受欢迎的股票指数大小不同,这意味着它们的价值不同。
让我们来看看指数期货的运作。您可以通过两种方式交易指数期货,因此,它们可以通过以下方式交易:
- 雇佣经纪人
- 差价或差价合约(与交易所直接交易)
雇佣经纪人
股指期货在交易所的交易与股票交易完全一样。期货交易所的工作方式非常类似于股票交易所,因此,他们对谁可以访问他们的订单簿有严格的规定。为了买卖期货,你可能需要一个期货经纪人。
差价指数合约
这意味着你可以直接与交易所交易,并根据合约的未来价格做出投资决定。这样,你不需要经纪人的干预,你可以与杠杆(贷款)提供商交易。尽管差价合约是杠杆化的,但它们也伴随着损失全部资金的风险。
接下来,我们将看看指数期货如何帮助预测市场。
股指期货如何预测市场?
指数期货确实有助于预测市场,但它们不应该是你预测市场的唯一来源。为了借助指数期货预测市场,你需要研究交易者的动向。如果交易者准备以低于前一天收盘价的价格卖出大量期货合约,这意味着市场可能正在下跌。相反,如果交易者购买大量期货合约,这可能暗示市场在上涨。
即使这种分析起着重要的作用,它也可能偶尔出错。此外,市场有可能在一天中完全改变。这是可能的,因为某些因素,如:
- 关于公司产品的正面或负面反馈
- 公司运作中的一些小故障
- 像衰退这样的经济事件
- 特定行业因经济形势而产生的负面结果
这就是为什么在预测市场时,你需要密切关注其他因素。
现在,让我们看看如何计算指数期货合约的未来价格或价值。
未来价格的计算
让我们来看一下 Python 代码,它将帮助你分析给定年份或未来的期货合同的价值。在这个价值的基础上,可以做出投资决策。
找出期货合约价格的公式基于如下因素:
- 利率
- 到期时间
- 预期利润率
- 现货价格
- 期货合约的财务成本
公式:
期货价格=现货价格(1+r)t -预期股息(1+r)t +成本(1+r)t
这里,
现货价格=股票的当前价格
r =利率
t =到期时间
成本=持有股票的费用
在 Python 中,有一个非常简单的代码,你可以用它来计算指数期货合约的未来价格,从而使你的交易决策以此为基础。
构建趋势跟踪策略的五个指标
原文:https://blog.quantinsti.com/indicators-build-trend-following-strategy/
趋势跟踪策略是交易者中最受欢迎的策略,因为交易者可以根据股票的趋势决定做多或做空该股票。2022 年 5 月,据观察,兴业银行运行的领先趋势跟踪策略指数年初至今上涨超过 26%⁽⁾。
让我们通过这篇博客了解更多的趋势跟踪策略和五个最常用的趋势交易指标,内容包括:
什么是趋势跟踪策略?
趋势跟踪策略是你简单地驾驭趋势的策略,即当价格上涨时买入,当价格开始下跌时卖出(两者都是长期的)。使用趋势跟踪策略,我们的目标不是预测或预言,而是只需要关注市场上任何出现的趋势。
趋势跟踪策略示例
让我们以亚马逊的股票作为趋势跟踪策略的例子。在下图中,我标记了两条蓝色的线,亚马逊的价格呈现两种趋势,即上升趋势和下降趋势。

Amazon
你可以在图中清楚地看到,在 2020 年,大约在 5 月份,亚马逊的股价持续上涨,甚至大部分时间都处于上涨趋势。
显而易见,到 2022 年 5 月,价格大多处于更高的高点和更高的低点。在上升趋势的情况下,趋势交易者做多并买入股票,希望价格进一步上涨。
但是,你可以说,在 2022 年 5 月,亚马逊的股价大多下跌,蓝色直线显示出急剧下降的趋势,随后是更低的低点和更低的高点。
在下跌趋势的情况下,趋势交易者通常会做空,并倾向于卖出股票。如果趋势跌破某个点,趋势交易者甚至会退出市场。
趋势是如何出现的?
当我们使用算法交易即量化交易策略来抑制情绪交易时,同样的方法也可以用来利用情绪并将其货币化。由于互联网的力量,我们都听说过像病毒一样传播的事情。这是同一个概念,尽管目标不同。
在金融界,也有 FOMO(害怕错过),尽管在这里,原因是普遍希望站在胜利的一方。因此,趋势的出现是人类情感和从众欲望的结果,因为一群人可以根据事件引发的情感做出交易决定。其他人也跟着走!
交易趋势的类型
趋势跟踪是最常见和最流行的交易策略,因为趋势对交易者来说至关重要。趋势很重要,因为趋势可以帮助交易者识别金融市场(股票、商品、货币等)的进场和出场位置。).
因此,交易者可以跟踪趋势,在上升趋势的情况下买入(进入)股票,在趋势相反的情况下,交易者可以卖出(退出)股票。
以下是三种不同类型的总体趋势:
- 上升趋势
- 下降趋势
- 横向趋势
上升趋势
上升趋势意味着股票价格在升值。在上升趋势的情况下,交易者的目标是通过进入多头头寸来利用优势,以便在稍后以高价卖出。
例如,如果股票价格上涨 40 美元,下跌 20 美元,然后再次上涨 25 美元,达到 45 美元,则股票价格处于上升趋势,因为它在价格中显示出更高的高点(价格的上涨更经常地使价格线朝着向上的方向)和更高的低点(价格的偶尔下跌不使价格线朝着向下的方向)。
下降趋势
在下跌趋势的情况下,股价面临价值下跌。在下跌趋势中,趋势交易者进入空仓。而且,当股票价格似乎要跌破可能的最低点时(这使得价格太低),趋势交易者更喜欢卖出股票,退出市场。
例如,如果股票价格下跌 70 美元,然后上涨 40 美元,然后再次下跌 50 美元,达到 80 美元,交易者将看到下降趋势的形成。
在下跌趋势中,它通过股价的较低高点(价格的偶尔上涨并不使价格线向上)和较低低点(价格的下降更经常使价格线向下)显示出来。
横向趋势
横盘趋势意味着市场是静态的,即股价既没有到达最高点,也没有到达最低点。通常,趋势交易者会忽略横盘趋势,但是为了利用横盘趋势,黄牛党会在市场上建立短期头寸。
实施趋势跟踪战略
趋势跟踪策略旨在利用市场情景获利。原因是高风险和同样高的收益。
没有一个单一的指标可以预测一种安全的买卖证券的方式。然而,有一些著名的方法经常被用来获得分析观点和逻辑决策。
以下是最好的交易指标,有助于创造趋势跟踪策略:
- 移动平均线
- 布林线
- MACD
- RSI
- OBV
移动平均线
移动平均线指标是一个广泛使用的技术指标,用于做出不是基于一两次价格波动的决定。
一组历史数据可以用来观察股票在预定时间段内的价格波动。这同样有助于描绘趋势流的大致方向。
在趋势跟踪策略中使用移动平均线
移动平均线提供了一个清晰的思路,让你知道是做多还是做空这只股票。如果股票呈现负面趋势,即价格低于移动平均线,则做空(卖出)股票。
另一方面,如果股价高于简单移动平均线,则必须持有该股票的多头头寸(买入),因为预期股价会进一步上涨。
用 Python 绘制趋势跟踪策略的移动平均线
在我们绘制移动平均线之前,我们将首先定义一个时间段,并选择一只股票,以便我们进行分析。对于本文,我们将范围保持在 2020 年 1 月 1 日到 2022 年 1 月 1 日,使用的公司详细信息是 Tesla (TSLA)。
因此,在 python 中导入相关库并定义周期的代码如下:
[网络研讨会]EPAT 算法交易信息会议
原文:https://blog.quantinsti.com/info-session-algorithmic-trading-webinar-22-december-2020/
https://www.youtube.com/embed/L3k6Sg6-CZ8?rel=0
2020 年 12 月 22 日星期二
东部时间上午 8:00 | IST 时间下午 6:30 |新加坡时间晚上 9:00
如果你一直在寻找进入定量和算法交易领域的职业生涯,你很可能听说过算法交易(EPAT)的高管课程。
但是它能帮助你实现你在这个领域的职业&学习目标吗?
关于 EPAT 的这次信息通报会讨论了这一问题,同时涵盖了 EPAT 方案的各个实际方面。除了每个 EPAT 模块的详细概述,它还涵盖了 EPAT 如何填补现有的技能差距,并解决行业和个人的学习要求。
会议大纲
- 为什么金融市场中有 Quant 和 Algo?
- 为什么 EPAT 一直为来自 70 多个国家的专业人士工作?
- 了解 EPAT 的实际情况。
- EPAT 能帮你解决定量和算法交易领域的痛点吗?
- 终身学习和其他 EPAT 特色如何让你保持领先?
关于 EPAT
想了解更多关于 EPAT 的信息,请访问: EPAT
关于演讲者

Nitesh Khan delwal(QuantInsti 联合创始人&首席执行官)
他的职业生涯始于财政部的银行业。在一家自营交易公司短暂担任领导后,他于 2009 年与人共同创立了 iRage。作为 iRage 的业务主管,iRage 成为了印度算法交易领域的领军人物之一。
2016 年,他将注意力转移到 QuantInsti,这是他在 2010 年联合创立的一个研究所,担任其首席执行官。在他的领导下,QuantInsti 一直致力于将科学技术导向的贸易知识和途径带给全球的大众和机构,并且已经帮助来自 200 多个国家和地区的注册用户实现了同样的目标。
Nitesh 拥有 IIT 坎普尔的电气工程学位和 IIM 勒克瑙的管理研究生学位。
算法交易信息会议
原文:https://blog.quantinsti.com/info-session-algorithmic-trading-webinar-25-june-2019/
https://www.youtube.com/embed/OVhWKpKx7cA?rel=0
美国东部时间 2019 年 6 月 25 日星期二上午 10:00 | IST 时间晚上 7:30 |美国东部时间晚上 9:00
事件规格
- 算法交易行业概述
- 目前的市场份额和数量
- 全球算法交易的增长和未来
- 风险措施和技术进步
- 如何开始
扬声器配置文件

Nitin 提供了对统计学、计量经济学和期权的深入理解。他涵盖了波动性估计、统计参数公式等各个方面。在他的疗程中。他还为国际期刊撰写文章,包括描述 Swamee-Aggarwal 方程发展的文章。尼廷是 Alphom Advisory 的联合创始人,该公司专注于高频交易策略。他也是 iRage 期权做市团队的主要成员之一。在此之前,他曾在 Aditya Birla Group 担任印度的领导助理,并在美国新泽西州的 Exelus Inc .任职&。
他在印度 IIT·洛克获得技术学士学位,在美国新泽西理工学院获得化学工程硕士学位。在那之后,他也从印度的 IIM 大学管理专业毕业。
CSAF 金融情绪分析和替代数据证书[信息课程]
原文:https://blog.quantinsti.com/info-session-csaf-29-march-2022/
https://www.youtube.com/embed/26rvLjc52pw?rel=0
关于会议
参加这个关于 CSAF 的实时信息会议,了解 CSAF 如何提升你的形象和职业生涯。
CSAF 是一个在现代金融方法中发展你职业生涯的完美平台,它涵盖了交易、投资决策的各个方面&使用新闻分析、情绪分析和替代数据的应用。
会议大纲如下:
- 由顶尖的交易专家、情绪专家、定量模型专家和 HFT 思想领袖为金融专业人士设计的利基课程。
- 这门课程如何对不同背景的专业人士有用?
- 本课程通过基础讲座和使用案例讲座来讲授
- 考试、评估和认证
- 主要结果和收获
- 问与答(Question and Answer)
扬声器

Gautam Mitra 教授
主席,UNICOM 和 OPTIRISK
Mitra 教授是运筹学领域,尤其是计算优化和建模领域的国际知名研究科学家。他是 OptiRisk Systems 和 UNICOM 研讨会的创始人和主席。他出版了五本书,发表了 150 多篇研究论文,并于 2004 年被布鲁内尔大学授予“杰出教授”称号。

Christina Erlwein-Sayer 教授
柏林工业大学统计和金融数学教授
Christina 教授是柏林工业大学(HTW)统计和金融数学教授,曾在 OptiRisk Systems 担任定量分析师和高级研究员。她于 2008 年在伦敦布鲁内尔大学获得了数学博士学位。然后,她在德国凯泽斯劳滕弗劳恩霍夫 ITWM 大学金融数学系担任研究员和顾问。
特邀嘉宾
CSAF 大学的校友也加入了我们,
- 来自澳大利亚墨尔本的 Amit Arora(高级变革管理顾问)和
- abhijit Desai(ICICI 证券公司电子交易副总裁)来自印度孟买。
本次活动于:
2022 年 3 月 29 日星期二
东部时间上午 9:30 | IST 时间晚上 7:00 | SGT 晚上 9:30
在日本从事算法交易 17 年| Praveen Singh 来自印度
it 专业人士有可能也是一名成功的高频交易者吗?
绝对!
Praveen Singh 在信息技术和投资银行领域拥有超过 17 年的经验,同时也是一名以结果为导向、雄心勃勃的电子交易专家,在为所有全球中心(日本、香港、澳洲、AMER、EMEA)提供经济高效的高性能解决方案方面有着出色的记录。
他的丰富经验还包括为日本市场设计 DMA、HFT 和 ULL (FPGA 解决方案)产品,并在瑞士瑞信银行和德意志银行等全球顶级公司担任副总裁。
让我们跟随他进入 algo 交易的旅程。
嗨,普拉文,告诉我们关于你自己的事情!
我的名字是 Praveen Singh,我来自印度,过去 14 年来我一直在日本工作。我于 2004 年毕业于浦那一所名为陆军技术学院的学院。
毕业后,我在浦那和班加罗尔工作了 3 年。然后我在 2008 年来到日本,从那以后我一直在那里工作。所以这些年来,我一直致力于市场连通性的发展。
我有 IT 背景,对算法交易和策略回溯测试很感兴趣。结果,我遇到了 QuantInsti,这是一个我在其他地方从未见过的独特组织。我很感兴趣,做了一些研究,并决定参加他们的项目,在那里我可以从行业专家分享的经验中受益,他们实际上会帮助我实现我的目标。
从工程到金融——这是怎么发生的?
我毕业于电子和电信专业,但我对微控制器和机器人技术特别感兴趣。我在大学时有一个团队,我们在那里制造机器人,并代表这些机器人参加由印度领先机构组织的成熟的技术盛会。
浦那只有两家公司为机器人做实习,在我最后一年,我被其中一家选中。当我作为新人加入这个组织时,我开始觉得我的技术能力没有得到利用,这让我感到沮丧。
我在那个组织工作了 3 个月,然后开始寻找机器人领域的公司。不幸的是,他们当时没有招聘,我也开始感受到来自各方面的压力。
我总是对在创业公司工作充满好奇,这也是我接触金融的地方。我在一家初创公司工作了 3 年。在我们公司,我开始接触客户,开发交易应用程序,这帮助我与金融联系起来。
我放弃了我的机器人雄心,想成为一名金融专家,在那里我可以制作智能应用程序,帮助我赚钱。
你学习算法交易的过程是怎样的?
在这家初创公司工作 3 年后,我加入了日本的德意志银行,担任客户连接工程师。我的职责是构建和定制客户连接应用程序,并使我们的公司能够为希望与我们公司进行交易的客户提供一个平台。
随着时间的推移,我的角色越来越重要,我负责公司日本股票特许经营权的电子交易平台。像其他公司一样,我们公司也为客户交易提供算法。
对我来说这是一个黑匣子。人们谈论算法和各种各样的方案,比如不同的客户想要怎样的 VWAP 或者百分比交易量或者他们交易的特定策略等等。
这些术语让我很好奇,我想知道它们是什么意思,更重要的是它如何影响交易决策。我和我的导师们聊了聊,了解到有一个特殊的团队叫做量化团队,他们与我们的组织一起设计这些策略。
我开始读书,试图理解这一切是如何运作的。作为一名成功的特许经营电子交易主管,我有必要了解该组织提供的算法及其行为的细节。
我对算法策略的理解增加了。然而,我并不满足于此。我觉得我想更多地了解它,这就是 QuantInsti 参与进来的原因。更多了解算法交易和策略的原因是-
- 我想更多地了解这个领域
- 宽客收入很高
- 市场上对定量工作的需求正在增加
- 我想开一家贸易公司
由于我在日本的一家金融机构工作,我们不允许直接交易或进行交易。但是密码出现了,人们对这些政策有例外。我想学习并利用这些知识来看看我是否能赚更多的钱。
这就是我如何遇到致力于算法交易的独特组织 QuantInsti 和他们名为 EPAT 的项目。这是一个向专家学习的机会。我总是可以阅读各种书籍,但来自专家和专业人士的意见改变了我的游戏规则。
在学习 EPAT 的过程中,你遇到了哪些挑战?
我参加这个课程的原因之一是因为我在你的博客上读到的成功故事。他们启发了我,让我意识到任何人都可以学习算法交易。
课程的另一个好处是教员,如陈博士。我读过几本书,比如欧尼·陈的《赢的策略及其基本原理》和欧尼·陈的《算法交易》。
我在参加这个课程之前进行了研究。在你加入之前,他们有一个强制性的入门,他们会根据这个入门来评估你。这对我帮助很大,我可以理解他们在寻找什么,这样他们就可以引导我到正确的路线。
首先,他们给了我微观结构的简要概述和一些统计数据,如果你想专门从事期权交易,或者如果你想从机器学习开始,他们也有一本入门书。
经历了这些,我明白了整个课程有很多好处,不仅仅是提供技能,还为考生提供了一个根据自己的兴趣专攻不同领域的机会。当时我的兴趣是 cryptos,我有股票背景,所以我也对它感兴趣。
我和教职员工谈过,他们非常清楚在加入之前对我的要求。编程对我来说不是问题,因为我有编程背景。尽管他们提到大部分东西都是用 Python 做的,我对它不太适应,但我已经准备好学习它了。
你最喜欢的 EPAT 特色之一!
很多参加这个课程的人来自不同的背景,比如像我一样的 IT 从业者,来自贸易经济学的从业者,还有一些来自非技术背景的从业者。所以对于他们来说,Python 语言将是一个挑战,因为他们从来没有做过编程。
之前不熟悉 Python 语言。QuantInsti 团队教授 Python 的方式是非凡的。他们教授 Python 的基础知识,如果我教别人 Python 语言,应该是这样的。我和一些不懂 Python 的人进行了交流,并在一些额外的课程中认识了他们,这使我们能够解决他们的问题。经过努力,我开始对它有了更多的了解,但方向很重要,QuantInsti 令人难以置信地展示了这一点。
学习策略对我来说也是一个挑战。第一堂课讲的是用 Excel 表格写 VWAP 策略。他们从零开始,从最基本的 VWAP 开始,如何实现它,然后根据历史数据进行回溯测试并计算 PNL。在同一堂课上,我们还学习了如何调整策略的某些参数来提高 pnl。
最大的挑战是统计,因为我们在算法交易中大量使用统计。我从未在大学里深入研究过它,但我想了解更多。随着课程的进行,他们以各种可能的方式帮助我。支持团队很了不起,一直回答我的问题。他们帮助你起步,从哪里开始取决于你自己。完成课程后,我设置了一个小桌子,我现在使用 cryptos。
你对未来有什么计划?
技术让交易者能够实现他们想要的目标,一些专业交易者了解市场并学习如何操纵交易。许多量化交易者使用算法来决定什么是最好的策略,这样可以达到最高的效率。现在,在当前的市场形势下,最好的交易是由最好的算法执行的,这些算法来自技术。我们必须始终跟上当前的趋势,以使我们的业务。
一年前,密码对我来说相当不错,我设法在云平台上托管手写算法,帮助我交易密码,但更大的计划是离开它,加入 Quant 一方。我想建立一个合理规模的办公桌,根据我在这方面的成功,我想把它扩展到股票而不仅仅是密码,并希望看到它的发展方向。在那之前,有很多学习要做,事情要分类,这需要时间。
你给所有有抱负的算法交易者的信息!
我的建议是从好奇开始,如果你有学习的欲望和探索的好奇心,当它出现时抓住学习的机会,并努力实现你的目标。借助进步的方向,把你的注意力和精力引向你想做的事情,进步就会随之而来。只有激情、努力和耐心,你才能成功。
谢谢你的时间,普拉文。我们很高兴能够在您的 Algo 交易之旅中为您提供指导和帮助,并让您的故事取得成功!我们祝你继续成功,并希望你取得更大的成就。
如果你也想用终生的技能来武装自己,这将永远帮助你提升你的交易策略。这门 algo 交易课程的主题包括统计学和计量经济学、金融计算和技术以及机器学习,确保你精通在交易领域取得成功所需的每一项技能。现在就来看看 EPAT 吧!
免责声明:为了帮助那些正在考虑从事算法和量化交易的人,这个成功的故事是根据 QuantInsti EPAT 项目的学生或校友的个人经历整理的。成功案例仅用于说明目的,不用于投资目的。EPAT 方案完成后取得的成果对所有人来说可能不尽相同。T3】
关于算法交易的信息会议
原文:https://blog.quantinsti.com/informative-session-algorithmic-trading-webinar/
https://www.youtube.com/embed/nq0n9vOnkQo?rel=0
日期:2016 年 11 月 3 日星期四
时间:IST 时间下午 06:30 |新加坡时间下午 09:00 |格林威治时间下午 01:00
会话内容
- 算法交易行业概述
- 目前的市场份额和数量
- 全球算法交易的增长和未来
- 风险措施和技术进步
- 如何开始——免费且便宜的试水方法
- EPAT——算法交易管理课程
- 这是什么?
- 这和你有什么关系?
- 为什么你需要参与进来?
- 问与答——询问算法和量化交易专家
发言人简介

Nitesh Khan delwal 先生,伊拉克资本咨询有限公司联合创始人
Nitesh 在金融市场拥有丰富的经验,在不同的资产类别中扮演不同的角色。他共同创立了 irage capital Advisory Private Limited,这是一家在印度提供算法交易技术和策略服务领域值得信赖的公司。他领导了 iRageCapital 和 QuantInsti 的业务部门。在 QuantInsti,他还是衍生品和跨市场研究培训部门的负责人。他目前是位于新加坡的 iRage 全球咨询服务私人有限公司的董事。
他曾在银行资金部(外汇和利率领域)和自营交易部门工作过。他在 IIT 坎普尔获得电子工程技术学士学位,之后在 IIM 勒克瑙获得管理学研究生学位。
下一步
如果你是一名散户交易者或专业技术人员,想要建立自己的自动化交易平台,今天就开始学习算法交易吧!从基本概念开始,如自动交易架构、市场微观结构、策略回溯测试系统和订单管理系统。你也可以报名参加 EPAT,这是业内最广泛的量化交易课程之一。
用 Python 安装 Ta-Lib:适用于所有平台的完整指南
技术指标是使用历史价格和交易量数据来预测市场方向的。这些指标加在图表上,你可以用它来设置你的进场和出场信号。
如果您可以用 python 中的几行代码计算这些技术指标,并对它在许多金融证券上的表现进行回溯测试,这不是很神奇吗?
Ta-Lib python 库最初是 Mario Fortier 的爱好,但很快成为最著名的股票和其他金融证券技术分析库之一。Ta-lib 包括 150+指标,如 ADX、MACD、RSI 和布林线以及烛台模式识别。
然而,在 python 中安装 Ta-Lib 很困难,有时甚至令人沮丧。但是不要担心,在本文中,我们将为您简化安装,以便您可以专注于创建和回溯测试策略。
我们将在这个 Ta-Lib 安装教程中讨论以下主题。
最简单的方法
替代方法
在我们开始之前,为什么首先要创建 Ta-Lib python 库?让我们思考函数产生的原因。人们意识到,我们可以创建一个函数,大幅减少代码长度,而不是编写相同的代码。
这与我们应用于 Ta-Lib 的逻辑相同。我们使用 Ta-Lib,只输入一行代码就可以得到结果,而不是写几行代码先找到上下波段,然后找到布林线。
仅此而已!记住这一点,让我们从 Ta-Lib python 库教程开始。
安装 Ta-Lib 最简单的方法
下面是使用 Anaconda 提示符跨平台安装 Ta-Lib 的最简单也是最好的方法。
Anaconda 是一个开源的 Python 分发平台,帮助个人和商业企业轻松实现他们的 Python 代码。这也使得安装各种 Python 库变得更加容易。
要轻松安装 Ta-Lib,您可以遵循以下步骤:
- 安装 Anaconda
- 打开 Anaconda 提示符
- 写代码:conda install-c conda-forge ta-lib
- 按下“输入”键
瞧啊!Ta-Lib 现在安装好了!

几分钟后,ta-lib 包将被安装。

这就是全部了。大多数情况下,这种方法可以帮助你安装软件包,但是如果你仍然面临任何问题,请继续阅读,找到操作系统的安装说明。
注意:首先从各自的 web 位置下载包。然后,系统会提示您通过按键盘上的“y”来确认安装过程。这是对安装程序安装必要文件的确认。
在 Windows PC 上安装 Ta-Lib
第 0 步:我们建议使用 Anaconda 安装程序来安装 Python,因为在用 Python 编程时,它更容易使用。
步骤 1:一旦安装了 Anaconda,您将使用 Anaconda 提示窗口来安装相关文件。
在我们下载 Python Ta-Lib 文件之前,我们必须在我们的计算机上验证 Python 版本以及 Windows 系统架构(32 位或 64 位)。
只需在 Anaconda 提示窗口中编写以下代码,就可以找到系统中安装的版本: python - version
您将获得如下所示的输出:

对于 windows 体系结构,您只需右键单击“计算机”(通常命名为“这台电脑”或“我的电脑”)图标,然后单击“属性”,就会显示您的系统详细信息。


步骤 2:在安装 Ta-Lib 时,我们不能直接使用“pip install”命令。因此,我们将首先安装“whl”文件,该文件可在以下链接中找到:https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib
该网站是许多 Python 扩展的有用资源,但我们现在关心的是 Ta-Lib 的安装。
您可以向下滚动到我们将找到相关链接的部分,如下所示:

需要注意的是,在下载文件时,请记住您的 Python 版本和 Windows 架构(32 位或 64 位)。例如,由于我们安装了 python 版和 64 位 Windows 7 系统,我们将下载文件“TA _ Lib-0 . 4 . 17-cp37-cp37m-win _ amd64 . whl”。
您可能已经猜到“cp37”意味着 Python 版本 3.7,“win_amd64”意味着 Windows 64 位操作系统。
默认情况下,“whl”文件下载到“Downloads”文件夹中。由于我们已经为 Python 使用了 Anaconda 安装程序,我们将把文件放在 Anaconda 提示符上显示的同一个文件夹位置。
例如:C:\Users\rekhit.p

现在是容易的部分。
在 Anaconda 提示符下,使用带有下载文件的文件名的 pip install 命令。
因为我们已经下载了文件“TA _ Lib-0 . 4 . 17-cp37-cp37m-win _ amd64 . whl”,所以命令应该是,pip install TA _ Lib-0 . 4 . 17-cp37-cp37m-win _ amd64 . whl
如果没有错误,那么就暗示我们已经成功安装了 Ta-Lib。您应该会看到一个显示以下消息的屏幕。

太好了!我们刚刚安装完 Ta-Lib Python 库。
但是我们如何检查它是否安装正确呢?
在 Anaconda 命令提示符下,您将首先键入“python”来解释程序。
然后,我们将键入以下命令,“import talib”,然后按 Enter 键。
如果没有错误,则意味着 python Ta-Lib 库已经成功安装在您的计算机上。

或者,您也可以打开 Jupyter notebook(或 Spyder)并尝试运行相同的代码来检查 Python Ta-Lib 是否安装正确。

在 MacOS 上安装 Ta-Lib
与 windows 安装相比,Python Ta-Lib 在 MacOS 上的安装相对简单。但是在我们讨论 Ta-Lib 的安装之前,我们必须确保 python 环境也已安装。
你可以从的安装 Anaconda,或者从的下载 Python。
在我们看来,安装 Anaconda 通常是个好主意,因为它有助于构建一个无缝执行 python 代码的环境。
注意:在 Anaconda 安装期间,您将被要求安装 Python 2.7 或 3.7。由于对 Python 2.7 的支持将于 2020 年 1 月 1 日结束,建议选择 3.7 版本。对于无缝安装,请选择图形安装程序。

然后,您将看到下面的对话框。

选择“继续”选项卡并选择合适的安装目标,您将在短时间内完成安装。
好了,现在我们进入主事件,即 Ta-lib python 库安装。好的,在主安装之前你需要做一个小步骤。
检查您是否可以使用“brew”命令。对于这个如何安装 Ta-Lib 的教程,让我们假设“brew”命令抛出一个错误。为了纠正这一点,我们在 MacOS shell 中使用下面一行代码来安装必要的包:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
如果成功,您将看到以下消息:

您可能会被要求输入密码,这是该过程的一部分。

当然,您会得到一个提示,要求您按“Return”继续安装,或者按任何其他键取消安装。

如果你对‘brew’命令很好奇,可以随时访问这个网站了解更多。
太好了!现在 brew 命令已经安装,使用以下代码安装 Ta-Lib 操作系统依赖项:
brew 安装 ta-lib
您将看到以下屏幕

现在,我们使用熟悉的命令,即“pip”在 MacOS 上安装 Ta-Lib。该命令如下所示:
pip 安装 ta-lib
您会看到以下文件正在您的系统上安装。

太好了!我们已经成功地在 MacOS 上安装了 Ta-Lib。
但是我们如何检查它是否正确地安装在系统上呢?很简单,我们使用下面的命令。
首先,我们通过在终端中简单地编写“python”来调用 python 语言。然后,我们使用下面的命令导入 Ta-Lib 库。
导入塔利班
如果没有错误,那么我们应该能够看到下面的屏幕

在 Linux 上安装 Ta-Lib
Linux 中的 Ta-lib 安装可能有点棘手。在安装 Python 包装器之前,应该首先安装 Ta-lib 安装所需的库。
但是不用担心!我们已经提供了如何在您的 Linux 系统中安装 Ta-lib 库的完整步骤。
步骤 0: 在您的 Linux 系统中安装 Anaconda。你可以遵循文档或者执行下面共享的命令。
以下命令安装 Anaconda 软件并创建一个名为“quantra”的环境。您可以将这个环境用于您的 Quantra 相关编码项目!
- 安装必备组件
- 在您的系统上安装 Anaconda
如何安装 TensorFlow GPU(附详细步骤)
在这篇博客中,我们将了解如何在 Nvidia GPU 系统上安装 Tensorflow GPU。Tensorflow GPU 安装过程中涉及的步骤有:
当我开始研究深度学习(DL)模型时,我发现在 CPU 上训练这些模型所需的时间太长了,如果你在一天内创建多个模型,这将阻碍你的研究工作。后来我听说了 GPU 的优越性能,所以我决定为自己买一个。
我最初面临的一个基本问题是 TensorFlow GPU 的安装。在经历了很多麻烦和烧坏主板(不是因为 TensorFlow)之后,我学会了怎么做。
几天前,我和一个面临类似问题的人聊过,所以我想我可以帮助那些陷入类似情况的人,写下我让它起作用的步骤。
步骤 1:卸载 Nvidia
这可能看起来不像是一个必要的步骤,但是相信我,如果你当前的驱动程序和 CUDA T1 之间存在兼容性问题,这将会为你省去很多麻烦。
登录到系统后,转到控制面板,然后转到“卸载程序”链接。然后向下滚动到由 Nvidia 公司发布的程序部分。

Uninstall Nvidia
在这里,你卸载所有的 Nvidia 程序。如果您有一些驱动程序,请不要担心,它们可以在您完成安装后更新。
一旦你删除了所有的程序,转到 c 盘,检查所有的程序文件文件夹,并删除其中的任何 Nvidia 文件夹。

Delete Nvidia folders
步骤 2:安装 Visual Studio
下一步,我们将安装 visual studio 社区。

Download Visual Studio
在这里,确保您选择了社区选项。

Select the community option
下载 Visual Studio 后,请按照安装过程进行操作并完成安装。
**注意:安装 Visual Studio 社区不是先决条件。任何其他 IDE 或没有 IDE 也可以用于运行带有 GPU 的 TensorFlow。T3】
步骤 3:安装 CUDA
这是一个棘手的步骤,在您继续安装 CUDA 的最新版本之前(这是我最初做的),请检查最新 TensorFlow 支持的 CUDA 版本。
我有一个基于 windows 的系统,因此相应的链接显示 CUDA 的最新支持版本是 9.0,而其对应的 cuDNN 版本是 7。

Install CUDA
不言而喻,要安装 TensorFlow GPU,您需要在系统中安装一个实际的 GPU。
因此请检查您的系统上是否有 GPU,如果有,请使用上面截图中的第三个链接检查它是否是兼容版本。一旦你确定你的 GPU 是兼容的,下载 CUDA 工具包 9.0 。
- 请正确选择您的操作系统、架构(平台的 CPU 类型)和操作系统版本。
- 然后点击 exe(本地)按钮。
- 现在下载基本安装程序和所有可用的补丁。

Install CUDA installer and patches
下载完成后,首先安装基本安装程序,然后安装从补丁 1 到补丁 4 的补丁。
如果您在安装过程中遇到任何问题,请查看 Nvidia 论坛。
步骤 4:安装 cuDNN
一旦安装完成,您就可以下载 cuDNN 文件。
- 在这里下载所需的文件,你需要有一个开发者的登录。因此,如果您还没有,请继续创建您的登录帐户。
- 一旦您创建了您的登录名并同意条款和条件,请访问存档的 cuDNN 文件。
- 点击 CUDA 9.0 版为 CUDA 9.0

Install cuDNN
然后为您的系统选择合适的操作系统选项。

Install cuDNN and choose OS
这会将一个 zip 文件下载到您的系统中。解压缩文件后,您会看到其中有三个文件夹:bin、include 和 lib。将这三个文件解压缩到您的桌面上。

Install cuDNN unzip and extract files
一旦你提取了它们。转到 c 盘,在那里你会找到一个名为 NVIDIA GPU 计算工具包的文件夹。
在这个文件夹中,您会发现一个名为 CUDA 的文件夹,其中有一个名为 v9.0 的文件夹。在这个文件夹中,您可以看到您有相同的三个文件夹:bin、include 和 lib。
将桌面上 bin 文件夹的内容复制到 v9.0 文件夹中的 bin 文件夹。类似地,传输 include 和 lib 文件夹的内容。
一旦你完成了内容的传输,进入开始菜单并搜索“编辑环境变量”。单击搜索结果,打开“系统属性”窗口,并在其中打开“高级”选项卡。

Install cuDNN system properties
现在点击“环境变量”,

Install cuDNN environment variables
在“系统变量”下,查找 PATH,选择它,然后单击“编辑”。将以下两条路径添加到 path 变量中:
- C:\Program Files\NVIDIA GPU 计算工具包\CUDA\v8.0\bin
- C:\Program Files\NVIDIA GPU 计算工具包\CUDA\v8.0\libnvvp

Install cuDNN add paths
完成这些之后,您可以下载 Anaconda,如果您已经有了它,那么在其中创建一个 Python 3.5 环境。
步骤 5:安装 Anaconda
要在你的系统上安装 Anaconda,请访问 此链接 。在这里选择你的操作系统和 Python 3.6 版本,然后点击下载。按照安装管理器中的说明完成安装过程。
一旦您完成了 Anaconda 的安装。在终端或 anaconda 提示符下使用以下命令创建一个 Python 3.5 环境。
conda create -n tensorflow python=3.5
创建环境后,在终端或 anaconda 提示符下使用以下命令激活它:
activate tensorflow
Step 6: Install Tensorflow GPU
准备好环境后,可以在终端或 anaconda 提示符下使用以下命令安装 Tensorflow GPU:
pip install --ignore-installed --upgrade tensorflow-gpu
如果您使用的 CUDA 和 cuDNN 版本与本博客中显示的版本不同,您将需要指定 tensorflow-gpu 的版本。上面一行默认安装最新版本的 Tensorflow。
如果您在安装 Tensorflow 时有任何问题,请查看 此链接 。
Step 7: Install Keras
一旦安装了 Tensorflow,就可以安装 Keras 了。使用以下命令:
pip install keras
一旦 Keras 的安装成功完成,您可以通过在 Spyder IDE 或 Jupyter notebook 上运行以下命令来验证它:
import keras
有些人可能会面临味精包装的问题。如果需要,您可以使用以下命令安装它:
conda install -c anaconda msgpack-python
结论
希望你已经在系统上成功安装了 Tensorflow GPU。在本文中,我们介绍了在 windows 上安装 Tensorflow GPU 的许多重要方面,例如:
- 如何安装 Anaconda,
- 如何安装 Tensorflow,
- 如何安装 Keras?
我们从卸载 Nvidia GPU 系统开始,进展到学习如何安装 Tensorflow GPU。深度学习模型需要大量的神经网络层和数据集来进行训练和运行,对交易领域的贡献至关重要。
要了解如何在交易中应用深度学习模型,请访问我们的新课程神经网络交易,该课程由世界知名的欧内斯特·陈博士(Ernest P. Chan)教授。它涵盖了核心概念,如在 Keras 中使用 LSTM 模型的反向和正向传播。
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
安装 Keras——使用 Python 和 R
马里奥·比萨·培尼亚
安装 Keras 是一个简单的过程,基本上需要决定使用首选的后端引擎,并以与任何其他 Python 库相同的方式安装 Keras。
Keras 是深度学习的 Python 库。它已经被开发出来,允许快速而简单地开发和试验机器学习,我们可以在 TensorFlow 、 CNTK 或 Theano 之上运行 Keras。
如果你想玩深度学习,而又不太担心构建神经网络的底层细节,你应该考虑安装 Keras。由于其高度的抽象性、模块化和易用性,我们可以用简单的方式构建人工智能系统。在这篇关于使用 Python 和 R 安装 Keras 的文章中,我们将从安装 Keras 开始。
安装 Keras -预安装
Keras 运行在 TensorFlow 、 CNTK 或 Theano 之上,也就是说,我们需要一个后端引擎在它之上运行 Keras。
Keras 本身不执行底层操作,它的优势在于能够在高层建模,从底层实现的细节中抽象出来。这些低级操作依赖于后端,并且由于 Keras 的模块化,允许使用以下一些后端:
- TensorFlow 是 Google 开发的开源符号张量操纵框架。
- Theano 是蒙特利尔大学 LISA 实验室开发的开源符号张量操作框架。
- CNTK 是微软开发的深度学习开源工具包。
因此,我们需要在安装 Keras 之前安装其中的一些。这里我们将依赖于 TensorFlow ,它有很好的接受度和高性能,是 Keras 的默认后端引擎。
在安装 Keras 之前,还可以选择安装一些扩展来帮助我们解决一些相关的问题:
- cuDNN :需要在 GPU 上运行 Keras。
- h5py : HDF5 是一种分层文件格式,可以方便地保存数据,对于保存大量的 dta 和 Keras 模型非常有用。
- graphviz 和 pydot :绘制 Keras 模型的图形库。
在我们继续安装 Keras 之前,让我们看一下 Tensorflow 的安装。
tensorlow 安装
主要有两种稳定的张量流版本:
- tensorflow :用于在 CPU 上运行。
- tensorflow-gpu :在 gpu 上运行
虽然使用 GPU 我们可以在不中断 CPU 工作的情况下进行非常繁重的计算,但我们将安装更简单的 CPU 版本,这是迈出 TensorFlow 第一步的理想版本。关于安装 TensorFlow GPU 的指南和详细步骤,可以阅读这篇文章。
也有与 postfix nightly 相同的版本,它们是开发中的不稳定版本,但包括最新的更新和开发。高级用户感兴趣,并尝试最新的发展。先说 TensorFlow,它们并不是最值得推荐的。
因此,要安装 TensorFlow 的稳定版本,请在您的终端中编写:
$ pip install tensorflow
要安装 TensorFlow 在 GPU 上运行,可以参考本文提供的详细步骤。
在 Python 上安装 Keras
下面说说在 Python 上安装 Keras。安装 Keras 与在 Python 中安装任何其他库没有什么不同:
$ pip install keras
默认情况下,在安装 Keras 时,Keras 将使用 TensorFlow 作为其张量操作库。按照这些指令配置其他 Keras 后端。
测试 Keras
为了玩 Keras,有几个有趣的例子可以玩,但毫无疑问,最让我们感兴趣的例子与市场有关,所以我建议你尝试阅读这篇有趣的帖子,内容是关于使用 Keras 预测股价运动的 Python 中的人工神经网络。
有趣的是看到 Keras 如何在 QuantInsti 博客上抽象出直接使用 TensorFlow 的复杂性:人工神经网络使用 Python 中的 tensor flow来预测股票价格
在 R 上安装 KerasT2
在这里,我将解释在 R 上安装 Keras。现在,CRAN 上 R 的 Keras 包可用。要在 R 上安装 Keras,照常进行:
install.packages("keras")
library(keras)
Keras R 接口默认使用 TensorFlow 后端引擎。要为 R 安装 TensorFlow,您必须执行以下 R 命令:
install_keras()
这个过程创建了一个 Python Conda 环境来管理 Keras 和 TensorFlow。
结论
在这篇关于“安装 Keras -使用 Python 和 R”的文章中,我们已经介绍了在 Python 中安装 Keras 和在 R 中安装 Keras。Keras 是一个 Python 机器学习库,它允许我们从实现低级网络的困难中抽象出来。由于其简单的界面,我们可以快速原型化机器学习实验,并担心问题本身,而不是实现。
正如我们所见,在 Python 中安装 Keras 没有任何困难。如果您想开始使用 Keras,最简单的方法就是开始安装 Keras——默认的 Keras 引擎 TensorFlow,并安装标准库。
从 R 安装 Keras 并使用 Keras 也没有任何困难,尽管我们必须知道 R 中的 Keras 实际上是在幕后使用 Python 环境。
为了熟悉 Keras,我们可以使用官方文档中的例子,但是我们已经看到了一些在交易中使用 Keras 的具体帖子。
如果我们谈论深度学习模型,它们需要大量的神经网络层和数据集来进行训练和运行,并且对交易领域的贡献至关重要。要了解如何在交易中应用深度学习模型,请访问我们的新课程神经网络交易,该课程由世界知名的欧内斯特·陈博士(Ernest P. Chan)教授。它涵盖了核心概念,如在 Keras 中使用 LSTM 模型的反向和正向传播。
免责声明:股票市场的所有投资和交易都有风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。
在 Mac 上安装 Prophet 库
原文:https://blog.quantinsti.com/installing-prophet-library-mac/
马里奥·比萨
Prophet 是由脸书公司开发的一个大型库,用于促进自然语言处理(NLP)任务。在这篇文章中,我们了解了如何在 Mac 机器上安装 Prophet,因为根据我们在机器上的配置,我们可能会面临一些安装问题。
我们涵盖:
从先知开始
有时我们会发现自己的机器上的 Python 环境看起来很像一个垃圾抽屉。在安装 Prophet 时,我们已经在使用的 Python 版本和库会让我们有些头疼,更具体地说,是它的主要依赖项 Pystan 库。
为了让 Prophet 在 Mac 上的安装过程不那么痛苦,我根据强烈推荐你阅读的官方文档创建了这个帖子。
安装 Prophet 之前检查 Python 环境
在安装 Prophet 之前,让我们检查一下是否正确安装了 Python 环境。
通常,你应该在你的机器上安装 Anaconda 或者 Miniconda 。如果你还没有安装它,看看这篇文章。
因此,安装了 anaconda 或 Miniconda 后,按 CMD+
让我们检查一下 python 版本:
% python --version
如果 Python 版本是 3.6、3.7、3.8 或 3.9 就可以了,如果不是,你可以创建一个 Python 环境,如引用的帖子中所示。
我建议为这个项目创建一个新的 python 环境,因此您可以键入以下命令:
% cd
% conda create -n prophet39 python=3.9
% conda activate prophet39
至此,我们已经有了一个 python 3.9,可以安装新的库了。
如果你想使用 Jupyter 笔记本,你需要安装一些其他的库:
% conda install ipykernel
% python -m ipykernel install --name prophet39 --user
% conda install jupyter
安装 Prophet 依赖项
正如官方文件所说,先知的主要依赖是 pystan。PyStan 有自己的安装说明。在使用 pip 安装 prophet 之前,使用 pip 安装 pystan。
% pip install pystan==2.19.1.1
您可能会得到如下错误:
ERROR: Command errored out with exit status 1
Cython>=0.22 and NumPy are required.
ERROR: Failed building wheel for pystan
不要担心这个问题,让安装过程持续到最后,因为它会以正确的方式安装依赖项。过程很慢,耐心点。最后,您将看到以下消息:
Successfully installed Cython-0.29.24 numpy-1.21.1 pystan-2.19.1.1
在您的系统上安装了 PyStan 及其依赖项之后,您需要安装 Prophet。
安装先知库
要安装 Prophet 库,您可以照常使用 pip 命令:
% pip install prophet
同样,您可能会在安装过程中看到如下一些错误:
- 错误:命令出错退出状态 1:
- ModuleNotFoundError:没有名为“熊猫”的模块
- 错误:未能为先知 造轮
不要担心这个问题,让安装过程持续到最后,因为它会以正确的方式安装依赖项。过程很慢,耐心点。最后,您将看到以下消息:
Successfully installed Cython-0.29.24
LunarCalendar-0.0.9
cmdstanpy-0.9.68
convertdate-2.3.2
ephem-4.0.0.2
hijri-converter-2.2.0
holidays-0.11.2
korean-lunar-calendar-0.2.1
pandas-1.1.5
prophet-1.0.1
pymeeus-0.5.11
pystan-2.19.1.1
setuptools-git-1.2
tqdm-4.62.2
ujson-4.1.0
测试先知
最后,让我们通过一个简单的测试来检查所有的东西是否都工作正常。
确保您的项目文件夹中有这个 csv 数据文件。您可以通过以下方式查看您的位置:
% pwd
这个命令给出了你现在所在机器的绝对路径,用 Finder 把 csv 数据文件复制到那里。
打开一个 Jupyter 笔记本,选择 prophet39 内核,或者您喜欢的编辑器,然后输入下面的例子:(您必须使用几个代码块来检查每个句子)
有关代码,请参见随附的笔记本:
在 Windows 上安装先知库
原文:https://blog.quantinsti.com/installing-prophet-library-windows/
在 Windows 系统上安装 Prophet 库可能会很棘手,因为它依赖于其他库。在这篇博客中,我们将列出在你的 Windows 系统上顺利安装 Prophet 的步骤。
我们将讨论以下主题:
什么是先知?
Prophet(之前称为 fbprophet)是由脸书的核心数据科学团队开发的开源库。它主要用于时间序列预测。
它对缺失数据、异常值和趋势变化非常稳健,是用于时间序列预测的最流行的库之一。想了解更多关于 Prophet 的信息,可以去翻翻它的官方文档。
在 Mac OS 上安装 Prophet也是可以的。
Prophet 安装依赖项
Prophet 安装可能比较棘手,主要是因为以下三个原因:
- Python 版本
- 对 Pystan 库的依赖
- Microsoft C++生成工具依赖项
安装 Prophet 前检查环境
这篇文章我用的是 Windows 10 的机器。但是,该过程应该适用于所有 Windows 系统。
在继续之前,我们将首先检查系统上安装的 Python 版本。我们在 Anaconda 提示符下运行 below 命令,如下所示。

Check Python version
如果您有 Python 3.6 或更高版本,就可以开始了。
但是,由于各种依赖关系,我们建议您创建一个新环境来安装 Prophet。我们通过在 Anaconda 提示符下运行以下代码,在您的系统上创建一个名为 prophet39 的环境:
conda create -n prophet39 python=3.9

Create a new environment for Prophet
当 conda 提示我们是否继续时,我们输入' y '。

Create a new environment for Prophet
完成后,我们使用以下命令激活这个 prophet39 环境:
conda activate prophet39

Activate the environment
正如你所看到的,我们现在处于预言的环境中。现在,我们可以继续安装了。
使用 conda 安装 Prophet
如前所述,Prophet 的安装由于其依赖性可能会很棘手。然而,一个简单的解决方案是使用 conda 进行安装。使用 conda 进行安装有多种优势。
- Conda 是跨平台的,因此它可以在任何系统上工作。
- 使用 conda 很容易管理环境。在上一节中,我们使用 conda 创建了一个具有特定 Python 版本的环境。
- 康达为你“解决”你的环境。这意味着它会为您处理所有的依赖关系。
因此,安装 Prophet 的第一件事是在终端上运行以下命令:
conda install -c conda-forge prophet

Conda installation for Prophet
在大多数情况下,这将在您的系统上成功安装 Prophet。如果这对你有用,你可以跳过博客的其余部分。
但是,在某些情况下,您可能会遇到错误。运行上述命令后,您得到了一个吗?
如果你有,这个博客值得你继续关注。请继续阅读,我们将带您一步步地了解安装依赖项以及 Prophet 库本身的过程。
安装 Prophet 依赖项
先知的主要依赖是 Pystan。Pystan 库有自己的安装说明。
然而,在我们安装 Pystan 之前,我们需要安装一些其他的库。
首先,我们需要安装 C++编译器 mingw-w64 toolchain,这又需要 libpython。因此,我们按如下方式安装它们:
conda install libpython m2w64-toolchain -c msys2

Install Pystan dependencies
我们需要安装 Cython 和 Numpy。
conda install cython numpy
如果有任何问题,您可以使用以下命令:
conda install numpy cython -c conda-forge

Install Cython and Numpy
现在,我们安装一些其他可选的依赖项,这将有助于我们的安装顺利进行。
conda install matplotlib scipy pandas -c conda-forge

Install Matplotlib, Scipy and Pandas
由于 Pystan 在 pip 上可用,我们建议使用 pip 来安装它,如下所示:
pip install pystan

Install Pystan
或者,我们可以使用 conda 安装它:
conda install pystan -c conda-forge
安装 Prophet
我们现在快结束了。
最后,我们使用以下命令安装 Prophet:
pip install prophet

Install Prophet
常见问题和修复
Prophet 安装可能会有问题,主要是因为它依赖于 Pystan,而 Pystan 又有自己的依赖项。然而,如果你遵循上面列出的安装说明,这个过程虽然很长,但会很顺利。
以下是常见问题及解决方法的列表:
| SNo | 发布 | 建议修复 |
| 1. | 使用 pip install for Prophet,您得到一个错误:" 运行 setup.py install for prophet...错误 | 使用 Anaconda 安装:康达安装-c康达-锻造先知 |
| 2. | 错误:为 pystan 构建轮子失败 | 确保 Pystan 的所有依赖项(包括可选的)都已安装。 |
| 3. | 使用 pip 在 Python 3.9 中安装 Prophet 时出错。 | 尝试在 Python 3.7 上安装。 |
| 4. | 在基本环境中安装时出错。 | 由于 Prophet 的各种依赖性,我们建议在安装之前创建一个新环境。 |
| 5. | 安装后,导入 prophet 时,得到错误:“ 导入 plotly 失败。交互式情节不起作用。 | 检查 prophet39 环境中是否安装了 plotly。如果没有,请使用以下方式安装 plotly:pip 安装计划
如果已经安装了 plotly,请使用以下命令进行升级:pip 安装-升级 plotly |
| 6. | 使用 pip 安装 pystan 时出错。 | 尝试使用 Anaconda 来安装:康达安装 pystan -c 康达锻造 |
| 7. | 安装 Prophet 时出错:“ 错误:需要 Microsoft Visual C++ 14.0 或更高版本。用的【微软 C++构建工具】得到它 | 从https://visualstudio.microsoft.com/visual-cpp-build-tools/安装微软 Visual C++。之后,再次尝试安装 Prophet。 |
结论
我们讨论了如何在 Windows 机器上安装 Prophet 库,从创建环境、安装其依赖项以及最终的 Prophet 安装开始。
我们还了解了安装中一些常见的问题以及如何解决这些问题。我希望这将为您在 Windows 系统上安装这个库节省一些时间和精力。
如果你认为机器学习是金融市场未来的重要组成部分,那么对于那些对 ML 及其在 Quantra 交易中的应用感兴趣的人来说,你不能错过这个在机器学习&金融市场深度学习上强烈推荐的学习课程。立即注册!
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
算法交易入门:从 Python 安装到回溯测试你的第一个策略|网络研讨会
原文:https://blog.quantinsti.com/installing-python-backtesting-webinar-26-august-2021/
完整记录
https://www.youtube.com/embed/dLGp6oOHEFM?rel=0
演示幻灯片
//www.slideshare.net/slideshow/embed_code/key/zaRIbi2dcmjVD8
Get Started With Algorithmic Trading: From Python Installation to Backtesting Your First Strategy | COMPLETE PRESENTATION from QuantInsti
可下载代码
蓝移
在这里访问蓝移:https://blueshift.quantinsti.com/
关于会议
这个网上研讨会是为了让你了解算法交易的具体细节。演讲者将从 Python 的安装和与金融市场相关的库开始。
然后他将讨论制定和测试交易策略的步骤。接下来,我们还将介绍 Python 中的一个交易策略,该策略从数据下载开始,以运行回溯测试来计算一些指标进行评估为结束。
演讲者将通过暗示评估交易策略时需要考虑的其他因素来结束本次会议。
会话大纲
- 为金融市场数据分析安装 Python 和相关库
- 使用市场数据
- 策略开发——从构思到测试
- 交易策略的详细回溯测试
- 这就够了吗?(提示:没有。)
- 小字:我没有提到的
- 互动问答
关于演讲者

Vivek Krishnamoorthy(QuantInsti 的内容&研究负责人) Vivek 教授参与者数据分析,使用 Python 构建量化策略和时间序列分析。他在印度、新加坡和加拿大的工业、学术和研究领域拥有超过 15 年的经验。
他是《Python 基础:金融市场插图》(2019 年)和《算法交易简易指南》(2020 年)两本书的合著者
他拥有 VESIT(孟买大学)的电子和电信工程学士学位,以及新加坡 NTU 大学的 MBA 学位。
本次活动于:
2021 年 8 月 26 日星期四
东部时间上午 9:30 | IST 时间晚上 7:00 |新加坡时间晚上 9:30
如何安装 Python 包
在我们开始学习如何安装 Python 包的教程之前,让我们后退一步,理解包在 Python 生态系统中扮演的角色。Python 的美妙之处在于,我们有一个为特定目的而创建的模块和包的集合,并且它是开源的这一事实使得一个人在另一个人的工作基础上构建并创建一些有用的东西变得非常容易。因此,你可以得到一个执行简单算术运算的简单代码或一组代码,称为模块和包,它们可以帮助执行数据分析,所有这些都在互联网上。
我们将在本教程中介绍以下概念
什么是模块和包?
考虑直接在 Python 或 IPython 控制台上编写代码。如果我们退出控制台并再次进入,我们创建的定义(函数和变量)将会丢失。因此,为了编写一个更长的程序,我们可以考虑切换到文本编辑器,为解释器准备一个输入,并以该文件作为输入来运行它。这就是所谓的写剧本。
随着程序变得越来越长,我们可能希望把它分成几个小文件,以便于维护。此外,我们可能希望使用我们在几个程序中编写的一个方便的函数,而不必将其定义复制到每个程序中。为了支持这一点,Python 有办法将代码定义放在一个文件中,并在另一个脚本中使用它们,或者直接在解释器的交互式实例中使用它们。这样的文件称为模块;来自一个模块的定义可以被导入到其他模块或者我们编写的程序中。
包可以被认为是模块的集合。它是一种通过使用“带点的模块名”来构造 Python 的模块名称空间的方法。例如,模块名 matplotlib.pyplot 在名为 matplotlib 的包中指定了一个名为 pyplot 的子模块。
以这种方式打包模块使不同模块的作者不必担心
关于彼此的全局变量名和点状模块名的使用使多模块包的作者不必担心彼此的模块名。
导入 Python 包
众所周知,Python 是一个开源项目。Python 开发者社区在开源许可下以包的形式向其他人提供他们的代码。
当你安装 Python 的时候,默认情况下你可以访问一些内置的包,比如熊猫、 NumPy 。
您可以使用以下语法在代码中导入这些包。
# Import a Python package
Import pandas
假设我们想设计一个包(模块的集合)来统一处理各种交易策略及其数据。基于数据频率有许多不同的数据文件,因此我们可能需要创建和维护一个不断增长的模块集合,用于各种数据频率之间的转换。此外,我们可能需要执行许多不同的策略和操作。所有这些放在一起意味着我们将不得不编写一个永无止境的模块流来处理数据、策略和操作的组合学。这里有一个可能的包装结构,让我们的生活更轻松。
| 开始/init.py数据/init.pyequity.pycurrency.pyoptions.py...策略/init.pyrsi.pymacd.pysmalma.pyperatio.pyfundamentalindex.pystatisticalarbitrage.pyturtle.py...运营/init.pyperformanceanalytics.pydataconversion.py... | 顶层包初始化 strats 包数据的子包股权模块策略的子包RSI 模块操作的子包 |
导入包时,Python 会在 sys.path 中的目录中搜索包子目录。init。py 文件是 Python 将目录视为包含包所必需的。如果我们要使用这个包,我们可以按以下方式进行:
import strats.data.equity
import strats.strategies.statisticalarbitrage
上述语句分别从 strats 包下的数据和策略子包中加载 equity 和 statisticalarbitrage 模块。到目前为止,我们了解了如何导入包,但是如何安装 Python 包呢?有必要安装它们吗?让我们在下一节中找出答案。
如果软件包没有安装会怎么样?
正如我们之前提到的,Python 有一些内置的包,它们是和 Python 一起安装的。但是 Python 安装中没有附带的包怎么办呢?如果你试图在没有安装的情况下导入这些包,你会得到一个名为“ModuleNotFoundError”的错误。
例如,Backtrader 是一个 Python 包,用于实时交易和回溯测试交易策略。当我们试图导入它时,您可以看到错误。
# import the package
import backtrader

这是因为“backtrader”不是一个内置的 Python 包,我们试图在没有安装它的情况下导入它。但是在哪里可以找到这些包以及如何安装它们呢?在关于如何安装 Python 包的教程的下一节中,我们将了解如何安装。
PyPI - Python 包索引
大多数开源 Python 包都可以通过 PyPI - Python 包索引获得。它是 Python 编程语言的软件仓库。你可以在这里找到 Python 社区开发和共享的包。您也可以通过 PyPI 发布您的包。
要从 PyPI 安装软件包,您需要一个软件包安装程序。PyPI 的推荐软件包安装程序是“pip”。当您在系统中安装 Python 时,Pip 也随之安装。您不必担心专门下载或安装 pip。然而,我们仍将在下一节“如何安装 Python 包教程”中讨论 pip 的安装。
安装 pip
我们可以通过命令行使用 curl 命令安装 pip,该命令下载 pip 安装 perl 脚本。
curl -O https://bootstrap.pypa.io/get-pip.py
下载完成后,我们需要在命令提示符下用 Python 解释器执行它。
python get-pip.py
如果上述命令由于权限问题在 Mac 和 Linux 发行版上失败(很可能是因为 Python 没有更新文件系统上某些目录的权限)。默认情况下,这些目录是只读的,以确保随机脚本不会弄乱重要文件并使系统感染病毒),我们可能需要运行以下命令。
sudo python get-pip.py
安装 Python 包的语法
在“如何安装 Python 包”这一节中,我们将了解如何使用以下语法通过“pip”安装包。
`!pip install package_name`
例如,要安装 Backtrader 软件包,您必须将“package_name”替换为“backtrader”。
# Install a Python package
!pip install backtrader

安装后,您可以在最后一行看到成功消息。这意味着现在可以导入该包并在您的代码中使用。有许多机构和个人使用 Python 本身的不同版本,所以不用说也可能有包的版本。让我们在教程的下一节“如何安装 Python 包”中找到关于包版本的信息。
包的版本
PyPI 允许开发者提交任意数量的包版本。它为存储库中提交的每个包名和版本的组合保存一条记录。
“backtrader”软件包也有不同的版本。你可以在这里查看它们。
使用不同版本的 Python 包
如果您想使用该软件包的不同版本,您可以使用下面的命令安装它。
让我们安装 1.9.68.122 版的“反向交易者”软件包。
# Install a specific version of the package
!pip install backtrader==1.9.68.122

检查包的版本
您可以使用以下语法来检查软件包的版本。
`package_name.__version__`
但是首先,您需要导入包。您可以按如下方式检查“backtrader”软件包的版本。
# Import the package
Import backtrader
# Check the version of the package
backtrader._version_

注意事项
- 默认情况下,Pip 安装软件包的最新版本。
- 安装特定版本时,pip 会替换现有版本(如果有的话)。
- 您可以使用上述语法通过 IPython notebook 安装软件包。
- 如果您希望使用命令提示符安装,您可以通过删除感叹号来使用相同的语法。
举个例子,
- IPython 笔记本:
!pip 安装包 _ 名称2 - 命令提示符:` pip 安装包名称'
我希望这能澄清你对安装 Python 包的任何疑问。遍历 Python 代码和包的一种流行方法是 dir()函数。让我们在教程的下一节“如何安装 Python 包”中进一步了解它的作用。
奖励:dir()函数
我们可以使用内置函数 dir()来查找模块定义了哪些名称。它返回一个字符串的排序列表。
In []: import arithmetic
In []: dir(arithmetic)
Out[]:
['__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'addition',
'division',
'factorial',
'multiply']
dir()function | 61
在这里,我们可以看到模块算法中的名称的排序列表。所有其他以下划线开头的名称都是与模块相关联的默认 Python 属性(我们没有定义它们)。
如果没有参数,dir()会列出我们当前定义的名称:
In []: a = 1
In []: b = 'string'
In []: import arithmetic
In []: dir()
Out[]:
['__builtins__',
'a',
'arithmetic',
'b',
'exit',
'Quit']
请注意,它列出了所有类型的名称:变量、模块、函数等。dir()没有列出内置函数和变量的名称。它们是在标准模块内置中定义的。我们可以通过在 dir()中传递内置函数作为参数来列出它们。
In []: import builtins
In []: dir(builtins)
Out[]: ['ArithmeticError', 'AssertionError',
'AttributeError', 'BaseException',
'BlockingIOError', 'BrokenPipeError',
'BufferError', 'BytesWarning', 'ChildProcessError',
'ConnectionAbortedError', 'ConnectionError',
'ConnectionRefusedError', 'ConnectionResetError',
'DeprecationWarning', 'EOFError', 'Ellipsis',
'EnvironmentError', 'Exception', 'False',
'SyntaxError', ... ]
让我们在这里喘口气,了解一下到目前为止我们所了解的。我们已经了解了什么是模块和包,以及如何安装 Python 包。我们还学习了 dir()函数。我们本可以在这里结束教程,并在评论中回答你面临的任何问题,但我们认为为什么不先发制人,尝试自己解决一些常见的问题。
解决频繁的用户查询
当你开始学习 Python 的时候,你可能会遇到一些关于平台的问题,并且可能会觉得你是唯一的一个。嗯,这些年来,我们已经看到了来自用户的常见问题,他们中的大多数都在努力寻找这些问题的答案。因此,我们将在如何安装 Python 包教程的这一节中尝试解决其中的一些问题。
我们将回答的问题是:
- 无法使用 conda install 安装 iefinance
- 从 iexfinance 导入 get_data 不起作用
- 依赖包- scikit-learn
注意:iexfinance 错误在 Anaconda 的更新版本中不可用
查询#1:无法使用 conda install 安装 iexfinance
如果您已经使用 Anaconda 安装了 Python,那么您应该熟悉使用 conda installer 安装 Python 包。
要安装“iexfinance ”,你可以写“conda install iexfinance”
但是这将引发如下错误。

这是因为 Anaconda 存储库中没有这个包。
您可以在存储库中检查相同的内容。它显示没有结果。

如前所述,您可以在 PyPI 中搜索“iexfinance”包,并查看如下所示的结果。

因此,您可以使用 PyPI '来使用' iexfinance '包。
您需要在 Anaconda 提示符下使用‘pip’而不是‘conda’来从 PyPI 安装软件包。
在 Anaconda 提示符下写“pip install iexfinance”来安装 iexfinance 包。

好吧!让我们转到教程中关于如何安装 Python 包的下一个查询。
查询#2:从 iexfinance 导入 get_data 不起作用
您可以在最后一行看到成功消息以及安装的软件包版本。目前已安装了“iexfinance”的 0.4.0 版。
此外,每当软件包更新时,都会发布一个新版本。
要随时检查' iexfinance '包的版本,可以在 Anaconda 提示符下运行以下命令。
`python -c "import iexfinance; print(iexfinance.__version__)"`

您可以通过再次运行 pip install 命令来更新到“iexfinance”软件包的最新版本。默认情况下,Pip 会安装最新版本的“iexfinance”。
如前所述,该命令是“pip install iexfinance”。
如果您正在更新系统中的软件包,那么您应该知道所做的更改,并且您可能希望相应地更改您的代码。
对于“iexfinance”包,从先前版本到最新版本的更改记录在“向后不兼容更改”部分的这里处。

太好了!只剩一个了。让我们转到教程中关于如何安装 Python 包的下一个查询
查询#3:检查依赖包- scikit-learn
让我们再次回到这张图片。

你可以看到,在安装“iexfinance”时,pip 检查了许多其他 Python 包,如 requests、pandas 等。,
这些是顺利运行“iexfinance”所需的依赖包。
对于“scikit-learn”包,您可以在 PyPI 项目描述中找到依赖包。

您还可以看到依赖包的版本。
每当您尝试安装或升级“scikit-learn”时,请确保 scipy 和 numpy 软件包也升级到最新版本。
您可以运行“pip install scipy”和“pip install numpy”来升级这些软件包。然后通过运行“pip install scikit-learn”安装或升级“scikit-learn”软件包。
注意:重启内核
在代码中开始使用“scikit-learn”包之前,不要忘记重启 Jupyter 或 Spyder 中的内核。否则,您在导入“scikit-learn”包时会遇到错误。
这是因为当您打开 Jupyter 或 Spyder 进行编码时,它们会根据当时存在的包版本创建一个 Python 环境。因此,每当你安装或升级一个新的软件包时,你也需要重启内核。
总之,我们已经了解了如何安装 Python 包,并且在本教程中解决了一些关于 Python 最常见的问题。希望这有助于在您探索 Python 时创建一个平稳的旅程!
有许多人可能是 Python 或编程的新手,或者从未创建过任何交易策略。如果你是这两种技能的初学者,学习曲线可能会很陡。然而,你可以通过在这里注册,逐步建立所需的技能,并定期练习我们课程中给出的实践学习练习:每个人的算法交易
免责声明:股票市场的所有投资和交易都有风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。
机构交易:介绍,例子,类型,策略等等
机构投资者是对金融工具的价格动态施加巨大影响的交易公司(如花旗集团、摩根大通),因为:
- 他们交易奇异金融工具的能力(私人投资者可能有,也可能没有)
- 为客户管理大量资金的能力
让我们来了解一下机构投资者、他们的交易行为以及本博客涵盖的更多内容:
- 什么是机构交易?
- 机构交易的例子
- 机构交易公司使用的服务提供商
- 机构交易的独特之处是什么?
- 机构交易者 vs 散户交易者
- 机构投资者的类型
- 机构交易策略
- 如何成为机构交易者?
- 机构交易者赚多少钱?
- 机构交易的优势
- 机构交易的弊端
- 学习机构交易的资源
什么是机构交易?
机构交易是由一个法人实体进行的,它从几个不同的投资者那里积累资金,投资于不同的金融工具,如股票、债券、房地产等。简而言之,机构交易是由大型机构代表客户进行的。
有几种类型的证券,如远期、掉期等。私人交易者可能得不到,因为这种可交易的项目需要大量的资金,而且在长期投资中大多是成功的。此外,机构投资者获得了最佳交易价格。
机构交易的例子
首先,让我们看看代表客户进行交易的公司的例子。这种为客户提供投资服务的公司被称为机构交易公司。机构交易公司的一些例子如下。
机构交易公司示例
- 花旗集团
- 摩根大通
机构交易公司使用的服务提供商
此外,让我们找出机构交易公司用来提供持续市场信息的服务提供商。例如:
机构交易服务提供商
机构交易的独特之处是什么?

Institutional trading is unique
机构交易者与散户交易者
| 机构交易员 | 散户 |
| 机构交易者为他们为团体或机构管理的账户买卖证券 | 散户为个人账户买卖证券 |
| 交易更大的尺寸(量) | 交易较小规模的资产 |
| 可以交易更多的奇异产品,如奇异期权(障碍期权、二元期权等。) | 通常交易常规/普通可交易项目 |
| 机构有优势,比如可以获得更多的产品(IPO、期货、掉期) | 无法获得期货、掉期等。通常 |
| 拥有谈判交易费用的能力,并保证执行的最佳价格 | 无法协商交易费用和执行价格 |
| 通常涉及长期投资 | 包括长期和短期投资 |
机构投资者的类型
机构投资者的几种类型如下:
- 银行(摩根大通,花旗)
- 信用社(海军联合会,全球信用社)
- 养老基金(政府养老金投资
- 保险公司(雪绒花,联合健康集团)
- 对冲基金( Bridgewater Associates , Renaissance Technologies
- 共同基金( DSP 贝莱德世界矿业基金、 ICICI 保诚全球稳定股票)
- 房地产投资信托(安年资本管理、 AGNC 投资公司)
机构交易策略
机构投资者的策略取决于多种因素。机构投资者根据以下因素做出投资决策:
- 市场波动的预期
- 外汇市场状况
- 宏观经济因素,如战争、自然灾害、贸易协定等。
机构投资者遵循的一些策略是:
- 指数再平衡
- 资产配置
- 要素投资
- 对特殊工具的投资,如掉期、远期等。
指数再平衡
指数的再平衡是重新调整投资组合中金融工具权重的简单过程。指数的再平衡无非是通过修改投资组合中的金融工具来保持投资组合的平衡,以使风险在一段时间内大致保持不变。
例如,乌克兰-俄罗斯战争等宏观经济因素导致的经济条件变化。这可能导致金融市场基础资产价格的重大变化。
此外,这种情况会导致相关行业/部门发生重大变化。当前的一个例子是,由于战争情况,最近对原油的需求增加。
资产配置
机构交易者实施资产分配策略来平衡投资组合中的风险和回报。这种做法/策略根据客户的风险承受能力、目标和决定的投资时间框架调整投资组合中每种金融工具的百分比。
要素投资
因素投资是一种投资策略,通过根据因素选择证券来帮助创建投资组合。因素有助于解释这些证券的回报和风险。宏观经济和风格是两类因素。
- 利率、通胀、流动性等宏观经济因素有助于解释不同资产类别的回报率。
- 另一方面,价值、规模、动力、低波动性、质量等风格因素有助于解释资产类别中的回报。
利用不同的因素,投资者可以创造更高的回报,降低风险,增加投资组合的多样化。
对特殊金融工具的投资,如掉期、远期等。
互换、远期等投资。给了机构投资者优势。散户通常无法获得这种奇异的工具,因为机构投资者拥有这种投资所需的巨额资金。
因此,机构投资者采取策略投资于奇异的工具,以显著分散投资组合。
如何成为机构交易者?
要成为机构交易者,你需要从散户开始,这样你就知道金融市场的错综复杂。我们先从成为机构交易者的学历要求说起。
机构交易的教育要求
坦率地说,为了开始机构交易的职业生涯,没有特定的课程或学位需要选择。这通常取决于你对数字和计算的精通程度。
大多数机构交易者持有学士学位或更高的学位。但是,如果你想成为一名在高层工作的专业机构交易者,你需要一个硕士学位。
以下是一些学士和硕士对机构交易角色有帮助的科目:
- 金融
- 会计
- 商业
- 经济学
此外,机构交易者可以通过攻读数学、经济学、物理学和定量金融学的博士学位而受益。有了上述学科中根深蒂固的知识,定量计算的高级知识一定会成为成功的机构交易者。
机构交易中的就业机会
完成学业后,你可以开始做实习生或在职培训主管。
一些大型机构投资者,如花旗集团,培训和雇佣应届毕业生。如果你想自己开始,那么从散户开始是最好的。同时,你可以选择同时学习。
机构交易员的角色是一个高要求的工作,需要利基技能,因为这样的人参与投资和管理别人的钱。对于拥有合适技能的人来说,全球有巨大的机会。组织主要寻求在压力下快速有效的决策,以及为客户交易获利的能力。
机构交易者赚多少钱?
对于机构交易者来说,收入是基于业绩的。让我们进一步了解机构交易者的收入,如下所示:
- 机构交易员没有底薪,不同的公司有不同的底薪。
- 基本工资取决于组织的规模
- 除了基本工资之外,交易员还可以从他/她为公司带来的回报中获得一定的百分比。
- 此外,奖金支付的频率以及支付的百分比根据回报的变化而变化。此外,有些组织按季度发放奖金,有些则按年发放。
机构交易的优势
机构交易的优势如下:
- 机构投资公司雇佣合格的交易者以获得最佳业绩
- 更多合格的交易者也为客户执行更好的风险管理实践
- 改进的价格发现是另一个优势,这意味着机构交易者可以以最优价格交易
- 机构投资者向客户提供了更多的管理责任和更高的配置效率
- 机构交易公司为市场提供流动性,流动性是金融市场的生命线。
机构交易的缺点
机构交易的缺点如下:
- 业绩奖金是交易员工资的很大一部分。所以,职业生涯的成功完全取决于交易者给组织带来的回报。在你掌握交易艺术之前,持续盈利是一项具有挑战性的任务。
- 支付给机构交易者的频率也很棘手,因为它完全取决于交易者的表现。如果你有一个糟糕的交易年度,你可能不会收到你的绩效奖金。
然而,如果一个人被驱使成为机构交易者,并准备好面对挑战,他可以在这个工作岗位上创造奇迹。
学习机构交易的资源
虽然你可能会找到一些学习机构交易的资源,我们列出了一些供你参考。我们下面提到的资源有助于你掌握机构交易实践所需的知识。
机构交易者是运用他/她的金融市场交易知识以及任何关于算法交易、量化交易等的额外知识的交易者。为机构交易公司的客户服务。
因此,没有一种资源可以称为特定的机构交易资源。然而,有一些课程、书籍和播客可以帮助个人获得成功的机构交易的必要信息。
让我们在下面找到所有这些精选的资源。
学习机构交易概念的课程
您可以选择的在线课程完全取决于各种因素,例如:
- 你想学什么。例如,如果你作为机构交易者只交易期权,你可以相应地选择一个程序。
- 你已经知道的东西。因为只有你才能找到一门课程,帮助你填补机构交易所需的知识空白。
- 你希望如何学习?了解这一点很重要,因为有些课程是综合性的,如果你有时间的话,可以自己掌握进度。然而,还有一些自定进度的课程(只要您有时间就可以完成)。
现在让我们看看以下课程:
本课程使个人具备了定量交易实践的必要知识,以及算法交易概念的知识和实际应用。
EPAT 课程的知识有助于成为机构交易者。EPAT 提供了算法交易和量化计算的当代概念的大量知识,以增加金融市场交易的便利性和有利的回报。
这个课程是一个综合项目,需要 6 个月的全力投入和承诺。
Quantra 课程是自定进度的课程,范围从金融市场交易策略的概念到算法和量化交易实践。
通过 Quantra 课程,有抱负的机构交易者可以获得所需的知识,或者填补金融市场交易方面的知识空白。
此外,机构交易者可以在交易的算法和量化技术知识的帮助下,使交易更加方便快捷。
为了方便学生,这些课程被分成不同的类别,但是每门课程都是完整的“学习路线”的一部分,帮助你从基础课程开始,到高级课程结束。
此外,如果你想跳过学习轨道,跳到高级课程,获取任何特定金融市场的机构交易知识,你可以方便地这样做。
学习机构交易概念的书籍
这些书对那些喜欢阅读,同时渴望成为成功的机构交易者的人来说是有用的资源。每本书都让你对金融市场交易者不可或缺的概念有了深入的了解,因此,机构交易者也可以从中受益,为他们的客户应用这些方法。
注意:你对自己的交易决定负责——这不是财务建议。
让我们看看下面这些名著:
这本书强调了一些重要的概念,对最新的金融秩序和计划是有用的。保持格雷厄姆的原始形式的独特文本,这本书侧重于可以在日常生活中应用的主要原则。
所有的概念和原则都借助例子来解释,以便更好地理解金融世界。
格雷厄姆最初的计划和当前的金融形势相结合,是这本书受到当今投资者青睐的原因。这是一个详细的版本,有几个智慧的报价,可能会改变一个人的投资生涯,并导致财务安全和保障的道路。
吉姆·西蒙斯是现代金融史上最伟大的赚钱者。他是传奇投资者中的佼佼者,包括沃伦·巴菲特、乔治·索罗斯和雷伊·达里奥。
金融行业长期以来一直渴望了解西蒙斯的秘密对冲基金——复兴科技(Renaissance Technologies)。随着 Renaissance 成为金融界的主要参与者,其高管开始对其他领域施加影响。西蒙斯成为科学研究、教育和民主政治的主要力量,资助希拉里·克林顿的总统竞选。
所有这些原因就是为什么这本书是任何有抱负的机构交易者的必读之作,因为它将提供很多关于吉姆·西蒙斯成功运用策略的信息。
一个有抱负的机构交易者可以从这本书中学到很多。从如何阅读图表到理解指标和技术分析在投资中的重要作用,读者可以全面了解技术分析领域,特别是期货市场。
这本书根据当今金融世界的需求进行了修改和扩展,是任何对跟踪和分析市场行为感兴趣的人的必读之作。
世界上最成功的交易者是如何一年积累数千万美元的?他们是神秘知识的大师,随机市场彩票的幸运儿,天生的市场艺术大师吗?
为了寻找答案,畅销书作家杰克·d·施瓦格采访了大多数金融市场的几十位顶级交易员。虽然他们的回答在细节上有所不同,但他们都可以归结为同一个基本公式:可靠的方法+正确的心态=交易成功。
在《市场奇才》中,施瓦格让你听听那些超级交易者用他们自己的话讲述他们前所未有的成功,他把他们的回答浓缩成一套指导原则,你可以用这些原则成为自己的交易明星。
关于机构交易的播客
边听边学或者了解最成功的交易者是一件令人愉快的事情。让我们看看最流行的关于机构交易的播客。
注意:你对自己的交易决定负责——这不是财务建议。
与交易者交谈是你了解金融市场交易精英的关键。这个播客是一个拥有最多听众的热门话题。开始听,了解不同的交易者如何从零到英雄,他们如何成功地交易市场,并获得他们的最佳技巧和盈利表现的指示,以及更多。
结论
机构交易是一个概念,许多交易者希望了解更多。无论是想转向机构交易的散户还是想在机构交易公司工作的散户,都有很多关于这个概念的问题。我们在这篇博客中讨论了机构交易及其复杂性。
如果你也想用终生的技能来武装自己,这将永远帮助你提升你的交易策略。这门 algo 交易课程的主题包括统计学和计量经济学、金融计算和技术、机器学习,确保你精通在交易领域取得成功所需的每一项技能。现在就来看看 EPAT 吧!
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
使用 R 进行实时市场交易
原文:https://blog.quantinsti.com/interactive-brokers-webinar-2-mar-2017/
https://www.youtube.com/embed/gdQ_svOV7kc?rel=0
在交互式经纪人上使用 R 进行交易
会议将涵盖以下方面:
- 安装 R-studio IDE
- IBroker 包的参考表-https://cran . r-project . org/web/packages/I brokers/I brokers . pdf
- TWS 构型
- 在 R 中查看帐户信息详细信息
- 下载 R 中的历史数据
- 在 R 控制台上打印实时数据
- 使用 R 脚本发送预定义订单
- 使用 R 脚本发送基于事件的订单
我们将通过交易策略来覆盖 6-8 点。
扬声器
阿尼尔·亚达夫
QuantInsti 总监

Anil 通过 R 和交互式经纪人管理股票期货投资组合。他是印度领先的 HFT 公司之一 iRageCapital 的算法策略顾问。在加入 iRage 之前,Anil 是一名独立的商品交易员,负责管理金属和能源产品的投资组合。他还曾在 chatter JEE Group(TCG)私募股权基金担任高级分析师,并在雷曼兄弟担任可转换债券分析师。
Anil 在坎普尔的印度理工学院接受机械工程师培训,并在勒克瑙的印度管理学院完成了工商管理研究生课程。
谁应该参加?
- r 编码者/爱好者
- 交易者还是想成为交易者
- 互动经纪人的客户
- 想用 R 进行活市场交易的人!
日内低频交易策略
原文:https://blog.quantinsti.com/intraday-low-frequency-trading-strategy-project-rajtk/
开盘价突破是专业和业余交易者使用的一种非常常用的交易策略,如果指标使用优化、模式识别、严格的进入和退出规则以及交易控制,有可能实现高精度交易。
在观察和手工交易市场一段时间后,我注意到这个系统非常适合印度市场。这是一套简单的策略,包括捕捉第一根蜡烛线(5 分钟 OHLC 数据)并分析它来产生交易。
本文是作者在 QuantInsti 提交的算法交易高管课程(【EPAT】)的最后一个项目。请务必查看我们的项目页面,看看我们的学生正在构建什么。
关于作者
Raj TK(tri varga Trading LLP 合伙人)来自非金融和非编程背景。他觉得需要一个结构化的学习过程来解释市场。EPAT 为拉吉提供了对市场、市场微观结构、算法、策略的基本理解,以及交易的基本编程技巧。在 EPAT 课程结束后的几个月里,他开发了一个算法交易系统和一个回溯测试模块。
在他详细描述回溯测试模块之前,他想感谢他的老师在这个项目中的指导和激励。
Nitesh Khandelwal 先生:感谢他关于 ATR、excel 编程的会议以及他对这个项目的支持。
Yves Hilpisch 博士:让 Python 变得简单。在他第二节课的最后 5 分钟,他简要介绍了如何将策略应用到市场中,极大地激励了我开发 Python 编程技能以及交易系统,并应用到市场中。
数据分析
分析来自雅虎财经的 Nifty 50 股票的 5 / 15 / 30 分钟 OHLC 图表和经纪人提供的数据,以了解模式并得出区间突破策略。
主要发现
基于数据分析、观察和以前的手工交易经验,出现了以下策略:
1)绿色蜡烛线向上跳空:开盘价应为绿色,且应至少比前一个高点高 2 点,当前蜡烛线的收盘和开盘价之差至少应为 0.5,才能向上跳空绿色蜡烛线。捕捉第一个烛台的 OHLC 价值将有助于在范围突破时产生交易条目。
2)向上跳空红烛棒:开盘红烛应该是红色的,应该比前一个高点至少高 2 点,当前红烛的开盘价和收盘价之差应该至少为 0.5,才能成为向上跳空红烛。捕捉第一个烛台的 OHLC 价值将有助于在范围突破时产生交易条目。
3)绿色蜡烛线向下跳空:开盘蜡烛线应为绿色,且应至少比前一个低点低 2 点,当前蜡烛线的收盘和开盘之间的差值至少应为 0.5,才能成为绿色蜡烛线向下跳空。捕捉第一个烛台的 OHLC 价值将有助于在范围突破时产生交易条目。
4)跳空红烛棒:开盘价应该是红色的,应该比之前的低点至少低 2 点,当前蜡烛的开盘价和收盘价之差应该至少为 0.5,才能成为跳空红烛。捕捉第一个烛台的 OHLC 价值将有助于在范围突破时产生交易条目。
5)跳空红烛——趋势反转形态:开盘红烛应为红色,且应比前一高点至少高 2 点,且位于布林线上轨上方。收盘和低点之间的差异应该小于上影线。价格下跌的可能性更大。捕捉第一个烛台的 OHLC 价值将有助于在范围突破时产生交易条目。
6)缺口向下绿色蜡烛线——趋势反转形态:开盘蜡烛线应为绿色,且应比前期低点低至少 2 个点,且低于布林线下轨。高点和收盘之间的差异应该小于下影线。价格上涨的可能性更大。捕捉第一个烛台的 OHLC 价值将有助于在范围突破时产生交易条目。
7)吞没形态——红烛:开烛应该是红色的,完全吞没前一根蜡烛。开盘价越大,向买方修正的可能性就越大。捕捉第一个烛台的 OHLC 价值将有助于在范围突破时产生交易条目。
8)吞没形态——绿色蜡烛:开场蜡烛应该是绿色的,完全吞没前面的蜡烛。开盘价越大,向卖方修正的可能性就越大。捕捉第一个烛台的 OHLC 价值将有助于在范围突破时产生交易条目。
9)长阴影-绿色蜡烛:开始的蜡烛应该是绿色的,关闭和打开之间的差异应该大于 0.5,下阴影应该至少是烛台主体的两倍。捕捉第一个烛台的 OHLC 价值将有助于在范围突破时产生交易条目。
10)长阴影-红烛:开口蜡烛应为红色,且开口和闭合之间的差值应大于 0.5,上部阴影应至少为烛台主体的两倍。捕捉第一个烛台的 OHLC 价值将有助于在范围突破时产生交易条目。
挑战/限制
1)捕获第一个烛台对于上述策略至关重要。
2)每个剧本平均每月 4-5 笔交易。
3)股票应表现出上述模式以产生交易信号,因此需要进行彻底的回溯测试来选择股票。
实施方法
1)[缺口向上/缺口向下] / [缺口向上/缺口向下反转形态]/[长上影]
交易进场:当当前蜡烛线的收盘完全在初始开盘蜡烛线之外时,进入交易(买方/卖方)。
止损:根据买方/卖方交易条目,将第一个 SL 置于第一个蜡烛线的低点/高点。这为价格变动提供了一些空间,并避免过早触发 SL。
交易保险:一旦价格从买入/卖出价格移动超过 1 个点,将 SL 修改为高于/低于买入/卖出价格 1 个点。这是为了减少损失,以防交易走向相反的方向。
跟踪 SL: 随着价格向交易方向移动,价格每上涨 1 个点就跟踪 SL。
止盈:当当前 SMA 与之前 SMA 的差值大于 0.2 时止盈。
交易数量:一天内不超过 2 笔交易,在区间突破时一天内反向交易。
2)吞没模式
交易进场:当当前蜡烛线的收盘完全在初始开盘蜡烛线之外时,进入交易(买方/卖方)。
止损:根据买方/卖方交易条目,第一个 SL 应位于第一个蜡烛线的低点/高点下方或上方至少 3 个点。这为价格变动提供了一些空间,并避免过早触发 SL。
交易保险:一旦价格从买入/卖出价格移动超过 2 个点,将 SL 修改为高于/低于买入/卖出价格 2 个点。这是为了减少损失,以防交易走向相反的方向。
跟踪 SL: 随着价格向交易方向移动,价格每上涨 1 个点就跟踪 SL。
止盈:止损触发时止盈
交易数量:一天不超过 1 笔交易
结论
以下是不同剧本的交易统计。




如果你想学习算法交易的各个方面,那就去看看算法交易(EPAT) 的高管课程。课程涵盖统计学&计量经济学、金融计算&技术和算法&定量交易等培训模块。EPAT 教你在算法交易中建立一个有前途的职业所需的技能。
你可以看看我们的博客烛台模式-如何阅读烛台图表如果你想了解更多关于烛台及其模式。
免责声明:就我们学生所知,本项目中的信息是真实和完整的。所有推荐均由学生或 QuantInsti提供,不做任何保证。学生和 quantin STI否认对这些信息的使用负有任何责任。本项目中提供的所有内容仅供参考,我们不保证通过使用该指南您将获得一定的利润。T15】**
隐马尔可夫链简介
这篇文章最初发表在 Quants 门户上。
在你希望确定投资回报的情况下,你可能有所有的专业知识来做这件事,但如果没有某些信息(缺失的部分),就不可能得出一个结论性的数字。实际上“假设你有你投资组合中所有资产的所有回报的价值;如果没有每项资产产生回报的比率,我们将无法真实反映特定时间点的投资组合回报,因此我们可能无法提供准确的回报估计。”一个称为隐马尔可夫模型的过程可以用来解释这个问题。
这个过程分为两个部分:一个可观察的部分和一个不可观察的或“隐藏的”部分(van Handel,2008)。然而,从可观察的过程中,我们可以提取关于“隐藏”过程的信息。因此,我们的任务是从观察到的过程中确定未观察到的过程。
隐马尔可夫模型(HMM)有两个定义性质。(I)它假设当时的观察是由某个过程产生的,该过程的状态对观察者是隐藏的,并且(ii)它假设该隐藏过程的状态满足马尔可夫性质。对某些人来说,HMM 可能看起来很复杂,但是一旦理解了什么是马尔可夫模型,它就很容易理解了。我们将研究这两个模型组件,然后考虑有助于构建这些 hmm 的高级技术。
构建隐马尔可夫模型
【隐藏过程】
如果满足以下条件,则称一个过程具有马尔可夫特性:
对于任何一个⊆s,任何一个值 n 和任何一个时间值t1tt2<…<tnt17】tn+1t13】确实如此**

这意味着,要确定流程的下一个状态,可以只考虑流程当前所处的状态,而忽略之前发生的所有事情,因为该信息已经包含在当前状态中。
我们需要一些属性和定义来帮助我们最终理解 HMM 的概念
- 时间同质性:这发生在从 a 到 b 的概率与时间无关的时候,也就是说,你在这个过程中走了多远并不重要;只要这些过程在一个步骤中从 a 移动到 b,整个过程的概率是相同的。当一个过程具有这种性质时,我们说这个过程是时间同质的,如果不是;时间非同质
- 虽然可以处理无限个状态,但在我们的财务环境中,处理有限个不可约的状态就足够了。
- 不可约状态:经过一定数量的步骤,从任何一个状态转移到另一个状态都是可能的。

这个概率矩阵是这样的:

注意:这些排放概率是这个过程下一步走向的主要驱动力。根据我们的时间同质性假设,我们可以计算出该过程在 t 步后处于状态 j 的概率,假定它开始于 i 我们将矩阵 P 乘以自身 t 次,然后读出PnT17】的ijthT13】元素**
示例:
让我们考虑两个概率转移矩阵,每个矩阵有两个转移状态,一个是时间均匀的,另一个不是。
非时齐情况

然后
和

这里改变状态的概率取决于你在时间中的位置。与此过程相反,时间齐次矩阵给出了与时间无关的常数概率。
在这种情况下
快速任务


然后

马尔可夫转移的可视化表示
保持我们的分析简单,让我们研究一个三态过程 S = {1,2,3}
从任何一个状态移动到任何其他状态的概率由概率矩阵 P 给出,概率矩阵 P 由下式给出:

下图给出了这种现象的另一种观点:

根据该图,我们可以在一个转变(时间步长)内移动到任何状态或保持在当前状态。这对于 A 和 C 来说都是正确的,但是一旦进程到达 B,它必须在下一个转换中移动,这是因为停留在 B 的概率是 0。
有了马尔可夫链,我们可以看到,它们会保留未观察到的信息,并最终产生一个更现实的模型,这就是我们首先关注 hmm 的原因。
可观察的过程
隐藏状态是由一些性质决定的,我们可以通过推导这些性质来更好地理解这些隐藏状态的行为。
为了得到这个过程的密度估计值,我们需要解许多方程组。像 Baum-Welch 算法和 Viterbi 算法这样的算法给出了极其精确的估计,但是由于它们的复杂性,我们将暂时避开它们,但是稍后再回到它们。相反,我们将研究卡尔曼滤波器,因为它遵循的过程类似于 HMM 推导中使用的过程,因此它将使我们直观地理解 HMM 是如何产生的。卡尔曼滤波器是一种广泛应用于控制系统和航空电子设备的数学技术,用于从一系列不完整和有噪声的测量中提取信号。
从不同的角度来看,我将首先列出卡尔曼滤波器和 HMM 方法之间的区别。

从上面,我们得到一种感觉,通过卡尔曼滤波器找到估计更简单,但同时,我们观察 HMM 如何将估计提高到一个全新的水平。我画了这个表来演示,如果不是暗示,在尝试寻找 HMM 的估计值之前,首先熟悉卡尔曼滤波器是多么的必要。
卡尔曼滤波
卡尔曼滤波器的关键点
- 这是一种找到过程估计值的方法。过滤来自于减少或“过滤掉”不想要的变量的原始用法。在我们的例子中是估计误差
滤波器估计值
假设我们有两个过程,一个状态过程和一个观察过程,由下面的线性方程组给出:


这里的\({A} *{k}\)和\({C}* {k}\)可以是矩阵或变量,甚至可以是简单的常量值。
通常假设\({v} *{k+1}\)和\({w}* {k+1}\)是独立且同分布的高斯或正态分布,具有均值 0 和一些协方差矩阵(理想情况下是对角线,以反映观测值之间的独立性)。
卡尔曼滤波方程的估计值是使用相当先进的方法得出的,这些方法需要对多变量分析有足够的了解。因此,我将在这里给出隐藏过程的期望值和方差的矩方程。
时间更新方程式为


并且测量值更新等式:



第二组方程(测量值更新)确定过程的均值和协方差将在哪里给出第一组方程(时间更新)的结果。
卡尔曼滤波器增益 ( K k+1 ) 用于反映我们合成的模型相对于一些观察到的(通常是历史的)模型之间的误差项的显著性。如果在 0 和 1 之间的概率的增益很小,这将意味着估计的模型是相对接近现实的,即现实的良好度量。如果这个概率非常大,那么它可能表明我们模型是无效的,需要用统计中可用的许多误差最小化方法进行重新评估。事实是,确定卡尔曼增益与获得期望过程的估计值一样重要。该滤波器增益的推导将在附录中提供。
随机动态规划
埃里克·b·拉伯和他的同事周华以一种简单而令人满意的、有意识的方式剖析了动态编程(DP)是如何运作的。首先,他们将问题(过程)分成子区间。观察到这些“子问题”是相关的,他们建议单独解决子过程,并将答案存储在表中,然后使用记录的答案来回答初始问题。
在任何包含隐藏变量(如 HMMs)的模型中,确定变量序列的任务被称为解码(Read,2011),其目标是从观察到的序列中确定最可能的隐藏状态序列(Blunsom,2004)。维特比算法已经被用来为一个被观察的序列寻找单个最佳状态序列,并且这样做的方式让人不得不佩服。
维特比算法
该算法大致遵循一个四步过程,在该过程的最后,将导出最可能的转换过程。
- 初始化


- 递归


- 结束


一旦训练集中的所有转换都被考虑,代码将提取给定所有先前事件的最可能(最大概率)事件。
- 最优状态序列回溯

回溯允许从递归步骤的结果中找到最佳状态序列(Blunsom,2004)。
有趣的是:给定算法获得最可能序列的能力,没有简单的方法来获得第二好的序列。
工作示例
Bhar 和 Hamori 使用 HMM 分析 G7 国家的股票市场回报,使用月度回报(2004,第 43 页)。当两人意识到美国对其他 G7 国家施加强大的影响,但有趣的是,其他国家对美国的影响并不小或没有时,这种情况就出现了。
假设整个 G7 月度回报的模型由以下形式的双态马尔可夫模型给出

回报被分成波动性高和低的时段。一个国家保持当前状态的估计概率由低波动性时和高波动性时给出。
下表显示了 Bhar 和 Hamori 对七个国家的实证研究结果。给定来自 Baum-Welch 算法和 Viterbi 算法的平滑概率和参数估计,我们有:

这些统计数据不仅仅是为了假设模型;他们的主要目的是提供更多的数据信息,从而帮助决策者有效地制定战略。从该表中获得的一些信息:
- 日本最有可能长时间处于不稳定状态,而美国可能会更快离开不稳定时期。
- 在一个更加不稳定的体制下,意大利可能会获得更多的平均回报
![]()
作为练习,读者可以更仔细地观察从数据中可以得出什么样的推论。
参考书目
巴尔和哈莫里(2004 年)。隐马尔可夫模型。伦敦:Kluwer 学术出版社。
布伦松,P. (2004 年)。隐马尔可夫模型。
里德,J. (2011 年)。隐马尔可夫模型和动态规划。
范·汉德尔(2008 年)。隐马尔可夫模型:课堂讲稿。
免责声明:本客座博文中提供的观点、意见和信息仅属于作者个人,不代表 QuantInsti 的观点、意见和信息。本文中所做的任何陈述或共享的链接的准确性、完整性和有效性都不能得到保证。我们对任何错误、遗漏或陈述不承担任何责任。与侵犯知识产权相关的任何责任由他们承担。T3】
深度学习和神经网络简介
原文:https://blog.quantinsti.com/introduction-deep-learning-neural-network/
作者:沙古塔·塔西尔达
“人工智能将是谷歌的终极版本。理解网络上一切的终极搜索引擎。Alphabet 首席执行官拉里·佩奇(Larry Page)在 2000 年表示:“它会准确理解你想要什么,并给你正确的东西。”当时我们大多数人都认为谷歌只是一个简单的搜索引擎。今天,人工智能和深度神经网络学习正在使几年前甚至难以想象的事情成为可能!
感谢像机器学习和深度学习这样的领域,它们是人工智能的一部分,我们已经能够在机器内自动化和集成“学习”。
在这篇介绍深度学习的文章中,我们将学习什么是深度学习,以及它如何被用于人工智能领域。
本文关于“深度学习与神经网络导论”的内容如下:
什么是深度学习?
深度学习是一种涉及使用人工深度神经网络的机器学习方法。就像人类的大脑由通过发送和接收信号来处理信息的神经细胞或神经元组成一样,深度神经网络学习由多层相互通信和处理信息的‘神经元’组成。
深度学习中的‘深’指的是网络内部的层数;层数越多,网络越深。
深度神经网络可以处理标记的数据以及未标记的数据,这允许监督和非监督学习。然而,需要大量数据来训练深度神经网络,这可能有助于产生更准确的结果。
这些网络还能够识别输出中的错误或损失,并在不需要人工干预的情况下纠正它们。
深度学习历史
除了介绍深度学习和理解它是什么,我们还将了解它是如何开始的。正如我们现在所知,深度学习网络基本上是具有许多层的深度神经网络。
1943 年,沃尔特·皮茨和沃伦·麦卡洛克创建了第一个神经网络数学模型,展示了人类大脑的思维过程。从这里开始了深度神经网络和深度学习的旅程。
这个旅程可以表示如下:

- 1957——弗兰克·罗森布拉特(Frank Rosenblatt)提交了一篇题为《感知器:一种感知和识别自动机》的论文,该论文由一种使用双层神经网络进行模式识别的算法或方法组成。
- 1965 -阿列克谢·伊瓦赫年科和 V.G .帕拉开发了第一个工作神经网络,阿列克谢·伊瓦赫年科于 1971 年创建了一个 8 层深度神经网络,并在计算机识别系统 Alpha 中进行了演示。这是深度学习的实际介绍。
- 1980 - Kunihiko Fukushima 开发了“ Neocognitron ”,这是一个具有多个卷积层的人工深度神经网络,用于识别视觉模式。
- 1985——特里·塞伊诺夫斯基创建了 NETtalk ,这是一个学习英语单词发音的程序。
- 1989——Yann le Cun,利用卷积深度神经网络,开发了一个可以阅读手写数字的系统。
- 2009 -由于深度学习模型需要大量的标记数据来在监督学习中训练自己,费-李非推出了 ImageNet ,这是一个大型的标记图像数据库。
- 2012——谷歌大脑进行的“猫实验结果出炉。这项实验基于无监督学习,其中深度神经网络与未标记的数据一起工作,以识别猫图像中的模式和特征。然而,它只能正确识别 15%的图像。
- 2014——脸书开发了 DeepFace ,这是一个深度学习系统,可以识别并标记照片中用户的面部。
机器学习和深度学习的区别
深度学习实际上是机器学习的一个子集,因此这两个术语经常被人们混淆。但是,它们的能力不同。这也是为什么在阅读《深度学习导论》的同时,有必要了解机器学习的原因。
机器学习模型缺乏识别错误的机制,在这种情况下,程序员需要介入调整模型,以做出更准确的决策,而深度学习模型可以识别不准确的决策,并在没有人工干预的情况下自行纠正模型。
但要做到这一点,深度学习模型需要大量的数据和信息,不像机器学习模型。
深度神经网络的工作
到目前为止,我们已经了解了深度学习的基础和介绍,现在是时候了解深度神经网络如何工作了。
如前所述,深度神经网络得名于网络中的高层数。现在让我们通过参考下面给出的图表来理解这些层是什么,以及它们如何在深度神经网络中使用,以给出最终输出:

深层神经网络的层数
通过查看该图,我们看到在这个深度神经网络中存在 4 层,即第 1 层、第 2 层、第 3 层和第 4 层。每个深度神经网络由三种类型的层组成,它们是:
输入层(第 1 层):该层是深度神经网络中的第一层,它提供处理信息所需的输入参数。它只是将这些参数传递给下一层,而不在这一层进行任何计算。
隐藏层(第 2 层和第 3 层):深度神经网络中的这些层对从前几层接收的输入执行必要的计算,并将结果传递给下一层。为了提高深度神经网络的效率,决定层的数目和每层中神经元的数目是至关重要的。隐藏层数越多,网络越深。
输出层(第 4 层):深度神经网络中的这一层,在接收到前几层的结果后,给我们最终的输出。
现在我们已经了解了网络中存在的层的类型,让我们了解这些层实际上是如何工作的,并给出输出数据。
每个神经元都连接到下一层中的所有神经元,并且所有这些连接都具有与其相关联的一些权重。但是这些砝码是什么,为什么要用?
深度神经网络中的权重
权重顾名思义,就是用来给某个特征附加一些权重。为了获得所需的输出,某些功能可能比其他功能更重要。
例如,在预测第二天的股票价格时,前几天的收盘价和 SMAs 将被视为比高或低价格更重要的特征,这将影响这些参数的权重。
这些权重用于计算每个神经元的加权和。x1、x2、x3、x4 表示与深度神经网络中的相应连接相关联的权重。
除了权重,每个隐藏层都有一个与之关联的激活函数。
深度神经网络中的激活函数
激活函数基于它们的加权和来决定神经元是否应该被激活。这些也用于通过使用像 sigmoid 和 tanh 这样的函数来引入非线性,从而允许对更复杂的任务进行计算。如果没有激活函数,深度神经网络将充当简单的[线性回归模型](https://quantra.quantinsti.com/course/trading-with-machine-learning-regression target=)。
以下是一些使用的激活功能的示例:
- Tanh: 避免梯度偏差
- 整流线性单元(ReLU): 用于图像处理
- Softmax: 保留离群值的相关性
除此之外,我们还为每一层添加了一个“偏置”神经元,以使激活函数能够沿 x 轴向左或向右移动,从而使我们能够更好地拟合激活函数。当输入为绝对零时,作为常数项的偏置项也作为输出。
深度神经网络的处理
该处理开始于使用从输入层接收的输入来计算第一隐藏层中每个神经元的加权和。加权和是输入与每个连接的相应权重的乘积之和。
对应于每一层的激活函数然后作用于这些加权和,以给出最终输出。这个过程也可以称为正向传播。
处理完成后,将预测输出与实际输出进行比较,以确定误差或损失。为了使深度神经网络准确工作,必须最小化该损失函数,以使预测输出尽可能接近实际输出。当我们最初为深度神经网络中的连接选择随机权重时,它们可能不是最佳选择。
因此,为了最小化损失函数,我们需要调整权重和偏差以获得准确的结果。反向传播是用于调整权重和偏差的过程,以便我们获得权重和偏差的最佳值,从而使我们的结果更准确。
深度学习应用

这篇关于“深度学习简介”的博客涵盖了深度学习的定义、差异、历史和应用,并帮助我们了解人工深度神经网络是如何工作的。
现在,我们已经熟悉了深度学习的介绍,我们可以继续前进,获取更多关于它的知识。在下面的课程中,你还可以学习如何使用深度学习和神经网络进行 Python 交易。
你可以在 Quantra 上注册神经网络教程,在这里你可以使用先进的神经网络技术和最新的研究模型,如 LSTM & RNN,来预测市场和寻找交易机会。Keras,使用相关的 python 库。
推荐阅读
- 用于股票价格预测的神经网络的工作
- 训练用于股票价格预测的神经网络
- Python 中的人工神经网络使用 Keras 预测股价走势
- 深度学习——使用 Python 中 TensorFlow 的人工神经网络
- RNN、LSTM 和 GRU 进行交易
免责声明:本文中提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。
蒙特卡洛分析简介
原文:https://blog.quantinsti.com/introduction-monte-carlo-analysis/
本文最初发布在 Quants 门户网站上。
安德森等人(1999)将充满神秘色彩的蒙特卡洛定义为通过模拟变量函数的样本均值来逼近期望值的艺术。在斯坦·乌兰姆和约翰·冯·诺依曼(Anderson,1999 年)之间,蒙特卡罗(Monte Carlo)一词曾被用作建造更好的原子弹的随机模拟的一个代号,后来演变成一种用于多种学科的方法,包括物理、金融、力学,甚至用于城镇规划和人口研究等领域。
蒙特卡罗方法与确定性方法非常不同(麦克雷什,2004)。在确定性模型的情况下,在给定解释变量的情况下,因变量的值只能是由数学公式给出的唯一值。这种模型不包含随机成分(Rotelli,2015)。相比之下,蒙特卡罗并不求解显式方程,而是通过模拟单个粒子并记录其平均行为的某些方面(记录)来获得答案(Briesmeister,2000 年)。考虑到蒙特卡罗方法的广泛应用和涉及的问题,我们将这篇文章分成三个部分,以便有一个清晰的理解。
首先,我简要介绍了蒙特卡罗方法的历史,然后以物理学中的一个例子为例强调了它的一些用途,并展示了它在金融中的必要性,最后介绍了统计驱动的重要性抽样。
在以后的著作中,我们将更深入地研究技术方面的东西,给出重要概念的严格定义,然后继续讨论马尔可夫链蒙特卡罗(MCMC ),因为它们在最近的蒙特卡罗计算中起着重要作用。在我的最后一篇文章中,我将结合所有这些方面,形成对称为蒙特卡罗方法的“黑箱”的坚实而全面的理解,重点关注 Metropolis-Hasting 算法,并探索乌兰和冯诺依曼创造的未来可能性。
蒙特卡洛的历史
正如一个苹果落在牛顿的头上点燃了一股新的科学潮流,斯坦·乌兰不得不生病才能发现后来成为大量科学问题答案的东西。尽管乌兰和冯·诺依曼形式化并创造了术语蒙特卡罗,但近似方法的早期证据仍然存在。最引人注目的是布丰的针实验。这个实验如下:
一根长度为 L 的针以随机的方式被扔在一个光滑的桌子上,桌子上划有平行线,平行线之间的距离为 2L。观察者记录指针是否与一条直线相交。从实验中推导出,随着样本的增加,针头越线的概率趋于 1/pi。”(舒斯特,1974)。
1964 年,乌兰躺在病床上,不知道用 52 张牌拼成的坎菲尔德纸牌游戏能否被成功观察到。经过一些思考并使用纯数学方法,他玩了 100 次游戏,记录了所有成功的玩法,赢的比例反映了拿到一手好牌的几率。他获得了他的结果,很快他就提出了大多数数学物理和微分方程的问题,这些问题将从这种实用的计算方法中受益。那年晚些时候,他把这个想法传授给了约翰·冯·诺依曼(埃克哈特,1987),他们开始研究更复杂的计算问题,后来又研究核武器。
蒙特卡洛这个名字的灵感也来自于摩纳哥的轮盘赌游戏,这是一种简单的产生随机数的游戏。另一个有点滑稽的动机是因为乌兰的叔叔喜欢去蒙特卡洛玩轮盘赌,因为这是以他的名义。
蒙特卡罗的应用
如上所述,蒙特卡罗方法可以应用于许多研究领域。最早的应用是由发明人完成的,其中他们使用 MC 方法来解决使用电子数字积分器和计算器(ENIAC)的裂变装置中的中子扩散和倍增问题。这后来发展成为 MCNP。

在物理科学中的应用
蒙特卡罗 N 粒子(MCNP)是一个通用的、连续能量的、广义几何的、依赖于时间的、耦合的中子/光子/电子蒙特卡罗输运程序。它可以用于几种传输模式:仅中子、仅光子、仅电子、中子/光子组合传输,其中光子由中子相互作用产生、中子/光子/电子、光子/电子或电子/光子。
虽然术语可能会令人困惑,但假设对蒙特卡罗方法知之甚少,也没有 MCNP 的经验,朱迪思·f·布里斯米斯特认为,当然,通过实践,即使是新手也可以掌握概念(布里斯米斯特,2000)。
在金融领域的应用
MC 方法已被证明是现代金融中一种有价值且灵活的计算工具。重点关注资产定价:基本证券及其基础状态变量通常被建模为连续时间随机过程。蒙特卡洛方法被用于评估以预期表示的证券价格只是一个时间问题(Boyle,Broadie,& Glasserman,1997)。由于 MC 方法在处理日益复杂的金融工具方面的灵活性,我们可以清楚地看到 MC 方法在衍生产品和其他金融产品定价中的必要性。本文的第三部分提供了一个在金融中使用蒙特卡罗方法的详细例子。
重要性抽样
重要抽样是选择一个好的分布来模拟随机变量(Anderson E. C .,1999)。从直觉上讲,我们必须从重要区域获取样本,以便获得准确的结果。这是通过对样品中的重要区域进行加权来实现的;因此得名重要性抽样。与其名称的重要性相反,抽样本身并不是抽样,而是一种近似方法。现在让我们以直观的方式探索重要性抽样:
假设我们希望对某一因素进行分析,但没有相关数据可供我们进行分析,或者我们现有的数据不能提供足够的结果。然后,我们生成一个符合以下特性的随机样本:
设 g(x)为原始样本分布(如果存在),h(x)为建议样本分布。
- h(x)应该接近与|g(x)| 成正比
- 从 h(x) 中模拟数值应该很容易
- 对于可能实现的任何值 x,计算密度 h(x)应该是容易的。
遵守这些要求可能很难需要足够的时间投入,但在处理上述两个问题时证明是有效的。我选择在这个阶段包括重要性抽样,因为它对以后的讨论更有启发性,尤其是关于蒙特卡罗改进技术。我们会发现重要抽样和马尔可夫链之间有着重要的关系。
我们已经将蒙特卡洛定义为一种广泛使用的近似技术,并了解了它有趣而又有些悸动的历史(悸动是因为这个名字的本质是与炸弹构造联系在一起的)。从冯·诺依曼使用 ENIAC 到现代计算机使用,MC 在数据/过程的模拟和操作中发挥了重要作用,这对我们的生活方式以及如何与世界互动产生了巨大影响。
在本文的下一部分,我们将更深入地探讨 MC 中固有的其他组件,并讨论 Metropolis-Hasting 算法作为蒙特卡罗马尔可夫链过程的一个特例。
马氏链、中心极限定理和 Metropolis-Hastings
在文章的前一部分,我给出了蒙特卡罗的一般概述,并介绍了重要性抽样。现在,我们通过对一些被广泛使用但却被误解或由于其重要性而被普遍忽视的概念给出严格的定义来进行更深入的探讨。此后,我们探讨了 Metropolis-Hastings 算法,它构成了许多马尔可夫链蒙特卡罗方法的基础。
马尔可夫链蒙特卡罗
在普通蒙特卡罗之后不久,洛斯·阿拉莫斯发明了马尔可夫链,他使用计算来获得这种模拟。这些链通常是从各种算法中获得的,其中 Metropolis 算法是最早期的,也是最重要的,因为它为 Metropolis-Hasting 算法等更复杂的算法铺平了道路。由于蒙特卡洛积分从要求的分布中抽取样本,并形成样本平均值以逼近期望值,因此马尔可夫链蒙特卡洛通过长时间运行巧妙构建的马尔可夫链来抽取这些样本(吉尔克斯、理查森、&【施皮格尔哈特】
让我们在此给出一些重要术语和概念的严格定义(一些定义摘自 Geyer C . J:Markov Chain Monte Carlo 简介):
定义
马尔可夫链: 一个序列 X 1 , X 2 , X 3 ,…某集合的随机元素的条件分布若为Xn+1给定 X 从这个定义中,我们看到,为了计算下一个随机变量,我们只需要当前的信息,而不需要我们当前所处的位置,从而大大减少了花费在寻找和计算时间上的时间。
可逆性: 一个转移概率分布相对于初始分布是可逆的,如果,马尔可夫链的 X 1 , X 2 , X 3 ,… 对的分布是可交换的。可逆性简化了中心极限定理(CLT)的应用,因为当这个性质成立时,CLT 的条件要简单得多。
平稳性: 一个随机过程(x t : t 在参数空间的一个元素中)是平稳的如果所有的 X t 具有相同的均值、方差和自相关
中心极限定理: 为平稳的、不可约的、可逆的马氏链和
和 以及方差σ 与σ 有限则
其中
为样本估计。我们可以进一步用一种通用的方式解释如下:对于任意随机变量序列 X 1 、 X 2 、 X 3 、… 用 X 1 、 X 2 、 X 3 值得注意的是,各种形式的 CLT 的存在都有其特定的要求
蒙特卡罗估计和中心极限定理
为了使用 CLT 来估计蒙特卡罗误差(这里没有讨论,但同样重要),我们需要方差的一致估计,或者至少是渐近分布已知的方差估计(Geyer,1992)。已经提出了许多方差估计方法,大多数来自时间序列文献,并且适用于任意平稳随机过程,而不仅仅适用于马尔可夫链(Geyer,1992)。我们现在来看一个标准时间序列的方法。
非重叠批量是指
在非重叠批次均值下(批次:为 n 项马尔可夫链保守迭代的子序列 X 1 , X 2 ,…。 X T 同样,中心极限定理将适用于每一批。
批次平均值由给出

这个方差将用于计算我们的中心极限定理。
Metropolis-Hasting 算法
Metropolis-Hastings 算法由以下步骤给出 x【t】
1 生成
2 乘
我们称 p(x,y) 为接受概率。通过执行这个过程,我们得到所谓的大都市加速马尔可夫链 X 1 , X 2 ,…。XT同 X T 大致按(x) 分布。(f(x) 是我们可能认为我们理想的样本分布)对于大 T 。(Kroese,Taimre,& Botev,2011 年)。
Metropolis-Hasting 背后的主要目的是模拟一个马尔可夫链,使得这个链的平稳分布与目标分布一致。
尽管 MC 方法通常比传统数值方法更有效,但其实施可能非常困难,且在时间和分析上计算昂贵。黑斯廷斯提出了一个源于 Metropolis 等人(1953)的广义方法。这种采样方法的主要特点是
- 计算依赖于 p(x) 仅通过 p(x’)/p(x)形式的比值,其中 x’和 x 是样本点,不需要因式分解 p(x) 也不需要确定归一化常数
关于 Metropolis-Hastings 有更多的文献,但我们强调的在这一点上已经足够了。理想情况下,我们试图用 Metropolis 这样的算法做的事情是拿出一个尽可能接近现实的样本,从而确保在尽可能现实的设置下测试任何提议的模型。
到目前为止,我们已经收集了足够的理论知识来构建一个可用于投资的策略。在文章的最后一部分,我们将利用 uptil 现在开发的所有概念来评估它们的重要性。
金融应用
在蒙特卡洛领域,存在大量的应用。在这最后一部分,我把所有以前的工作结合在一起,并把我们到目前为止收集的理论付诸实践。
应用 Metropolis-Hastings 算法
从上一节中,我们推出了一种方法,通过这种方法,我们可以使用任意因子生成一个样本,这些因子组合起来可以相当准确地反映现实
为了绝对简单起见,我们将只考虑我们希望建模的一个变量,但该流程适用于资产组合或这些资产的衍生品,只需进行最小的调整。在这里,我们利用动态资产定价来估计均衡,并利用均值回归理论作为我们策略的基础来开发套利机会。我将忽略实际的计算,以便直观地理解这里开发的理论的用法:
- 假设资产 A 具有相当大的波动性,我们希望利用这一观察结果。我们拥有的算法使我们能够模拟我们自己的股票运动,并将其与 A 的运动相匹配。
- 假设布朗运动为我们的 q(x) (建议分布)我们应用 Metropolis-Hastings 算法记录所有观察值。
在这一点上,我们有两种可供选择的方法用于比较:
备选方案 1:由于我们有一个明确的流程,我们可以根据观察到的趋势直接绘制出这个伪趋势,然后根据价格差异做出交易决策。然后,我们构建一个程序,根据两者之间的关系做出买卖决定。
- 当生成的过程高于资产价格时,这将反映买入,因为我们假设价格将缩回到我们的模型中(记住,我们的模型给出了一个平稳分布,这意味着随着时间的推移,价格将收敛到这个稳定状态(Johannes & Polson,2002))
- 对于低于资产价格的生成流程,将执行卖出触发器。
备选方案 2:为了进一步加强我们的决策,我们可以使用基于生成的样本路径的回归模型。通过这样做,我们甚至能够假设资产 A 运动的未来趋势,同时了解和控制当前的价格波动。同样,在第一模型中应用的交易决策也可以使用回归模型作为基准来应用。
这是一个过于简化的模型,只给出了一种可能的用途。布朗运动的使用作为我们的 q 被包括在内,这是基于它的特性来模拟金融运动,并在其计算中包括噪声(Morters & Peres,2008)。此外,虽然从理论上讲,我们没有对 q 进行限制,但重要的是要注意,建议密度的选择通常会影响算法的性能。(约翰内斯&波尔森,2002 年,第 26 页)
障碍选项和重要性抽样
在描述和使用选项时,我们几乎总是考虑普通选项,并假设这同样适用于外来类型。我会走一条稍微不同的路,考虑一个奇特的选择;准确地说是障碍选项。下面的例子是从 Kroese D,P Taime T 和 Botev Z,I 的《蒙特卡洛方法手册》中摘录的:
考虑一个下跌买入期权,有一个受监控的障碍,到期时的收益由给出

其中
用
和
来表示 k = 1,2,3,…。期权中出现正收益的情况很少,因此期权价格的计算很大程度上取决于这种情况的出现。因此,估计稳健概率是必要的,重要抽样可能会发挥巨大作用。
此外:为了获得一个好的阳萎抽样密度,我们使用了所谓的交叉熵方法。这其中包括获取一个格式的 pdf

其中
标准正态随机向量ζ的 pdf。可以通过使用被称为“打了就跑”算法的 Metropolis-Hasting 算法的变体来获得所提出的 pdf 的进一步增强。
结论说明和总结
Metropolis-Hastings 方法有一个巨大的应用,我们可能不会在单个博客系列中讨论它,尽管它只是在 20 世纪 90 年代才被普遍接受(Hitchocock,2012)。Metropolis-Hastings 算法的各种修改,包括独立采样器和随机漫步采样器,进一步提供更相关的预测。黑斯廷斯看到了位于大都市中心的马尔可夫链的转移矩阵,将他的目标分布呈现为马尔可夫链的π(x)的不变分布(Hitchocock,2012,第 155 页),如前所述,这一特征重塑了许多学科。
在一天结束时,所有这些练习的全部目的是想出一个接近真实但在我们控制范围内的样本。考虑到这一点,存在许多旨在利用关于模型的已知信息来获得更准确估计值的方差缩减技术(Kroese & Rubinstein,2008)。我们在第二部分中简要地提到了一种这样的技术,即非重叠批处理方法。其他众所周知的可能提供适度方差减少的技术包括使用控制和/或算术随机变量、分层抽样(Kroese & Rubinstein,2008 年)和最受欢迎的重要性抽样。(克罗泽,塔米姆雷,&博特夫,2011 年)
Kroese 等人认为重要抽样是最重要的方差缩减技术之一(2011 年,第 362 页),更重要的是它能够找到罕见事件概率的估计值。与本系列中讨论的大多数主题一样,这里只给出了介绍性材料,在学术文献中可以找到大量采样方法的推导。
对于稳健的结果,包含交叉熵是有益的。交叉熵方法的目的是获得密度,使得该密度和最佳密度(实际)之间的距离尽可能小。加权重要性抽样是与金融市场最相关的一种变化,因为它将更多的权重分配给对过程有重要输入的因素。
综合运用所有这些方法将会大大提高回报,大幅降低风险,并有助于形成稳健的投资策略。
参考书目
- 安德森(1999)。 蒙特卡罗方法和重要性抽样。
- 博伊尔,p .,布罗迪,m .,&格拉斯曼,P. (1997)。证券定价的蒙特卡罗方法。经济与控制学报,1267-1321。
- Briesmeister,J. F. (2000 年)。【MCNP 】-一个通用的蒙特卡罗 N 粒子输运代码。
- 埃克哈特(1987 年)。 斯坦乌兰、约翰·冯·诺依曼和蒙特卡洛法。 从 ScienceMadness.org 获得的。
- 盖耶,C. J. (1992)。实用马尔可夫链蒙特卡罗。统计科学第 7 卷第 4 期,473-483 页。
- 吉尔克斯,W. R .,理查森,s .,&施皮格尔哈特,D. J .(未注明)。介绍马尔可夫链蒙特卡罗。
- 希区柯克博士(2012 年)。大都市加速算法的历史。,254-257 页。
- 约翰尼斯,m .,&波尔森,N. (2002)。 MCMC 金融 e .T5】
- Kroese,D. P .,Tamimre,t .,& Botev,Z. I. (2011 年)。 蒙特卡洛方法手册。 新泽西霍博肯:约翰·威利&父子公司
- Kroese,D. P .,& Rubinstein,R. Y. (2008 年)。 模拟和蒙特卡洛法。 新泽西:约翰·威利&父子公司
- d . kro ese,t . taim re,& Botev,Z. I. (2011 年)。蒙特卡罗方法手册。新泽西:约翰·威利&的儿子们。
- 莫特斯,p .,&佩雷斯,Y. (2008 年)。 布朗运动。
- 麦克雷什博士(2004 年)。 蒙特卡洛模拟和金融。
- 罗泰利,F. (2015 年)。 随机过程。 比勒陀利亚。
- 舒斯特,E. F. (1974)。 布冯的针实验。 美国数学协会。
- 许,,张,张,(2010)。均值风险优化和投资组合选择的蒙特卡罗方法。南汉普顿大学。
免责声明:这篇客座博文中提供的观点、意见和信息仅属于作者个人,并不代表 QuantInsti 的观点、意见和信息。本文中所做的任何陈述或共享的链接的准确性、完整性和有效性都不能得到保证。我们对任何错误、遗漏或陈述不承担任何责任。与侵犯知识产权相关的任何责任由他们承担。
投资组合管理简介
原文:https://blog.quantinsti.com/introduction-portfolio-management/
马里奥·皮萨·培尼亚
对投资组合管理的权威解读,这篇博客是一篇介绍性文章,也是你的指南。它解释了你需要了解的关于投资组合管理的所有知识,比如技术、类型、衍生品等等。
以下是我们在这篇文章中所涵盖的内容:
- 什么是投资组合管理?
- 投资组合管理的定义
- 什么是投资组合管理技术?
- 投资组合管理的类型
- 投资组合管理中的资产类别
- 衍生品和投资组合管理
- 投资组合管理的传统方法
- 衡量投资组合回报的工具
- 投资组合的回报率差异
- 结论

什么是投资组合管理?
投资组合管理是一个非常通用的术语,用来指经理管理资产组合的风格。
在金融市场上,有许多资产可供选择,如股票和公司债券、国库券、商品、货币、指数、期权、房地产投资信托基金等等。因此,有必要应用管理技术来管理可以界定一些关键方面(如风险和预期回报)的资产组合。
不幸的是,我们不可能获得零风险的无限回报,因为一个依赖于另一个,如果我们想增加投资组合的回报,通常会以承担更多风险为代价。

项目组合管理的定义
根据定义,
有效的投资组合被定义为在给定回报下风险最小的投资组合,或者说,在给定风险水平下回报最高的投资组合。
仅在纽约证券交易所,就有超过 2800 家上市公司,而在美国的衍生品市场,芝加哥商业交易所,也有数千种合约可供选择。如果我们也考虑国际市场,选择的数量实在太多了。
因此,无论我们管理的是 10 万美元的资本还是数十亿美元的资本,拥有有助于选择适当工具的工具都是很方便的,或者说,建立一个允许包含指定风险并使回报最大化的投资组合也是一样。也就是说,使用投资组合管理技术。

什么是投资组合管理技术?
投资组合管理技术允许我们,至少不承担不必要的风险,来限制每一项投资和整个投资组合的风险。它有助于尽可能提高绩效,并能够分析和比较使用相同管理风格的其他投资组合。它们也允许我们对未来做一个假设,并回答“如果”这个问题。
虽然投资组合管理不是一门精确的科学,因为它处理的是未来的不确定性,但它允许我们有一个适当的框架来做出投资决策。

投资组合管理的类型
因此,我们认为有必要对管理风格进行分类,例如,可以分为以下几组:
-
被动管理投资组合:通常,被动投资组合的经理认为,实际上不可能获得比市场本身更高的业绩,因此他们只限于跟踪市场。
-
主动管理投资组合:这些投资组合经理认为,如果有可能获得比市场更高的回报,因此通过更积极的投资组合管理,理论上他们能够获得 Alpha (Alpha 是相对于市场的超额回报)。出于比较的目的,了解投资组合的贝塔系数也是很有意思的,因为这表明了它与市场的偏差。
-
激进管理型投资组合:他们是有能力发现和利用市场无效性的投资组合经理,他们带着市场偏见进行投机。
还有必要将不同类型的资产分为可管理的类别,为此我们已经提到了一些可能的资产类别,但它们也可以按风险、资本化、国家、部门、价值或增长等进行分类。
面对如此多样的风格和资产,投资组合管理技术使我们能够标准化管理技术,并对业绩和风险进行充分的衡量,从而为每种类型的投资者创建不同的投资组合。
既然任何投资组合都是由资产组成的,那么让我们试着定义一些我们能在投资组合中找到的最常见的资产。

投资组合管理中的资产类别
投资组合的典型组成部分包括:
- 股票或权益
- 结合
- 现金
股票或权益:这些资产被认为是高风险的,因此提供了获得高回报的机会。它们还可以按国家、部门和/或资产价值或增长细分,前者往往提供股息,而后者往往不提供股息,但回报通常高于市场。此外,他们在股东大会上提供权利,因为事实上,股东拥有公司。(有时 A 类和 B 类股票也有例外,后者不提供投票权。)
债券:这些资产被认为是低风险的,因此提供适中的回报,好处是从一开始,投资回报就是已知的。这些资产是借给政府和公司的贷款,到期日和固定回报或一定频率的息票支付是预先确定的。它们还可以细分为公司或政府债券、到期日、评级等。
现金:我们必须预见到我们投资组合的资金,因为它不会总是 100%投资,有时现金可以用于在货币市场上进行操作,风险可以从很低到很高,这取决于所选择的货币。

衍生品和投资组合管理
另一方面,有些衍生产品,顾名思义,其价值(以及回报)来自基础产品。
一些最著名的衍生品有:
- 期货
- 选择
期货
期货是双方之间的合约,一方在未来某个交割日期买入/卖出资产,另一方卖出/买入该资产。该合同由清算所担保。
到期时,双方都有义务,一方交付货物,不管当前的市场价格如何,另一方有义务接收货物,不管当前的市场价格如何,因为价格是在交易时确定的。
尽管需要明确的是,交易商通常不会在到期日之前保持合约未平仓,因为他们通常持有投机头寸。
期货价格来源于一种基础资产,如股票指数、商品等。
在这里我们可以发现:
- 指数(道琼斯、标准普尔 500、纳斯达克、罗素 2000 等。)
- 贵金属(金、铂等。)
- 工业金属(铜、铅等。)
- 能源(石油、天然气、乙醇等。)
- 农业(大豆、豆类、玉米、小麦等。)
- 软(肉、活牛、橙汁、糖、棉花等。)
请注意,你也可以通过 ETF 投资这些产品,就像投资股票一样,尽管 ETF 值得单独研究。
选项
期权是一种工具,其中一方购买在某一日期以固定价格购买/出售资产的权利,另一方出售该权利,这种操作由清算所保证。期权价格来源于基础资产,如股票、股票指数、商品等。
最后,还有其他不太常见的投资工具,但根据所设计的投资组合,这些工具可能对多样化有吸引力
- 房地产投资信托基金,
- OTC(场外)操作,如
- 认股权证,
- 风险投资公司,以及
- 可以为特定客户创建的特定产品等。
如你所想,这个列表既不完整也不详尽,但是它包含了投资组合管理中最流行的工具。
我们还看到,为了帮助您选择最适合您的管理策略的工具,可以用不同的方式对工具进行分类。
除了种类繁多的可用金融工具外,在决定采用哪种工具时,还必须考虑其他因素,如波动性、流动性、信息可用性和交易成本。
有了所有这些要素,我们显然需要一个框架来促进投资组合管理,帮助我们选择特定时刻的最佳资产,界定要支持的风险水平,以及建立回报目标。
从行业的角度来看,同样重要的是建立标准指标,允许将投资组合的表现与行业的其他表现进行比较。

投资组合管理的传统方法
投资组合由资产组成,投资组合经理负责决定将哪些资产纳入投资组合。为此,有两种传统的方法
- 自下而上的方法
- 自顶向下分析法
自下而上的方法
这种方法根据分析师定义的标准进行资产选择,如市盈率、相对优势、行业等等。这种技术通常被称为选股。
自上而下的方法
在自上而下的方法中,分析师将选择行动的任务划分到过滤器中,从数量上减少了可包含在投资组合中的选项的数量。例如,可以通过分析来决定我们要投资的市场或国家,然后决定投资的行业,最后,根据某种标准(例如相对实力)来挑选股票。

衡量投资组合回报的工具
其他简单而强大的工具用于衡量回报,在这些工具中,我们可以找到:
-
算术回报:资产的确切回报可以通过“t”时间的价格减去“t-1”时间的价格加上股息(如果有的话)除以“t-1”时间的价格来衡量。
-
对数回报:资产的回报可以用“ln”来衡量,即时间“t”的价格加上股息(如果有)除以“时间-1”的价格。这个度量是聚合的,允许我们简单地通过添加简单的句点来计算任何返回长度。
-
几何收益率:或复合几何收益率,计算投资在整个期间的实际增长率。
-
投资组合回报:这里有几种方法,因为投资组合可以有简单或复杂的管理,组成投资组合的资产可以提供股息、股份支付、分割、资本流动、杠杆等。尽管我们可以用算术回报来计算给定时期的投资组合表现。我们将取 t 时刻投资组合的初始值,减去 t-1 时刻投资组合的价值,加上股息(如果有),再除以 t-1 时刻投资组合的价值。
-
相对回报:了解一个投资组合的表现本身就是一个指标,它只提供了一个关于经理创造回报能力的数据,但如果我们把它与同类的其他回报放在一起看,这个数据就变得更加相关了。例如,如果我们的投资组合由纽约证券交易所的股票组成,我们可以将它的表现与标准普尔 500 指数进行比较,或者我们可以将它与拥有类似特征的投资组合和风格的其他经理的表现进行比较。

投资组合的回报率差异
最后,衡量资产风险的最简单的工具是回报率的方差,它让我们了解相对于平均值的离差,但当然,投资组合中的资产会受到其他需要量化的风险的影响。Markowitz 是最早对风险及其特征进行研究的人之一,他发展了现代投资组合理论,并证明了多样化的好处,尽管他假设收益遵循正态分布,正如我们将看到的,这不是市场的真实行为。
这项研究是我们将在这一系列文章中看到的其他模型的基础,如资本资产定价管理(CAPM) 。

结论
在关于投资组合管理的文章系列中,我们将探讨一些构建投资组合的理论和策略,如资本资产定价管理(CAPM)、 Fama-French 三因素模型或多策略投资组合。
如果我们没有控制投资组合的风险/收益,就不会有管理,我们将在本系列中看到关于风险/收益分析的帖子。
当我们建立投资组合并进行风险/收益分析时,我们可以使用优化技术来帮助我们最大限度地提高性能,如蒙特卡洛分析或 ML 技术。最后,我们将看看 ML 和日内风险投资组合管理技术。
在这门关于量化投资组合管理的课程中,你可以学习如何使用各种量化技术构建投资组合和管理风险。
参考文献
- 投资组合理论和业绩分析
- 拉尔夫·文斯的投资组合数学手册
- 使用资本资产定价和 Fama-French 三因素模型的现代投资组合管理- EPAT 项目
- 计算协方差矩阵和投资组合方差
- 投资组合分析:计算风险和回报
- 使用蒙特卡洛模拟的投资组合优化
- 投资组合分析:绩效测量和评估
- 多策略投资组合:有效结合量化策略
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
价格行动交易简介[网上研讨会]
原文:https://blog.quantinsti.com/introduction-price-action-trading-webinar-18-october-2022/
https://www.youtube.com/embed/j0xjch0L9aw?rel=0
演示幻灯片
//www.slideshare.net/slideshow/embed_code/key/yk1KuulbLcorgQ
Price Action Trading - An Introduction from QuantInsti
关于会议
这节课通过理解价格行为,向你介绍不使用技术指标交易的技巧。它涵盖了几个重要的价格行为交易工具,如供求分析,模式,支点等。
- 价格行为交易的需要
- 价格行为交易的基础
- 价格行为交易工具
- 回溯测试和评估价格行为交易策略
- 价格行为交易自动化
- 互动问答
扬声器
Varun Kumar pot hula(QuantInsti 的量化分析师)

Varun 拥有金融工程硕士学位。他拥有交易员、全球宏观分析师和 algo 交易策略师的工作经验。目前,作为一名量化分析师,他在 QuantInsti 的内容和研究团队工作,他的贡献有助于为算法和量化交易领域的学习者提供服务。
本次活动于:
2022 年 10 月 18 日星期二
东部时间上午 9:30 | IST 时间晚上 7:00 |新加坡时间晚上 9:30
金融学中贝叶斯统计的简明介绍
原文:https://blog.quantinsti.com/introduction-to-bayesian-statistics-in-finance/
由 Vivek Krishnamoorthy
This post is intended to be the first of a multi-part series on Bayesian statistics and methods in quantitative finance. My write up here is a short introductory post that went rogue.
动机
I must confess that when I first encountered the Bayesian approach to inferential statistics in my formal education, it was tough going. The material I read and the teachers who taught me were excellent but it took months before I could fully appreciate them. I spent countless hours trawling through the internet (blogs, websites, online forums, etc.) and other traditional sources (books & academic journals) trying to build a fundamental understanding of this subject. I managed to get there eventually. My aim here is primarily, to help you, the reader, learn from my missteps. This entire series attempts to provide an intuitive feel for Bayesian statistics and its applications without getting too caught up in the scary math. We are dealing with an exciting and challenging subject so I must warn you that it will demand of you both effortful thinking and hard work. My secondary aim is to stave off (at least for a little while) the question asked of me by colleagues, friends and family - "When will you be done writing?" If these posts pique your curiosity to explore further, a lot of good stuff is available both in print and on the web with varying levels of complexity. I will point you to some of these resources in the coming posts.
谁应该读这篇文章?
The main prerequisite for understanding these notes is some exposure to probability theory and statistics. I seek to introduce Bayesian statistics in an accessible way to readers who have some conversance with classical statistical analysis (which is mostly any kind of inferential analysis you may have studied so far unless stated otherwise). I have tried to find a middle ground between scientific rigour where theorems are proved and a purely empirical approach dictated by observations and analysis minus any theorems. I hope that readers are comfortable with some of the concepts I have listed below. If a number of them are unfamiliar to you, I would recommend you acquaint yourself with some of them to profit from the time and effort you invest here. This glossary can give you a once-over if you are looking for something quick and dirty. An overview of these ideas should suffice; you do not need exceptional mathematical sophistication. The ideas will get clearer as you work with them here and elsewhere.
连续和离散随机变量;分配;期望值;方差:概率分布函数(PDF);概率质量函数(PMF);最大似然估计;贝叶斯定理;条件概率;边际概率;伯努利、二项式、正态、高斯、伽玛、贝塔、学生 t 分布;人口;样本;样本均值;样本方差;人口平均数;人口方差;协方差和相关性。
I would urge you to pick up a pencil and paper to work out the derivations or exercises that crop up through this series. I sometimes don't spell out every step of the way. So it will help you both, fill in any missing details, and sharpen your own understanding of the topic.
本帖意图
In this post, I set the stage for our grand endeavour by providing a gentle introduction to Bayesian statistics, a branch of statistical analysis founded on Bayes' Theorem. I contextualize it by first covering some ground on the two main schools of thought in statistical analysis viz. the frequentist and the Bayesian. I then proceed to establish how the differences between them impact their respective philosophical styles. Once we do this, I pick an example to get us comfortable with the Bayesian approach to probabilistic problems. I conclude my article with stating Bayes' Theorem and display its formal use with another example. My presentation of example, theorem, example is by design. This should hopefully help us make the connection between the illustrations and the underlying principles they embody. Let's get started.
布置背景
Imagine a scenario where a data scientist or an economic researcher has collected data about a phenomenon that she is studying. This data may be collected by observing a number of subjects at a certain point in time (cross-sectional data) or by observing a subject over a number of time periods (time-series data). It could also be a combination of cross-sectional and time-series observations i.e. observing a number of subjects tracked over multiple time periods (panel data). In econometric studies, these subjects are usually individuals, firms, regions, or countries and the time-periods are yearly, quarterly, daily or higher frequencies. In quantitative finance, we typically track the movements of different asset classes through time. A short excursion: The data that econometricians (I use this as a motley term to include quantitative analysts, financial economists, empirical economic/financial researchers and even some data scientists) work with are almost always observational. This is fundamentally different from the data generated via controlled experiments in many of the pure and applied sciences (like medicine, physics, engineering, etc.). Coming back to the main story, a key choice that our researcher would need to make is the approach to statistical inference i.e. using frequentist statistics or Bayesian statistics. This is an important choice point and a good place to tee off on our journey. I now proceed to compare and contrast classical (frequentist) statistics and Bayesian statistics in drawing inferences.
哲学背景
Statistical analysis and the subsequent inferences we draw from it are based on probability theory. The way in which probability is defined and interpreted has created two schools of statistical thought, viz. frequentist statistics and Bayesian statistics. The frequentist worldview (also called the classical or traditional approach) refers to the philosophical approach of Ronald Fisher. It views the probability of an event as the long run frequency of occurrence of that event (hence the name). We would, therefore, measure the probability of that event as the frequency at which it occurs after repeating the experiment ad infinitum. However, this is not always possible in practice. For instance, if we want to compute what the probability of a global recession occurring in the coming year is, we do not have a large sample of data available since we only have reliable economic data for about a century or so. In cases like these, frequentists use theoretical results and techniques to arrive at the probability of occurrence. I'll elaborate a little more on this as we move along. So in summary, for frequentists, the probability is inextricably tied to the long run frequency of occurrence of events. The Bayesian (named after its discoverer Thomas Bayes) worldview of probability is more visceral. It interprets probability as a subjective opinion i.e. it is a measure of belief or plausibility that we have of an event occurring. We update our opinions (as measured by probability) as and when we receive more information. Simply put, for Bayesian decision makers, the probability is a statement of an individual subjective opinion. While I do highlight the subjective nature quality of our definition here, I must hasten to add that the axioms of probability still need to be satisfied. This philosophy of quantifying our beliefs or opinions as a probability comes quite naturally to us. One of the basic principles of learning is to assimilate the information that arrives from the external environment and update our extant knowledge (what we casually refer to as common sense) with this newly acquired information. This is the kernel of the Bayesian worldview which animates the Bayesian statistics enterprise. This is also how we operate in the real world where we form beliefs (and by extension, assign probabilities) based on what we know. Let's say we assign a certain probability to a particular candidate winning the elections six months from now. As time passes by, we would continually update our beliefs or opinions (as measured by the probability of the candidate winning) based on news reports, opinion polls, etc. so as to reflect the changing realities. The divide between frequentists and Bayesians is fundamentally one of philosophy which I show has wider ramifications in their differing approaches to statistical analysis.
频率主义者 v/s 的主观概率
One of the enduring controversies in probability theory is about the type of events where probabilities (in the frequentist sense) can be defined. I had briefly alluded to it earlier in a case where the experiment could not be performed repeatedly. As per the frequentist definition, the only situations where probabilities hold any meaning are those where we examine the relative frequency of occurrences of an event as the number of observations tends to infinity i.e.
where k is the number of occurrences of the event and n is the number of repetitions of the experiment. This method of assigning probabilities creates two issues. First, even in cases where the experiment is recurrent, it requires us to conduct the experiment an infinite number of times which is impossible. The second is a more serious issue. We are unable to assign probabilities to events which are not the outcomes of repeated experiments. This would not please the Bayesians among us who take a more subjective view of probability. They view probability as a reflection of their uncertainty about the state of the world. The way they see it, probability and uncertainty are tautological. A Bayesian decision maker would assign probabilities to the outcomes of repeated experiments and also to statements about the winner of the next national election (i.e. the outcome of a non-recurrent experiment). I linger on these differences and flesh it out a little more in the following section.
细节决定成败
The frequentist approach has a different take on uncertainty. In this world, uncertainty stems only from the randomness that is implicit in the realizations of any experiment or phenomenon. In other words, the data generated would be random or uncertain, however, the underlying phenomenon studied is fixed but unknown. In contrast, the Bayesian researcher notes from her first principles, an inherent uncertainty in the phenomenon being studied. She expresses this doubt before commencing her study based on her existing knowledge and calls it the prior probability. Once she completes her study of the phenomenon, she incorporates this knowledge (this is data in statistics-speak) to update her own subjective beliefs and calls it the posterior probability. I now depict an illustration to get a flavour of the Bayesian way of thinking. Once we are familiar with this, I conclude our learning for this post with a postulation of Bayes' Theorem alongside an application in inferential statistics.
例 1
Consider a scenario as shown below:
- 一家手机制造商有三家不同的工厂生产手机。
- 50%的手机来自工厂 1,30%来自工厂 2,其余来自工厂 3。
- 工厂 1 的手机有 10%有缺陷,同样,工厂 2 的手机有 20%有缺陷,工厂 3 的手机有 25%有缺陷。
Suppose we find a defective phone and want to know the likelihood that it came from plant 1. One way to go about solving this is to initially assume there are a total of 100 phones. We can then make the following statements based on what we know.
- 50 部手机将来自工厂 1;其中 10%是次品,所以我们算出有 5 个是次品;∴剩下的 45 个将是无缺陷的。
- 同样,30 部手机来自工厂 2;6 将是有缺陷的,24 将是无缺陷的。
- 并且,20 部手机来自工厂 3;5 会有缺陷, 15 会无缺陷。
We can see that a total of 16 phones are defective out of which 5 are from plant 1. Let us tabulate our results for clarity.
| 植物 | 生产的手机数量 | 缺陷手机数量 | 无缺陷手机的数量 |
|---|---|---|---|
| one | Fifty | five | Forty-five |
| Two | Thirty | six | Twenty-four |
| three | Twenty | five | Fifteen |
∴∴ the likelihood of a defective phone being manufactured in plant 1 is 5/16.
定理
I now use the following notations to frame our problem statement using Bayes' Theorem. Let AA be the event that the phone is defective, Bi be the event that the phone was manufactured in plant i, and P(⋅) denote the probability. I also use the conventional notation for conditional probability, P(⋅|⋅). Without loss of generality, Bayes' Theorem for our example can be algebraically expressed as:
Our instinctive approach earlier is consistent with the application of Bayes' theorem as seen above. What makes this theorem so handy is it allows us to invert a conditional probability. I now employ a simple illustration to demonstrate how Bayes' theorem can be used in an inferential setting.
例 2
Let us suppose a suspect is being tried for a crime in court. In most justice systems, the hypothesis we operate with is that the person being tried is innocent. I now write this in conventional hypothesis testing parlance as: 
I re-express (2) and (3) here as:
Let us suppose that the evidence is based on the size of the footprints observed at the crime site.If 20% of the population has that foot size, then
As seen, our revised probability numbers are significantly impacted once we incorporate the evidence into our analysis. The probability of his innocence plummets from 1/3 to 1/11 after examining the evidence. Our suspect appears to be on thin ice!
总结
I have sought to convey the key differences between the frequentist and the Bayesian approach to probability theory. I also touched upon Bayes' Theorem, the fountainhead of Bayesian statistics along with some examples. We still have some distance to go. In my next post, I intend to further ramp up on the inference building exercise in frequentist and Bayesian statistics. Bayesian statistics is an important part of quantitative strategies which are part of an algorithmic trader's handbook. The Executive Programme in Algorithmic Trading (EPAT) course by QuantInsti® covers training modules like Statistics & Econometrics, Financial Computing & Technology, and Algorithmic & Quantitative Trading that equip you with the required skill sets for applying various trading instruments and platforms to be a successful trader.Disclaimer: All investments and trading in the stock market involve risk. Any decisions to place trades in the financial markets, including trading in stock or options or other financial instruments is a personal decision that should only be made after thorough research, including a personal risk and financial assessment and the engagement of professional assistance to the extent you believe necessary. The trading strategies or related information mentioned in this article is for informational purposes only.
交易导论:发展概念框架

当有人想学习如何交易时,他们从哪里开始?他们应该关注哪些市场?他们应该考虑什么样的交易模式?他们应该在交易中承担多大的风险?
以上都是常见的初题,都是错误的初题。
交易介绍
学习交易是如何从概念框架开始的:理解市场如何和为什么运动,以及它们如何和为什么相互关联。
当科学家进行实验时,他们不会把各种各样的东西往墙上扔,看看有什么东西粘在墙上。他们从一个理论开始——对他们的观察的尝试性解释——然后用这个理论来指导假说的产生和检验。心理学家库尔特·勒温曾经说过:“没有什么比一个好的理论更实际的了”。理论组织思想;它帮助我们专注于重要的事情,剔除无关的事情。
大多数交易者也用他们的理论和概念框架操作。从学习研究中衍生出来的精神分析观点和认知行为方法:这些是理解人及其模式的方法。这就是为什么新交易者和经验丰富的老交易者坐在一起学习逻辑、感觉和方法。
很多时候,交易者开始学习市场,试图学习他们可以交易的模式。如果没有观察和理论的科学基础,这些交易者最终会拿自己的钱去冒险,而没有真正理解他们在做什么,以及如何适应他们市场更大的供求关系。难怪这样的交易者很难保持信心和纪律:如果你不明白为什么要做某事,就很难有信心去做。
新量化交易者的基本能力
新的量化交易者在开始职业生涯时往往很难获得公正的指导,因此这种资源非常宝贵。问题的主题从交易机制和交易系统到市场微观结构和交易生涯。
总的来说,我想强调四个关键的学习领域,这是一个人今天开始量化交易生涯时应该具备的:
宏观经济
你会希望牢牢把握市场间的关系,以及货币政策如何影响利率、货币和经济增长。股票、货币、利率、商品和信贷市场的基础知识在任何发达/发展中市场的交易中都是必不可少的。尤其是现在,市场之间紧密相连,相互关联交易。这些信息可能会也可能不会决定接下来半小时的交易,但是清楚地理解手头的问题对于可视化和建立交易系统是非常重要的。缺乏对宏观经济和市场间关系的理解是许多短线交易者在市场中亏损的主要原因。
一种交易理论
交易者需要一个框架来思考价格运动,并从市场上稳定的价格变化中找出原因。我不确定交易者是否认同这种或那种理论有很大关系,但是我确定有一个解释框架比没有要好。人们认同各种各样的基础或技术理论。在量化交易中,市场微观结构理论、双向拍卖市场、行为金融学、交易心理学、交易模式、市场概况、相对估值等。单独使用或与其他理论结合使用。
观察
毫无疑问,在学习如何交易时,我做过的最聪明的事情就是在交易前长时间观察市场。我收集日内走势图,甚至是分笔交易图,每天寻找最佳交易机会。随着时间的推移,我开始在这些机会中看到重复的模式,这对我后来的交易很重要。不仅要观察价格,还要观察交易量、行业行为、市场间的行为,以及像分笔成交点这样的指标,这有助于你认识突破、反转和趋势的动态。
编码的最优性
当有其他系统在寻找类似的机会时,平台和策略的编码方式也很重要。尤其是在利润可以用几个分笔成交点来衡量的情况下,将订单发送到市场的时间和速度至关重要。代码应该能够处理任何类型的市场环境,并处理高风险事件。根据我今天所知道的,如果我开始做交易者或者给新手做建议,我会建议在把钱投入风险之前至少花半年的时间学习、观察和练习纸上交易。我坚信新交易者不成功的一个主要原因是他们没有投入必要的时间去学习市场和获得急需的技能。
机器学习
机器学习已经成为量化分析师应该具备的技能清单中的重要部分。交易中使用的大多数策略,无论是技术策略、数量策略还是基本面策略,都可以被自动化和优化。为了优化代码,你需要对你正在编码的语言有很强的理解,为了优化策略,你需要对策略的特征和适合于手头问题的必要的机器学习模型有很强的理解。市场上有很好的机器学习算法,能够让使用 Twitter feeds 或其他类似的新闻 feed 来理解市场情绪。作为交易者,结合这样的算法会给你比其他交易者更大的优势。

Python/R/C++
学哪种语言?这可能是一个困扰每个量化交易初学者的问题。如果你知道一种特定的语言在哪里使用,那么你就能明白哪种语言更适合你的需要。
C++ 广泛用于那些执行时间是最重要参数的策略中。例如,在 HFT(高频交易),交易不到一秒钟就能完成,你选择的语言可以决定你策略的成败。在这种情况下,C++是最好的选择。
Python 或 R 在分析和金融领域有着广泛的用途。它们在算法交易中被广泛使用,世界上几乎每个主要的经纪人都有至少支持其中一种的 API。这两者都没有什么可选择的,它们都提供相似的特性和库,并且都是开源的。在金融领域,R 是一门成熟的语言,而 Python 是一门相对较新的语言。但是 Python 的流行和使用一直呈指数级增长。
下一步:
我们给你带来了一个基于期权的交易策略,你可以在 Python 编程的帮助下计算收益图。点击此处访问 Iron Condor 期权交易策略,该策略结合了看涨看跌期权交易策略和看跌期权交易策略。这是交易者可以使用的最简单的策略之一,即使账户很小,也能让时间衰减对你有利。
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。T3】
风险价值简介
本文原载于 Quants 门户网站。T3】
大型机构每天处理大量进出其账户的货币。此外,他们有自己的资金,必须有效地分配,以最大限度地提高投资回报,但也希望对冲不利事件。有了一定的信心,实体(特别是商业机构)应该意识到他们的利润,也知道他们会损失多少。由于要求规定在需要时保留一定的金额,引入了应在繁荣时期建立的资本缓冲(SARB,2015 年),以及其他监管事项机构,增加了了解他们拥有多少资产以及他们面临的风险的需要。
近年来,大型商业银行的交易账户大幅增长,变得越来越多样化和复杂(Jorion,2001)。为了管理市场风险,主要的交易机构已经开发了大规模的风险测量模型。虽然方法可能有所不同,但所有这些模型都以非常详细的方式衡量和汇总了当前头寸的市场风险。
风险价值(VaR)为这些以及更多问题提供了全面的解决方案。风险价值模型通过确定投资组合的价值在给定时间内以给定概率因市场价格或利率的变化而下降多少来衡量市场风险。(亨德里克斯,1996 年)。在投资组合分配方面;VaR 只是一个标准差计算,它说明了投资组合的波动性(Butler,1999)。
确定风险值
谈到 VaR 数;人们在使用它进行推理时应该谨慎,因为它主要是由风险管理系统的设计者想要如何解释它来决定的(林斯迈尔&皮尔逊,2000)。获取风险值的三种方法是历史模拟、Delta 正态方法和蒙特卡罗模拟。
历史模拟
本质上,该方法涉及使用市场利率和价格的历史变化来构建潜在未来投资组合损益的分布,然后从该分布中读取风险值(Linsmeier & Pearson,2000 年,第 50 页)。可以使用历史方法,通过挖掘未经调整的实际历史回报数据库作为模拟回报的来源,并从中提取推断数字,这将捕获数据中实际存在的相关性、波动性尾部、肥度和回报偏斜度,从而避免需要参数化和估计数学模型(Pan & Duffie,1997)。
历史模拟的一个优点是固有地包含了所有事件,即撞车和其他罕见事件,因为这些事件的影响被纳入计算中,因为它利用了实际的历史回报。
Delta-正常接近
delta-normal 方法基于基础市场因素具有多元正态分布的假设。人们可以确定按市值计价的投资组合损益的分布,这也被假设为正态分布。一旦获得了可能的投资组合利润和损失的分布,使用正态分布的标准数学属性来确定将等于或超过 x %的时间的损失,即风险值。
蒙特卡洛模拟
蒙特卡洛模拟方法与历史模拟有许多相似之处。蒙特卡洛模拟允许风险经理使用风险因素回报的实际历史分布,而不是必须假设正常回报。大量随机生成的模拟使用风险经理选择的波动性和相关性估计及时向前运行(Linsmeier & Pearson,2000)。为此已经开发了各种算法和方法,但是大多数都需要大量的计算和编程技能。
测试风险值模型
单一投资组合没有单一的风险值,因为计算风险值的不同方法会产生不同的结果。那么,哪种方法是获得 VaR 的最佳方法呢?如果观察值是独立且同分布的,那么像 Kullback 差异或 Kolmogorov-Smirnov 检验这样的检验可以用来检验模型的有效性。由于管理者规定哪些因素对他们的投资组合有更大的影响,最佳选择将由风险管理者认为最重要的维度来决定。
Hendricks 进一步提到“风险值模型最重要的组成部分是衡量市场风险的时间长度和衡量市场风险的置信水平”(1996 年,第 40 页)。通过调整这些因素,管理者将能够获得更好的结果。
计算 VaR
博在他的《论风险价值》一书中提出了四种计算 VaR 数的方法:利用投资组合收益的分布;投资组合回报率;delta-normal 估价和 delta-gamma 方法(2001 年,第 4 页)。为了便于说明,我将只讨论前两种方法,并将后者留给读者去探索。
投资组合收益分布
获得 VaR 值就像解方程一样简单

其中 c 是我们的置信水平,而\(x)是反映投资组合价值变化的密度函数。\(x)c可以是任何函数,因此在我们的分析中,我们将假设正态分布有均值μ 和方差σ 。
举例:
我们想知道如果我们买了股票会损失多少。此外,我们希望对这个值有 95%的把握。假设χ交易,μ = 0.3 ,σ = 0.4 。
从正常表中,对于值χ获得 95%的确定性,其中χ` s z-得分等于 1.645。
转换方程式
因此我们有χ=σα+μ=1.645 * 0.633+0.3 = 1.341
接下来,我们来看看投资组合背景下的风险值。
投资组合收益率
假设当前投资组合价值 为ρ0并产生收益率ℜ 。设ρ0正态分布,均值 μ ,标准差 σ 。一个周期后,投资组合的价值将由ρ1 =ρ0(1+ℜ)给出,其中均值ρ0(1+μ),方差ρ0σ。设
为投资组合在一定置信水平下所能达到的最低值
风险值计算如下

如果出于某种原因我们选择平均值等于 0,那么

Jorion 提出了替代
(2001,第 110-113 页),我们可以将它代入我们的风险值计算,给出如下:


在哪里以及如何应用风险值
返回我们的银行场景;我们知道所有提到的要求都在巴塞尔协议中有规定。《巴塞尔二号协议》旨在利用适当的风险模型计算风险价值(VaR)来监督和鼓励明智的风险承担(Chang,Jimenez-Martins,McAleer,& Perez-Amaral,2001)。南非储备银行等监管机构利用风险值数据来评估一家机构的稳定性,并评估该机构的风险是否得到适当管理。
除了用于大型机构层面,风险值计算还应用于投资组合的构建和管理。更大的波动性是由一些基础变量的更大风险或对金融产品更敏感的产品设计引起的。在处理期权时尤其如此,因为它们的价值取决于某些潜在价格。经理可以使用风险值来评估她的风险敞口,并相应地调整风险值以满足她的投资需求。
结论
VaR 已经成为金融风险管理的一个重要组成部分(Jorion,2001)。要实现风险值,公司的所有头寸数据必须收集到一个集中的数据库中。一旦完成,必须通过汇总整个投资组合中各个工具的风险来计算整体风险。但是,确定使用哪种方法来获得这种风险值本身是一个不同的目标,因为计算的人必须知道将产生有意义的风险值的变量。
可用于计算风险值的三种方法是正态增量法、蒙特卡洛法和历史模拟法。上述方法可以单独用于获取风险值数据,但通常经理可以使用所有三种方法来更好地了解其业务动态,这提醒了经理不同的合规要求迫使他报告不同的风险值数据。
参考书目
- 巴特勒,C. (1999)。 掌握风险价值:理解和应用风险价值的逐步指南。 特罗布里奇,威尔特郡:皮特曼出版社。
- 张,c-l,希门尼斯-马丁斯,j-a,麦卡利尔,m .,&佩雷斯-阿马拉尔,T. (2001)。 巴塞尔协议下的风险管理:预测风险价值。
- 亨德里克斯博士(1996 年)。 利用历史数据评估风险价值。
- 约里安,P. (2001 年)。 风险价值:管理金融风险的新标杆。 纽约:麦格劳希尔。
- 林斯迈尔,T. J .,&皮尔森,N. D. (2000 年)。风险价值。金融分析师期刊,第 47-67 页。
- 潘,j .,&杜菲德(1997)。 风险价值概述。
- SARB。(未注明)。 南非实施巴塞尔协议 II 和巴塞尔协议 III。 检索 2015 年 6 月 23 日,https://www.resbank.co.zaSARB
- YieldCurve.com。(2003). 风险价值简介。
免责声明:这篇客座博文中提供的观点、意见和信息仅属于作者个人,并不代表 QuantInsti 的观点、意见和信息。本文中所做的任何陈述或共享的链接的准确性、完整性和有效性都不能得到保证。我们对任何错误、遗漏或陈述不承担任何责任。与侵犯知识产权相关的任何责任由他们承担。
Zipline Python:好处、安装、结构等
由普里扬卡·萨赫
简介
Python 已经成为金融交易中最受程序员欢迎的语言之一,因为它易于使用,用户友好,并且有足够多的科学库,如 Pandas、NumPy、PyAlgoTrade、Pybacktest 等等。
当交易频率为低/中时,Python 是自动交易的绝佳选择,即持续时间不少于几秒钟的交易。它有多个 APIs 库,可以链接起来,使它更优化,更便宜,并允许多种贸易想法的更大探索性发展。
正是由于这些原因,Python 有一个非常互动的用户在线社区,他们分享、再分享并批判性地评论彼此的工作或代码。最流行的基于网络的回溯测试系统之一是 QuantConnect 。
QuantConnect 利用 C#和 Python。它自夸提供了丰富的历史资料。QuantConnect 自 2015 年起支持与互动经纪商的实时交易。
Zipline 是一个用于交易应用的 Python 库。这是一个事件驱动的系统,支持回溯测试和实时交易。
在这篇文章中,我们将学习如何安装滑索,然后如何实施移动平均交叉策略,并计算 P&L,投资组合价值等。
本文分为以下四个部分:
- 滑索的好处
- 安装(如何在本地安装 Zipline)
- 结构(在 Python 中用 Zipline 编写代码的格式),
- 用 Python 中的 Zipline 编码移动平均交叉策略。
滑索的好处
- 易用性
- 由于移动平均和线性回归等许多常见统计数据可以从用户编写的算法中轻松访问,因此 Zipline“包含电池”。
- 历史数据的输入和性能统计的输出基于 Pandas 数据框架,以便很好地集成到现有 PyData 生态系统中
- 【matplotlib、scipy、statsmodels 和 sklearn 等统计和机器学习库支持最先进交易系统的开发、分析和可视化
安装
使用画中画
假设您已经拥有了所有必需的非 Python 依赖项,那么您可以通过用 pip 在 Python 中安装 Zipline
# code
pip install Zipline
使用康达
在 Python 中安装 Zipline 的另一种方法是通过 conda 包管理器,它是 Anaconda 的一部分,也可以通过 pip install conda 安装。
一旦 conda 设置完成,你就可以从 conda-forge 频道安装滑索:
#code
conda install -c conda-forge zipline
基本结构
Python 中的 Zipline 为代码提供了一种特殊的结构,其中包括定义几个函数来运行数据集上的算法,如下所述。
#code
from Zipline.api import order, record, symbol
from Zipline.algorithm import TradingAlgorithm
def initialize(context):
pass
def handle_data(context, data):
order(symbol('AAPL'), 10)
record(AAPL=data.current(symbol('AAPL'), 'price'))
algo_obj = TradingAlgorithm(initialize=initialize, handle_data=handle_data)
perf_manual = algo_obj.run(data)
因此,首先我们必须导入代码中需要的一些函数。每个滑索算法都包含两个你必须定义的函数:
*** initialize(上下文)和* handle_data(上下文,数据)**
在算法开始之前,Zipline 调用 initialize() 函数并传入一个上下文变量。Context 是一个全局变量,允许您存储从一个算法迭代到下一个算法迭代需要访问的变量。
算法初始化后,Zipline 为每个事件调用一次【handle _ data()函数。每次调用时,它都传递相同的上下文变量和一个名为 data 的事件帧,该事件帧包含当前的交易棒线,包括每只股票的开盘价、最高价、最低价和收盘价(OHLC)以及成交量。
算法中常用的所有函数都可以在 Zipline.api 模块中找到。这里我们使用 order(arg1,arg2 ),它接受两个参数:一个安全对象和一个数字,该数字指定您想要订购多少股票(如果是负数,order()将卖出/做空股票)。在本例中,我们希望在每次迭代中订购 10 股苹果股票。
现在,第二个方法 record()允许您在每次迭代中保存变量的值。您为它提供变量的名称以及变量本身。在算法运行完毕后,你可以把你记录的所有变量都记录下来,我们将学习如何去做。
要运行这个算法,你需要调用trading algorithm(),它使用两个参数:initialize function 和 handle_data。然后,调用 run 方法,使用数据作为运行算法的参数(数据是存储股票价格的 panda 数据帧)
run() 首先调用 initialize()函数,然后通过 handle 数据()流式传输每日的历史股价。在每次调用处理数据()之后,我们指示 Zipline 订购 10 只 AAPL 股票。
如何在 Python 中用 Zipline 编写移动平均线交叉策略
移动平均线
它是一种证券在一定时期内的简单平均值。
交叉
移动平均线交叉是交易者使用移动平均线的常用方法。当快速移动平均线(即短期移动平均线)穿过慢速移动平均线(即长期移动平均线)上方(被视为)或下方(被视为)时,就会发生交叉。****
现在我们将学习如何在 Python 中使用 Zipline 来实现这个策略。导入库并初始化算法中使用的变量。
代码分为 5 部分
- 初始化
- 初始化方法
- 句柄 _ 数据方法
- 策略逻辑
- 跑某事
初始化
#代码
**import pytz
from datetime import datetime
from Zipline.api import order, symbol, record, order_target
from Zipline.algorithm import TradingAlgorithm
from Zipline.utils.factory import load_bars_from_yahoo
import pyexcel
# Load data manually from Yahoo! finance
start = datetime(2011, 1, 1, 0, 0, 0, 0, pytz.utc).date()
end = datetime(2012,1,1,0,0,0,0, pytz.utc).date()
data = load_bars_from_yahoo(stocks=['SPY'], start=start,end=end)**
loadbarsfrom _ Yahoo()是获取股票和时间段的函数,您需要获取这些数据。这里我用的是 2011 年到 2012 年之间的间谍股,你可以根据你的情况来改变这个。**
初始化方法
**#code
def initialize(context):
context.security = symbol('SPY')**
现在我们将定义初始化函数,context.security 表示我们正在处理的股票,在我们的例子中是它的 SPY。
句柄 _ 数据方法
**#code
def handle_data(context, data):
MA1 = data[context.security].mavg(50)
MA2 = data[context.security].mavg(100)
date = str(data[context.security].datetime)[:10]
current_price = data[context.security].price
current_positions = context.portfolio.positions[symbol('SPY')].amount
cash = context.portfolio.cash
value = context.portfolio.portfolio_value
current_pnl = context.portfolio.pnl**
handle_data() 包含了我们想要做的所有操作,主要代码为我们的算法。我们需要计算不同窗口的移动平均值,Zipline 提供了一个内置函数【mavg(),它使用一个整数来定义窗口大小。****
另外,Zipline 会自动计算当前的价格、投资组合的 T2 价值等。我们可以只调用变量,在这个算法中,我已经计算了当前的头寸、价格、现金、投资组合价值和 PnL。**
策略逻辑
**#code (this will come under handle_data function only)
if (MA1 > MA2) and current_positions == 0:
number_of_shares = int(cash/current_price)
order(context.security, number_of_shares)
record(date=date,MA1 = MA1, MA2 = MA2, Price=
current_price,status="buy",shares=number_of_shares,PnL=current_pnl,cash=cash,value=value)
elif (MA1 < MA2) and current_positions != 0:
order_target(context.security, 0)
record(date=date,MA1 = MA1, MA2 = MA2, Price= current_price,status="sell",shares="--",PnL=current_pnl,cash=cash,value=value)
else:
record(date=date,MA1 = MA1, MA2 = MA2, Price= current_price,status="--",shares="--",PnL=current_pnl,cash=cash,value=value)**
现在,根据比较移动平均线的条件,下单买入或卖出的逻辑。
- 如果短均线大于长均线,并且您的当前持仓量为 0,那么您需要计算股票数量并下单
- 如果短期移动平均线小于长期移动平均线,并且您的 current_positions 不为 0,那么您需要卖出您当前持有的所有股票。
- 第三个条件是,如果什么都不满足,那么什么都不做,只记录需要保存的变量。
运行
为了运行这个算法,你需要下面的代码:
**#code
algo_obj = TradingAlgorithm(initialize=initialize,handle_data=handle_data)
perf_manual = algo_obj.run(data)
perf_manual[["MA1","MA2","Price"]].plot()**
您也可以使用 plot()方法绘制图形
战略图

使用滑索的屏幕快照

结论
我们希望你会发现 Python 中 zipline 的介绍和使用相同的实现策略是有用的。在我们的下一篇文章中,我们将向您展示如何使用 Zipline 导入和回测 CSV 格式的数据。对于使用 python 构建技术指标,这里有几个的例子。
下一步
学习使用来自谷歌的数据和 CSV 格式的 OHLC 数据在 Zipline 上导入和回溯测试。在我们的帖子'中计算回测结果,如 PnL、交易数量等,在 Zipline 中导入 CSV 数据以进行回测。
更新
我们注意到一些用户在从雅虎和谷歌金融平台下载市场数据时面临挑战。如果你正在寻找市场数据的替代来源,你可以使用 Quandl 来获得同样的信息。
免责声明:股票市场的所有投资和交易都有风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。
下载数据文件
Python 代码中的 Zipline
利用在线量化模型投资大型科技股
这个项目旨在分享一个关于如何在交易策略开发和改进中使用在线机器学习定量技术的例子。
与随后交叉验证的传统常规模型再培训相比,在线学习允许算法交易的更深入自动化。这是因为这种模型可以在实时交易中实时调整参数。
真正的生产策略远比项目中作为示例使用的策略复杂,包括更深层次的自动化和更广泛的参数。然而,合并的在线模型具有普遍适用性,可以应用于不同种类的交易策略,从被动投资到高频交易(HFT)。
本文是作者提交的最后一个项目,作为他在 QuantInsti 的算法交易管理课程( EPAT )的一部分。请务必查看我们的项目页面,看看我们的学生正在构建什么。
关于作者

Evgeny Tishkin 在算法交易和 HFT 领域拥有超过 10 年的丰富经验,曾在多家自营交易公司和对冲基金担任量化开发人员、首席软件架构师、量化分析师和首席技术官。
对于担任 CTO 的一家算法对冲基金,他从零开始创建了完整的低延迟多交易所算法交易基础设施和高频交易框架。
在 2019 年 XTX 市场全球预测挑战赛中,叶夫根尼在来自全球 100 个国家的 4000 多名定量研究人员中获得第二名。
Evgeny 拥有萨马拉国立航空航天大学的计算机科学硕士学位。此外,他还获得了莫斯科物理技术学院的“机器学习和数据分析”专业学位。
项目理念
这个项目背后的想法是创建一个量化的战略,以改善部门投资。
考虑的股票
我将以大型科技股为例,选择 FANGAM 股票(脸书、苹果、网飞、谷歌、亚马逊、微软)+ QQQ(纳斯达克 100 指数 ETF)
步伐
我执行以下步骤:
- 从 2005 年开始计算等额买入并持有投资。
- 每月计算等额再平衡投资组合。
- 尝试使用基于统计套利思想的智能进场和出场来提高夏普和卡尔曼比率:在线线性回归,在线主成分分析,卡尔曼滤波器。“在线”是指在我们计算预测的当天之前的回望期的一个逐日可再训练的模型。
- 尝试使用隐马尔可夫模型的市场机制过滤来改进前面步骤的结果
我这里省略交易成本,因为在低频交易中可以忽略不计。我从雅虎财经资源获取了 2005 年开始的数据,包括 2008-2009 年的金融危机。
使用的技术
我使用以下技术:
每月投资组合再平衡
这种再平衡改善了 Sharpe,但没有改善 Max drawdown 并使 Calmar 降低。在重新平衡时,我每个月都会将资金平均分配到每只股票上。
执行此程序的更有效方法是使用波动率和成对相关信息来衡量整个投资组合的风险值。这是一种基于现代投资组合理论的众所周知的方法,但这超出了本研究的范围。
在线回归
在线意味着我们每天都要训练模型,并从数据集中提取数据进行训练。线性回归采用线性方法来模拟目标变量和解释变量之间的关系。
在我们的例子中,我使用线性回归来寻找相关股票之间的统计线性传播的最佳系数。在应用这种方法之前,我确保我们投资组合中的所有股票彼此高度相关,皮尔逊系数超过 0.9。
基于日常训练的结果,我计算了当天目标的残差。使用残差将被进一步解释。它们被用来指示何时买入或卖出股票。
在线 PCA(主成分分析)
PCA 是一种基于矩阵的特征值和特征向量提取方差的正交非相关分量的方法。
它用于解决数据分析中的不同问题。我以本资源中描述的方式使用它进行因子或特征提取。
因此,使用主成分分析提取几个主成分,并用作近似目标价格的特征。
成分是初始投资组合股票价格的线性组合。使用这些提取的特征和在线线性回归来预测目标股票价格。然后我们计算残差。
卡尔曼滤波器
卡尔曼滤波器是统计学和控制理论中的一种众所周知的算法,它使用时间序列测量(在我们的例子中是股票价格)来产生对目标变量的更精确的估计。
我使用卡尔曼滤波器来评估解释目标(目标股票价格)变量购买“独立”变量(投资组合中的其他股票价格)的在线回归系数。
Ernie P. Chan 博士的《算法交易:获胜策略及其基本原理》一书中描述了一种类似的方法,但应用于统计套利。它非常类似于在线线性回归方法,并计算统计分布系数,但根本不使用回望期。
代替这个周期,卡尔曼滤波器由影响滤波器的“适应性”的“增量”参数来参数化。
隐马尔可夫模型
该模型基于马尔可夫过程或马尔可夫链,并假设存在另一个具有可观察变量(例如股票价格)的过程 Y,该过程依赖于具有隐藏状态(市场“制度”)的当前马尔可夫过程 X。马尔可夫链本身假设下一个状态的概率只取决于当前达到的状态。
期望最大化算法用于无监督提取每个状态的可观察变量(例如股票价格)的高斯分布参数和隐藏状态序列本身。
我认为市场状态(上升趋势、下降趋势、波动市场、拥挤等)是一种隐藏的市场状态,可以用一组参数分布来表征,这些参数分布具有通过优化确定的特定参数。我再次使用培训模型的在线变体。提取的状态可以用于过滤交易进入和退出。
方法学
在这些模型中,我使用股票价格的年度指数移动平均值的百分比差异作为特征和目标。对于回望期,我用了一年(252 个交易日)。
交易方法
我尝试使用基于统计套利技术的主动投资组合管理来降低投资组合的风险。我使用在线每日计算来确定股票相对于行业中其他类似股票的低估/高估状态。
然后我会用计算残差(target _ VALUE-predicted _ target _ VALUE)作为股票相对价值的指标。我会在当地的低点买入股票,在当地的高点卖出剩余的股票。使用上述模型计算残差。
因此,所有模型都显示出夏普比率和最大提款的显著改善,这使得使用它们的交易在所承担的风险方面更具吸引力。但是卡尔曼比降低了。我试图用模型出口过滤来改善它。
我试图通过适应性市场机制检测来增加潜在盈利头寸的时间。当我们处于持有多头头寸的有利状态时,我们会跳过剩余“高估”状态的退出。
作为特征,我们将 QQQ 作为行业的基准指标,并将 VIX 添加到数据集中。QQQ 是纳斯达克 100 ETF,跟踪在纳斯达克证券交易所上市的 100 家最大的非金融公司。VIX 是一个实时市场指数,代表市场对未来 30 天 S&P500 指数(作为市场基准)波动性的预期。
我们将使用它们的增量,并将远期目标(也是未来 30 天价格的价格增量)添加到数据集,允许模型提取考虑目标的状态!这是一个诡计。
在目标变量大于零的在线隐藏状态的情况下,我们跳过退出,继续持有多头头寸,直到状态变得不利。
结果
结果,承担的风险更高,夏普和最大 DD 变得更差,仍然高于买入并持有的基线。重要的是,钙离子比也增加并超过了基线。
你可以看到下面的战略对照表和图表。


摘要
因此,这个项目的主要收获和经验是:
- 股票相对定价可以用于更有效的进入和退出价格点的选择。
- 对于相对价格,我们可以采用其他相关工具价格的价格,例如来自同一行业股票的价格,并将它们作为输入输入到一些定量模型中,以计算具体股票的公允价格。
- 公允价格的残差是股票高估/低估状态的合适度量。
- 在线机器学习有助于建立自动化实时定价模型。
结论
就总利润而言,所采用的方法过于简单,无法战胜市场(买入并持有策略),因为它只使用股票的收盘价格。
然而,我们通过使用由在线相对定价技术决定的多重进场和出场,成功地克服了买入并持有策略的风险。
如果你想学习算法交易的各个方面,那就去看看算法交易(EPAT) 的高管课程。该课程包括各种培训模块,让你具备在算法交易中建立一个有前途的职业生涯所需的技能。
文件在下载
- data_bigtech - Excel 文件
- epat _ project _ evgeny _ tish kin-Python 笔记本
免责声明:就我们学生所知,本项目中的信息是真实和完整的。学生或 QuantInsti 不保证提供所有推荐。学生和 QuantInsti 否认与这些信息的使用有关的任何责任。本项目中提供的所有内容仅供参考,我们不保证通过使用该指南您将获得一定的利润。
如何在投行找到工作?
从一开始就是一份高薪工作,成为一名投资银行家是任何具有金融、商业或工程背景的学生的梦想。如果你希望在这个领域开始你的职业生涯,有一些基本的东西,比如对数学、数字和分析系统的热爱,以及更多我们将在这篇文章中发现的东西。
本文涵盖:
- 什么是投资银行?
- 投资银行家是做什么的?
- 投资银行的工作
- 在投资银行工作的利弊
- 获得投资银行工作的资格
- 成为投资银行家的技能
- 如何在投行找到工作?
什么是投资银行?
众所周知,投资银行是一种金融中介,提供与金融交易相关的各种服务。这些服务包括承销、促进并购(M&A)、销售和交易等。投资银行不是接受公众存款的银行。他们指导投资者并向公司或组织提供资本投资。此外,他们提供投资服务,为投资者提供利益。
投资银行不同于商业银行,因为商业银行支持大公司和企业的一些活动,如开立支票或储蓄账户、借款、获得信贷服务等。
让我们继续前进,找出投资银行家的角色。
投资银行家是做什么的?
一个刚入门的投资银行家,通常会发现自己作为一名应届毕业生身兼数职。喜欢挑战并喜欢在过程中寻找解决方案的人可以立志成为一名投资银行家。
一般来说,投资银行家:
- 就财务决策向客户提供建议
- 分析公司在运营和财务方面的表现
- 协调操作流程
- 培训或监督初级银行家或团队成员
- 对证券进行估价
- 帮助客户重组债务
现在,更具体地说,让我们找出投资银行的工作。
投资银行的工作
投资银行家的职业生涯从下到上发展相当顺利,非常简单易懂。在投资银行,从初级到高级的具体工作是:
- 分析师
- 联想
- 副总裁
- 常务董事
分析师
投资银行的任何新生都是从分析师的角色开始的,也被称为投资银行分析师。他们是负责大多数任务的人,这些任务有助于他们获得该领域所需的经验。
分析师处于初级水平,他们每天的主要任务是负责分析、演示和管理。投资分析师是那些找到自己的位置并成为特定领域专家的人。
对于投资分析师的职位,你基本上需要金融或工商管理学士学位。此外,会计、统计、数学和经济学专业的新生或毕业生成为分析师也很常见。在这个职位之后,投资分析师通常会晋升到高级投资分析师或投资组合经理的职位。接下来是首席投资官(CIO)。投资分析师职位后的平均基本工资在 126000 美元至 174000 美元之间。
根据 glassdoor 的数据,投资分析师的平均基本工资为 75815 美元。
关联
助理高于分析师,并与他们密切合作。助理主要检查分析师的工作,并给他们分配任务。员工对分析师的任务进行深入审查,并检查模型、输入和输出,以确定数字是否合理。
除了一些已经被提升的分析师之外,合伙人也是直接招聘的。如果助理在这个职位上呆了三年半,他/她将被提升到副总裁级别。但是,如果没有副总裁级别的要求,助理也可能需要超过三年半的时间才能得到提升。
要成为投资助理,你需要一个学士学位,在某些情况下,还需要一个投资分析师所需的硕士学位。根据 glassdoor 的数据,美国投资助理的平均基本工资是 72,002 美元。
副总裁&常务董事(VP&MD)
副总裁和总经理属于高级管理层或高级银行家的范畴。他们在确保以详细的方式处理行业状况方面发挥着至关重要的作用。它们有助于预测投资领域的交易。
高级银行家达到这一阶段的背景包括从投资银行到公司行政管理。他们主要是与客户建立关系并获得交易。此外,他们也是发现公司资本需求以及战略讨论需求的人。
副总裁和总经理只有在担任投资助理后才能获得晋升。副总裁是在担任投资助理三年半后任命的,而总经理是在大约十年后任命的。
副总裁和总经理的年薪高达 114000 美元。
接下来,你将探索在投资银行工作的利弊。
在投资银行工作的利与弊
赞成的意见
- 丰厚的补偿
- 诱人的奖金
- 生活水平的提高
- 良好的行业、市场等专业知识。
- 快速晋升和领导角色
骗局
- 高度紧张
- 长时间的工作
- 这项工作风险很大,因为它依赖于资本市场
- 取决于商业情绪和投资者的看法
- 工作和休闲之间没有很好的平衡
现在,让我们找出在投资银行找到工作的资格。
获得投资银行工作的资格
为了在投资银行找到一份工作,任何对数学和分析系统充满热情的人都可以立志成为一名投资银行家。
由于入门级别的投资银行家是从 B.Com 大学或公认大学的学士学位等本科课程中聘用的,因此不强制要求他们拥有特殊课程的学位。
不过,MBA(金融)或商业背景有助于开启你的投资银行职业生涯。
在以下科目中,一些作为投资银行背景的文凭和认证课程很受欢迎:
- 财务控制
- 财务分析
- 股票研究
- 投资组合管理和安全性分析
- 银行和金融
- CFA 或特许金融分析师
在上述所有科目中,CFA 是能够在顶级投资银行公司获得高级职位的唯一资格。
接下来,我们将看到成为投资银行家所需的技能。
成为投资银行家的技能
因此,如果你考虑在投资银行找份工作,是因为你在数字领域的优势,这不是唯一可以依赖的技能/优势。
虽然“数量”这个词表明数字在这份工作中扮演着重要的角色,但是你还需要一些其他的技能来获得成功。
你必须具备的一些一般品质/特质是:
- 能够在快节奏的环境中茁壮成长
- 雄心勃勃
- 在实现目标的同时,保持努力工作的意愿
- 愿意长时间工作
- 良好的职业道德
- 竞争性
- 优秀的写作和沟通技巧
- 知名大学的 MBA
- 毫无疑问,对数字的信心是一种你不应该低估的技能
- 拥有金融知识,并对每天的收益充满雄心
- 优秀的团队领导技能
为了在投资银行谋得一份工作,没有什么特别的或特殊的研究是你必须投入时间和精力的。如果你对一个需要数学和分析理解的领域感兴趣,你就在正确的轨道上。
接下来,让我们讨论一下在投资银行找份工作。
如何在投行找到工作?
投资银行是为数不多的欢迎 MBA 背景的应届毕业生的领域之一,而且薪水非常高。对于这样一份利润丰厚的工作,你必须愿意在这条职业道路上接受挑战。
此外,要想得到投行的工作,以下步骤很重要:
- 找出技能上的差距
- 列出职业机会
- 建立关系网和准备面试
- 专业发展
找出技能差距
为了找出技能上的差距,你需要看看你是否错过了一些个人技能,即使你非常擅长数学、金融或经济学。如果你需要开发同样的东西,认真对待它并在它的基础上构建是非常重要的。
您可以从在线提供的课程中受益,如金融市场中的机器学习和深度学习以及使用 Python 的自动交易,以获得更多专业知识。
列出职业机会
当你渴望成为一名投资银行家时,列出职业机会是另一个重要的步骤。以下是你可以申请工作的顶级投资银行:
建立关系网和准备面试
强烈建议你从现有的投资银行家那里获得专业帮助,或者准备好面试问题。对于这一点,网络可以真正帮助你。通过使用 LinkedIn 等平台,你可以通过展示你的技能和才华来帮助自己获得面试机会。获得几次面试的经验也能帮助你为更好的机会做好准备。
职业发展
最后但并非最不重要的是职业发展,这意味着即使你有了一份可以依赖的工作,也要时刻保持自我更新。跟上新的机遇,找到在职业上提升自己的方法,这将有助于你提升自己的能力。此外,你将能够为你工作的公司做出杰出的贡献。
结论
投资银行家无疑是一份高薪工作,有很多好处。尽管如此,当你渴望成为投资银行的一员时,也有许多与之相关的承诺。作为一名投资银行家,你需要成为一个专注而雄心勃勃的自己,拥有数学和分析头脑。从一开始,这个领域就为你提供了无限的成长和成功的机会,如果你做得对的话。
如果你正在寻找一份需要你在历史数据分析的帮助下发现风险影响的工作,那么风险分析师的角色可能适合你。
免责声明:本文中提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。
Python 中的铁蝴蝶期权策略
原文:https://blog.quantinsti.com/iron-butterfly-options-trading-strategy/

赚钱的方式有很多种,期权为交易者提供了许多不可复制的独特方式,从而为他们提供了便利。同样,在各种各样的期权中,并不是所有的都是高风险的,都有助于限制重大损失,比如铁蝴蝶期权策略,它限制了交易者的输赢金额。
铁蝴蝶期权交易策略是一种期权交易策略。它是蝴蝶扩散选项的一部分。同样,这种策略也是多头价差和空头价差的组合。
因为它是一种有限风险和有限利润的交易策略,包括使用四种不同的选项;适合专业交易者。这就像同时运行卖空交易和卖空交易,两者的价差在峰值处汇合。由于它是短期利差的组合,因此可以建立净信贷。
主要在基础资产波动性较低时使用,即使价格在特定时间有轻微波动,它也增加了赚取较小有限利润的可能性。人们不得不经常支付平仓,因为所有的期权在这个价差中失效的可能性很低。
这种交易有可能带有方向性的偏见。如果罢工 B 高于股价,这将被视为一个看涨的交易。如果罢工 B 低于股价,这将是一个看跌交易。
构造:
-
买 1 低 OTM 放一(牛)
-
卖出 1 个中型自动柜员机卖出期权(多头)
-
卖出 1 个中间 ATM 看涨期权 B(空头)
-
买 1 更高的 OTM 呼叫 C(熊)
-
执行价格是等距的
-
所有选项都有相同的到期月份
-
这导致了交易的净信用
该策略在理想情况下应该是这样的:

收益
Max。利润:潜在利润等于收到的净信贷,因此是有限的。当基础期权到期时的价格等于买入期权和卖出期权的执行价格时,所有期权都将毫无价值地到期。结果,期权交易员将进入交易时收到的全部净信贷作为利润。
Max。损失:这里的最大损失是看涨期权和看跌期权的执行价格之间的差额,不包括收到的净溢价。风险发生在高峰期,并且仅限于此。当价格出现以下情况时,会发生有限的损失:
- 跌破买入看跌期权的下限,或
- 上涨/等于买入看涨期权的较高执行价
盈亏平衡点
盈亏平衡点上限=卖空看涨期权的执行价格+收到的净溢价下限=卖空看跌期权的执行价格-收到的净溢价
实施战略
在这个例子中,我将使用 HDFC(股票代码:HDFC)期权。假设,HDFC 在 2018 年 3 月 1 日以 1860 印度卢比交易,期权在 2018 年 3 月 28 日到期。
- 现货价格:1860
- 看涨期权执行价:1880 英镑(溢价:16.15 英镑)-买入
- 空头看涨期权执行价:1860(溢价:23.8) -卖出
- 看跌期权执行价:1840(溢价:17.00) -卖出
- 看跌期权执行价:1860 英镑(溢价:25.50 英镑)-买入
这个策略的 Python 代码如下:
导入库
import numpy as np
import matplotlib.pyplot as plt
import seaborn
from tabulate import tabulate
seaborn.set(style='darkgrid')
电话支付
def call_payoff(sT, strike_price, premium):
return np.where(sT > strike_price, sT - strike_price, 0)-premium
# HDFC Spot Price
s0 = 1860
# Long Call
strike_price_long_call = 1880
premium_long_call = 16.15
# Short Call
strike_price_short_call = 1860
premium_short_call = 23.8
# Range of call option at expiry
sT = np.arange(1800,1920,10)
长期买入回报
long_call_payoff = call_payoff(sT, strike_price_long_call, premium_long_call )
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT, long_call_payoff, color='g')
ax.set_title('LONG 1880 Strike Call')
plt.xlabel('Stock Price (sT)')
plt.ylabel('Profit & Loss')
plt.show()
短期买入回报
short_call_payoff = call_payoff(sT, strike_price_short_call, premium_short_call )*-1.0
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT, short_call_payoff, color='r')
ax.set_title('Short 1860 Strike Call')
plt.xlabel('Stock Price (sT)')
plt.ylabel('Profit & Loss')
plt.show()
放收益
def put_payoff(sT, strike_price, premium):
return np.where(sT < strike_price, strike_price - sT, 0) - premium
# HDFC Spot Price
s0 = 1860
# Long Put
strike_price_long_put =1840
premium_long_put = 17
# Short Put
strike_price_short_put = 1860
premium_short_put = 25.5
# Range of put option at expiry
sT = np.arange(1800,1920,10)
多头平仓
long_put_payoff = put_payoff(sT, strike_price_long_put, premium_long_put)
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT, long_put_payoff, color ='g')
ax.set_title('Long 1840 Strike Put')
plt.xlabel('Stock Price (sT)')
plt.ylabel('Profit & Loss')
plt.show()
看跌回报
short_put_payoff = put_payoff(sT, strike_price_short_put, premium_short_put)*-1.0
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT, short_put_payoff, color ='r')
ax.set_title('Short 1860 Strike Put')
plt.xlabel('Stock Price (sT)')
plt.ylabel('Profit & Loss')
plt.show()
铁蝶心悦
Iron_Butterfly_payoff = long_call_payoff + short_call_payoff + long_put_payoff + short_put_payoff
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT, Iron_Butterfly_payoff, color ='b')
ax.set_title('Iron Butterfly Spread')
plt.xlabel('Stock Price (sT)')
plt.ylabel('Profit & Loss')
plt.show()

profit = max (Iron_Butterfly_payoff)
loss = min (Iron_Butterfly_payoff)
print ("Max Profit %.2f" %profit)
print ("Min Loss %.2f" %loss)
Max Profit 16.15
Min Loss -3.85
fig, ax = plt.subplots(figsize=(10,5))
ax.spines['bottom'].set_position('zero')
ax.plot(sT, Iron_Butterfly_payoff, color ='b', label ='Iron Butterfly Spread')
ax.plot(sT, long_call_payoff,'--', color ='g', label = 'Long Call')
ax.plot(sT, short_put_payoff,'--', color ='r', label = 'Short Call')
ax.plot(sT, long_put_payoff,'--', color ='g',label = 'Long Put')
ax.plot(sT, short_put_payoff,'--', color ='r',label = 'Short Put')
plt.legend()
plt.xlabel('Stock Price (sT)')
plt.ylabel('Profit & Loss')
plt.show()
最终的收益图应该是这样的:

平仓发生在中间执行价和四个独立头寸的上限或下限之间的某个位置,导致利润最大化。由于大多数铁蝴蝶是用相当窄的价差创造出来的,因此遭受损失的几率相应地更高。铁蝴蝶旨在为投资者提供稳定的收入,同时限制他们的风险。通常只适合有经验的期权交易者。
所有交易者应小心沟通,并将该策略的开始和结束描述为“净借方的开始”或“净贷方的结束”。
“铁蝴蝶”的范围更窄,获得了更多的溢价卖出期权,而且由于风险回报更高,它与“铁秃鹰”相比有更好的风险回报比。因此,铁蝴蝶可以在更广泛的市场中上演,既有较低的波动性,也有较高的波动性。
一些相关术语
多头看涨蝴蝶 : 在该策略中,所有看涨期权的到期日相同,成份股各执行价格之间的距离相同。
反向铁蝶:铁蝶的反向策略一般在 IV 预计增加时使用。
翼展:翼展科,其成员以飞行生物命名。
您可以在 Quantra 上报名参加这个免费在线 python 课程,了解基本术语和概念,这将有助于您的以旧换新选择。
下一步
在我们的下一篇文章中,我们将使用 excel 模型交易美元/印度卢比货币对的期权头寸。这里的执行价格是以卢比对美元的汇率计算的。我们持有该标的(美元/印度卢比对)的不同期权头寸(看涨期权和看跌期权)。点击这里立即阅读。
免责声明:股票市场的所有投资和交易都有风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。
下载数据文件
- 铁蝴蝶期权交易策略——Python 代码
交易选项:Python 中的铁秃鹰交易策略
原文:https://blog.quantinsti.com/iron-condor-options-trading-strategy/

由尼廷·塔帕尔
简介
我一直在试图涵盖一些最简单的期权策略,包括期权扼杀策略和看涨期权价差策略,这些策略对于期权新手来说很容易实施。如果你是期权交易的新手,那么你可以查看 Quantra 上的虚拟期权交易免费课程。这一次我将涵盖铁秃鹰交易策略。
任何进行期权交易的人都很清楚,他们一直在和时间衰减做斗争,尤其是当你是买方的时候。许多正在实施的策略都是为了让时间因素为他们服务而设计的,而不是相反。“铁秃鹰”就是这样一种策略,它可以让时间衰减对你有利。
什么是铁鹰交易策略?
铁鹰策略是最简单的策略之一,即使是小账户交易者也可以采用。对于熟悉其他基本期权交易策略的人来说,铁神鹰策略基本上是牛看跌价差和熊看涨价差期权交易策略的组合。
对于不了解上述策略的人来说,另一个更简单的解释是,Iron Condor strategy 是一种四足交易,它以卖出相同基础证券和到期日的价外看跌期权和价外看涨期权开始。交易者希望股票价格在到期时保持在这些位置之间。但做空期权可能涉及很多风险,任何不利的情况都可能导致巨大的损失。因此,为了保护这种风险,交易者进一步买入价外看跌期权,这四种期权统称为铁鹰策略。
重要的是要明白,铁秃鹰战略是一个有限的风险策略,在稳定的市场,低波动性,可以帮助交易者赚取有限的利润。
策略特征
期权的价格:
卖出 1 份 OTM 看跌期权(较高的执行价格)卖出 1 份 OTM 看涨期权(较低的执行价格)买入 1 份 OTM 看跌期权(较低的执行价格)买入 1 份 OTM 看涨期权(较高的执行价格)
最大利润:收到的净保费
最大损失:
看涨期权的执行价格-看跌期权的执行价格-收到的净溢价或看跌期权的执行价格-看跌期权的执行价格-收到的净溢价,以较高者为准
盈亏平衡:
上侧:卖空看涨期权的执行价格+收到的净溢价下侧:卖空看跌期权的执行价格-收到的净溢价
这个策略是如何运作的?
让我们假设一只股票 ABC 的交易价格是 100 印度卢比,为了执行一个铁鹰交易策略,我们将:卖出 80 印度卢比 2.5 的执行卖出 120 印度卢比 2.5 的执行买入
希望价格保持在我们预定的这两个执行价格范围内,这样我们就能获利。但是,由于无限损失的风险,我们将通过以下方式保护我们的头寸:买入 60 印度卢比看跌期权,买入 140 印度卢比看跌期权

这四个位置将共同构成我们的铁鹰:

如何实施这一战略?
让我们看看如何在真实的市场场景中执行这一策略。
为此,我将选择 Yes Bank Limited(股票代号:Yes Bank)的期权,到期日为 2018 年 3 月 28 日,当前股价为 323.40 印度卢比
过去 1 个月的股价走势(来源——谷歌财经)

以下是 YESBANK 截止日期为 2018 年 3 月 28 日的期权链。

我将持有以下头寸:以印度卢比 3.30 卖出 350 看涨期权,以印度卢比 3.40 卖出 300 看跌期权,以印度卢比 1.30 买入 370 看涨期权,以印度卢比 1.20 买入 280 看跌期权


资料来源:nseindia.com
最大利润:
以防股票反弹不多,停留在我的预定头寸之间,即价格在 300 印度卢比和 350 印度卢比之间。我的收益如下:

因此,我们通过出售期权在最初的头寸上赚了钱,但在我们为了保护而预订的头寸上却亏损了。总收益是 4.2 个点。
最大损失:
让我们假设有一个重大的波动或市场颠簸,由于一个不确定的事件,使股票上升到印度卢比 390。所以这意味着我们的多头和空头头寸是亏本的。这是这种情况下的回报:

我们在短推时赚了 3.4 卢比,在长推时损失了 1.2 卢比。短期看涨期权价值 40 点,因此我们亏损了 36.7 印度卢比(3.30-40),长期看涨期权价值 20 点,使我们亏损了 18.7 印度卢比(20-1.30)。总计我们损失了 15.8 卢比。记住,我们买入的多头看涨期权帮助我们将总交易的损失最小化。
另一个需要注意的重要事情是,无论股票涨跌,这都是我们在这笔交易中的最大损失。
现在让我们看看一系列潜在价格的收益:

我们现在将使用 Python 代码向您展示收益汇总:
导入库
import numpy as np
import matplotlib.pyplot as plt
import seaborn
电话支付
def call_payoff(sT, strike_price, premium):
return np.where(sT > strike_price, sT - strike_price, 0) – premium
# Stock price
spot_price = 323.40
# Long call
strike_price_long_call = 370
premium_long_call = 1.30
# Short call
strike_price_short_call = 350
premium_short_call = 3.30
# Stock price range at expiration of the call
sT = np.arange(0.5*spot_price,2*spot_price,1)
payoff_long_call = call_payoff(sT, strike_price_long_call, premium_long_call)
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT,payoff_long_call,label='Long 370 Strike Call',color='g')
plt.xlabel('Stock Price')
plt.ylabel('Profit and loss')
plt.legend()
#ax.spines['top'].set_visible(False) # Top border removed
#ax.spines['right'].set_visible(False) # Right border removed
#ax.tick_params(top=False, right=False) # Removes the tick-marks on the RHS
plt.grid()
plt.show()

payoff_short_call = call_payoff(sT, strike_price_short_call, premium_short_call) * -1.0
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT,payoff_short_call,label='Short 350 Strike Call',color='r')
plt.xlabel('Stock Price')
plt.ylabel('Profit and loss')
plt.legend()
plt.grid()
plt.show()

放收益
def put_payoff(sT, strike_price, premium):
return np.where(sT < strike_price, strike_price - sT, 0) – premium
# Stock price
spot_price = 323.40
# Long put
strike_price_long_put = 280
premium_long_put = 1.20
# Short put
strike_price_short_put = 300
premium_short_put = 3.40
# Stock price range at expiration of the put
sT = np.arange(0.5*spot_price,2*spot_price,1)
payoff_long_put = put_payoff(sT, strike_price_long_put, premium_long_put)
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT,payoff_long_put,label='Long 280 Strike Put',color='y')
plt.xlabel('Stock Price')
plt.ylabel('Profit and loss')
plt.legend()
plt.grid()
plt.show()

payoff_short_put = put_payoff(sT, strike_price_short_put, premium_short_put) * -1.0
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT,payoff_short_put,label='Short 300 Strike Put',color='m')
plt.xlabel('Stock Price')
plt.ylabel('Profit and loss')
plt.legend()
plt.grid()
plt.show()

铁血秃鹰战略成效
payoff = payoff_long_call + payoff_short_call + payoff_long_put + payoff_short_put
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT,payoff_long_call,'--',label='Long 370 Strike Call',color='g')
ax.plot(sT,payoff_short_call,'--',label='Short 350 Strike Call',color='r')
ax.plot(sT,payoff_long_put,'--',label='Long 280 Strike Put',color='y')
ax.plot(sT,payoff_short_put,'--',label='Short 300 Strike Put',color='m')
ax.plot(sT,payoff,label='Iron Condor')
plt.xlabel('Stock Price')
plt.ylabel('Profit and loss')
plt.legend()
plt.grid()
plt.show()

下一步
使用 Black Scholes 期权定价模型学习期权定价的建模,并为各种期权的组合绘制相同的图。您可以在该模型中放入任意数量的看涨和/或看跌期权,并使用内置宏(名为“BS”)来计算每个期权的基于 BS 模型的期权定价。
更新:我们注意到一些用户在从雅虎和谷歌金融平台下载市场数据时面临挑战。如果你正在寻找市场数据的替代来源,你可以使用 Quandl 来获得同样的信息。
免责声明:股票市场的所有投资和交易都有风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。
下载 Python 代码
- 铁秃鹰交易策略 Python 代码文件
Python Itertools 教程:安装、类型、示例
以重香重香
Python itertools 非常简单,是用 Python 实现迭代器的最好和最优雅的解决方案之一。但是迭代器是什么呢?
迭代器是一个可以被迭代的对象,它将返回数据,一次返回一个元素。它允许我们遍历一个集合的所有元素,而不管它的具体实现。
虽然迭代器是列出列表内容的好方法,但有时您会想,我们是否可以将所有的复杂性隐藏在一行代码中。例如,当我们比较两个不同的数据帧时,我们不想担心元素的数量。这就是 Python itertools 模块的亮点。
让我们浏览一下这个博客的大纲,然后直接进入主题:
好吧!我们来了解一下使用 itertools 的前提条件是什么。
从技术上讲,在 Python 中,迭代器是实现迭代器协议的对象,迭代器协议又由 next()和 iter()方法组成。
- iter()方法,该方法返回迭代器对象本身,在使用 for 和 in 关键字时使用。
- next()方法返回下一个值。一旦跟踪了所有对象,它还会返回 StopIteration 错误。
迭代器主要用在 for 循环中。你可以在 Python 手册中详细了解它们。
您可以使用以下命令
在 Python 代码中导入 itertools
Python 中的翡翠蜥蜴期权交易策略
原文:https://blog.quantinsti.com/jade-lizard-options-trading-strategy-python/
Newer technologies, better software, improvements in connectivity, etc. happening at a tremendous pace has led to a boom in the way knowledge is shared and accessed. Trading has always maintained the front seat position for primary advantage and the same goes for trading strategies. Every trading strategy can't give you the same outcome, and it is also true that neither can assure consistent returns for longer durations. To stay up in the game, one has to keep learning, evolving and making their strategy even better. Options were created to help manage the risk better. Options trading strategies are widely practised today and produce various results under various conditions. Some of the well-known strategies are:
我们都读过像铁鹰、蝴蝶扩散、熊叫梯等许多交易策略。但是,在我看来,有一种策略在高隐含波动率期间能提供良好的结果,那就是翡翠蜥蜴。但是在我们去翡翠蜥蜴之前,让我们先了解一下蜥蜴在交易中的意义。
交易中的蜥蜴是什么?
蜥蜴是一种期权交易策略,交易者通过这种策略从交易中获利
- 在跨骑和勒死的情况下,蜥蜴降低了上行风险
- 当底层向走向停留或漂移时,它们是最有益的
- 高利润产生于高 IV 和非熊市环境
翡翠蜥蜴期权交易策略
这是一种中性或看涨的定制期权交易策略,具有特殊性。
- 它包括卖空交易和卖空交易差价
- 由于它由一个短期看涨期权价差组成,因此它略微看涨
- 它没有上行风险
- 它利用了看跌期权和看涨期权溢价的高波动性
- 执行的方式是:由完全信用产生的价值(从三叉持仓) > 之间的差额称为持仓执行价格
什么时候练翡翠蜥蜴?
如果有高 IV 和/或如果股票最近下跌,即股票超卖,通常实行 Jade Lizard 交易策略。
翡翠蜥蜴交易策略的组成部分
它包括:
- 使用看涨期权的空头垂直价差,以及
- 以低于看涨期权执行价格的执行价格卖出的看跌期权
在 Jade Lizard 期权交易策略中,我们卖出一个看跌期权和卖出一个看跌期权信用利差(确保收到的总信用大于利差的宽度),前提是标的不应大幅波动。在这里,收取的溢价大于看涨期权价差的宽度翡翠蜥蜴看起来像这样: 
翡翠蜥蜴策略的设置
利润:利润这里是从期初交易 Max 中收到的信用。获利:标的在价差的看跌和做空之间到期。损失:如果信用小于看涨期权价差的宽度,并且有向上的移动步骤:
- 步骤 1 -以一个执行价格购买一个看涨期权
- 步骤 2 -以低于步骤 1 中买入的看涨期权的执行价格卖出看涨期权
- 第三步-以低于上述两个看涨期权的执行价卖出一个 OTM 看跌期权
<u>Note</u>: In case OTM Puts are bought, the Lizard will face the opposite direction
简而言之:翡翠蜥蜴=卖出扼死+买入 OTM 看涨期权在这里,交易的信用大于看涨期权的宽度
**Caution**:
Remember! Don’t confuse Jade Lizard with Big Lizard Strategy where,
Big Lizard = Sell Straddle + Buy OTM call
做出的假设:
- 丰富度:裸卖出交易>裸买入交易
- 丰富度(溢价):做空买入价差>做空卖出价差
大蜥蜴交易策略和翡翠蜥蜴交易策略的区别
- 大蜥蜴的交易策略和翡翠蜥蜴非常相似,是跨骑和绞杀
- 唯一的区别是,为了降低风险,他们增加了一个期权头寸
- 它们是密切相关的战略
- 在这两种策略中,具有相同到期月份的 3 种不同期权头寸被组合在一起
- 实践这两种策略的目的是最大化回报和最小化风险
大蜥蜴=卖出多空+买入 OTM 看涨
翡翠蜥蜴=卖扼死+买 OTM 召唤
翡翠蜥蜴策略示例
考虑一个 ABC 公司的例子。Jade Lizard 的设置如下:

因此,净信贷= 1 OTM 看跌期权+ 1 OTM 看涨期权- 1 OTM 看涨期权净信贷= 10+20-15 净信贷= 15 总的来说,我们收到的净信贷为 15 印度卢比盈亏平衡=做空看跌期权-收到的信贷盈亏平衡= 575-15 盈亏平衡= 560 因此,在我们的情况下,盈亏平衡将比当前现货价格下降 5.47%。
***Note:***
*- Strike Selection and impact of Volatility*
*- Short put profit should be around 70% and the call spread profit around 30%*
*- If the call spread is ITM, we have to buy it back*
实施翡翠蜥蜴期权战略
在这个例子中,我将使用 Tech Mahindra(股票代号:TechM)期权。
过去 1 个月的股价变动(来源——谷歌财经)科技公司 Mahindra Ltd .的股价出现了相当大的变动,过去 1 个月最高为 702,最低为 652.95。为了这个例子的目的;我将卖出 1 美元的看跌期权,卖出 1 美元的看涨期权,买入 1 美元的看涨期权。以下是 TechM 的期权链,截止日期为 2018 年 5 月 31 日,来自 nseindia.com

理想情况下,以下应该是这个翡翠蜥蜴交易策略的收益。
用 Python 计算翡翠蜥蜴期权策略收益
现在,让我用 Python 编程代码带你看一下收益图。
导入库
import numpy as np
import matplotlib.pyplot as plt
电话支付
def call_payoff(sT, strike_price, premium):
return np.where(sT > strike_price, sT - strike_price, 0) - premium
# TECHM Stock price
spot_price = 688
# Long call
strike_price_long_call = 750
premium_long_call = 4.30
# Short call
strike_price_short_call = 730
premium_short_call = 6.80
# Stock price range at expiration of the call
sT = np.arange(0.9*spot_price,1.1*spot_price,1)
payoff_long_call = call_payoff(sT, strike_price_long_call, premium_long_call)
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT,payoff_long_call,label='Long Strike Call',color='g')
plt.xlabel('Stock Price')
plt.ylabel('Profit and Loss')
plt.legend()
plt.show()

payoff_short_call = call_payoff(sT, strike_price_short_call, premium_short_call) * -1.0
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT,payoff_short_call,label='Short Strike Call',color='r')
plt.xlabel('Stock Price')
plt.ylabel('Profit and Loss')
plt.legend()
plt.show()

放收益
def put_payoff(sT, strike_price, premium):
return np.where(sT < strike_price, strike_price - sT, 0) - premium
# stock price
spot_price = 688
# Short put
strike_price_short_put = 660
premium_short_put = 7.85
# Stock price range at expiration of the put
sT = np.arange(0.9*spot_price,1.1*spot_price,1)
payoff_short_put = put_payoff(sT, strike_price_short_put, premium_short_put) * -1.0
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT,payoff_short_put,label='Short Strike Put',color='m')
plt.xlabel('Stock Price')
plt.ylabel('Profit and Loss')
plt.legend()
plt.grid()
plt.show()

翡翠蜥蜴的收益
payoff = payoff_long_call + payoff_short_call + payoff_short_put
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT,payoff_long_call,'--',label='Long Strike Call',color='g')
ax.plot(sT,payoff_short_call,'--',label='Short Strike Call',color='r')
ax.plot(sT,payoff_short_put,'--',label='Short Strike Put',color='m')
ax.plot(sT,payoff,label='Jade Lizard Payoff')
plt.xlabel('Stock Price')
plt.ylabel('Profit and Loss')
plt.legend()
plt.grid()
plt.show()

翡翠蜥蜴编队
payoff = payoff_long_call + payoff_short_call + payoff_short_put
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT,payoff,label='Jade Lizard Payoff')
plt.xlabel('Stock Price')
plt.ylabel('Profit and Loss')
plt.legend()
plt.grid()
plt.show()

profit = max(payoff)
loss = min(payoff)
print (profit)
print (loss)
Max. Profit: 10.35 Max. Loss: -30.45
结论
从上面的剧情来看,对于翡翠蜥蜴期权策略 Max。利润和最大值。可以观察到损失。在本文中,我们通过一个真实的市场例子以及理解如何用 Python 计算策略,涵盖了 Jade Lizard 交易策略的所有要素。回报也可以在 Excel 表格的帮助下计算,我已经提供了一个可下载的文件和 Python 代码。
下一步
你是否热衷于学习更多关于算法交易的知识?联系我们,了解不同的金融策略世界观。 QuantInsti 帮助人们获得适用于各种交易工具和平台的技能。算法交易(EPAT)的高管课程涵盖了统计学&计量经济学、金融计算&技术和算法&量化交易等培训模块。EPAT 让你具备成为成功交易者所需的技能。免责声明:股票市场的所有投资和交易都有风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。
下载数据文件
- 翡翠蜥蜴期权策略- Python 代码
- 翡翠蜥蜴收益计算- Excel 表
日本烛台交易策略
原文:https://blog.quantinsti.com/japanese-candlestick-trading-strategy/

由杰伊·马尼尔
关于日本烛台交易
据说日本人在 17 世纪用技术分析来交易大米。据说,一个来自坂田的名叫 Munehisa Homma 的大米交易商发明了这种绘制蜡烛图的技术来分析市场上大米的每日现货价格。根据现代烛台制图之父史蒂夫·尼森的说法,使用烛台的正当交易始于 19 世纪 50 年代。你可以参考这篇博客烛台图案的意义及其解剖来了解烛台的基本概念。
在这篇博客中,我们的目标如下:
- 对剧情烛台使用 Python
- 使用“三根日线蜡烛”理解烛台交易策略
使用 Python 绘制烛台
我们将从雅虎数据库中获取任何相关的每日财务数据,并用它来绘制我们的烛台。在本例中,我们将绘制日常“间谍”烛台。您可以更改股票代码,如:“谷歌”、“APPL”、“MFST”等。绘制你自己的蜡烛图。

对于数据可视化,我们一般使用' matplotlib.pyplot '库。Matplotlib 还提供一小部分特殊融资地块,如烛台。这种类型的绘图可在“matplotlib.finance”子库中找到。
我们将进一步使用通过使用“bokeh.plotting”接口创建的散景图,该接口带有一组默认工具和默认视觉样式。Bokeh 使用 Python 交互式可视化库,面向现代 web 浏览器进行演示。

上述代码的输出如下:

我们提供的工具将帮助您使用方框缩放和滚轮缩放来“平移”图表和“放大”或缩小。还有一个重置按钮来显示实际输出,保存按钮将帮助您下载在浏览器中显示的图像(即使是缩放的图像)。
理解使用“三根日线蜡烛”的烛台交易策略
让我们看看一个简单的每日交易策略,我们将查看过去三天的蜡烛线,并预测我们是否会在第四天做多或做空。我们将在第四天结束前平仓并记录盈利/亏损,
【做多】或第四天买入的交易规则:
规则 1:不管蜡烛的颜色如何,最近的蜡烛体必须比前两根蜡烛体大。
规则 2:第二根日线蜡烛必须是红色的。
规则 3:最近一根蜡烛线的收盘价必须比第二根日线的收盘价高。
规则 4:你将在第四天早上交易开始时买入,在收市前卖出。

在第四天进行【做空】或卖出的交易规则
规则 1:不管蜡烛的颜色如何,最近的蜡烛的主体必须大于前两根蜡烛的主体。
规则 2:第二根日线蜡烛必须是绿色的。
规则 3:最近一根蜡烛线的收盘价必须小于第二根日线的收盘价。
规则 4:你将在第四天早上交易开始时“卖出”,在收市前“买入”。

如果“收盘”太近,你可以通过在某些地方不遵循规则 3 来放松“买入”和“卖出”信号,但更保守的方法是遵循所有三个步骤。
如果你自己绘制一张蜡烛图,并试图找到你正在考虑的资产的“买入”和“卖出”信号,那将会很有趣。
此外,有各种各样的烛台模式,你会在网上找到。你也可以参考这个博客烛台交易——一个动量策略和例子【EXCEL 模型】,了解动量策略,你观察前 n 个烛台上的价格,并据此下注。一个有趣的练习是试图在你绘制的蜡烛图中找到它们。
除此之外,你可以查看我们博客上关于不同量化交易策略的文章。
但是在我结束之前,我想特别感谢 Abhishek Kulkarni 先生帮助我完成烛台绘图代码。
所以祝你好运,享受你的烛台图表。
下一步
如果你对探索算法交易策略感兴趣,那么请查看我们的EPAT项目。它涵盖了算法&量化交易、金融计算、技术、统计和计量经济学等培训模块。EPAT 让你具备成为成功的算法交易者所需的技能。现在报名!
更新
我们注意到一些用户在从雅虎和谷歌金融平台下载市场数据时面临挑战。如果你正在寻找市场数据的替代来源,你可以使用 Quandl 来获得同样的信息。
下载数据文件
- Python 中的日本烛台交易策略
Johansen 协整测试:学习如何用 Python 实现它
原文:https://blog.quantinsti.com/johansen-test-cointegration-building-stationary-portfolio/
在这篇博文中,您将了解 Johansen 协整测试的本质,并学习如何用 Python 实现它。另一个流行的协整检验是增强的 Dickey-Fuller (ADF)检验。ADF 试验有局限性,使用 Johansen 试验可以克服这些局限性。
ADF 检验可以用来检验两个时间序列之间的协整关系。Johansen 检验可用于检查最多 12 个时间序列之间的协整性。这意味着可以使用两个以上的时间序列创建资产的静态线性组合,然后可以使用均值回复策略进行交易,如 Pairs Trading 、Triplets Trading、指数套利和多空投资组合。要了解更多关于这些策略的信息,请报名参加由 E . P . Chan 博士主讲的课程Python 中的平均还原策略。

第二,ADF 检验在改变两个时间序列的顺序方面给出了不同的结果。这可以通过使用 Johansen 检验来克服,因为它是顺序独立的。现在让我们看看约翰森测试背后的数学原理。
约翰森测试背后的数学
约翰森测试是基于时间序列分析。ADF 测试是基于一个自回归模型,一个时间序列的值是基于同一时间序列以前的值回归的。当有一个以上的变量时,您仍然可以将当前价格的关系写成自回归模型中过去价格的线性函数,但为了更准确,该模型被称为向量误差修正模型(VECM)。下面给出的是 VECM 的公式。

在这个等式中,我们有多维变量,因此乘法将是矩阵乘法。因此,该方程中每个滞后项的系数都是矢量项。
在 Johansen 测试中,我们检查 lambda 是否有零特征值。当所有特征值都为零时,这意味着该序列不是协整的,而当一些特征值包含负值时,这意味着可以创建时间序列的线性组合,这将导致平稳性。
这些价格的线性组合代表投资组合的净市场价值。如果投资组合的价值变化通过负回归系数或负特征值与其现值相关,那么我们将得到均值回复或平稳投资组合。这是约翰森测试的精髓。
Johansen 测试的 Python 实现
现在让我们用 Python 对一对资产进行约翰森测试,这里我们以 GLD - GDX 对为例,GLD 是 SPDR 黄金信托 ETF,GDX 是黄金矿工 ETF。我们可以预期这两种资产是相关的,我们现在将检查这些资产是否是协整的,如果是,那么我们可以在这一对上创建一个配对交易策略,这将被证明是有利可图的。浏览下面提到的代码:

我们将从导入两个库开始。要导入的第一个库是 Pandas 库,它将用于从 CSV 文件中读取数据,然后创建包含两个仪器数据的数据框。
其次,我们将从 johansen 库导入 coint_johansen 函数,这是由 Toledo 大学经济系的 James LeSage 开发的函数。你可以从这里下载这段代码。
一旦库被导入,我们通过从 csv 文件中读取数据,将两个证券的数据存储在变量 df x 和 df y 中。接下来,我们创建一个数据帧 df,它存储我们必须运行 Johansen 测试的两个时间序列。
然后,我们调用 coint_johansen 函数,将存储时间序列数据(df)的数据帧、0 和 1 作为它的三个参数。自变量中的第二项表示零假设的阶,值 0 意味着它是一个常数项,多项式中没有时间趋势。第三项指定了计算估计量时使用的滞后差分项的数量,这里我们使用单个滞后差分项。
这个测试的输出为我们提供了跟踪统计和特征统计。

迹统计告诉我们特征值之和是否为 0。零假设 r<=0 给出了 17.895 的跟踪统计量,因此零假设可以在 95%的置信水平上被拒绝,因为跟踪统计量的大小大于临界值。请注意,Johansen 测试仅给出了输出的大小,因此我们无需担心符号。
本征统计按照数量级递减的顺序存储本征值,它们告诉我们序列的协整有多强,或者均值回复的趋势有多强。在我们的例子中,可以在 95%的置信水平上拒绝零假设的特征统计,因为 17.5694 大于 14.2639。
特征向量给出了时间序列均值回复线性组合的方程。对应于最高特征值的特征向量代表具有最大均值回复特性的投资组合。零假设是时间序列没有协整,因此当我们拒绝零假设并接受替代假设时,我们认为序列是协整的。
Johansen 检验的性质
即使时间序列的顺序颠倒,Johansen 测试也会给出相同的结果,您可以将此作为一个练习。这种检验可以作为检验协整的一种独立于顺序的方法。该测试允许我们检查三个一组、四个一组等多达 12 个时间序列之间的协整性。
原因很简单,没有数学家能够计算超过 12 个变量的临界值。因此,结果不能用来拒绝零假设。根据计算能力的可用性,向量误差修正模型甚至可以用于 1000 只股票。它将无法判断股票是否是协整的,但它仍然可以用作预测模型。
后续步骤
学习使用蒙特卡罗模拟优化 Python 中的投资组合。这篇文章解释了如何给你的股票分配随机权重,并计算你的投资组合的年回报率和标准差,这将允许你选择一个具有最大夏普比率的投资组合。
计算之旅:从帕斯卡的计算器到机器学习
正如我们今天所知道的,计算机或计算设备被用于大量的活动,从计算数据、与数千英里之外的人通信、娱乐、记录和保管文件等等。
然而,当计算机或计算机器的概念首次概念化时,它是一个严肃的行业,主要用于处理大量的数字。即使现在回想起来也很有趣,考虑到当前的技术场景,那些相同的计算可以通过智能手机等小型计算设备以快数百倍的速度完成。然而,它看起来很迷人,从来没有这么容易,人类花了超过四百年(400 年)来完成这一转变,围绕这一转变的事实确实令人惊讶。
围绕计算发展的另一个有趣因素是数据生成。仅仅在过去两年内,我们就创造了当今世界大约 90%的数据,这简直令人难以置信。

IDC/EMC 数字世界报告 2008-2017 年数据曲线鸣谢:Weforum.orgT3】
在这篇博客中,我们将踏上一趟计算世界的旅程,了解计算最初是如何开始的,以及自那以后我们所取得的成就。我们还将在博客中专门用一小部分来介绍数据生成的发展。
本博客分为以下几类:
早期计算时代
这可以追溯到 17 世纪中期,当时哲学家“Ramon Llull”进行了思想实验,以创建能够以非常系统和简单的方式产生新知识的逻辑机器。鉴于技术资源匮乏,当时不可能制造出这样的机器。然而,它让位于一种新的思维方式,即计算逻辑运算符和创建有意义的结论,从而增加价值。Ramon Llull 的工作对德国数学家 Gottfried Leibniz 的工作产生了重大影响,他在 1671 年设计了一台机器,可以通过连续加法进行乘法,并通过连续减法(带小数)进行除法,这就是所谓的“步计算器”。莱布尼茨一直是使用计算机的信徒,并表示聪明人不应该在计算上浪费时间。

【步行者 Wikipedia.com】
有趣的是,大约在莱布尼茨的发明之前三十年,在德国附近的一片土地上,法国数学家布莱士·帕斯卡发明了帕斯卡林。帕斯卡林,发明于 1642-1644 年,是一个主要的计算器或累加器,用于在输入数字的同时通过操纵表盘来单独做加法和减法。下面是同样的一张图片:

【Pascal ine(Wikipedia . com)
帕斯卡灵问世近 10 年后,受帕斯卡工作的影响,塞缪尔·莫兰发明了两种计算器,这两种计算器有八个表盘,可以用触笔移动。幸存下来的一个模型,可以添加多达一百万个小数。
虽然 17 世纪对计算机行业来说是不可思议的,但相对而言,18 世纪几乎没有开创性的发明。到 1800 年初,确切地说,是 1804-05 年,约瑟夫·贾卡发明了提花系统。他的系统使用可互换的穿孔卡片来控制布料的编织,并且可以设计任何图案。这些穿孔卡片后来被伟大的发明家如查尔斯·巴贝奇和赫尔曼·何乐礼用于开创性的计算机器。真实地说,即使 Jacquard 系统没有直接连接到计算数字,它的计算架构对后来设计的计算引擎是一个很大的补充。
大约 20 年后,第一台计算设备由查尔斯·巴贝奇制造,名为“差异引擎”。他在 1822 年宣布了它的发明,并在 1822-1830 年间建造了它。与简单的计算器相比,它是一种高级升级产品。它有能力对多个变量进行一系列计算,以计算复杂的数字。它的工作原理是“n + 1 ”,一旦任务完成,它还可以被重置。差异引擎也有一个临时数据存储系统,用于额外的高级过程,并有金属指针来标记其输出,这些输出后来被打印在印刷版上。它是一台逻辑结构化的计算机器,对现代计算产生了巨大影响。

【差异引擎(演职员表:Wikipedia.com)
有趣的是,在同一时期,年轻而聪明的数学家阿达·洛芙莱斯在一次聚会上遇到了查尔斯·巴贝奇,两人开始研究“分析引擎”。她还被誉为“世界上第一个程序员”,这个词至今仍在圈内引起激烈争论。她的第一个程序围绕着“伯努利数”的计算,这本身被认为是数学中最古老和有趣的问题之一。分析引擎的一个关键属性是将数字和指令存放在临时存储器中,并在需要时计算这些数字。这是通过在其阅读器中订购适当的指令和数据来实现的。存储数字以供临时使用的想法在今天仍然非常流行,并且被用于现代商业计算器甚至是最简单的计算设备中。鉴于所有这些事件,很明显,探索计算领域或计算领域的想法正在学术界和研究界兴起。
数据存储的里程碑
19 世纪 80 年代,年轻的美国发明家赫尔曼·何乐礼发明了制表机,专门用于计算美国人口普查。这是一种机电计算设备,用于在穿孔卡片上存储和汇总信息。它有一个简单的机制,机器一次读取一张穿孔卡片,并按时间顺序打印出来,然后将算术值存储在累加器中。由此,我们可以说数据存储的重要性是显而易见的,这一领域的进步也是后来才有的。制表机的改良版本甚至在最近的 20 世纪 80 年代中期就开始使用,直到今天,在全球各地的投票中都能看到。

【制表机(演职员表:Wikipedia.com)
电信和计算机的开始
1903 年,尼古拉·特斯拉(有史以来最伟大的发明家之一)因其发明“信令系统”获得美国专利号 725605,该发明提到通过无线传输传输信息,后来还被用于跳频扩频系统(FHSS)的发明。FHSS 使用一种方法将修改后的无线电波信号快速传播到不同的频道,这种方法只有信号的发送方和接收方知道。这种技术现在被用在一些通信系统中,如蓝牙、局域网等。
演员兼发明家海迪·拉马尔在她的专利发明“秘密通信系统”中也提到了我们目前在 FHSS 技术中使用的机制。它是为美国海军在第二次世界大战期间用于干扰网络而开发的,然而,它从未被美国海军用于任何目的。简而言之,FHSS 利用频率和时间的函数来增加带宽。这目前用于创建安全连接,增加通信信道的范围,并减少噪音和无线电干扰。
通过跳频扩频系统(FHSS)的发明可以正确地推断出电信的开始。
快速发展阶段
电信是现代计算发展的主要驱动力之一。在 20 世纪 30 年代早期,发明了电传消息系统或网络,其中双向文本消息可以通过使用电话级连接电路将电传打字机连接到同一电话网络来执行。这是第一次如此精确地进行双向交流。电传信息的主要进步之一是“你是谁”代码。通过这个代码,一旦消息被发送,对消息的回复也可以被发送以完成通信会话。电传信息系统的这种交互功能给这种设备带来了巨大的普及。

【Wikipedia.com】
图灵和人工智能
1937 年 1 月,一位年轻的计算机科学家艾伦·图灵发表了一篇关于“可计算数字及其在决策问题中的应用”的研究论文,这篇论文中的某些理论为今天的现代计算机科学奠定了基础。他提到了一个假设的计算机器的理论模型,如果给定变量的输入,它可以确定结果。这就是后来被称为“图灵机”。现在,可能有不同类型的图灵机和一个“通用机器”可以被创造出来模拟所有的图灵机。所有这些都是图灵本人提出的。难怪他被认为是【计算机科学之父】。
图灵也被广泛认为是人工智能领域最早的先驱。他提出了“图灵测试”,这是一个理论概念,如果计算机能够提供与人类相似的结果,那么计算机就能通过测试。测试的设置是这样的,第一个人在一个房间里充当提问者,第二个人和计算机在另一个房间里充当回答者。第一个人和第二个人会问一系列问题,计算机会回答这些问题。如果第一个人有 30%的时间被欺骗,认为响应来自人类而不是计算机,那么这台计算机就被认为通过了“图灵测试”。尽管这被广泛认为是一个艰难的基准,但在图灵测试存在 65 年后的 2014 年,聊天工具“尤金·古斯曼”在伦敦有 33%的时间通过了提问者杜平的测试。在这里阅读更多。
这项测试被认为是导致人工智能发展的重要理论之一,并使“思维机器”的概念概念化,这是大多数现代计算机科学家一直在努力的事情!
现代计算机和编程
尽管取得了所有这些进步,但直到 1954 年末,随着 IBM 650 的推出,商用计算机的真正市场才开始出现,IBM 650 具有两种状态和五种状态组成的十进制数的数据和地址。例如“01-00100”。它能把穿孔卡片上的字母和特殊字符转换成两位小数。这台机器的这一特点尤其吸引了学生以及来自商界和科学界的人士。它售出了大约 2000 台,与当时其他可用的计算机相比,这是一个巨大的数字。甚至 IBM 曾经提到,“没有其他电子计算机生产出如此大的数量。”。
1957 年,IBM 的研究人员推出了一个数值计算程序“FORTRAN”。它也被称为“编程系统之父”。FORTRAN 的逻辑后来被编译成流行的编程语言,如 C、C++等。最初启动时,它有 32 个语句,包括 DO、IF 等。有趣的是,它使用了“IF”语句,该语句的概率用著名的“蒙特卡罗模拟”原理进行加权,该原理用于优化内存中的基本块。即使按照目前的计算标准,这也是一种非常先进的优化技术。下面是一个 FORTRAN 90 语言的例子:
*PROGRAM Triangle*
*IMPLICIT NONE*
*REAL :: a, b, c, Area*
*PRINT *, 'Welcome, please enter the&*
*&lengths of the 3 sides.'*
*READ *, a, b, c*
*PRINT *, 'Triangle''s area: ', Area(a,b,c)*
*END PROGRAM Triangle*
*FUNCTION Area(x,y,z)*
*IMPLICIT NONE*
*REAL :: Area ! function type*
*REAL, INTENT( IN ) :: x, y, z*
*REAL :: theta, height*
*theta = ACOS((x**2+y**2-z**2)/(2.0*x*y))*
*height = x*SIN(theta); Area = 0.5*y*height*
*END FUNCTION Area*
来源:一个 Fortran 90 程序的例子T3】
由于其数学风格,输入也应用相同的逻辑。
鉴于代码的简单性,一个非程序员第一次可以知道一个程序到底能做什么,并同时理解它。这是向更广泛的受众开放计算设备的有力一步。此外,在 1958 年:杰克·基尔比和罗伯特·诺伊斯推出了集成电路。尽管他们分别从事这项工作,但他们的发明彼此非常相似。Kilby 发明了一种混合集成电路(互连微芯片),Noyce 发明了一种完整的单片集成电路(一个小半导体芯片上的一组电子电路)。这是计算机行业的一个巨大转折点,因为集成电路首先尺寸非常小,同时成本很低。这意味着计算设备可以以比以前更大的规模生产,并以有利于生产商的最优价格生产。
第一个调制解调器
1958 年,贝尔实验室(现称美国电话电报公司)推出了贝尔 101 数据电话。数据电话类似于现代的调制解调器,借助电话线,数据可以以每秒 110 位的速度从一台计算机传送到另一台计算机。然而,贝尔 103 调制解调器比它的前身更成功,能以每秒 300 位的速度传输更多的数据。事实上,Bell 103 调制解调器今天仍在用于非商业目的。
基本语言
随着所有的发明都发生在计算领域,编程界也呈指数增长,到 1964 年,Thomas E. Kurtz 和 John G. Kemeny 推出了最初的 BASIC 语言。BASIC 最初在每一行的开头使用的数字,用来表示程序中命令的顺序。线被编号为 30、40、50 等。这也可以在需要时在命令之间放置额外的方向。另一个元素“GOTO”语句循环回到先前指示的方向。
例如,BASIC 程序的第 350 行将具有“if”子句,该子句指示计算设备在变量大于 40 时跳回到第 200 行。该指令可按如下方式编程:
350 IF (N >40) THEN GOTO 200
BASIC 语言受到 ALGOL58 之类的算法的影响,ALGOL 58 的概念是基于块结构的概念,通过执行“begin”和“end”或类似的关键字来创建边界。1969 年,贝尔实验室的开发人员创造了 UNIX 操作系统,解决了兼容性问题,延续了令人兴奋的新编程语言趋势。该操作系统是可移植的,可以跨多个平台转移,这使得它在政府机构和商业实体中很受欢迎。
70 年代
到 20 世纪 70 年代初,计算机行业的发展已经开始有了明确的方向。新发明开始彻底改变计算机行业。例如,1970 年,英特尔公司推出了英特尔 1103(一种主要的商用动态存取存储器(DRAM)芯片)。这使得微小的电容器和晶体管在存储单元中存储每一位数据,从而实现更好的数据传输。
1971 年,阿兰·舒加特和他在 IBM 的团队设计了“软盘”,允许计算机之间的知识共享。这一吸引人的商业策略使拥有技术的消费者能够在他们之间分享知识,这一策略非常受欢迎,并且已经开始作为一个整体塑造计算机行业的未来商业决策。
1973 年,施乐公司的研究人员推出了“以太网”。它创造了一种可以远程连接多台计算机的技术。这是一个转折时期,也是互联网革命的巨大财富,这场革命将在十年内冲击大众。与最初的版本相比,现在的以太网更大、更快、更先进。以太网网络目前分为 4 种速度,可以在每种速度下平稳运行。速度范围从 10 Mbps 开始,限制到更高的 10,000 Mbps。无论何时发明了更快的版本,它都不会淘汰旧版本,而是以太网控制器转换其速度以匹配最慢的连接设备,这在混合两种技术时非常有用。
在程序设计方面,C 语言,可以说是一种主要的程序设计语言,是由丹尼斯·里奇于 1972 年开发的。c 与以前的编程语言完全不同,可以被称为过渡性的计算语言,它提供了一种更新更好的编程语言编写方式。C 充分利用了指针,被创造得快速而强大。然而,由于它是高级语言,C 很难读懂。但它修正了早期发明的“帕斯卡”中普遍存在的大多数错误。这种语言的语法非常简单,并且只需要很少的内存。这就是为什么它至今仍在使用,并且这种语言的组成部分已被用于其他主要语言,如 C++,Java 等。
个人电脑革命
随着 HP 3000、HP 2640 系列、Apple I/II/III、Apple Lisa、IBM S 34/36/38 的推出,70 年代末和 80 年代推出了一批小型机,消费者在购买小型机时有了很多选择。有趣的是,英特尔成为了 IBM 的微芯片供应商,并创造了像英特尔 80386 这样的成功产品,这是一种 32 位微处理器芯片,比当时生产的任何英特尔芯片都快几倍。事实上,它已经成为一种标准处理器,并被“康柏”公司用于其个人计算设备。多进程快速计算设备的想法是科技公司的一个关键动力,最终,消费者对这种设备的需求增加了。此外,在同一时期,SQL、Mathematica、Octave、Matlab 和 Python 等语言相继发布,改善了计算行业的硬件和软件。这些语言在计算行业中仍然非常流行,并且在高度计算的计算中大量使用。
信息时代还是互联网时代
互联网在 20 世纪 90 年代开始流行,是人类有史以来最引人入胜的技术发明。为了评估互联网的可能性,美国高级研究计划局(ARPA)设立了一项基金,用于研究和开发学术界和政府实体之间的通信网络。1969 年,阿帕网启动,成为第一个也是同类网络系统之一。直到 1990 年,当蒂姆·伯纳斯·李(人们普遍认为他是互联网的创造者)和欧洲核研究组织的其他人提出了一个协议,其核心是基于超文本的协议,以使信息传播更容易时,ARPA 创建一个可以将知识链接在一起的网络的愿望才得以实现。
这也是第一次使用 TCP/IP 技术,这种技术如今在互联网网络中广泛使用。这导致了私营组织跟随政府的步伐为互联网提供资金,到 20 世纪 90 年代,商业组织开始将其系统互联。1991 年,这导致了万维网(WWW)的诞生,它仍然是计算机行业最大的革命之一。其系统网络使用户创建网页成为可能。美国国家超级计算应用中心的一组程序员发明了使使用互联网更容易的“浏览器”,1994 年成立的网景通信公司推出了“马赛克网景 0.9”以使这项新发明的技术商业化。
互联网革命的另一个推动力是 HTML 的引入,HTML 不仅仅是超文本(包含网站链接的一个或多个单词)。它的工作方式是在屏幕上显示文本和图像,决定计算设备如何对按键或鼠标点击做出反应。HTML 之所以流行,是因为它可以用任何类型的计算设备阅读,同时又非常经济。网页设计者可以在小尺寸的网页上创建丰富的图形。小文件在像互联网这样的网络上很重要,因为它们在相距很远的计算设备上交换信息更快更容易。
随着 HTML 的发明,网络诞生了。HTML 使得创建包含图像、视频和声音的网站变得简单而容易。这个小文件允许通过互联网快速交流。在很短的时间内,每个人都意识到了网络作为全球交流工具的潜力,并希望尽快掌握它。网络发展迅速,正如我们今天所知,每天有数百万人出于各种目的访问互联网,如新闻、娱乐、购物等。后来,HTML 的各种版本相继推出,提高了效率,并在某种程度上控制了网页的行为。
人工智能、机器学习和数据科学
“数据科学”这个术语第一次被听到是在 1974 年初,当时彼得·诺尔发表了他的论文“计算机方法简明概览”。后来,威廉·克利夫兰在 2001 年发表了他的论文《数据科学:扩展统计领域技术领域的行动计划》,强调它是一门独立于计算机科学的思想学科。
应用著名的帕金森定律,数据应该扩展,直到填满磁盘空间。“数据-磁盘”交互是一个指数级的积极事件,一连串的事件导致人们购买越来越多的磁盘,同时产生越来越多的数据。有趣的是,这违背了经济学的供求原则。这一系列磁盘数据事件是产生“大数据”的原因。大数据是众所周知的数据集,它非常大,因此在常规数据库管理工具的帮助下执行时变得复杂和难以分析。它被用来总结模式、人类行为,也用来在分析过去之后预测未来。大数据已经成为一种非常流行的技术,几乎应用于每个行业。
云计算的发明满足了以更高效的方式计算大数据的需求。它是在亚马逊、谷歌和微软等科技巨头的参与下创建的。云计算中最重要的分析工具之一是 Hadoop。Hadoop 用于计算云平台上的大数据。
标准的计算规范是将数据传递给算法。Hadoop 计算风格遵循与标准计算风格相反的原则。数据太大了,无法放入算法中。相反,它将算法的许多副本推送到数据中。
事实证明 Hadoop 也很难执行。它需要先进的计算能力。由此,也创造了一个创建分析工具的市场,这需要可以在 Hadoop 上运行的更简单的界面。
除了全球的技术进步,计算行业开始转向机器学习的应用,该应用专注于让算法从可用数据中进行自我学习,以便根据之前收集的信息对未分析的数据进行判断和预测。一般来说,机器学习分为三个关键部分:
- 监督机器学习算法
- 无监督机器学习算法
- 强化机器学习算法
互联网、数据爆炸和金融市场
随着互联网的广泛使用,金融市场也变得高效起来。现在,任何人都可以在任何交易所交易美国存托凭证(ADR ),但须遵守特定的条款和条件。甚至围绕美国存托凭证与交易所内等价股票价格交易之间的差异原理,建立了套利策略。互联网带来了数据爆炸,到 2000 年代中期,它通过提供为所有人创造公平竞争技术的工具和技术,使金融市场民主化。然而,鉴于信息传播的增加,这也导致波动性增加。互联网使企业、金融市场和交易交易所按照均衡状态进行供应和分配,在互联网渗透之前,这种均衡状态存在地理边界和复杂的国与国之间的法规等障碍。
互联网将所有公司聚集在一起,在消除不平等的同时,加强了金融市场的公平竞争。
算法交易是结合了统计学、计算机科学和金融领域的最新产品,它提高了市场的效率。算法交易开始于 20 世纪 80 年代末和 90 年代。人们经常批评它让 1987 年的美国市场崩盘变得比预期更糟糕。算法交易在 2001 年开始流行,当时 IBM 和 HP 分别推出了他们的算法策略 MGD 和 ZIP,它们成功地击败了人类交易者,并在市场上产生了更好的 alpha。算法交易基于算法或小指令的原理,因此让位于高频交易,这种交易在很短的时间内进行数百万次交易。这也增加了市场的流动性和更好的资产定价。
结论
1965 年,当戈登·摩尔向全世界宣布摩尔定律时,他就已经预测到了计算或计算能力的增长。该定律指出,自第一个集成电路问世以来,集成电路上每平方英寸的晶体管数量每年都会翻一番。
摩尔当时预测,这种模式在未来仍会看到。然而,近年来,这种趋势已经失去了它的步伐,然而,它仍然是一个引人注目的增长故事。包括摩尔本人在内的大多数专家预计,摩尔定律将在 2020-2025 年之前有效,然后开始对增长失去意义。
与人类 10000 多年的历史相比,过去 4 到 5 个世纪中计算和计算设备的发展是非常惊人的。这一切都始于以更好的方式执行计算的冲动,几个世纪后的今天,大型高速计算设备在几秒钟内完成了数百万次计算。未来会有更多这样的模范发明和先进技术被发现,这将使我们的生活变得更加轻松和无忧无虑。总而言之,现代计算让人们的生活变得更加轻松和舒适。技术进步提供了与数十亿人保持联系的机会,这些人可能在世界的不同地方,但仍然可以非常轻松地相互交流。
最后,我想给你们留下一个精彩的数据表示,它比较了人脑可以容纳的数据和目前计算设备可以容纳的数据。

【记忆量表(演员表:Visualcapitalist.com)
如果你想学习算法交易的各个方面,那就去看看算法交易的高管课程( EPAT )。课程涵盖统计学&计量经济学、金融计算&技术和算法&定量交易等培训模块。EPAT 教你在算法交易中建立一个有前途的职业所需的技能。立即报名!
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。T3】
对学习的热情:Rohit 从 IIM 到算法交易的旅程
原文:https://blog.quantinsti.com/journey-iim-to-algorithmic-trading/
算法交易的世界很大,围绕它的概念有时会令人难以置信。然而,一个好的交易者的与众不同之处在于,他渴望学习更多,探索细节,同时消除疑虑。
学习增长和扩展自己的算法交易知识是 Rohit 所关注的!
Rohit Poddar 先生是 IIM 艾哈迈达巴德大学的 MBA 毕业生,也是 EPAT 的学生,他在 2018 年开始了他进入算法交易世界的旅程。通过他的奉献和决心,他是第一个在 Prometric 监督的 EPAT 考试中获得 EPAT 证书的学生。
来了解一下 Rohit 在 EPAT 学习期间的经历吧!
我们与 Rohit Poddar 先生的对话
-
Hi Rohit, tell us about yourself.
我目前在加尔各答工作,在 NTU 和新加坡完成了机械工程课程,后来又在 IIM 艾哈迈达巴德攻读了 MBA。我于 2017 年毕业,从那时起,我一直参与我的家族企业,为孟加拉国的黄麻加工单位提供机械零件。
-
What prompted you to explore the field of algorithmic trading?
在过去的 3-4 年里,我一直是一个长期投资者,那时我意识到交易可以成为额外收入的一个很好的来源。我开始手动交易,通过技术指标,如 MACD,布林线等。在浏览和研究更多关于交易的内容时,我偶然发现了算法交易作为一个领域的概念,并发现市场上的大玩家将它作为一种竞争优势的手段,经常招募最优秀的量化人才。因此,我想做更多的研究,加深我在这个领域的知识。
-
What made you choose EPAT to explore more algorithmic transactions?
我选择 EPAT 的两个主要原因是其结构良好的模式和教学大纲,以及有行业从业者作为 EPAT 的教授。网上有很多关于算法交易的资料,但是并不是结构化的。不同的主题有不同的课程,如交易的机器学习,配对交易,统计套利等。,但是没有这样的课程把所有这些话题集中在一起。
-
How was your experience in EPAT? What did you like best?
全体教员都是一流的。EPAT 就像一个发射台,研究几乎所有的主要概念,如期权交易、市场微观结构、统计学、Python、通过机器学习进行交易等。,并概述了该行业,使您能够选择你想去的地方。
-
How did you prepare for EPAT? Do you have any suggestions for other students who will take EPAT?
EPAT 考试归结为你对概念的理解程度。考试中的问题大多是概念性的,因此没有必要强记答案。听完讲座后,我通常会花 1-2 个小时自己浏览概念并试图掌握讲座中教授的内容,周末花 2-3 个小时。由于我总是及时了解课程内容,所以我不必在考试前付出额外的努力。考试前对学习材料、课程和作业的复习对我很有帮助。
-
Tell us about your test experience in EPAT.
考试是在监考环境中专业进行的,所有设施都在手边。考试界面很流畅,因此增强了我的考试体验。
-
What do you think is the advantage of taking exams in the invigilating environment?
对我来说,监考总是比自己花时间考试要好。考虑到在一门课程上投入的时间和金钱,最好通过专业的考试来衡量你理解和学习了多少。你可以检查出你无法回答的问题,并尝试再次理解这个概念,这有助于你确定你需要努力的领域。
-
How do you plan to integrate the practical knowledge learned from EPAT into your career?
目前,我正在使用 Python 来评估我的投资决策,同时也在研究我的基于股票价格预测的 EPAT 项目。这个项目教会了我回溯测试策略的重要性。我根据至少 3 年的过去数据对策略进行回溯测试,只有这样,我才会在真实市场中实施它。正确评估交易,了解各种策略和方法,是我从 EPAT 身上学到的最大的东西。
Rohit 表现出极大的热情和热情来提升他的算法交易知识,并继续掌握尽可能多的知识来优化和实践他的交易技巧。
EPAT 通过其全面的课程、行业从业者专家、实际动手培训等,帮助一个人在算法交易领域取得卓越成就。统计学&计量经济学、金融计算&技术、机器学习等主题确保人们获得算法交易各个方面的知识。
免责声明:为了帮助正在考虑从事算法和量化交易的个人,本案例研究是根据 quantin STI EPAT 项目的一名学生或校友的个人经历整理的。案例研究仅用于说明目的,并不意味着用于投资目的。EPAT 项目完成后取得的结果对所有人来说可能并不一致。T3】
一位经验丰富的 IT 销售专家与 Gilles Laurentin 一起进行算法交易的旅程
https://open.spotify.com/embed-podcast/episode/3BEz8U0utvqjWW0aZzOvHu
几年前,提到“交易”,你会想到人们在场内交易。但是今天,你可以在世界的任何地方独自交易,只需要一台电脑和良好的互联网。
今天,有一些杰出的人,比如 EPAT 大学的校友吉勒·劳伦廷,他专攻数学,并拥有工程学位。他从工程开始他的职业生涯,追求销售职业生涯,现在也增加了他 20 多年的职业生涯做算法交易。
如果你在做全职工作,你将能够理解 Gilles 的故事,并希望开发自己的交易算法,自动为你交易。
我们采访了吉勒,了解他的成功故事。我们的讨论是这样进行的。
嗨,Gilles,给我们介绍一下你自己吧!
嗨!我是吉勒·劳伦廷,总部位于法国巴黎。我是三个孩子的父亲,我喜欢和他们在一起。我喜欢打网球,我喜欢我的工作,我喜欢听音乐。

我目前是一家大型 IT 公司的销售主管。我提供我们的财务软件演示,增强您的业务预测能力。
在新冠肺炎来之前,我会去很多地方旅行,有时会穿越法国,环游欧洲去见我们的客户。现在有了疫情,适应形势——一切都通过视频会议来完成。你只是在家里,除了在房子里走来走去,你不能通勤或做任何事情。虽然疫情发生得很突然,但它给了我关注 EPAT 的焦点和时间。
在法国 20 年的职业生涯中扮演了多个角色,你能和我们分享一下你的故事吗?
是的,20 多年的经验确实是一段相当长的时间。2000 年互联网泡沫破裂时,我刚毕业。
我是一名工程师,大约 20 年前开始从事技术工作。我会为商业智能领域的 IT 公司编写应用程序。所以,我有很好的财务软件开发背景。慢慢地,我升到了销售职位——不是构建软件,而是销售软件,并进行演示。
我去交易有点随机,有点偶然通过一个朋友谁有一个交易室。这是我看到专业交易者如何交易的地方。
就我个人而言,我不想做了一笔好交易,到达顶峰后又掉下来,只是因为我没有足够的信息来提高效率。如果你想在交易中获利,你必须做出决定,你必须建立一些非常强大的策略。你不能凭运气买卖,否则,我相信你会输。
要在这个领域有效率,你需要对事情如何发展、市场如何运作、风险管理如何运作等有广泛的了解。我对算法交易感兴趣,因为我在处理预测时间序列。我可以把它应用到我的工作中。虽然我记得年轻时在学校学过。
我意识到,如果我想在这方面盈利,我真的需要一些非常强大的战略。这是我开始研究算法交易的地方。
你是如何接触到算法交易的?你是如何知道 QuantInsti 的?
在网上学习的时候,我看到了一则关于 EPAT 的广告。让我着迷的是,它为理解交易,特别是算法,提供了一个强大的基础。课程涵盖了整个交易领域。这让我选择了 EPAT。
目前,我已经创建了一个适用于期货的算法,我计划在未来的期权交易中推广它。因为我现在在工作,所以我并不经常交易。我在孩子睡觉的时候交易。我也一直用算法监控我的结果,检查它的表现,或者它是否与我的测试一致。这样我也可以不断改进我的算法。
我了解市场的行为,基于我的直觉,我利用它们。回溯测试只是主干,所以如果您不测试您的策略并开始部署,事情可能会变得很糟糕。
我的交易很短,我只是想在早期获得高百分比,这是一个日内交易。当我编码我的算法时,我尽量避免下降。所以,很短。
你能分享一下 EPAT 是如何帮助你提高交易知识的吗?
我想我是我的 EPAT 团队中少数几个没有很强的交易操作经验或传统交易背景的人之一,而大多数学生都有。我不得不补上很多东西。
在 EPAT,我可以问任何问题,一切都可以理解,我也能很快跟上。此外,对数学和计算机科学知识的爱好很有帮助——它们都很有用。
我在电脑前的禁闭期间利用我的时间再次阅读,再次聆听讲座。
你通过 EPAT 学习算法交易的动机是什么?
我唯一的目标是从高层次和低层次的角度理解交易是如何运作的,并开始建立一个算法来帮助我实现这个目标。这是关于找到正确的微调。仅此而已。
拥有一些关于市场如何运作的金融信息需要纯粹的金融培训,因为当你建立一个策略时,你需要了解经济如何运作,货币如何共同运作,就业如何影响货币。我认为你需要一个非常强大的科学方法来解决这个问题。这是生存的唯一方法。
EPAT 非常擅长给出基本面,让我们了解市场是如何运作的。我期待成为 LinkedIn 上 EPAT 校友社区的一员,这是专门为 EPATians 人准备的。如果你想通过交易获得额外的收入来源,并想知道如何去做,一定要去看看。
你会给有抱负的算法交易者和量化分析师什么信息?
背景不重要——我们都没有相同的背景。我没有,但是我对编码很放心。有些人完全相反,他们只知道交易,而有些人对策略统计概念很熟悉。
有洞察力——了解你的优势和劣势,并专注于改善优势和克服劣势。
找到你的动力 -你也需要有强烈的动力。我有一个清晰的意图去构建一个算法,并且为之努力是一个强大的动力。我不断进化,不断尝试新事物,以提高回报,避免我的回报波动性下降——从我的算法。
理解——这真的是要很好地理解你想在哪里犯错,因为交易是所有事情的一部分。其实就是一点知识,一点编码,一点数学,一点直觉等等。什么都有一点。你需要掌握所有这些领域才能高效。
超越极限——不要限制自己,随着技术不断学习、提高和进化。这样明天如果有新的东西进入市场,你就能做好准备。
技能提升 -学习增加你的个性技能。你尝试新的东西,尝试看看什么是有效的,最终,你掌握了这门学科。
实现 - EPAT 对你进行全方位的培训-这不仅仅是一次性的培训。我鼓励每一个正在寻找新机会学习或进入算法交易领域的人,这是一个非常坚实的训练。讲师们非常博学,他们非常可信。
向一些像你一样优秀的人学习,他们经历了完整的旅程,对那些希望成为算法和量化交易领域的一部分的人很有帮助。
谢谢你的坦诚,吉勒。和你交谈很愉快。我们相信你的话将激励我们的读者创造他们自己的成功故事。
算法交易(EPAT)的高管课程是一门综合课程,涵盖的主题从统计学和计量经济学到金融计算和技术,包括机器学习等等。开始你的探索,与 EPAT 一起提升你的算法交易知识。点击查看。
在 Spotify 、 RSS 或谷歌播客上听吉勒完整的故事。
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
朱莉娅简介
安舒尔·塔亚尔
本文介绍了专门为科学计算设计的 Julia 编程语言,它解决了“双语言问题”,即它提供了与 C 相当的性能以及 Python 和 r 的动态特性。
这一系列的文章将带你开始 Julia 编程的旅程,到回溯测试并在其中实现实时交易策略。
这是本系列的第一篇文章,包含以下几个部分
- 朱莉娅是什么?
- 为什么我们需要另一种编程语言?
- Julia 比 Python 快还是比 R 快?
- 如何安装 Julia?
- 如何在 Jupyter 笔记本中运行 Julia?
- 如何在 Julia 中安装包?
- Julia 中的基本包
- Julia 算法交易包
****茱莉亚是什么?T3】
Julia 是一种专门为高效数值计算设计的高性能编程语言。它旨在提供高计算速度和易于编写的编程语言。
Julia 项目始于 2009 年,并于 2012 年通过一篇博客文章作为开源语言(在麻省理工学院许可下)发布。2018 年发布了 Julia 1.0。随着科学界意识到其潜力,Julia 的用户群已经广泛增长。截至 2021 年 7 月,朱莉娅拥有 203,400+ GitHub 明星,提供 6000+注册包,下载量超过 2900 万次。
****为什么我们需要另一种编程语言?T3】
科学界一直面临着编程的高性能和动态性之间的权衡。像 Matlab、R 或 Python 这样的编程语言在科学界被广泛使用。
然而,当涉及到解决需要极高计算能力的挑战时,代码必须用 C 或 Fortran 等语言重新编写才能实现这一目标。这就是所谓的“双语问题”。
Julia 声称通过结合两个世界的优点来解决这一挑战,即速度和易于编写的语言。
****Julia 比 Python 快还是比 R 快?T3】
让我们来看一些基准测试。
计算时间
下图显示了各种语言在不同操作上的计算时间(图例中提到)。纵轴显示了针对 C 实现标准化的每个基准时间。
正如我们所见,Julia 在大多数操作中最接近 C,在某些情况下落后于 LuaJIT 和 Rust。它比 Python 或 r 要快得多。关于这个基准测试的更多细节可以在这里找到。

Source: https://julialang.org/benchmarks/
大型数据集上的多重操作
下图比较了各种包中的groupby函数的任务。下图中的“查询 1”是执行的测试之一,DF.jl(一个 Julia 包)被证明是最快的。还有许多其他的查询在这里执行。

Source: https://h2oai.github.io/db-benchmark/
对于查询 1:“sum v1 by Id1”:100 组大约 10,000,000 行,Python (pandas 包)和 R (dplyr 包)分别导致内部错误和内存不足错误,而 Julia 第一次用了 2.4 秒,第二次用了 1.8 秒。
****如何安装 Julia?T3】
让我们开始安装吧。以下是安装 Julia 的步骤:
第一步
从这里下载当前稳定版的 Julia。
第二步
提取文件并使用以下命令设置 Julia:
在 Linux 上安装 Julia:
- tar -xvzf "下载文件名称"

Installing Julia on Linux
- sudo cp -r julia-1.6.3 /opt/
- sudo ln-s/opt/Julia-1 . 6 . 3/bin/Julia/usr/local/bin/Julia
- 打开终端,键入“julia”:

Installing Julia on Linux
在 Mac 上安装 Julia:
- 运行下载的。dmg 文件
- 将 Julia 文件移动到应用程序文件夹
- 点击朱莉娅图标。

Installing Julia on Mac

Installing Julia on Mac
在 Windows 上安装 Julia:
- 运行下载的。exe 文件
- 选择安装目录

Installing Julia on Windows
选中“将 Julia 添加到路径”复选框

Add Julia to path Windows
选中“运行朱莉娅”复选框

Run Julia on Windows
现在,一个 Julia 窗口已经打开,您可以在 Julia 中编写代码了!
****如何在 Jupyter 笔记本中运行 Julia?T3】
要在 Jupyter 笔记本中运行 Julia,您必须添加一个提供该功能的包“IJulia”。在 Julia 终端中,键入:
- 使用 Pkg
- Pkg.add("IJulia ")

Run Julia in Jupyter Notebook
Julia 现已添加到您的 Jupyter 笔记本中。
- 在 anaconda 终端上输入“jupyter-notebook ”,打开 Jupyter 笔记本。
- 在右上角,点击“新建”。
- 从下拉菜单中选择“Julia 1.6.3”。
- 您现在已经准备好使用 Jupyter Notebook 在 Julia 中编写代码了!

Code Julia using Jupyter Notebook
如何在 Julia 中安装包?
开始使用任何编程语言的第一步是安装用于不同目的的各种包。
要在 Julia 中添加任何包,请遵循以下步骤:
- 使用 Pkg
- Pkg.add("包名")
- 使用“包名”
如果你熟悉 Python,Julia 中的“using”关键字相当于 Python 中的“import”,Python 中的“pip install package-name”相当于“Pkg.add("package-name ")”。“Pkg”是 Julia 中的包管理器。
比如——下面截图是添加包“CSV.jl”的例子,用来读”。csv”文件。

Adding Package in Julia
****基本包在茱莉亚T3 里
前面提到过,Julia 里有 6000+注册包。
以下是一些帮助您开始最常见操作的软件包:
- CSV.jl 用于读取。csv 文件,
- XLSX.jl 可用于读取 excel 表格,
- JLD.jl 用于保存和加载 Julia 变量,
- DataFrames.jl 用于管理数据帧。
- Plots.jl 用于生成图。
- Images.jl 用于图像处理、
- RCall.jl 和 PyCall.jl 用于在 Julia 中使用 R 和 Python 代码。
对于更具体的应用,使用这些包:
- Mocha.jl 用于训练神经网络,
- Tensorflow.jl 和 ScikitLearn.jl 对于 ML 车型
- 微分方程. jl 解微分方程。
这些包裹将是你朱莉娅旅程的一个良好起点。还有很多更有用的包,我们稍后会谈到。
茱莉亚包进行算法交易
算法交易是在某些情况下需要密集计算能力的领域的一个例子。在这样一个领域,使用易于编写的编程语言更快地处理数据可以为交易者和投资者增加很多价值。
它还可以为那些希望开始并更积极参与的非专业程序员打开空间。
Julia 拥有各种可用于量化金融的注册软件包,例如:
- MarketTechnicals.jl -用于金融时间序列的技术分析。
- financial derivatives . JL-用于金融衍生品建模和定价
- 目标是提供一个用 C++编写的 Julia 版本的 QuantLib。
- QuantEcon.jl -用于数量经济学
- Jib.jl -交互式代理 API 的 Julia 实现
- 用 Julia 编写的高度优化的工作日计算器
- Quandl.jl -用于来自 Quandl 的数据
- YStockData.jl -来自雅虎财经的数据
- TradingLogic.jl -用于回溯测试和实时交易
由于 Julia 仍然是一门新兴语言,所以其中一些软件包不是很稳定。它们应该让我们了解定量金融中这种语言的可能性和热情。
参考书目
结论
本文介绍了 Julia 编程语言。我们研究了创建 Julia 背后的想法,如何设置它,以及其中一些可用包的想法。这篇文章提供了 Julia 入门的动力。
我们生活在技术革命的时代;我们需要跟上技术进步;我们需要适应,就像我们周围的其他事物一样,为了生存并发挥出我们最好的一面。
正如玛丽·居里曾经说过的:
****“人生没有什么可怕的;它只是被理解。现在是时候了解更多,这样我们就可以少一些恐惧。”T3】
所以,我们来了解一下!
本系列的后续文章将深入探讨基本操作和语法、数据操作、可视化、分析等等。敬请期待!
如果你是一名交易员、程序员、学生或希望从事算法交易的人,那么我们全面的为期 6 个月的算法交易(EPAT)执行课程(T1)正是你所需要的,该课程由行业专家、交易从业者和坚定的支持者教授,如 E. P. Chan 博士、Euan Sinclair 博士等。
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
Julia 编程的基本要点
安舒尔·塔亚尔
这是我在 Julia 编程系列中的第二篇文章。在我之前的博客中,我向你介绍了 Julia 编程,并讨论了它的起源和特性。在这里,我将使用 Julia 编程的基本语法。
我将本文分为以下几个部分:
让我们从学习任何新的编程语言的最传统的方法开始。

对于前几个代码片段,我特意使用了我的 Julia 控制台中的屏幕截图,以便您更好地了解它。
基本算术运算
让我们用 Julia 做一些基本的算术运算。执行同一操作有多种方式。

以下是如何编写复数并对其进行基本运算的方法。

当你将一个浮点数加到一个整数上时,它返回一个浮点数。
## Returns a float
1.0 + 2
Output: 3.0
让我们看看组织。
## Division
1/2
Output: 0.5
指数运算可以使用“^”符号来完成。
5^2
Output: 25
朱莉娅也能对分数进行运算。
## Fractional numbers
1//2
## Adding fractional numbers
1//12 + 3//29
Output: 65//348
常规操作
编程时,查看变量的类型至关重要。以下是在 Julia 中可以做到的方法。
typeof(1)
typeof(1.0)
typeof('a')
typeof("Test")
Output:
Int64
Float64
Char
String
这里需要注意的一点是,字符是用单引号定义的,而字符串是用双引号定义的。单引号中的字符串将返回错误。
让我们看看如何将一种变量类型转换成另一种类型。
将浮点数转换为整数。
# Method 1
convert(Int32, 1.0)
# Method 2
Int64(4.0)
Output:
1
4
以下示例显示了在 Julia 中注释多行代码的方法。
#=
Your comments here
Your comments here
Your comments here
=#
单行注释可以写在“#”之后。
当您遇到困难时,这些文档会派上用场。以下是你如何找到任何函数的细节-
? log
Output: log(b,x) Compute the base blogarithm of x. Throws DomainError for negative Real arguments.
Examples
julia> log(4,8)
1.5
julia> log(4,2)
0.5
用线串
现在,让我们看看如何在 Julia 中使用字符串。
"This is a string."
Output: This is a string.
可以使用""或""" ""来定义字符串。第二个版本的用例是当你需要在字符串中使用'时。比如说-
""" This is the use case for "triple-quote" string definition method."""
Output: This is the use case for \"triple-quote\" string definition method.
下面是我们如何使用类似字符串的变量。
variable = "Julia"
"This is how variables can be used inside strings in $variable."
Output: This is how variables can be used inside strings in Julia.
也可以对字符串执行求幂运算。这里有一个例子-
variable^3
Output: JuliaJuliaJulia
让我们继续讨论操作字符串的方法。做同一件事有多种方法。让我们看看如何添加 2 个字符串。
# Method 1
string("This is how we", " merge strings")
string("This is how we merge ", 2, " strings with a number in-between")
# Method 2
var_1 = "This is method 2"
var_2 = "of concatenating strings in Julia"
var_1 * " " * var_2
# Method 3
var_3 = "This is method 3"
"$var_3 $var_2"
Output:
This is how we merge strings
This is how we merge 2 strings with a number in-between
This is method 2 of concatenating strings in Julia
This is method 3 of concatenating strings in Julia
数据结构
数据结构是任何编程语言的组成部分。它们提供了不同的方法来组织数据,以便有效地使用它们。
元组
元组是一种不能修改的数据结构。下面是定义元组的方法。
tuples = (1, 2, 3)
typeof(tuples)
Output:
(1, 2, 3)
Tuple{Int64, Int64, Int64}
Julia 中的索引从 1 开始。以下是在 Julia 中访问任何数据结构的第一个和最后一个元素的方法。
# Accessing the first element
tuples[1]
# Accessing the last element
tuples[end]
# [10] [11] Negative indexing doesn't work in Julia
tuples[-1]
# Tuples can't be modified
push!(tuples, 2)
Output:
1
3
BoundsError: attempt to access Tuple{Int64, Int64, Int64} at index [-1]
Stacktrace:
[1] getindex(t::Tuple, i::Int64)
@ Base ./tuple.jl:29
[2] top-level scope
@ In[30]:2
[3] eval
@ ./boot.jl:360 [inlined]
[4] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1116
MethodError: no method matching push!(::Tuple{Int64, Int64, Int64}, ::Int64)
Closest candidates are:
push!(::Any, ::Any, ::Any) at abstractarray.jl:2387
push!(::Any, ::Any, ::Any, ::Any...) at abstractarray.jl:2388
push!(::AbstractChannel, ::Any) at channels.jl:10
...
Stacktrace:
[1] top-level scope
@ In[33]:2
[2] eval
@ ./boot.jl:360 [inlined]
[3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1116
你可以这样合并元组-
# Concatenating tuples
(tuples..., tuples...)
# This method of adding "..." after any variable can be used to merge any two datatypes
Output:
(1, 2, 3, 1, 2, 3)
向量
向量是一种可以修改的数据结构。这是你如何使用向量的方法。
# Method 1
vector = [8, 1, 9, 12]
# Method 2
vector_2 = [8 ; 1 ; 9 ; 12]
Output:
4-element Vector{Int64}:
8
1
9
12
这就是在朱莉娅身上突变是如何实现的。使用“!”符号,将更改写入原始变量。这相当于 Python 中的“inplace=True”。
# Mutation in Julia
sort(vector)
# The original vector doesn't change
sort!(vector)
# The original vector changes
vector
Output:
4-element Vector{Int64}:
1
8
9
12
若要执行基于元素的操作,请使用“.”接线员。
vector + 1 #这个不行
vector .+ 1
# Adding vectors
vector + vector_2
Output:
4-element Vector{Int64}:
2
9
10
13
4-element Vector{Int64}:
2
16
18
24
现在,向量可以包含不同数据类型的变量。这里有一个例子-
vector_3 = [1, 5, "foo", 1+3im]
Output:
4-element Vector{Any}:
1
5
"foo"
1 + 3im
请注意,vector 类型被假定为“Any ”,因为存在不同数据类型的变量。
我们来看看数列的生成方法。下面是一个生成从 1 到 10、间距为 2 的序列的示例。
seq = [1:2:10;]
这是输出的样子。
Output:
5-element Vector{Int64}:
1
3
5
7
9
字典
现在我们继续创建字典。在编程语言中,字典用于存储关于唯一变量的信息。
就像人类语言词典中的每个单词都有一个相关的含义一样,在 Julia 中,每个键都有一个相关的值。这在您想要查找与特定键相关联的值的情况下非常有用。
以下是如何在 Julia 中创建字典的方法。
dictionary = Dict('A' => 1, 'B' => 2)
这是输出的样子-
Output:
Dict{Char, Int64} with 2 entries:
'A' => 1
'B' => 2
既然我们已经创建了一个字典,我们想访问它的各种元素。我们可以这样做。
# Accessing the keys
keys(dictionary)
# Accessing the values associated with each key
values(dictionary)
Output:
KeySet for a Dict{Char, Int64} with 2 entries. Keys:
'A'
'B'
ValueIterator for a Dict{Char, Int64} with 2 entries. Values:
1
2
让我们给字典增加一个新条目。
# Adding a new entry
merge!(dictionary, Dict('J' => 23))
Output:
Dict{Char, Int64} with 3 entries:
'J' => 23
'A' => 1
'B' => 2
请注意“!”符号使改变永久化。
现在让我们删除一个条目。
## Removing an entry permanently from a dictionary
pop!(dictionary, 'J')
dictionary
Output:
Dict{Char, Int64} with 2 entries:
'A' => 1
'B' => 2
使用矩阵
矩阵是用向量的向量表示的一组数字。以下是创建矩阵的方法。
matrix_1 = [[1 2 3 ]; [4 5 6]]
它看起来是这样的:
Output:
2×3 Matrix{Int64}:
1 2 3
4 5 6
让我们看看矩阵中的其他各种运算。
# Size of a matrix
print("This size of the matrix is" , size(matrix_1))
# Matrix
matrix_2 = [[2 2 0 ]; [2 7 9]]
#Transpose of a matrix
matrix_2'
# Accessing matrix elements
matrix_2[2,3]
matrix_2[1:4]
Output:
The size of the matrix is (2, 3)
2×3 Matrix{Int64}:
2 2 0
2 7 9
9
4-element Vector{Int64}:
2
2
2
7
现在让我们来做矩阵的加法和乘法。
# Adding matrices
matrix_2 + matrix_1
matrix_3 = [[2 3] ; [5 6] ; [4 5]]
# Multiplying matrices
matrix_1 * matrix_3
The output of addition is -
2×3 Matrix{Int64}:
3 4 3
6 12 15
The output of multiplication is -
2×2 Matrix{Int64}:
24 30
57 72
使用“.”在 Julia 中执行 elementwise 操作符号。任何后跟“.”的操作会表演。这里有一个取矩阵中每个元素的对数的例子。它相当于 Python 中的 map()函数
# element wise operation.
log.(matrix_1)
Output:
2×3 Matrix{Float64}:
0.0 0.693147 1.09861
1.38629 1.60944 1.79176
让我们创建一个 0 和 1 的矩阵。您可以使用函数 0()和 1()来实现这一点。
zero = zeros(3,4)
one = ones(2,3)
Output:
3×4 Matrix{Float64}:
0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0
2×3 Matrix{Float64}:
1.0 1.0 1.0
1.0 1.0 1.0
让我们看看如何生成随机值。
rand_1 = rand(5)
# Random values in 2D
rand_2 = rand(5, 2)
# Random values in 3D
rand_3 = rand(3, 2, 2)
Output:
5-element Vector{Float64}:
0.24942793903668203
0.8454642816997531
0.8538602946052574
0.21154126925067507
0.07873330355017316
5×2 Matrix{Float64}:
0.706975 0.935989
0.494324 0.988657
0.994824 0.943832
0.44183 0.404011
0.802337 0.124313
3×2×2 Array{Float64, 3}:
[:, :, 1] =
0.443337 0.813706
0.958816 0.53124
0.203751 0.951473
[:, :, 2] =
0.125259 0.761672
0.440907 0.0505402
0.161741 0.672215
环
循环有助于重复执行相同的任务。编程中使用了多种类型的循环。大多数情况下,它们是:
- For loop -当要运行的迭代次数事先已知时,使用这种类型的循环。
- While loop -当迭代次数取决于条件时,使用这种类型的循环。
让我们看看如何在 Julia 中创建它们。
## While loop
var = 0
while var < 10
var += 1
println(var)
end
Output:
1
2
3
4
5
6
7
8
9
10
## For loop
# Method 1
for i in 1:10
println(i)
end
# Method 2
colleagues = ["Vivek", "Jay", "Mario", "Udisha"]
for colleague in colleagues
println(colleague)
end
# Method 3
c = [i+j for i in 1:3, j in 1:5]
Output:
The output of method 1 -
1
2
3
4
5
6
7
8
9
10
The output of method 2 -
Vivek
Jay
Mario
Udisha
The output of method 3 -
3×5 Matrix{Int64}:
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
在任何编程语言中,都有多种方法来执行相同的操作。请随意采取自己的方法。
条件语句
让我们继续讨论条件语句。这些是 if-else 条件语句,您希望在某个事件发生时执行某个操作。下面是控制流程。
语法是这样的
if condition 1
println(“Statements if condition 1 is true”)
else
println(“Statements if condition 1 is false”)
end
这是你可以做到的。
var_1 = 31
var_2 = 45
# Method 1
if var_1 > var_2
println("$var_1 is larger than $var_2")
elseif var_2 > var_1
println("$var_2 is larger than $var_1")
else
println("None")
end
# Method 2
# condition ? True:False
(var_1 > var_2) ? var_1 : var_2
# Method 3
# && is logical "and" operator
(var_1 > var_2) && [22] println("$var_1 is larger than $var_2")
(var_2 > var_1) && println("$var_2 is larger than $var_1")
Output:
45 is larger than 31
45
false
45 is larger than 31
功能
函数是一组编写在一起的指令,这样它们就可以多次使用,而无需重复编写代码。
创建函数还有助于轻松调试代码,因为您可以查看单个块(函数)并找出有错误的块。
下面是我们如何在 Julia 中编写函数:
# Method 1
function power_5(var_1)
return var_1^5
end
# Calling the function
power_5(4)
# Method 2
power_5(x) = x^5
power_5(4)
Output:
1024
1024
在 Julia 中使用 R 和 Python 代码
有时,您可能希望使用 R 或 Python 代码,因为在 Julia 中可能没有执行某些操作的库。
然而,使用两种语言来执行某个操作可能是一个挑战。因此,Julia 通过使用“PyCall”和“RCall”包提供了使用 R 和 Python 代码的选项。
如何在 Julia 中使用 Python 代码
以下是如何在 Julia 中使用 Python 代码的方法。
# Install the "PyCall" package for Python
using Pkg
Pkg.add("PyCall")
using PyCall
## Importing numpy package from Python
np = pyimport("numpy")
## Using numpy package in Julia
np.array([1,2,3])
Output:
3-element Vector{Int64}:
1
2
3
如何在 Julia 中使用 R 代码
让我们看一个在 Julia 中使用 R 的例子。
# Install "RCall" package for R
Pkg.add("RCall")
using RCall
# There are several ways to call R code
# Method 1
# Calling the mean() function from R
rcall(:mean, [1,2,3])
# Method 2 for user-defined functions
R"""
power_4 <- function(x)
{
return(x^4)
}"""
## Calling the defined function
rcall(:power_4, 5)
Output:
RObject{RealSxp}
[1] 2
RObject{RealSxp}
[1] 625
关于使用 RCall 包的更多细节,你可以参考这里的。
Python 与 Julia——基本操作的语法比较
| 功能 | Python | 朱莉娅 |
| 列向量 | [1, 2, 3] | [1,2,3] |
| 单行矩阵 | [[1], [2], [3]] | [1 2 3] |
| 数字序列 | 范围(1,10,2) | [1:2:10; ] |
| [数]矩阵 | [[1,2] , [3,4]] | [1 2; 3 4] |
| 随机数 | 随机的 | 兰特(4.5) |
| 变化 | 原地=真 | ! |
| 矩阵到向量 | 扁平() | 一个[:] |
| 矩阵的共轭 | A.conj() | 一个 |
| 元素式操作 | 地图() | 。 |
| 力量 | var**2 | var^2 |
| 索引 | 从 0 开始 | 从 1 开始 |
| 最大值 | 最大值(A) | 最大(A) |
| 最小值 | 最小(A) | 最低(A) |
| For 循环 | 对于 i in 范围(n):
命令 | 对于 i in 1:n
命令
结束 |
| While 循环 | 当 i <=n 时: | 当 i <=n 时 |
| 如果-否则 | 如果我<=m:
命令
否则:
命令 | 如果我<=m
命令
否则
命令
结束 |
| 临时功能 | y =λx:x * * 5 | Y = x -> x^5 |
| 功能 | def func(y,x):
返回 y + 3*x | func(y,x) = y + 3x
或
函数 func(y,x)
返回 y + 3x
结束 |
结论
在本文中,我们从代码片段开始。这个想法是向您介绍这种编程语言的基本语法和可能性。
下一篇文章将向您介绍 Julia 中的数据可视化技术。在那之前,你可以自由探索和创造你自己的朱莉娅之旅!
然而,如果你想从事算法交易,那么我们由行业专家、交易从业者和中坚分子如 E. P. Chan 博士、Euan Sinclair 博士等教授的综合算法交易课程正适合你。立即注册!
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
Jupyter 笔记本教程:安装,组件和魔术命令
原文:https://blog.quantinsti.com/jupyter-notebook-tutorial-installation-components-magic-commands/
杰伊·帕尔马
这篇关于 Jupyter 笔记本(以前称为 IPython 笔记本)的文章不需要任何先决知识,也不假定您熟悉该框架。这篇博客是一篇介绍性文章,我将主要回答以下问题:
- 什么是 Jupyter 笔记本?
- 如何安装 Jupyter 笔记本环境?
- 如何运行或打开 Jupyter 笔记本?
- Jupyter 笔记本有哪些不同的组件?
- Jupyter 笔记本中的单元格是什么?
- 如何用 Markdown 语言写作?
- 朱庇特笔记本里有哪些神奇的命令?
- 如何下载分享 Jupyter 笔记本?
阅读本博客后,你将能够:
- 安装 Jupyter 笔记本环境
- 打开木星笔记本电脑
- 了解各种组件
- 下载并分享木星笔记本
除了上面的问题,你还将在 Jupyter 笔记本上学习 Markdown 语言的写作。先从第一个问题开始。
Jupyter 笔记本是什么?
如果你是学生,你必须使用课堂笔记本来记各种课堂笔记;如果你是商务人士,你可能会使用书写板来记下重要的笔记,无论是为了自己的目的还是为了向他人演示。
记录在学生笔记本上的典型内容可以是各种格式的文本,如粗体和斜体,或者是表格、数学方程式,或者是手绘图像等创造性的东西。不要忘了,如果是程序员的笔记本,里面也会包含很多编程代码。
现在,你想继续这种在网上一个地方写所有这些东西的做法。朱庇特笔记本来拯救我们了。它是一个基于网络的平台,允许你在一个地方编写各种格式的叙述性文本,包括表格或图像,用各种编程语言编写方程和代码。
除此之外,Jupyter notebook 还允许你编写 LaTeX 代码,包含 HTML 代码,嵌入一个 YouTube 视频。我稍后会谈到如何做到这一点,但首先让我们看看它的官方文档是怎么说的:
Jupyter Notebook 是一个开源的 web 应用程序,允许您创建和共享包含实时代码、等式、可视化和叙述性文本的文档。用途包括数据清理和转换、数值模拟、统计建模、数据可视化、机器学习等等。
为了了解 Jupyter 笔记本的外观,请务必观看下面由 Quantra 制作的视频,该视频提供了关于它的简短描述:
https://www.youtube.com/embed/uWhN3tEYxZI?rel=0
您也可以参考以下列表,直观了解 Jupyter 笔记本的外观:
背景: Jupyter 笔记本是 Jupyter 项目的两个方面之一,该项目开始开发跨数十种编程语言的交互式计算的开源、开放标准。另一个是 JupyterLab ,这是 Jupyter 笔记本界面的高级版本。然而,两者都以相似的方式运行。
现在你对 Jupyter 笔记本有了一个概念,让我们来看看它的安装过程。
如何安装 Jupyter 环境?
jupyter notebook
如果上述命令失败,您可以继续阅读本节。否则,您可以安全地跳过这一步,继续下一节。如果该命令失败,并且您得到类似(不确切)如下所示的错误,请继续阅读本节以了解安装过程。

可以在工作站上安装 Python 的两种流行方法。他们是
- 使用 Anaconda 发行版安装 Python
- 安装原始 Python
虽然 Jupyter 运行许多编程语言的代码,但 Python 是安装 Jupyter 笔记本的一个要求。
使用 anaconda 安装 jupiter 笔记本
如果您已经使用 Anaconda 发行版安装了 Python,就可以开始了。Anaconda 发行版包括 Python、Jupyter Notebook 和其他科学界常用的软件包。
如果您没有安装任何版本的 Python,建议您使用 Anaconda 发行版来安装 Python。安装 Python 应该很简单。
- 首先,下载 Anaconda 发行版的最新版本。
- 其次,安装 Anaconda 的下载版本。
嘭!您已经安装了 Jupyter 笔记本。要检查安装是否成功,并运行 Jupyter 记事本,请在 Anaconda 提示符或命令提示符(Windows)或终端(Mac/Linux)中运行以下命令。
jupyter notebook
如果在运行上面的命令时出现错误(这是不应该发生的),请尝试下面的方法。
使用 pip 安装 jupiter 笔记本
当你直接从它的官网安装 Python 时,它的标准库中并不包含 Jupyter Notebook。在这种情况下,您需要使用 pip 安装 Jupyter Notebook。流程如下:
- 打开新的命令提示符(Windows)或终端(Mac/Linux)
- 执行以下命令安装 jupiter notebook
python -m pip install jupyter
或者如果你用的是 Python 3
python3 -m pip install jupyter
或者干脆就是
pip install jupyter
恭喜你,你已经安装了 Jupyter 笔记本!继续经营下去。
如何运行或打开 Jupyter 笔记本?
在您的计算机上安装了 Jupyter 笔记本后,您就可以运行笔记本服务器了。
如果你正在从头开始阅读这篇文章,那么你可能已经知道如何运行 Jupyter 笔记本。然而,如果你跳过了前面的章节,直接跳到这里,下面提到的步骤显示了如何运行 Jupyter 笔记本。
首先,在您的工作站上打开一个新的命令提示符(Windows)或终端(Mac/Linux ),然后执行以下命令:
jupyter notebook
在执行上述命令时,终端或命令提示符将打印一些关于正在加载的 Jupyter 笔记本的信息。它可能看起来像下面的快照所示。请注意,每个工作站打印的信息会有所不同。

让航站楼保持原样开放。然后,它将使用命令提示符或终端中提到的 URL 打开默认的 web 浏览器。
当笔记本在您的浏览器中打开时,您将看到笔记本主页,如下图所示。这将列出笔记本服务器启动目录中的笔记本文件和子目录。

如果您使用的是 Python 的 Anaconda 发行版,您可以打开下面显示的 (使用开始菜单(Windows)、应用程序文件夹(Mac)或软件文件夹(Linux)),它允许您使用点击来打开 Jupyter 笔记本。

Navigator 应用程序打开后,您可以单击笔记本对话框中的 Launch 按钮来启动 Jupyter 笔记本应用程序。单击启动按钮后,您将看到我们之前看到的主页。
现在,让我们了解 Jupyter 环境是如何工作的,不过我不会从技术角度讲。由于 Jupyter Notebook 是一个 web 应用程序,它在服务器-客户机架构上工作。当您执行命令jupyter notebook时,Jupyter 软件在执行该命令的控制台中本地启动服务器,在 web 浏览器中打开的 Jupyter 笔记本主页作为客户端工作。无论您执行什么操作,即创建或上传新笔记本,还是保存现有笔记本,您正在使用的客户端笔记本都将与运行在控制台/命令行中的服务器保持通信。
为了让笔记本流畅运行,我们需要保持命令提示符或终端打开,即使它已经打开了主页。如果关闭它,您正在使用的笔记本将无法与本地服务器通信,因此,您所做的任何工作都不会保存在永久内存中。
下一步是学习 Jupyter 软件的各种组件。
Jupyter 笔记本有哪些不同的组件?
我假设你是按照本文的时间顺序。如果是这样,那么你已经学会了什么是 Jupyter 笔记本,如何安装,如何运行和打开它。如果没有,那么我会建议你浏览它们以获得一个整体的画面。尽管如此,如果你已经熟悉这些部分,继续学习。
在这一节中,我将解释 Jupyter 软件的各种组件。当您启动 Jupyter 笔记本应用程序时,您将看到主页。让我们开始探索吧。下面显示的是您之前看到的主页的快照,但是为每个组件都指定了编号,以便于我们学习。

以下是快照中显示的每个编号点的描述。
- Jupyter 服务器运行在这个 URL 上。如果您在本地主机上运行 Jupyter,这将是您启动 Jupyter 软件时控制台中显示的相同 URL。
- 文件选项卡列出了主文件夹中的目录和文件,主文件夹通常是登录到计算机的用户的主目录。
- 运行选项卡显示所有打开的笔记本列表。当你开始一个新的笔记本或打开一个现有的笔记本时,一个内核将被附加到它上面。所有这些正在运行的内核都将列在该选项卡下。
- 如果您想打开现有的 Jupyter 笔记本(以。ipynb 扩展名),它需要在“文件”选项卡中列出。如果没有列出,您需要使用上传按钮来上传,这将打开一个文件浏览器供您加载文件。
- 退出和注销按钮允许你注销和关闭服务器。当您退出时,所有打开的笔记本都将关闭,并且服务器将关闭。
- 新建按钮允许您创建新的笔记本、文本文件、文件夹或终端。下面的快照显示了您可以用 Python、Julia 和 R 语言创建一个笔记本。您创建的笔记本将与各自的内核相关联。当你按照上一节的方法安装 Jupyter 环境时,很有可能你的内核只有一个选项,那就是 Python。为了添加新的语言,你可以参考。

您可以通过单击相应的语言名称来创建新的笔记本。无论您选择哪种语言,您创建的新笔记本都将具有相同的外观。不同之处在于附加在它上面的内核。如果我在打开的下拉菜单中点击 Python 3 ,将会创建一个附加了 Python 内核的新笔记本。下面的快照显示了空的 Jupyter 笔记本。(明显没有数字:p)

新创建的笔记本具有各种组件,如下所述:
- 标题是笔记本的名称。您设置的标题将成为笔记本的文件名,扩展名为。ipynb 代表 IPython 笔记本。
- 检查点向您显示笔记本上次保存的时间。
- 菜单栏列出了各种菜单,允许你下载笔记本(多种格式),打开一个新的笔记本,编辑笔记本,定制标题,操作单元格,轻推内核,访问帮助等等。
- 快捷栏列出了常用的快捷方式,如保存保存笔记本、添加单元格、剪切、复制操作单元格、向上和向下导航单元格、运行执行单元格等等。您添加到 Jupyter 的任何扩展都将在此栏上有其快捷方式。我们将在本文的后半部分了解什么是扩展。
- 内核显示了当前与笔记本相关的内核。在我们的例子中,内核是 Python 3 。内核旁边的圆圈表示内核的状态。空心圆表示它准备好接受输入并运行单元。当内核正在执行代码或处理任何事情时,它会变成固态。
- 一个单元是笔记本的一部分,所有神奇的事情都发生在这里。下一节将详细解释这些单元。
Jupyter 笔记本中的单元格是什么?
您编写的任何文本或代码都将放入单元格中。电池是任何 Jupyter 笔记本的组成部分。单元格有两种工作模式:命令和编辑模式,主要有三种:编码、降价和原始 NBConvert 。
命令模式允许你操作单元格。也就是说,您执行的操作与整个细胞有关。命令模式由带有蓝色指示的单元格周围的灰色边框表示,如下图所示。

当单元格处于命令模式时,您可以执行的一些操作(及其快捷键)如下:
- 插入一个新的单元格-键在
A中插入一个新的单元格在上面,而B在当前单元格下面插入一个新的单元格。- 当插入新单元时,默认情况下,它将是代码类型单元。我们一会儿会看各种类型。
- 合并现有单元格-
Shift-M允许合并选中的单元格,或者将当前单元格与当前单元格下的单元格合并。 - 复制单元格-
C复制选中的单元格。 - 剪切细胞-
X剪切选中的细胞。 - 粘贴单元格-使用
Shift-V粘贴单元格。 - 删除现有单元格-按
D,D删除当前单元格。小心这条捷径。 - 更改单元格类型——快捷键
Y将单元格类型更改为代码 ,M将单元格类型更改为降价,R将单元格类型更改为原始。 - 将单元格转换成标题——Jupyter 笔记本中有六种标题类型。这仅适用于降价单元类型。标题 1 是最大标题,标题 6 是最小标题。
1、2、3、4、5、6用于将单元格类型更改为各自的标题大小。 - 在现有单元格中查找并替换-按
F打开查找并替换对话框。 - 保存并标记笔记本的检查点——使用
Shift-S保存笔记本。 - 切换单元格中的行号-按
L切换当前单元格中的行号。 - 切换一个单元格的输出-
O允许你切换当前单元格的输出。 - 中断内核——按键
I,I中断内核。也就是说,如果内核正在执行某个进程,它就会停止。 - 滚动笔记本-
Space向下滚动笔记本,Shift-Space向上滚动笔记本。 - 进入编辑模式-按
return键将单元格的模式变为编辑模式。
上面提到的快捷键只在命令模式单元中有效。Jupyter 笔记本电池支持的另一种模式是编辑模式。此模式特别允许您编辑单元格的内容并使用它。您可以通过按下return键或在单元格内点击鼠标进入单元格的编辑模式。当单元格处于编辑模式时,单元格周围的边框变为绿色,如下图所示。

一旦单元格处于编辑模式,您就可以开始编写代码或文本。以下是单元格处于编辑模式时可以执行的一些操作。
- 代码自动完成-使用
Tab键使用该设施。它仅适用于代码类型单元格。在 markdown 单元格中,它将简单地放置制表符。 - code - Jupyter 笔记本的缩进固有地在需要时执行缩进。但是,如果您想要手动更改缩进,请使用
Ctrl-]来缩进代码类型单元格中的代码。在 markdown 单元格中,它将根据 tab 键的规范插入空格。 - 代码的删除——任何时候你想删除代码,使用
Ctrl-[来完成。在 markdown 单元格中,此快捷方式的工作方式类似于Shift-Tab并删除内容。 - 注释一段代码——使用
Ctrl-/注释一段代码。在 markdown 单元格中,此快捷方式不起任何作用。 - 执行一个单元格——一旦你在单元格中写了代码或者文本,你需要执行它来处理你写的内容。有三种主要方法可以做到这一点。
- 运行当前单元格并选择下一个单元格 -使用
Shift-Enter执行该操作。 - 运行选定的单元格 -使用
Ctrl-Enter运行选定的单元格或当前单元格。 - 运行当前单元格并插入新单元格 -按
Alt-Enter执行当前单元格并在当前单元格下插入新单元格。
- 运行当前单元格并选择下一个单元格 -使用
- 分割一个单元格 -使用快捷键
Ctrl-Shift-Minus在光标处将当前单元格分割成两个独立的单元格。 - 进入命令模式——使用
Ctrl-M或按Esc键退出编辑模式,进入命令模式。
到目前为止,您已经多次遇到过代码和降价单元类型。如果你不知道这两者,现在我将详细解释它们。我将只讨论这两种类型;在这篇文章中,我不会涉及 Raw NBConvert 类型。
Jupyter 笔记本电池可以有多种类型。常用的类型有代码和降价。代码类型单元格允许您编写实时编程代码。也就是说,您可以在其中执行任何类型的编程。一旦您运行或执行一个代码单元格,Jupyter notebook 将在单元格下方显示输出。这显示在下面的快照中。

相反,无论在 markdown 单元格中写了什么,都会在单元格中打印出来,如下所示:

上面的快照中有两个单元格。编号为 4 的第一个单元格是代码单元格,它允许在我们使用 Python 内核笔记本时绑定 Python 代码。下一个单元格是写正常文本的 markdown 单元格。
可以看出,代码单元格有一个与之相关的编号,而降价单元格没有任何编号。对代码单元格进行编号有两方面的帮助:首先,它显示了代码执行的顺序,其次,它允许我们直观地区分代码单元格和降价单元格。现在您已经了解了单元格及其工作原理的基础,让我们看看如何使用 markdown。
Jupyter 笔记本里 Markdown 怎么写?
正是降价功能为 Jupyter 环境带来了交互性。Markdown 单元格不仅允许您编写文本,还允许您格式化文本、添加超链接和包含 HTML 代码。此外,它还允许您定义有序和无序列表、插入图像和表格、添加数学方程、用 LaTex 编写等等。它甚至允许您在文本中编写编程代码,而不会丢失任何语法。
一旦有了 markdown 单元格(可以在命令模式下使用快捷键M将 code 单元格转换成 markdown 单元格),就可以开始按照自己想要的方式书写文本了。下面提到的是降价单元格支持的功能。
标题
要创建标题,请使用散列符号#后跟一个空格和标题。这样会创建一个标题或一级标题。如果您想创建子标题,请使用##后跟一个空格和子标题。该笔记本允许创建多达六个级别的标题。每个等级都有相同数量的#标记,如下所示:
# Heading 1 -标题
## Heading 2 -标题
### Heading 3 -副标题
#### Heading 4 -标题四级
##### Heading 5 -标题五级
###### Heading 6 -标题六级
强调
你可以用*或_将文本变成斜体。
| 投入 | 输出 |
|---|---|
*This is italic text.* |
这是斜体文本。 |
_This is italic text._ |
这是斜体文本。 |
你可以用**或__将文本加粗为。
| 投入 | 输出 |
|---|---|
**This is italic text.** |
这是斜体文本。 |
__This is italic text.__ |
这是斜体文本。 |
单一空间字体
如果您想引用文本中的一些代码、文件名或文件路径,您可以使用等宽字体来区分普通文本和monospace字体。您可以用单引号将文本括起来。(`)
This is written in monospace fonts.
换行
您可以使用 HTML 换行符标签<br>在一行中插入回车来换行。
Font Color
您可以通过使用 HTML 字体标签及其颜色属性来改变文本的颜色。例如,要将文本着色为蓝色,可以使用以下代码:
<font color='blue'>The color of this text is blue.</font>
上述代码的输出如下所示:
这篇课文的颜色是蓝色的。
改变font标签的颜色属性来改变文本颜色。记住,并不是所有的降价文本都使用字体标签。因此,请仔细复习。
引用
使用大于号>后跟一个空格来键入或插入块引号。输出将缩进,左边有一条灰色水平线。例如,行> Jupyter makes life easy!的输出如下:
Jupyter 让生活变得简单!
无序列表
您可以使用减号或破折号-后跟一个项目名称来创建一个无序列表。下一次发生在下一行。
- Item 1
- Item 2
T2】
要创建子列表,遵循相同的过程;然而,有了缩进。能否创建如下所示的列表:
- 项目 1
- 项目 1.1
- 项目 1.2
- 项目 1.2.1
- 项目 2
- 项目 2.1
- 项目 2.2
在 Jupyter 中,第一级列表项通常有实心圆,下一级有实心方块,后续级有空心圆。
有序列表
可以通过手动指定项目编号来创建有序列表,例如1,后跟点和空格,最后是项目名称。要创建子列表,过程是相同的。
- 第一章
- 第 1.1 节
- 第二章
- 第 2.1 节
- 第 2.2 节
水平线
您可以使用三个星号***创建一条水平线。
超链接
您可以将任何普通文本转换为超链接,方法是用方括号将它括起来,然后用括号将实际链接括起来。举个例子,
[QuantInsti's Blog]([https://blog.quantinsti.<wbr>com](https://blog.quantinsti.com))
会导致
形象
在 markdown 单元格中插入图像的格式与超链接的格式非常相似。唯一不同的是它在内容前加了前缀!。首先是感叹号,然后是方括号中的图像名称,最后是括号中的 URL。如下所示:
)
或者,您可以使用 HTML 图像标签来插入图像,如下所示:
<img src="[https://dt99qig9iutro.<wbr>cloudfront.net/production/<wbr>images/header-logo-green.png](https://dt99qig9iutro.cloudfront.net/productiimg/header-logo-green.png)" alt="QuantInsti's Logo">
两者都会产生以下结果:

几何形状
通过使用十进制参考数,UTF-8 几何形状可以包含在 Jupyter 笔记本中。使用以下格式插入任何形状。
&#reference_number;
可以插入一个黑色圆圈,如下所示:
●
编程代码
您可以在文本中嵌入编程代码,使用三个反勾号,后跟编程语言名称,并以三个反勾号结尾。下面是文本中嵌入的 Python 代码示例。
```thon
def func(x):
return x**2
```py
类似地,可以编写另一种语言的编程代码。例如,下面的代码是针对 Javascript 的。
```javascript
console.log('Hello World!')
```py
乳胶方程
借助 MathJax,您可以在 markdown 单元格中内联或单独包含数学表达式。要内联输入,等式用$括起来。要在新的一行上单独打印方程,用$$将它们括起来。例如,计算平均值的公式可以写成
$$\mu = \frac{1}{n}\sum_{i=1}^{n} x_i $$
这会导致以下结果:

内联方程可以写成$x_t = \phi x_{t-1} + \epsilon_t$,其结果为

你可以参考这个线程,它列出了可以在 markdown 单元格中使用的各种 LaTeX 命令。
桌子
您可以在减价单元格中创建表格,如下所示:
|This|is|
|-|-|
|a|table|
列由竖线|分隔,行被写入新的一行。生成上表,如下所示:
| 这 | 是 |
|---|---|
| a | 桌子 |
朱庇特笔记本里有哪些神奇的命令?
Jupyter 笔记本软件带有一系列内置命令,在使用时增加了交互性。在 Jupyter 环境中它们被称为魔法命令。这些命令依赖于您正在使用的解释器或内核。要查看哪些魔术命令可用,您可以在代码单元格中运行以下魔术命令:
%lsmagic
这些神奇的命令以%值为前缀。以下是一些常用的魔术命令及其功能:
- 命令会定期自动保存您的笔记本。T1
- 将当前工作目录更改为作为参数给出的新目录。
%clear和%cls命令清除当前单元的输出。%env允许您列出所有环境变量以及设置特定环境变量的值。%history显示以前执行的魔法命令的历史。T1%ls列出当前目录的内容。T1%matplotlib允许您在笔记本内绘制图表。T1%notebook命令增加了绘制图表时的交互性。%pdb允许你调试代码。这个神奇的命令是 Python 调试器的 Jupyter 版本。- 使您能够列出并安装 Jupyter 环境中所有可用的软件包。T1
%who列出全局范围内的所有变量。T1%load从外部脚本插入代码。T1%run允许你运行 Python 代码。T1%time显示单元格执行所用的时间。
如果您使用的是 Anaconda Python,那么上面提到的神奇命令应该没有任何问题。否则,您可能需要安装以下软件包:
- ipython-sql
- cython
Jupyter 笔记本如何下载分享?
作为一名程序员,您经常希望将自己完成的工作与其他同事分享。记住这一点,Jupyter 环境允许您下载多种格式的文件,如 HTML 文件(。html)、LaTeX 文件(。tex)、GitHub 风味降价文件(。md)、PDF 文件(。pdf)、重构文件(。rst),以此类推。文件菜单中的下载为选项允许您以自己选择的格式下载笔记本,如下所示:

当你下载一个笔记本的时候,无论它是什么状态都会被下载。这是已执行单元的输出,任何可能的输出错误都是真实的。因此,准备一个可以共享的笔记本是很重要的。为此,您可以执行以下步骤:
- 进入单元格菜单,选择所有输出选项,最后选择清除选项。此操作将清除所有单元格的输出。
- 接下来,进入内核菜单,选择重启&运行所有选项。该操作将重启内核并执行所有单元。
执行上述步骤后,确保笔记本处于您希望与其他人共享的状态。
除了将笔记本导出到您的本地工作站,您还可以在 GitHub Gists 上创建、列出和加载它。Gists 是一种在云上分享你的工作的方式。你可以在这里找到更多信息。
此外,您还可以使用为多个用户提供 Jupyter 笔记本的 JupyerHub 。换句话说,它是多用户服务器上笔记本电脑的托管平台。
此外,您可以使用 nbviewer 将 Jupyter 笔记本呈现为静态网页。像 RISE 和 nbpresent 这样的平台可以让你将 Jupyter 笔记本转换成幻灯片。
最后的想法
我希望这份 Jupyter 笔记本入门指南为您提供了基础。在这篇由多个部分组成的文章中,首先,我开始解释 Jupyter 笔记本,它的安装过程,在您的工作站上本地运行等等。接下来,在这个过程中,你也接触到了 Jupyter 笔记本的各种组件和键盘快捷键。然后,你学会了用低价语言写作。在那之后,你在朱庇特笔记本上学习了各种魔法指令。最后,您学习了如何下载和共享 Jupyter 笔记本。
感谢阅读。
有许多人可能是 Python 或编程的新手,或者从未创建过任何交易策略。如果你是这两种技能的初学者,学习曲线可能会很陡。然而,你可以通过在这里注册来逐步建立所需的技能,并定期练习我们课程中给出的实践学习练习:人人算法交易。
如果你想学习算法交易的各个方面,那就去看看我们的算法交易(EPAT ) 高管课程。课程涵盖统计学&计量经济学、金融计算&技术和算法&定量交易等培训模块。EPAT 旨在让你具备成为成功交易者的正确技能。现在报名!
免责声明:本文中提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。
Python 中用于对选择的 k 均值聚类算法
原文:https://blog.quantinsti.com/k-means-clustering-pair-selection-python/
拉马克斯·科尔曼
从在你浏览过的文章末尾显示相关文章,到根据你的浏览习惯创建个性化推荐,你会惊讶于你已经与 K-means 算法交互了多少次,而你甚至没有意识到。上面的例子只是日常生活中的例子。当你把目光转向庞大的行业本身时,你会发现这种算法无处不在。定制新闻源、使用相似模式的 bot 或欺诈检测、基于需求和供应预测的库存管理、图像识别,这些只是使用 K-means 算法的几个例子。
在本文中,我们将涵盖以下几点:
我们开始吧!
什么是 K-Means 聚类?
K-Means 聚类是一种无监督的机器学习,它根据相似性对数据进行分组。回想一下,在监督机器学习中,我们为算法提供了我们希望它与标签或我们希望它预测或分类的结果相关联的特征或变量。在无监督的机器学习中,我们只为模型提供特征,然后它自己“学习”关联。
K-Means 是一种在数据集中寻找子组的技术。K-Means 与其他聚类方法的一个区别是,在 K-Means 中,我们有预定数量的聚类,而其他一些技术不需要我们预先定义聚类的数量。
该算法首先将每个数据点随机分配到一个特定的聚类中,任何两个聚类中都没有一个数据点。然后,它计算这些点的质心或平均值。
该算法的目的是减少总的组内变化。换句话说,我们希望将每个点放入一个特定的聚类中,测量距该聚类质心的距离,然后取这些距离的平方和,以获得总的聚类内变化。我们的目标是降低这个值。
分配数据点和计算平方距离的过程继续进行,直到聚类的组成不再有变化,或者换句话说,我们已经最佳地减少了聚类内的变化。
在交易界,如果你想知道 k-means 的重要性,除了统计套利的实现,你不必看得更远。
统计套利是最具辨识度的量化交易策略量化模型之一。虽然存在几种变化,但基本前提是,尽管两种证券是随机游走的,但它们的关系不是随机的,因此产生了交易机会。实施任何形式的统计套利的一个关键问题是对选择的过程。
先不使用 k-means 尝试实现统计套利。
没有 K 均值的生活
为了理解为什么我们可能想要使用 K-均值来解决配对选择的问题,我们将尝试实现一个统计套利,就好像没有 K-均值一样。这意味着我们将尝试开发一个强力解决方案来解决我们的配对选择问题,然后在我们的统计套利策略中应用这个解决方案。
让我们花点时间想想为什么 k 线可以用来交易。使用 K-Means 形成可能对的子群有什么好处?我是说我们不能自己想出一对吗?
推荐阅读: 配对交易基础知识:相关性、协整性和策略
这是一个很好的问题,毫无疑问,你可能想知道。为了更好地理解使用像 K-Means 这样的技术进行统计套利的优势,如果没有 K-Means,我们将演练一次交易统计套利策略。可以这么说,我将是你过去交易的幽灵。
首先,让我们确定任何统计套利交易策略的关键组成部分。
- 我们必须识别具有可交易关系的资产
- 我们必须计算这些资产分布的 Z 值,以及头寸规模的对冲比率
- 当 Z 分数超过某个上限或下限时,我们会做出买卖决定
首先,我们需要一些对子进行交易。但是我们不能在不知道我们选择的货币对是否协整的情况下进行统计套利交易。协整仅仅意味着我们的两个资产之间的统计性质是稳定的。即使这两种资产随机移动,我们也可以指望它们之间的关系是恒定的,或者至少在大多数时间是恒定的。
传统上,在解决配对选择问题时,在没有 K-Means 的世界中,我们必须通过蛮力,或者试错法来找到配对。这通常是通过将仅仅属于同一部门或行业的股票组合在一起实现的。这个想法是,如果这些股票属于相似行业的公司,因此它们的经营有相似之处,它们的股票也应该有相似的走势。但是,正如我们将要看到的,情况并不一定如此。
第一步是想出一些应该产生交易关系的股票对。我们将使用标准普尔 500 的股票,但这一过程可以应用于任何指数中的任何股票。嗯,沃尔玛和塔吉特怎么样?他们都是零售商和直接竞争对手。当然,它们应该是协整的,这样我们就可以用统计套利策略进行交易。
让我们从导入必要的库以及我们将需要的数据开始。我们将 2014-2016 年作为我们的分析期。
#importing necessary libraries
#data analysis/manipulation
import numpy as np
import pandas as pd
#importing pandas datareader to get our data
import pandas_datareader as pdr
#importing the Augmented Dickey Fuller Test to check for cointegration
from statsmodels.tsa.api import adfuller
现在我们有了自己的图书馆,让我们获取数据。
#setting start and end dates
start='2014-01-01'
end='2916-01-01'
#importing Walmart and Target using pandas datareader
wmt=pdr.get_data_yahoo('WMT',start,end)
tgt=pdr.get_data_yahoo('TGT',start,end)
在测试我们两只股票的协整性之前,让我们看看它们在这段时间的表现。我们将创建一个沃尔玛和塔吉特的情节。
#Creating a figure to plot on
plt.figure(figsize=(10,8))
#Creating WMT and TGT plots
plt.plot(wmt["Close"],label='Walmart')
plt.plot(tgt[‘Close'],label='Target')
plt.title('Walmart and Target Over 2014-2016')
plt.legend(loc=0)
plt.show()

在上面的剧情中,我们可以看到 2014 年年初的一点关联。但这并没有真正让我们清楚沃尔玛和塔吉特之间的关系。为了明确这两只股票之间的关系,我们将创建一个关联热图。
为了开始创建我们的关联热图,我们必须首先将沃尔玛和目标价格放在同一个数据框架中。让我们为我们的股票创建一个新的数据框架。
#initializing newDF as a pandas dataframe
newDF=pd.DataFrame()
#adding WMT closing prices as a column to the newDF
newDF['WMT']=wmt['Close']
#adding TGT closing prices as a column to the newDF
newDF['TGT']=tgt['Close']
现在我们已经创建了一个新的数据框架来保存我们的沃尔玛和目标股票价格,让我们来看看它。
newDF.head()

我们可以看到,我们有两个股票的价格在一个地方。我们现在准备创建我们股票的关联热图。为此,我们将使用 python 的 Seaborn 库。回想一下,我们之前将 Seaborn 作为 sns 导入。
#using seaborn as sns to create a correlation heatmap of WMT and TGT
sns.heatmap(newDF.corr())

在上面的图中,我们在 newDF 上调用了 corr()方法,并将其传递给了 Seaborn 的热图对象。从这个图像中,我们可以看到我们的两只股票没有那么相关。让我们创建一个最终的可视化来评估这种关系。我们将为此使用散点图。
前面我们使用了 Matplotlibs 散点图方法。所以现在我们来介绍一下 Seaborn 的散点图法。请注意,Seaborn 构建在 Matplotlib 之上,因此 Matplotlib 的功能可以应用于 Seaborn。
#Creating a scatter plot using Seaborn
plt.figure(figsize=(15,10))
sns.jointplot(newDF['WMT'],newDF['TGT'])
plt.legend(loc=0)
plt.show()

我喜欢使用 Seaborn 散点图的一个特点是它提供了相关系数和 P 值。从这个皮尔森值,我们可以看到,WMT 和 TGT 在这段时间内并不正相关。现在我们对我们的两只股票有了更好的了解,让我们来看看是否存在可交易的关系。
我们将使用增强的 Dickey Fuller 测试来确定我们的哪些股票可以在统计套利策略中交易。
回想一下,我们之前从 statsmodels.tsa.api 包中导入了 adfuller 测试。
要执行 ADF 测试,我们必须首先创建我们股票的价差。我们将它添加到现有的 newDF 数据帧中。
#adding the spread column to the nemDF dataframe
newDF['Spread']=newDF['WMT']-newDF['TGT']
#instantiating the adfuller test
adf=adfuller(newDF['Spread'])
我们现在已经对我们的价差进行了 ADF 测试,需要确定我们的股票是否是协整的。让我们写一些逻辑来确定我们的测试结果。
#Logic that states if our test statistic is less than
#a specific critical value, then the pair is cointegrated at that
#level, else the pair is not cointegrated
if adf[0] < adf[4]['1%']:
print('Spread is Cointegrated at 1% Significance Level')
elif adf[0] < adf[4]['5%']:
print('Spread is Cointegrated at 5% Significance Level')
elif adf[0] < adf[4]['10%']:
print('Spread is Cointegrated at 10% Significance Level')
else:
print('Spread is not Cointegrated')
价差未被协整
扩展的 Dickey Fuller 检验的结果显示,沃尔玛和塔吉特没有协整关系。这由不小于临界值之一的测试统计确定。如果您想查看 ADF 测试的实际打印结果,可以键入 ADF。在上面的例子中,我们使用索引来解释 t 统计量和临界值之间的关系。statsmodels ADF 测试为您提供了其他有用的信息,如 p 值。您可以在此了解更多关于 ADF 测试的信息
#printing out the results of the adf test
adf
(-0.38706825965317432,
0.91223562790079438,
0,
503,
{'1%': -3.4434175660489905,
'10%': -2.5698395516760275,
'5%': -2.8673031724657454},
1190.4266834075452)
好吧,我们再试一次。也许我们会有更好的运气,以一种蛮力的方式来识别一种可交易的关系。美元树和美元将军怎么样?他们都是折扣零售商,看起来他们的名字里都有一美元。既然我们已经掌握了窍门,我们就直接进入 ADF 测试。让我们首先导入 DLTR 和 DG 的数据。
#importing dltr and dg
dltr=pdr.get_data_yahoo('DLTR',start, end)
dg=pdr.get_data_yahoo('DG',start, end)
现在我们已经获得了数据,让我们将这些股票添加到我们的 newDF 中,并创建它们的价差。
#adding dltr and dg to our newDF dataframe
newDF['DLTR']=dltr['Close']
newDF['DG']=dg['Close']
#creating the dltr and dg spread as a column in our newDF dataframe
newDF['Spread_2']=newDF['DLTR']-newDF['DG']
我们现在已经将 DLTR 和 DG 股票以及它们的价差添加到我们的 newDF 数据框架中。让我们快速看一下我们的数据框架。
newDF.head()
**
现在我们有了 Spread_2 或 DLTR 和 DG 的价差,我们可以为这两只股票创建 ADF2 或第二个 ADF 测试。
#Creating another adfuller instance
adf2=adfuller(newDF['Spread_2'])
我们刚刚对 DLTR 和 DG 的差价进行了 ADF 测试。我们现在可以重复我们先前的逻辑来确定差价是否产生可交易的关系。
if adf2[0] < adf2[4]['1%']:
print('Spread is Cointegrated at 1% Significance Level')
elif adf2[0] < adf2[4]['5%']:
print('Spread is Cointegrated at 5% Significance Level')
elif adf2[0] < adf2[4]['10%']:
print('Spread is Cointegrated at 10% Significance Level')
else:
print('Spread is not Cointegrated')
Spread is not Cointegrated
要查看 ADF2 测试的完整打印结果,我们可以调用 adf2。
adf2
(-1.9620694402101162,
0.30344784824995258,
1,
502,
{'1%': -3.4434437319767452,
'10%': -2.5698456884811351,
'5%': -2.8673146875484368},
1305.4559226426163)
不如我们在这里休息一下,复习一下我们到目前为止学到的东西。在这一节中,我们试图在一个没有 K-Means 的世界中开发一个统计套利策略,从而开始了理解 K-Means 对配对选择和统计套利的功效的旅程。
我们了解到,在一个没有 K 均值的统计套利交易世界里,我们只能靠自己的方法来解决配对选择的历史性问题。我们已经知道,尽管两只股票在基本面上相关,但这并不一定暗示它们将提供可交易的关系。
在下一节中,我们将更好地理解 K-Means,然后准备将其应用到我们自己的统计套利策略中。
理解 K 均值
在我们开始实现用于统计套利的 K-means 聚类算法之前,让我们看看 K-Means 是如何工作的。
我们将从导入我们常用的数据分析和操作库开始。Sci-kit learn 提供了内置的数据集,您可以使用这些数据集来熟悉各种算法。你可以在这里看看 sklearn 提供的一些数据集。
为了理解 K-Means 是如何工作的,我们将创建自己的玩具数据并可视化聚类。然后,我们将使用 sklearn 的 K-Means 算法来评估它识别我们创建的聚类的能力。我们开始吧!
#importing necessary libraries
#data analysis and manipulation libraries
import numpy as np
import pandas as pd
#visualization libraries
import matplotlib.pyplot as plt
import seaborn as sns
#machine learning libraries
#the below line is far making fake data far illustration purposes
from sklearn.datasets import make_blobs
现在我们已经从 sklearn 导入了我们的数据分析、可视化和 make_blobs 方法,我们准备创建我们的玩具数据来开始我们的分析。
#creating fake data
data=make_blobs(n_samples=500, n_features=8,centers=5, cluster_std=1.5, random_state=201)
在上面的代码行中,我们创建了一个名为 data 的变量,并使用从 sklearn 导入的 make_blobs 对象对其进行了初始化。make blobs 对象允许我们创建和指定与我们将要创建的数据相关联的参数。我们能够分配样本的数量,或在聚类之间平均分配的观察值的数量,特征、聚类、聚类标准偏差和随机状态的数量。使用 centres 变量,我们可以确定我们希望从玩具数据中创建的聚类数。
现在我们已经初始化了我们的方法,让我们看看我们的数据。
#Let's take a look at our fake data
data[0] #produces an array of our samples

打印数据[0]返回我们的样本数组。这些是我们在 make_blobs 对象中初始化 n_samples 参数时创建的玩具数据点。我们还可以查看我们创建的集群分配。
#viewing the clusters of our data
data[1]

打印数据[1]允许我们查看创建的集群。
注意,虽然我们在初始化中指定了五个集群,但是我们的集群分配范围是从 0 到 4。这是因为 python 索引从 0 开始,而不是从 1 开始。所以集群计数,可以这么说,从 0 开始,持续五步。
我们已经查看了我们的数据和集群,但是查看阵列并不能给我们提供很多信息。这就是我们可视化库的用武之地。Python 的 matplotlib 是一个很棒的可视化数据库,这样我们就可以对它进行推断。让我们创建一个散点图,或一个视觉识别我们的数据内在的关系。
#creating a scatter plot of our data in features 1 and 2
plt.scatter(data[0][:,0],data[0][:,1])

上面的情节给了我们更多的信息。更不用说它更容易阅读。我们已经使用前面创建的两个特征创建了样本数据的散点图。我们可以看到一些不同的集群。图表右上角的组是最明显的。图表左侧的数据也有一定程度的分离。但是,我们不是给数据分配了五个集群吗?我们还看不到这五个星团,但我们知道它们就在那里。
我们可以改善视觉效果的一个方法是用我们创建的集群来给它上色。
#the above plot doesn't give us much information
#Let's recreate it using our clusters
plt.scatter(data[0][:,0],data[0][:,1],c=data[1])

上面的情节是一个进步。我们现在可以看到,原始图左下角的分组实际上是多个重叠的集群。如果我们添加更多不同的颜色,让我们能够识别每个集群中的特定点,那么这种可视化效果会更好。我们可以通过在散点图中添加另一个名为 cmap 的参数来做到这一点。cmap 参数将允许我们设置 matplotlib 内置的颜色映射,以便根据我们的聚类对数据重新着色。了解更多关于 matplotlib 的色彩映射。
#we can improve the above visualization by adding a color map to our plot
plt.scatter(data[0][:,0],data[0][:,1],c=data[1],cmap=‘gist_rainbow')

回顾一下,在这一点上,我们已经使用 sklearn 内置的 make_blobs 方法创建了一些玩具数据。然后,我们查看了前两个特征的行,随后是玩具数据的实际聚类。接下来,我们绘制了基于聚类的带颜色和不带颜色的数据。
为了展示 K-Means 是如何实现的,我们现在可以创建 K-Means 对象,并使其适合我们的玩具数据,然后比较结果。
#importing K-Means
from sklearn.cluster import KMeans
每次我们在 sklearn 中导入一个模型,要使用它,必须创建它的一个实例。模型是对象,因此我们创建对象的实例,并为我们的特定对象指定参数。
自然,这允许我们创建各种不同的模型,每个模型都有不同的分析规范。在本例中,我们将创建 K-Means 对象的单个实例,并指定分类的数量。
#instantiating K-means
model=KMeans(n_clusters=5) #n_clusters represents # of clusters; we know this because we created this dataset
KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
n_clusters=5, n_init=10, n_jobs=1, precompute_distances='auto',
random_state=None, tol=0.0001, verbose=0)
在上面的代码行中,我们已经使我们的模型符合我们的数据。我们可以看到,它证实了我们的模型应用于我们的数据的参数。
接下来,现在我们已经有了玩具数据,并可视化了我们创建的聚类,我们可以将我们从玩具数据创建的聚类与我们的 K-Means 算法基于查看我们的数据创建的聚类进行比较。
我们将编写一个类似于我们之前创建的可视化代码,但是,我们将使用 matplotlibs subplot 方法创建两个图,我们的聚类和 K-Means 聚类,可以并排查看这两个图以进行分析。如果你想了解更多关于 matplotlibs 子情节的功能,你可以访问这里。
#now we can compare our clustered data to that of K-means
#creating subplots
plt.figure(figsize=(10,8))
plt.subplot(121)
plt.scatter(data[0][:,0],data[0][:,1],c=data[1],cmap='gist_rainbow')
#in the above line of code, we are simply replotting our clustered data
#based on already knowing the labels(i.e. c=data[1])
plt.title('Our Clustering')
plt.tight_layout()
plt.subplot(122)
plt.scatter(data[0][:,0],data[0][:,1],c=model.labels_,cmap='gist_rainbow')
#notice that the above line of code differs from the first in that
#c=model.labels_ instead of data[1]...this means that we will be plotting
#this second plot based on the clusters that our model predicted
plt.title('K-Means Clustering')
plt.tight_layout()
plt.show()

上面的图显示 K-Means 算法能够识别我们数据中的聚类。颜色与聚类没有关系,只是区分聚类的一种方式。
实际上,我们没有数据所属的实际聚类,因此我们无法将 K-Means 的聚类与之前的聚类进行比较;但是本演练展示的是 K-Means 识别数据中是否存在子组的能力。
在我们更好地理解 K-Means 的应用和有用性的旅程中,我们已经从我们创建的数据中创建了我们自己的聚类,使用 K-Means 算法在我们的玩具数据中识别聚类,并及时回到没有 K-Means 的统计套利和均值回归交易世界
让我们暂停一会儿,理解一下到目前为止我们学到了什么。我们知道 K-Means 最初将数据点随机分配给聚类,然后计算质心或平均值。此外,它还计算每个聚类内的距离,对这些距离进行平方,然后求和,以获得误差平方和。
目标是减少这种误差或距离。该算法重复这个过程,直到不再有集群内变化,或者换句话说,集群组成停止变化。
太好了!现在,我们从这里去哪里?在下一节中,我们将进入一个统计套利交易的世界,在这个世界中,K-Means 是解决配对选择问题的一个可行的选择,并使用它来实现一个统计套利交易策略。
首先,我们需要收集一组股票的数据。我们将继续使用标准普尔 500。标准普尔 500 有 505 只股票。我们将为每只股票收集一些数据,并将这些数据用作 K-Means 的特征。然后,我们将在其中一个聚类中确定一个配对,使用 ADF 测试对其进行协整测试,然后使用该配对构建一个统计套利交易策略。
让我们开始吧!
使用 K-Means 构建 StatArb 策略
我们首先从 Excel 文件中读入一些数据,其中包含将要使用的股票和特性。
#Importing Our Stock Data From Excel
file=pd.ExcelFile('KMeansStocks.xlsx')
#Parsing the Sheet from Our Excel file
stockData=file.parse('Example')
既然我们已经从 Excel 中导入了股票数据,让我们来看看我们将使用哪些特性来构建我们基于 K 均值的统计套利策略。
#Looking at the head of our Stock Data
stockData.head()

#Looking at the tail of our Stock Data
stockData.tail()

我们将使用股息收益率、P/E、EPS、市值和 EBITDA 作为在标准普尔 500 创建集群的特征。从我们数据的尾部来看,我们可以看到雅虎没有股息率,并且没有达到市盈率。这带来了一个很好的教学时刻。在现实世界中,数据并不总是干净的,因此需要您清理和准备数据,以便适合分析并最终用于构建策略。
实际上,导入的数据已经做了一些预处理,因为我已经从中删除了一些不必要的列。
实现机器学习算法的过程
让我们花一点时间来思考实现机器学习算法的过程。
- 我们从收集数据开始
- 接下来,我们希望确保我们的数据是干净的,随时可以使用
- 在某些情况下,根据我们实现的算法,我们进行训练测试分割(对于 K-意味着这是不必要的)
- 在进行训练-测试分离之后,我们接着在我们的训练数据上训练我们的算法,然后在我们的测试数据上测试它
- 然后我们调查我们模型的精确度
实施
让我们从进一步清理数据开始。让我们将索引更改为 Symbols 列,这样我们就可以将集群与相应的符号相关联。此外,让我们删除名称列,因为它没有任何用途。
在对我们的数据进行其他更改之前,让我们制作一份原始数据的副本。这是一个很好的实践,因为如果我们使用的是原件的副本而不是原件,我们可能会在以后出错,并且能够重置我们的实现。
#Making a copy of our stockdata
stockDataCopy=stockData.copy()
#Dropping the Name column from our stockData
stockDataCopy.drop('Name', inplace=True,axis=1)
在做出更改后,最好回去检查您的数据。让我们看一下我们的 stockData,确认我们正确地删除了 Name 列。此外,在上面的代码行中,我们希望确保包含 inplace=True。这表明更改将持续存在于我们的数据中。
#Checking the head of our stockData
stockDataCopy.head()

好了,现在我们已经正确地删除了 Name 列,我们可以将数据的索引改为 Symbol 列的索引。
stockDataCopy.reindex(index=stockDataCopy['Symbol'],columns=stockDataCopy.columns)

我们已经重新索引了我们的股票数据,但是这个视图并不是我们所期望的。让我们通过将值添加回我们的列来解决这个问题。我们之所以能够做到这一点,是因为我们使用的是原件的副本。
#Adding back the values to our Columns
stockDataCopy['Symbol']=stockData['Symbol'].values
stockDataCopy['Dividend Yield']=stockData['Dividend Yield'].values
stockDataCopy['P/E']=stockData['P/E'].values
stockDataCopy['EPS']=stockData['EPS'].values
stockDataCopy['MarketCap']=stockData['MarketCap'].values
stockDataCopy['EBITDA']=stockData['EBITDA'].values
我们已经将数据添加回我们的 stockDataCopy 数据帧。注意,在上面的代码中,我们能够做到这一点,因为我们可以简单地从原始数据帧中移植值。让我们再来看看我们的股票数据。
#Viewing the head of our stockDataCopy dataframe
stockDataCopy.head()

似乎 Jupyter Notebook 对我们的数据帧(即 Spyder IDE 的数据帧)进行重新索引和重新赋值的反应不同。我们现在不会担心这个问题,但将来可能需要创建一个解决方法。现在,我们将重点关注数据的聚类。我们从实例化另一个 K-Means 对象开始。
stock_kmeans=KMeans()
等等,我们怎么找到 K???
这让我们看到了我们战略发展的另一个重要组成部分。回想一下,在我们的 K 均值聚类示例中,我们创建了自己的玩具数据,因此能够确定我们想要多少个聚类。在测试 K-Means 算法时,我们能够将 K 指定为 5,因为我们知道它应该尝试创建多少个聚类。
然而,使用实际数据,我们不知道在我们的股票数据中实际存在多少子群。这意味着我们必须找到一种方法来确定要使用的适当的聚类数量或 K 值。
一种这样的技术被称为“肘”技术。我们之前提到过这一点,但我将简要回顾一下。我们绘制了聚类数与误差平方和(SSE)的关系图。图中倾向于弯曲的地方,形成一个肘状的形状,是我们应该选择的聚类的值。
因此,我们的任务是为 K 创建一个值范围,在该范围内迭代,并在每次迭代中使我们的 stock_kmeans 模型适合我们的数据。我们还需要存储 K 值,并有一种方法来计算每次迭代的质心距离,这样我们就可以计算 SSE 或误差平方和。
为了找到我们的距离,我们将使用 scipy。现在就导入吧。
从 scipy.spatial.distance 导入 cdist
如果您想了解更多关于 cdist 对象的信息,您可以访问此链接。
K-Means 中使用的距离是欧几里德距离,这是我们将在该方法中使用的距离。
让我们创建肘图来确定 k 的值。
#creating an object to determine the value for K
class Get_K(object):
def __init__(self,start,stop,X):
self.start=start
self.stop=stop
self.X=X
#in our example, we found out that there were some NaN
#values in our data, thus we must fill those with 0
#before passing our features into our model
self.X=self.x.fillna(e)
def get_k(self):
#this method will iterate through different
#values of K and create the SSE
#initializing a list to hold our error terms
self.errors=[ ]
#intializing a range of values for K
Range=range(self.start,self.stop)
#iterating over range of values far K
#and calculating our errors
for i in Range:
self.k_means=KMeans(n_clusters=i)
self.k_means.fit(self.X)
self.errors.append(sum(np.min(cdist(self.X[0:200],self.k_means.cluster_centers_,'euclidean'),axis=1))/200)
return
def plot_elbow(self):
with plt.style.context(['seaborn-notebook','ggplot‘]):
plt.figure(figsize=(10,8))
#we have multiple features, thus we will use the
#P/E to create our elbow
plt.plot(self.X['P/E'][0:200],self.errors[0:200])
plt.xlabel('Clusters')
plt.ylabel('Errors')
plt.title('K-Means Elbow Plot')
plt.tight_layout()
plt.show()
Return
我们现在有了一个对象来确定我们应该为 k 使用的值。我们将创建这个对象的一个实例,传入我们的 stockData,并确定我们应该为 k 使用的值。
让我们首先创建一个特性列表。
features=stockDataCopy[[‘Dividend Yield','P/E','EPS','MarketCap','EBITDA']]
现在我们已经设置了我们的特征,我们可以将它们传递到我们的 K-Means 算法中。
#Creating an instance of our Get_K object
#we are setting our range of K from 1 to 266
#note we pass in the first 200 features values in this example
#this was done because otherwise, to plot our elbow, we would
#have to set our range max at 500\. To avoid the computational
#time associated with the for loop inside our method
#we pass in a slice of the first 200 features
#this is also the reason we divide by 200 in our class
Find_K=Get_K(1, 200,features [1:200]
至此,我们已经创建了我们的特性列表,并创建了 Get_K 类的一个实例,K 的可能范围是从 1 到 200。
现在我们可以调用 get_k 方法来查找错误。
#Calling get_k method on our Find_K object
Find_K.get_k()
可视化 K-Means 肘图
现在我们已经使用 get_k 方法计算了 K 的误差和范围,我们可以调用 plot_elbow 方法来可视化这种关系,然后为 K 选择适当的值。
#Visualizing our K-Means Elbow Plot
Find_K.plot_elbow()

我们现在可以使用上面的图来设置我们的 K 值。一旦我们设置了 K,我们就可以将我们的模型应用于我们的股票数据,然后解析出我们的聚类并将它们添加回我们的 stock data 数据框架。从这里,我们可以操作我们的数据框架,这样我们就可以确定哪些股票在哪个集群中。之后,我们可以选择成对的股票,并通过检查它们是否是协整的来完成我们的分析,如果是这样,就建立一个统计套利策略。
让我们在这里休息一下,回顾一下到目前为止我们所学到的知识。我们继续在理解 K-Means 如何改进我们的统计套利策略的基础上发展。我们了解到实现 K-Means 要解决的一个重要问题是确定我们应该为 K 使用什么值。
我们已经涵盖了很多,现在我们几乎到了我们一直在等待的点,编码我们的战略。我们马上开始吧!
k-均值 StatArb 实现
我们将创建一个类,它将允许我们清理数据、测试协整,并通过调用我们的统计套利对象的方法来运行我们的策略。




让我们简单地看一下上面的代码是做什么的。
我们首先创建一个 statarb 类的实例。我们传入我们想要交易的两只股票的两个数据框架,以及移动平均线的参数、z 得分的下限或买入水平、z 得分的上限或卖出水平、我们对冲比率的 beta 回望期和我们 z 得分的出场水平。默认情况下,此级别设置为 0。
一旦我们创建了 stat arb 对象,我们就可以访问它的方法了。我们首先像前面一样在 create spread 方法中清理数据。一旦我们的数据被清除,我们就可以调用我们的协整检验方法。该方法将获取在我们的 create spread 方法中创建的价差,然后将其传递给 ADF 测试,并返回这两只股票是否协整。
如果我们的股票是协整的,那么我们可以调用我们的生成信号方法来实现统计套利 策略。从这里我们可以调用我们的 create returns 方法。这个方法要求我们传递一个分配量。这是我们假设投资组合的金额,将用于创建我们的权益曲线。在我们的权益曲线创建后,我们将可以访问其他数据,如命中率、输赢和我们的夏普比率。
为了实现该策略,我们必须在迭代数据帧以检查信号时跟踪我们的当前位置。对于如何实施统计套利策略的一个很好的演练,请访问 Quantstart.com。这里是文章的链接。Michael 做得很好,为实施的每一步提供了深入的见解。
我们将 K 设为 100。让我们从实例化 K-Means 对象开始。

现在,让我们根据数据的特征来拟合我们的模型。


现在,我们已经使我们的模型适合了我们的特性,我们可以获得我们的集群并将它们添加到我们的 stockDataCopy 数据帧中。另外,请注意,我们在特性上调用了 fillna()方法。这样做是因为我们注意到我们的一些特性有 NaN 值,而这不能传递到我们的模型中。我们没有调用 dropna()来删除这些值,因为这会改变我们的特征的长度,并且在将集群添加回我们的数据帧时会出现问题。
让我们来看看我们的集群。


好了,现在我们有了聚类,我们可以将它们添加回我们的数据中。让我们先来看看我们的数据框架。


让我们为我们的集群添加一列到我们的数据框架中。

让我们再次回顾我们的数据框架。


既然我们的数据框架中已经有了我们的聚类,我们的下一个任务是在我们的聚类中识别可交易对。
让我们看看每个聚类中放了多少只股票。为此,我们将从集合库中导入计数器方法。


现在我们已经创建了一个变量来计算每个簇中的符号数,我们可以打印它了。


现在,我们准备将集群添加到数据框架中。但是,请注意上面的内容,当查看每个聚类中有多少个值时,我们可以看到一些聚类只有 1 个符号。我们希望消除这些,只查看包含 2 个或更多符号的聚类。我们还想通过聚类来排序我们的数据,以便我们可以查看各个聚类中的每个符号。
为此,我们将创建一个新的数据帧,并使用 pandas concat 方法将其与根据 Clusters 列分组的 stockDataCopy 数据帧连接起来,但过滤掉包含少于 2 个符号的集群。


我们可以将我们的连接保存到一个变量中,这个变量将允许我们对它执行操作。


上面的数据帧向我们展示了簇 0 中的五个符号。我们可以看到该指数代表了它们在股票数据框架中的原始位置。我们还可以对它们的特征做一个简单的比较。
我们现在可以看到滚动或迭代我们的数据帧,并看到哪些符号在每个集群中,最少至少有两个符号。让我们使用我们的 statarb 方法来测试一对符号的协整性,并开发一个统计套利策略。
我们将从创建 statarb 对象的实例开始。我们将从集群 0 中随机选择两只股票进行分析。我们必须首先导入测试期间每个符号的数据。

现在我们已经导入了数据,让我们快速查看一下。


好了,现在让我们来测试我们的 statarb 类,以测试符号的协整性,并建立一个策略。

在上面的代码行中,我们刚刚创建了 statarb 策略类的一个实例。我们现在可以调用 create_spread 方法来创建数据的分布。我们传入 bbby 和 gt 的整个数据框架,因为这个方法将解析收盘价并为我们创建价差。之后,我们可以调用剩下的方法来完成我们的统计套利分析。


在上面的数据框架中,我们可以看到我们已经增加了我们的传播。头部的值是 NaN,它反映了我们正在使用的回看。我们可以向下滚动,查看每一列的值都已填充。

现在,我们已经创建了我们的货币对的利差,让我们来看看它们是否是协整的。

我们的组合是高度整合的。现在我们已经确认了这一点,我们可以调用我们的 generate signals 并创建回报,以查看我们的策略在测试期间的表现。


我们可以看到,我们已经将信号添加到数据帧中。
现在我们已经为我们的组合生成了信号,让我们使用创建回报方法来计算我们的回报并打印我们的权益曲线。回想一下,这个方法接受一个分配量。这是我们投资组合的起始价值。这个方法还要求我们为我们的 pair 传入一个名称,作为包含在我们的绘图中的字符串。


我们可以看到,在似乎不再是协整之前,我们的策略在一段时间内表现良好。让我们来看看我们的夏普比率。


挑战:看看你是否能改进这个策略
尝试改进这个策略。我们的分析显示,这两只股票高度协整。然而,在我们测试期的大部分时间里表现良好之后,该策略似乎出现了损失协整。
这说明了几件事。
- 说明统计套利不是无风险的交易策略。
- 它强调了交易时使用的参数的重要性。这些才是真正的专利。
结论
哇!我们在短时间内涵盖了大量的信息。概括地说,我们从理解 K-Means 开始。我们也走过了一个没有 K 均值的统计套利世界。我们强行创造了一些配对,并了解到识别可交易的关系比在同一领域找到配对要复杂一些。然后,我们使用标准普尔 500 的真实股票数据,即股息收益率、P/E、MarketCap、EPS 和 EBITDA,作为特征,开始为交易统计套利创建真实世界的 K 均值分析。
然后,我们将我们的聚类添加到我们的数据框架中,并对其进行操作,以便我们可以通过 ADF 测试来测试每个聚类中的配对的协整性。我们从分析的第 0 类中随机选择了 BBBY 和 GT,发现它们在 99%的显著性水平上是协整的。之后,我们使用我们创建的 statarb 类对我们新发现的 pair 进行回溯测试。咻!
这个分析也显示了 K-Means 在寻找非传统的统计套利交易中的优势。BBBY 是 Bed Bath 和 Beyond 的股票代码,GT 是固特异轮胎和橡胶公司的股票代码。这两只股票表面上看起来没有任何共同之处,但在过去一直在 1%的临界值进行协整。
下一步
如果你想学习算法交易的各个方面,那就去看看算法交易(EPAT)的高管课程。课程涵盖统计学&计量经济学、金融计算&技术和算法&定量交易等培训模块。EPAT 让你具备成为成功交易者所需的技能。现在报名!
免责声明:股票市场的所有投资和交易都有风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。
下载 Python 代码
- 使用 K-Means 构建 StatArb 策略的 Python 代码**
中国期货市场的卡尔曼滤波技术和统计套利
与更发达的市场相反,套利机会并不容易实现,这表明对于那些寻找并能够利用它们的人来说,可能存在机会。这个项目利用统计套利和配对交易技术,专注于中国期货市场。
本文是作者提交的最后一个项目,作为他在 QuantInsti 的算法交易管理课程( EPAT )的一部分。请务必查看我们的项目页面,看看我们的学生正在构建什么。
关于作者
邢弢计算机科学学士(LZU),信息系统与管理科学硕士(北京大学),通过 CFA 级考试。目前,他是房地产、土地和基础设施的投资经理。
交易是他的爱好之一。5 年来,他一直试图成为一名定量分析师,并渴望申请计算机金融方面的博士学位。
项目
该项目对利差运行增强的 Dickey-Fuller 检验,以从统计上确认该序列是否均值回复,对利差序列和利差序列的滞后版本计算卡尔曼滤波器回归,以便随后使用系数计算均值回复的半衰期。
项目动机
根据目前中国的交易规则,股票不能卖空。与更发达的市场相反,套利机会并不容易实现。这表明,对于那些寻找并能够利用这些机会的人来说,可能存在着机会。
因此,我决定使用统计套利和配对交易技术来关注中国的期货市场。
战略思想
本项目实施的交易策略称为“统计套利交易”,也称为“配对交易,这是一种反向策略,旨在从特定配对比率的均值回复行为中获利。
这种策略背后的假设是,显示协整特性的货币对的价差本质上是均值回复,因此如果价差显著偏离均值,将提供套利机会。
资料组
数据集将来自中国金融期货交易所(CFFEX)、上海期货交易所(SHFE)、大连商品交易所(DCE)和郑州商品交易所(ZCE)。
由于数据的可用性,来自上述四个交易所的所有每日数据将通过 UQER 的 API 访问。交易策略将回测 678 天(2015 年 3 月 30 日至 2017 年 12 月 31 日)。
前 542 天(2015 年 3 月 30 日至 2016 年 11 月 14 日,占总周期的 80%)为样本内回测期,其余 136 天(2016 年 11 月 15 日至 2017 年 12 月 31 日,占总周期的 20 %)为样本外回测期。
中国金融期货交易所
CFFEX 是一家股份化交易所,致力于金融期货、期权和其他衍生品的交易、清算和结算。2006 年 9 月 8 日,经国务院和中国证监会批准,由上海期货交易所、郑州商品交易所、大连商品交易所、上海证券交易所和深圳证券交易所在上海设立了中国期货交易所。
上海期货交易所 (SHFE)
SHFE 是根据相关规则和条例组建的。它是一个自我监管的实体,履行其章程和州法律法规中规定的职能。中国证监会对其进行监管。目前期货合约的标的商品,即:
- 黄金,
- 银色,
- 铜,
- 铝,
- 铅,
- 钢筋,
- 钢盘条,
- 天然橡胶,
- 燃料油和
- 锌上市交易。
大连商品交易所 (DCE)
DCE 是经国务院批准,由中国证监会监管的期货交易所。多年来,通过有序经营和稳步发展,DCE 已经成为全球最大的农产品期货市场和最大的石油、塑料、煤炭、冶金焦、铁矿石期货市场。
它也是中国重要的期货交易中心。截至 2017 年底,共有 16 个期货合约和 1 个期权合约在 DCE 上市交易,包括
- 一号大豆,
- 豆粕,
- 玉米,
- 2 号大豆,
- 大豆油,
- 线性低密度聚乙烯(LLDPE),
- RBD 棕榈油精,
- 聚氯乙烯(PVC),
- 冶金焦炭,
- 炼焦煤,
- 铁矿石,
- 鸡蛋,
- 纤维板,
- 黑板
- 聚丙烯(PP),
- 玉米淀粉期货和
- 豆粕选项。
郑州商品交易所 (ZCE)
ZCE 是国务院批准的第一个期货市场试点。目前,ZCE 上市的产品包括:
- 小麦(强筋小麦和普通小麦),
- 早籼稻,
- 粳稻,
- 棉花,
- 油菜籽,
- 菜籽油,
- 菜籽粕,
- 白糖,
- 动力煤,
- 甲醇,
- 纯对苯二甲酸(PTA)和
- 平板玻璃。
这些产品构成了一个全面的产品系列,涵盖了国民经济的几个关键领域,包括农业、能源、化学工业和建筑材料。
选择这一特定战略领域的动机
我对中国未来市场的关注是出于以下主要原因:
- 首先,由于中国股市的非卖空限制,我们只能做多股票,这使得在中国不可能进行股票配对交易。因为我们做配对交易的时候,总是做多很少的股票,做空相关性高的股票。
- 更重要的是,在中国期货交易所运营的算法交易公司/策略非常少。我相信这会提供很好的机会,因为竞争很少。与更发达的市场相反,套利机会并不容易实现,这表明那些寻找并能够利用它们的人可能有机会。
- 最后但同样重要的是,UQER 提供了优秀的 API,通过它我可以访问中国四个期货交易所的所有每日主力合约数据。众所周知,高质量的数据在 algo 交易中起着至关重要的作用。当我们选择市场和策略时,数据的可访问性是我们应该考虑的重要因素之一。
概述
- 定义我们的符号对,从 UQER 下载相关价格数据,并确保为每个符号下载的数据长度相同。
- 每一个可能的合同对都将进行协整测试。将执行一个 ADF 测试,这样,另一个假设是被测试的货币对是固定的。
- 对价差进行扩展的 Dickey-Fuller 测试,以从统计上确认该系列是否均值回复。我们还会计算 spread 系列的赫斯特指数。
- 对价差序列和价差序列的滞后版本运行卡尔曼滤波回归,以便随后使用系数计算均值回复的半衰期。
- 计算交易信号的 Z 值,定义回测的进出 Z 值水平。
数据挖掘
****从四个期货交易所获取每日主力合约数据。T3】
主合约的每日交易价格通过 UQER 的 API 获取。
- 前 542 天(2015 年 3 月 27 日至 2016 年 11 月 14 日,占总周期的 80%)为样本内回测周期,且
- 其余 136 天(2016 年 11 月 15 日至 2017 年 12 月 29 日,占总周期的 20%)为样本外回测周期。
卡尔曼滤波 Python:教程和策略
以重香重香
如果我们必须用一行来解释卡尔曼滤波器,我们会说它是用来提供一个不能直接测量的变量的精确预测。事实上,卡尔曼滤波器最早的用途之一是由美国宇航局计算阿波罗宇宙火箭的位置,以确保它在正确的轨道上。
但是卡尔曼滤波器如何在交易中适用呢?
那么,我们可以利用卡尔曼滤波器实现对交易,甚至在期货市场寻找套利机会。但在我们开始应用卡尔曼滤波器之前,让我们了解一下如何使用它。
因此,在这篇博客中,我们涵盖了以下主题:
因此,当涉及到数学和统计学的使用时,卡尔曼滤波器可以被认为是一个沉重的话题。因此,在深入研究这些方程之前,我们将讨论几个术语。如果你愿意的话,可以跳过这一节,直接看方程。
卡尔曼滤波器中使用的统计术语和概念
卡尔曼滤波器在其方程中使用了正态分布的概念,让我们了解估计的准确性。让我们退一步,理解我们如何得到一个变量的正态分布。
让我们假设我们有一个十人的足球队正在打全国赛。作为标准健康检查的一部分,我们测量他们的体重。下面给出了球员的权重。
| 玩家编号 | one | Two | three | four | five | six | seven | eight | nine | Ten |
| 重量 | seventy-two | Seventy-five | Seventy-six | sixty-nine | Sixty-five | Seventy-one | Seventy | Seventy-four | Seventy-six | seventy-two |
现在,如果我们计算平均体重,即的平均值,我们得到的值是(所有玩家体重的总和)/(玩家总数)
= 720/10 = 72
平均值通常用希腊字母μ表示。如果我们把权重分别考虑为 w 1 ,w 2 ,玩家总数为 N,那么可以写成:μ=(w1+w2+w3+w4+.....+ w n )/N
或者
现在,凭直觉,我们决定看看每个玩家的体重与平均值相差多少。这可以很容易地通过从平均值中减去个体的体重来计算。
现在,一队球员的体重以如下方式变化,(单个球员的体重)-(平均值)= 72 - 72 = 0。
类似地,第二个玩家的体重变化如下:75 - 72 = 3。
让我们现在更新表格。
| 玩家编号 | one | Two | three | four | five | six | seven | eight | nine | Ten |
| 重量 | seventy-two | Seventy-five | Seventy-six | sixty-nine | Sixty-five | Seventy-one | Seventy | Seventy-four | Seventy-six | seventy-two |
| 平均值之差 | Zero | three | four | -3 | -7 | -1 | -2 | Two | four | Zero |
现在,我们想看看整个团队的权重与平均值相差多少。整个团队的体重与平均值之差的简单相加将为 0,如下所示。
因此,我们计算每个人的体重差的平方,并找出平均值。平方是为了消除分数的负号+惩罚与平均值的较大偏离。
更新后的表格如下:
| 玩家编号 | one | Two | three | four | five | six | seven | eight | nine | Ten |
| 重量 | seventy-two | Seventy-five | Seventy-six | sixty-nine | Sixty-five | Seventy-one | Seventy | Seventy-four | Seventy-six | seventy-two |
| 平均值之差 | Zero | three | four | -3 | -7 | -1 | -2 | Two | four | Zero |
| 平均值的平方差 | Zero | nine | Sixteen | nine | forty-nine | one | four | four | Sixteen | Zero |
如果我们取平均值,我们得到的等式是,
方差告诉我们权重被分散了多少。因为方差是平方的平均值,所以我们取方差的平方根,以便更好地了解权重的分布。我们称这一项为标准差,用σ表示。
由于标准差用σ表示,所以方差用σ 2 表示。T3】
但是我们为什么需要标准差呢?当我们计算一个足球队的方差和标准差时,也许我们可以找到锦标赛中所有足球队的方差和标准差,或者如果我们更雄心勃勃,我们可以对世界上所有足球队进行同样的计算。这将是一个很大的数据集。
需要理解的一点是,对于一个小的数据集,我们使用了所有的值,即整个群体来计算这些值。但是,如果它是一个大型数据集,我们通常会从整个人口中随机抽取一个样本,并找到估计值。
在这种情况下,我们用(N-1)代替 N,根据贝塞尔修正得到最准确的答案。当然,这引入了一些误差,但是我们现在忽略它。
因此,更新后的等式为:
现在,查看过去进行的不同研究,发现给定一个大型数据集,大多数数据都集中在平均值附近,整个数据变量的 68%都在平均值的一个标准偏差内。
这意味着,如果我们有数百万名足球运动员的数据,并且我们得到了与现在相同的标准差和方差,我们可以说球员体重从 72 公斤变为+-3.46 的概率是 68.26%。这意味着 68.26%的运动员体重会在 68.53 公斤到 75.46 公斤之间。
当然,为了证明这一点,数据应该是随机的。
让我们画一个图表来进一步理解这一点。这只是一个参考,如果我们有 100 个人的体重,平均值为 72,标准差为 3.46,分布会是什么样子。

这显示了权重是如何集中在平均值附近并向极端值逐渐减少的。如果我们创建一条曲线,你会发现它的形状像一个钟,因此我们称它为钟形曲线。平均值为 72、标准差为 3.46 的权重的正态分布将类似于下图。

正态分布也称为概率密度函数。虽然推导过程相当漫长,但我们对概率密度函数有一定的观察。
一个标准差包含总体的 68.26 %。
两个标准差包含 95.44%的人口,而三个标准差包含 99.74%。
概率密度函数给出如下,
你可以在这个博客中找到更多关于概率密度函数的信息。我们讨论正态分布的原因是,它是卡尔曼滤波器的重要组成部分。现在让我们进入卡尔曼滤波器教程下一节的主题。
卡尔曼滤波方程
卡尔曼滤波是一种预测算法。因此,卡尔曼滤波器的成功取决于我们的估计值及其与实际值的差异。在卡尔曼滤波器中,我们假设根据前一个状态,我们可以预测下一个状态。
首先,我们想澄清一下,这个卡尔曼滤波器教程不是关于方程的推导,而是试图解释方程如何帮助我们估计或预测一个值。
现在,正如我们前面所说的,我们试图预测一些不能直接测量的东西的价值。因此,预测值和实际值之间显然会有一些误差。
如果系统本身包含一些误差,那么它被称为测量噪声。例如,如果体重秤本身显示同一名足球运动员的不同读数,这将是测量噪声。
如果进行测量的过程中存在某些未被考虑的因素,则称之为过程噪声。
例如,如果我们正在预测阿波罗火箭的位置,并且我们不能在初始发射阶段考虑风,那么我们将在实际位置和预测位置之间遇到一些误差。
卡尔曼滤波器用于减少这些误差,并成功地预测下一个状态。
现在,假设我们挑出一个球员,称他 10 次体重,由于一些测量误差,我们可能会得到不同的值。
Rudolf Kalman 先生建立了状态更新方程,考虑了三个值,即
- 真值
- 估计值或预测值
- 测量值
状态更新方程
状态更新等式如下:
当前状态估计值
=当前状态的预测值+卡尔曼增益*(测量值-状态的预测值)

让我们进一步理解这个等式。
在我们的例子中,我们可以说,给定所有十次测量的测量值,我们将取这些值的平均值来估计真实值。
为了求解这个方程,我们取一个测量值作为测量值。在初始步骤中,我们猜测预测值。
现在,由于计算了平均值,在本例中,随着每次连续迭代,卡尔曼增益将为(1/N ),等式的第二部分将减小,从而给出更好的估计值。
我们应该注意,当前的估计值在下一次迭代中成为当前状态的预测值。
现在,我们知道实际重量是不变的,因此很容易预测估计值。但是如果我们不得不考虑系统的状态(在这种情况下是重量)的变化呢?
为此,我们现在将进入卡尔曼滤波器教程中的下一个方程,即状态外推。
状态外推方程
状态外推系统帮助我们找到当前状态和下一个状态之间的关系,即预测系统的下一个状态。
到目前为止,我们知道卡尔曼滤波器本质上是递归的,并使用系统中的前一个值来预测下一个值。虽然我们可以很容易地给出公式并使用它,但我们想知道为什么要使用它。在这方面,我们将举另一个例子来说明状态外推方程。
现在,让我们以一家试图开发机器人自行车的公司为例。如果你想一想,当有人骑自行车时,他们必须平衡自行车,控制油门,转弯等。
假设我们有一条直路,我们必须控制自行车的速度。为此,我们必须知道自行车的位置。作为一个简单的例子,我们测量车轮的旋转来预测自行车移动了多少。我们记得,物体走过的距离等于物体的速度乘以走过的时间。
现在,假设我们测量某一时刻的旋转,即δt。
如果我们说自行车有一个恒定的速度 v,那么我们可以这样说:
自行车的预测位置等于自行车的当前估计位置+自行车在时间δt 内行驶的距离
这里自行车经过的距离将是δt 乘以自行车速度的结果。
假设速度保持恒定在 2 m/s,时间δt 为 5 秒。这意味着自行车在每次连续测量之间移动 10 米。
但是如果我们下次检查时发现自行车移动了 12 米呢?这给了我们 2 米的误差。这可能意味着两件事,
- 用来测量速度的装置有误差(测量误差)
- 自行车以不同的速度移动,在这种情况下,可能是下坡(过程错误)
我们试图找出如何通过将不同的增益应用于状态更新方程来最小化该误差。
现在,我们将在卡尔曼滤波器教程中引入一个新概念,即 α - β滤波器。
现在,如果我们回忆一下状态更新等式,它被给出为:
当前状态估计值
=当前状态的预测值+卡尔曼增益*(测量值-状态的预测值)
我们将说α用于减少测量中的误差,因此它将用于预测物体的位置值。
现在,如果我们用α代替卡尔曼增益,您可以推断出α值越高,测量值越重要,α值越低,测量值的权重越小。这样就可以在预测位置的同时减少误差。
现在,如果我们假设自行车以不同的速度运动,我们将不得不使用另一个方程来计算速度,这反过来将导致对自行车位置的更好预测。这里我们用β代替卡尔曼增益来估计自行车的速度。
我们试图了解α和β如何影响预测值的关系。但是,我们如何确切地知道α和β的正确值,才能使预测值更接近实际值呢?
让我们进入卡尔曼滤波器教程中的下一个方程,即卡尔曼增益方程。
卡尔曼增益方程
回想一下,我们在这篇博客的开始部分谈到过正态分布。现在,我们可以说,无论是测量误差还是过程误差,都是随机的,并且在本质上是正态分布的。事实上,更进一步来看,估计值与实际值之间的标准差更大。
卡尔曼增益是一个术语,指的是估计误差的不确定性。简单地说,我们将ρ表示为估计的不确定性。
由于我们使用σ作为标准偏差,我们将由于不确定性导致的测量值σ 2 的方差表示为⋎.
Thus, we can write the Kalman Gain as, $$\frac{\text{(Uncertainty in estimate)}}{\text{(Uncertainty in estimate + Uncertainty in measurement)}}$$
在卡尔曼滤波器中,卡尔曼增益可用于根据估计值改变估计值。
由于我们看到了卡尔曼增益的计算,在下一个方程中,我们将理解如何更新估计的不确定性。
在我们进入卡尔曼滤波器教程中的下一个方程之前,我们将了解到目前为止我们已经学过的概念。我们首先看状态更新方程,它是卡尔曼滤波器的主要方程。
我们进一步了解了如何将当前估计值外推至预测值,该预测值将成为下一步的当前估计值。第三个方程是卡尔曼增益方程,它告诉我们误差的不确定性如何在计算卡尔曼增益时发挥作用。
现在,我们将了解如何更新卡尔曼滤波方程中的卡尔曼增益。让我们继续卡尔曼滤波器教程中的第四个方程。
估计不确定性更新
在卡尔曼滤波教程中,我们看到卡尔曼增益取决于估计的不确定性。现在,正如我们所知,随着每一个连续的步骤,卡尔曼滤波器不断更新预测值,以便我们得到的估计值接近变量的实际值,因此,我们必须了解如何降低误差中的不确定性。
虽然方程的推导是冗长的,但我们只关心方程。
因此,估计不确定性更新方程告诉我们,当前状态的估计不确定性与先前的估计不确定性相差(1 -卡尔曼增益)倍。我们也可以称之为协方差更新方程。
这将我们带到卡尔曼滤波教程的最后一个方程,我们将在下面看到。
估计不确定性推断
卡尔曼滤波器流行的原因是因为它根据预测和测量的当前值不断更新其状态。回想一下,在第二个等式中,我们外推了估计的状态。类似地,当前误差的估计不确定性被用于预测下一状态的误差不确定性。
好的。这是一个简单的,没有方程的方式来描述卡尔曼滤波器。如果你感到困惑,让我们回顾一下这个过程,看看我们到目前为止学到了什么。
对于输入,我们有测量值。最初,我们将某些参数用于卡尔曼增益以及预测值。我们还将记录估计的不确定性。
现在我们使用卡尔曼滤波方程来寻找下一个预测值。
在下一次迭代中,根据我们预测的变量的精确程度,我们对不确定性估计进行修改,这反过来会修改我们的卡尔曼增益。
因此,我们获得了一个新的预测值,该值将在下一阶段用作我们的当前估计值。
这样,每走一步,我们都将更加接近预测实际值,并取得一定的成功。
这就是事情的全部。我们将在本卡尔曼滤波器教程中重申,卡尔曼滤波器受欢迎的原因是因为它只需要以前的值作为输入,并且根据测量中的不确定性,预测结果值。
在现实世界中,当我们考虑现实世界的情况时,随着复杂性的增加,通过实现矩阵运算来使用卡尔曼滤波器。如果你对卡尔曼滤波器的数学部分感兴趣,你可以通过这个资源找到许多说明卡尔曼滤波器各个方程的例子。
说到交易,卡尔曼滤波器是 pairs 交易策略的重要组成部分。现在让我们使用卡尔曼滤波器 Python 建立一个简单的配对交易策略。
Python 中使用卡尔曼滤波器的配对交易
(感谢 Chamundeswari Koppisetti 提供代码。)
让我们从导入卡尔曼滤波器所需的库开始
我们将考虑 Bajaj 汽车有限公司(Bajaj-Auto)4 年(2015 年 8 月-2019 年 8 月)调整后的收盘价数据。NS)和 Hero MotoCorp Limited (HEROMOTOCO。NS)。
我们已经将数据文件和代码包含在 zip 文件中,供您稍后在系统上运行。下载文件的链接可以在博客的末尾找到。
输出如下所示:

卡尔曼滤波器的超参数可以改变,例如:
- 多维转移矩阵,使用更多的过去信息在每个点进行预测
- 不同的观测值和转移协方差

配对交易策略
在成对交易策略中,我们买入一只股票,卖出另一只股票,选择数量作为对冲比率。你可以在 Quantra 的统计套利课程中了解更多配对交易策略。
输出是:0.12224383398741
结论
在卡尔曼滤波器教程中,我们看到了如何通过使用与要测量的值间接相关的测量值,并使用卡尔曼增益预测下一个值,来估计无法直接测量的值。
你可以在学习课程使用 Python &互动经纪人进行自动化交易中了解更多关于不同算法交易策略的信息。
请在下面的评论中告诉我们你是否喜欢这篇文章和任何其他反馈。
文件在下载
- 包含价格数据的数据文件
- 使用卡尔曼滤波器代码的配对交易策略
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
峭度及其在风险评估中的应用
由阿舒托什·戴夫
在分析金融证券的表现时,我们非常重视均值和标准差,分别作为平均收益和风险的度量。
然而,金融证券经风险调整后的表现也取决于因收益分布形状而产生的风险。这些是高阶矩风险,如偏度和峰度风险,需要考虑到正确的评估。
在这篇博客中,我们讨论峰度的概念及其在理解金融证券风险状况中的应用。此外,我们还浏览了一些关于峰度计算和解释的常见误解。
内容
什么是峰度?
峰度是一种统计度量,它量化了随机变量的分布相对于正态分布可能产生极值或异常值的程度。
从极值和异常值来看,我们指的是聚集在随机变量概率分布尾部的观察值。换句话说,峰度衡量的是分布相对于正态分布的“尾部”。
峰度与方差和偏度(分别衡量离差和对称性)一起帮助我们描述分布的“形状”。
数学上,具有均值μ和标准差σ的随机变量 x 的分布的峰度定义为四阶矩与方差(σ^2\的平方之比
即。(峰度= \ frac { \ text {第四 moment}}{σ^{4}} = \ frac { \ frac { \ sum \ limits _ { j = 1 } {n}(x_{j}-μ){4}}{n}}{σ^{4}} )
从上面的表达式中,我们已经可以看到异常值会显著影响这个值。
这是因为对于任何异常值(x_p) 来说,值((x_p- μ)) 无论如何都将趋于较大,但是然后异常值对总和的贡献被提升到 4 的幂
即((x_p-μ)^4)
换句话说,决定峰度值的关键因素是异常值/极值的数量和大小,它们反映在分布的较重/较胖的尾部。
与流行的看法相反,峰度并不度量分布的峰值,峰度唯一明确的解释是关于相对于正态分布的分布尾部的重或轻(我们将在随后的部分中看到一个例子)。
过度峰度
还有一种计算峰度的方法叫做“过度峰度”。由于峰度是相对于峰度值为 3 的正态分布计算的,因此通常更容易根据过度峰度进行分析。
顾名思义,就是峰度值超过正态分布的峰度值。这意味着对于具有任何均值和方差的正态分布,超额峰度总是 0 。
$ $ excess \ kurtosis = \ frac { \ text {第四 moment}}{σ^{4}}-3 = \ frac { \ frac { \ sum \ limits _ { j = 1 } {n}(x_{j}-μ){4}}{n}}{σ^{4}}-3 $ $
许多资源将'过度峰度称为'峰度,因此为了避免任何混淆,必须事先澄清这一点。
在下一节中,我们将学习基于峰度的三类分布。
基于峰度/过度峰度的分布分类
任何统计分布都可以根据其峰度/过度峰度分为三类:
中间层
当分布的峰度为 3,即超额峰度等于 0 时,该分布称为中峰度。这意味着该分布是正态分布。(' meso 代表中等或中间)。由于中峰度分布的峰度既不是正的,也不是负的,所以它是其他两个类别的基线。
鸭嘴兽
第二类是具有负超额峰度值的平稳分布。过度峰度的负值表示分布具有短/细的尾部。连续均匀分布就是这种分布的一个很好的例子。
轻飘飘的
最后一类是具有正超额峰度的尖峰分布。大的正峰度表示分布中更多的值远离平均值,即在分布的尾部。因此,薄 kurtic 分布的特点是较厚的尾部。拉普拉斯分布就是一个很好的例子。
在以下 Python 代码中,我们从三个样本分布中抽取随机样本,这三个样本分布具有大致相等的均值、相等的方差,并且几乎对称地分布在均值周围。(Python 新手?开始学习我们的 Python for trading 课程,以便更好地理解。)
这些分布是:
- 标准正常(中纬度)
- 均匀的(扁平的)
- 拉普拉斯(薄壳)
延迟战争——为什么低延迟很重要?
原文:https://blog.quantinsti.com/latency-war-why-is-low-latency-important/
https://www.youtube.com/embed/6RiHCH5IPr4?rel=0
是潜伏的愚蠢!大卫·谢瑞登曾经说过,如果你有一个低带宽的网络链路,那么很容易将几个并联起来,形成一个具有更高带宽的组合链路,但如果你有一个延迟很差的网络链路,那么再多的钱也不能将它们变成一个延迟很好的链路。
让我们看一个例子来分解延迟的技术术语。波音 747 运载 500 名乘客,而波音 737 运载 150 名乘客。你会说 747 比 737 快 3 倍吗?波音 747 比 737 大 3 倍,并不比 737 快,因为两者的时速都是 500 英里。等待时间在算法交易中起着至关重要的作用,在算法交易中,速度是执行交易的关键因素。传统系统架构与自动化系统架构的简单比较。
传统交易系统的系统架构
传统的交易系统包括一个读取数据的系统、一个历史数据仓库、一个分析历史数据的工具、一个提交交易输入的系统和一个将订单发送到交易所的系统。Exchange 逐个发送滴答数据。服务器主要用于数据存储,是个人桌面的同义词。市场数据从服务器被检索到交易者的工具中,在那里发生可操作的情报(买、卖、不交易)。然后,这些操作通过订单管理器传递给交易所。这些动作是连续的。交易员的工具只能在收到市场数据后处理和生成订单。
直接市场访问(DMA)的出现给交易系统的架构带来了巨大的变化。
自动交易系统的系统架构
在传统系统中,数据流将从经纪人流向交易者的工具。这在通过 DMA 的自动交易系统中得到改善。这大大减少了数据从交易所流向交易工具所需的时间。即使在自动交易系统中,数据流和交易生成的这些动作仍然是连续的。可以减少交易工具(事件发生)和订单生成之间的延迟,以实现更高的效率。这可以通过将等待时间减少到毫秒级或更低来实现。风险管理必须在没有人工干预的情况下实时实施。
为什么低延迟首先如此重要?要回答这个问题,把交易想象成一场赛跑。比你的竞争对手速度更快,你赢的机会就更大。交易的目标是以有竞争力的价格执行交易。希望改善延迟以防止被竞争对手选中。必须实施正确的技术来减少延迟,因为低延迟系统成本很高。因此,必须在低延迟投资和低延迟投资回报率之间取得平衡。
下面的快照提供了不同策略的延迟。

延迟可以用等式的形式来表示。
L=P+N+S+I+AP
这里 P 是沿线路发送比特的传播时间,N 是网络分组处理-路由、交换和保护,S 是串行化时间-将比特拉进/拉出线路,I 是中断处理时间-在服务器上接收分组,API 是应用处理时间。
如前所述,必须采取果断措施来平衡复杂性水平,以减少延迟并优化投资决策。


总而言之,低延迟是算法交易的一个重要因素。低延迟导致交易执行具有竞争力的价格。
演示文稿
//www.slideshare.net/slideshow/embed_code/key/DahrBRyeRBVdsL
LEAPS 选项:介绍、策略、限制和示例
以重香重香
LEAPS(长期股权预期证券)是一种特殊类型的期权,它产生于寻求长期投资但不想在这段时间内锁定投资的投资者的需求。
在本文中,我们将讨论以下主题:
在我们进入正题之前,您可以参考下面的课程来复习选项的基础知识。
什么是飞跃?
长期股权预期证券(或简称 LEAPS)是一种期权合约,其到期日通常超过一年,有些甚至长达三年。通常,期权本质上是短期的,提供 3 个月、6 个月和 9 个月的期限。最终,有些人着眼于某项资产的长期前景,但不想直接拥有它。记住这一点,LEAPS 被引入,个人可以在手头没有大量资金的情况下参与长期市场运动。
需要注意的一点是,LEAP 期权的定价通常高于其他短期合约,因此,你可能需要考虑更高的 delta,即深 ITM 期权(通常大于 80 或 0.8),以确保当到期时,你在交易的盈利端结束。当然,就像期权一样,你可以用希腊人来评估 LEAPS 期权。
LEAPS 在经纪平台上没有被指定为 LEAPS,因此,你必须查看到期日才能知道它是 LEAP 期权。
记住,飞跃持续一年多。
跳跃的例子
让我们考虑一下苹果期权的数据(截至 2019 年 5 月 2 日)
股价:210.52 行使价为 185 的期权在不同到期日的买入价格如下:

上表中,到期日为 2021 年 6 月 18 日的期权是 LEAPS 期权。我们可以这样解释它。
我们预计,到 2021 年 6 月,苹果的股价将保持在 185 美元以上。但为什么有人会以低于当前股价的执行价卖出看涨期权呢?这是因为不同的投资者可以以不同的方式解读股票,因此,LEAPS 看涨期权卖方会认为这是一个很好的执行价格,他们会以他们想要的期权溢价找到买家。还有一个事实是,期权买方在计算潜在利润时必须考虑期权溢价,期权溢价将被加到执行价格中。
因此,我们将以 45.61 美元的价格买入 LEAPS 期权,该期权将于 2021 年 6 月 18 日到期。在这种情况下,买方的盈亏平衡价格为 230 美元(执行价格为 185 美元,期权溢价为 45.61 美元)。
LEAPS 期权策略
虽然跳跃期权和普通期权之间似乎没有太大区别,但投资者对此有不同的看法,并根据自己的风险状况发现了各种应用。我们可以看到,在这种情况下,期权费也比其他期权相对更贵。现在让我们看看购买 LEAPS 期权时的一些策略,这些策略比购买股票本身更有意义,
期待一年后特定股票的牛市
让我们假设你对一家公司进行了基本面分析,感觉到股价在短期内还不错,但从长期来看是不可持续的,以后还会下跌。由于做空会在相当长的时间内锁定你的投资,所以你可以在特定的价格购买一个 LEAP put 期权,这样你就可以行使卖出股票的期权,这应该高于(当时的)当前股价,从而获利。
LEAPS 看跌期权相对于做空股票的另一个优势是,如果价格收盘低于止损限额,并且您收到了追加保证金通知,您不会被迫平仓。
让我们借助一个例子来理解这一点。你翻阅了特斯拉的历史,感觉其主要产品即电动汽车在未来两年内不可能被大规模采用。

目前,特斯拉的股价是 234.1 美元。让我们假设我们预期股价会跌到 150 美元。在这里,投资者查看期权链,以 61.29 美元的溢价购买执行价为 230 美元的 LEAPS 看跌期权。
对于投资者来说,要达到盈亏平衡,股价应该是$230 - $61.29) = $168.71。
在自有股票价格下跌的情况下,使用 LEAPS 来控制损失
在这种情况下,长期投资者投资了一只股票,他们肯定会从中获利。然而,投资者觉得他们不应该被抓住,以防股价向相反的方向发展。因此,在这种情况下,投资者将购买 LEAPS 看跌期权,这样,即使由于购买期权溢价而导致利润减少,他们也为股票价格低于执行价格时必须承受的最大损失设定了上限。
假设你在 2018 年 9 月 13 日以 45.57 美元的价格购买了 1000 股英特尔股票。5 月 1 日的股票价格是 50.76 美元。因此,总投资为 45,570 美元。
现在,虽然你确实对长期很有信心,但你觉得如果你能减少一点点潜在利润,但对两年后退出市场时的潜在损失有一个明确的限制,你会查看 LEAPS 期权链,并试图找到一个合适的 LEAPS 看跌期权。
一份 LEAPS 看跌期权将于 2021 年 1 月 15 日到期,执行价为 45 美元,溢价 3.9 美元。因此,如果我们购买 1000 股 LEAPS 认沽期权,有效价格是$ 3.9 * 1000 = $ 3900。
现在,这意味着股价必须超过 45.57 美元+3.9 美元)= 49.47 美元才能实现盈利。但是,如果你看看另一端,我们可以看到,如果股价跌破$ 45-$ 3.9 = $ 41.1,我们可以控制我们的损失,如果我们只是购买股票,这是不可能的。要点如下,


如果没有 LEAPS 看跌期权,我们将不得不以市价出售股票,这将扩大我们的损失。
如果股票跌至 35 美元,我们可以行使 LEAPS 看跌期权,以 45 美元的执行价出售股票,即(451000 美元)-(3900 美元)= 41,100 美元。如果没有 LEAPS 期权,我们将不得不以 35 美元 1000 美元的股价卖掉它。另一种方法是,我们可以在到期日之前卖出看跌期权,因为随着价格下跌,看跌期权的价值将会增加,因此,我们也可以通过这种方式减少损失。
英特尔过去 5 年的价格趋势仅供参考。

值得一提的是,我们可以将这一策略应用于整个投资组合,而不仅仅是一只股票。
看涨期权价差腾跃期权策略
是的,相对著名的看涨期权价差也适用于跳跃。简而言之,它包括购买和出售具有相同到期日,但具有不同执行价格的相同基础证券的 LEAPS 期权。这个策略有助于我们提高风险回报比。要了解策略以及如何用 python 编码,可以参考下面的文章。
上面提到的策略也可以应用在索引上。就像一只股票一样,人们也可以购买标准普尔 500 等指数的 LEAPS 期权。然而,这只是对老练的投资者的建议,因为我们必须了解整个市场结构,仔细评估一两年后的市场走向。
请记住,我们没有考虑交易成本、佣金等。这将对特定策略的盈利能力产生影响。
因此,到目前为止,我们了解了跳跃是如何工作的,以及一些我们更喜欢跳跃而不是标的股票以及其他短期期权的策略。
然而,硬币有两面,在下一节中,我们将了解拥有 LEAPS 期权的局限性。
跳跃的限制
- 虽然就投资金额而言,LEAPS 期权可能比股票更有优势,但它的一个主要缺点是 LEAPS 有到期日。我们知道,库存可以在短期内大幅增加。如果 LEAPS 看涨期权持有者的股票在期权到期后没有被行使而上涨,那对他们来说就没有用了。
- 由于购买 LEAPS 期权支付的溢价很高,与拥有标的股票的人相比,LEAPS 期权持有者需要更长的时间才能实现收支平衡。
- 事实上,LEAPS 期权是在很远的将来做出的(有些甚至可以在 3 年后购买),很难预测正确的价格,既能获得可观的投资回报,又能获得不太昂贵的期权溢价。
- 与股票不同,LEAPS 不提供任何股息,也不会从股票回购中受益。
结论
LEAPS 是一种到期日超过一年的期权。LEAPS 期权的主要好处是,长期投资者可以涉足期权,而不用担心市场的短期波动。与拥有实际股票相比,这也有助于投资者投入更少的资本。我们也看到了跳跃式发展的局限性,这是由于跳跃式发展的长期性造成的。通过学习“期权交易中的量化方法”学习路线中的课程,您可以了解更多关于期权交易以及如何在 python 中创建自己的策略的信息。
建议读数
免责声明:股票市场的所有投资和交易都有风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。
学习算法交易:成为算法交易专家的步骤
由 Viraj Bhagat 编译
对于想尝试算法交易的新手来说,这篇文章将会指导你学习算法交易和用算法交易。
快速查看:
随着交易和金融市场应用技术进步的繁荣,算法交易和高频交易正在受到世界各地交易所的欢迎和接受。
十年内,它是发达市场中最常见的交易方式,并在发展中经济体中迅速蔓延。学习算法交易对在市场中获利是很重要的。
关于算法交易你应该知道什么
自动化交易并不意味着没有人工干预。自动化交易已经导致人类干预的重点从交易过程转移到更幕后的角色,这涉及到定期设计更新的阿尔法寻找策略。
过去,进入算法交易公司的人通常仅限于物理学、数学或工程科学的博士,他们可以为交易建立复杂的量化模型。
然而,近年来在线教育行业出现了爆炸式增长,为有抱负的算法交易者提供全面的算法交易程序。这使得进入这一领域而不必经过漫长的(8-10 年)学术路线成为可能。
这导致学习算法交易的需求越来越大。
这里有一些有用的资料,当你进入金融市场和交易世界时,它们将提供关于建立你的基础的详细解释。
算法交易、量化交易和自动化交易的区别
算法交易、自动化交易和 HFT(高频)交易之间经常有很多混淆。让我们先从定义算法交易开始。
算法交易
算法交易就是通过算法把一个交易想法变成算法交易策略。由此产生的算法交易策略可以用历史数据进行回溯测试,以检验它是否会在真实市场中带来良好回报。算法交易策略可以手动或自动执行。
量化交易
量化交易涉及使用先进的数学和统计模型来创建和执行算法交易策略。
自动化交易
自动化交易意味着订单生成、提交和订单执行过程完全自动化。
谁可以学习算法交易
- 失明无法阻止普拉纳夫对算法交易的追求
- Akshat 的故事:吉他手,企业家,现在是算法交易员
- 在日本从事算法交易 17 年|来自印度的 Praveen Singh】
- 面向散户的算法交易指南
- 算法交易如何为金融&科技毕业生增加价值?
- 金融 MBA 如何成为一名量化分析师?
为什么你应该学习算法交易
世界正在快速调整算法,许多交易所已经快速执行算法很长时间了。
2020 年,算法交易市场规模估值为 116.6 亿美元。预计到 2028 年将达到 262.7 亿美元,2021 年至 2028 年的 CAGR 增长率为 10.7%。
知名的全球银行和投资巨头正投资于量子交易,以展望交易的未来。早在 2019 年,彭博就报道称“摩根大通(JPMorgan)为持有交易许可证的编码员提供资金支持”。
" 2020 年的高交易量意味着,对于许多电子做市商来说,去年是非同寻常的一年。例如,Citadel Securities 在 2020 年实现营收 67 亿美元,息税折旧及摊销前利润(EBITDA)达到创纪录的 41 亿美元。根据这个来源。
2020 年初,福布斯报道:
- 花旗集团开始计划为其交易和投资银行部门雇佣 2500 名程序员。2019 年花旗集团 75%的交易是电子化的。
- 当高盛开始为他们的交易大厅雇佣程序员、数据科学家和工程师时,
根据纽约大学斯特恩商学院最近的一项研究:
大约 80%的投资要么是基于量化的,要么是完全被动的,只有五分之一的交易是由有感觉的生命体主动策划的。
根据最新数据,Reddit 上的子 reddit Algo Trading 有120 万活跃用户,每天有数千人加入。这种增长表明了人们对这个不断增长的领域的兴趣。
银行、投资者、金融机构都被吸引到这个迅速发展并已适应全球的领域。这使得学习算法交易势在必行。
这里有一个有趣的网上研讨会记录,解释了算法交易的必要性:算法交易——为什么要采取行动?
交易频率
**交易策略可以根据交易的持有时间进行分类。T3】
- Low-频率T3】
- M 中频T3】
- H 高频T3】
高频交易(HFT) - 高频交易策略是在短时间内以自动方式执行的算法策略,通常在亚秒时间尺度内执行。
这种策略在很短的时间内持有他们的交易头寸,并试图在每笔交易中获得微薄的利润,每天执行数百万笔交易。
如果你是金融市场的交易者或投资者,你可能会意识到在过去的 10-15 年里,投资领域发生了翻天覆地的变化。它的核心是在市场中使用定量技术来做买卖决策。
学习算法交易时要知道的事情
成为 Algo 交易专业人士的步骤
在下面的部分,我们概述了任何有抱负的算法交易者学习算法交易应该关注的核心领域。我们还提出了一个全面的图片,通过不同的方式和手段,这些基本技能可以获得。
第一步:彻底了解算法交易的核心领域
算法交易是一个多学科领域,需要三个领域的知识,即,
- 定量分析或定量建模
- 交易知识。金融市场知识
- 编程技能
定量分析或定量建模
如果你是一个习惯使用基本面分析和技术分析的交易者,你需要改变思路,开始定量思考。各贸易公司的招聘人员都非常看重解决问题的能力。
- 从事统计、****、Matlab、R 等统计软件包应该是你最喜欢的活动。
- 探索交易所的历史数据,设计新的算法交易策略会让你兴奋不已。
交易知识。金融市场知识
当你与定量分析师互动时,这些知识将是至关重要的,并有助于创建稳健的程序。一家贸易公司的专业编码员/开发员应该具备良好的金融市场基础知识。
这些知识应该是关于:
- 交易工具的种类(股票、期权、货币等。),
- 策略类型(趋势跟踪,均值反转等。),
- 套利机会,
- 期权定价模型,以及
- 风险管理。
编程技能
定量分析师创造的策略由程序员在现实市场中实施。如果你想在技术驱动的自动交易领域出类拔萃,你应该愿意学习新技能,不应该对任何领域都不感兴趣。所以如果你从来没有通过编译自己的编码程序打印过“hello world”,那么是时候下载你感兴趣的编译器了——c++/Java/Python/Ruby,开始动手吧!
学习编程最好的方法就是练习、练习、再练习。对于交易公司的定量开发人员来说,扎实的编程语言知识是先决条件,比如 Python/c++/Java/R。了解到 Python 是交易者的首选也很有趣。
你也可以查看一些最受欢迎的 Python 交易平台进行算法交易
如果您想简要了解 Python 及其数据科学堆栈的关键组件,或者想快速复习使用 Python 进行数据分析,请查阅这本书: Python 基础手册——免费下载!
第二步:如何成为 Algo 交易专家?
如果你一直在寻找进入定量和算法交易领域的职业生涯,你很可能听说过 EPAT 项目。
但是 EPAT 能帮助你实现这个领域的职业和学习目标吗?这个关于EPAT 如何帮助你的信息会议解决了这个问题,同时涵盖了 EPAT 项目的各个实际方面。
在如何从零开始创建交易算法的课程中,学习从零开始创建交易算法,并在真实市场数据上进行测试。了解创建交易算法的所有基本要素。这节课用例子解释了各种交易策略范例,如动量交易和均值回归。
学习算法交易的书籍
你会发现许多由一些知名作者写的关于不同算法交易主题的好书,可以帮助你学习算法交易。这里有一些有用的书籍可以帮助你:
- 在这里找到一本好书→ 关于算法交易的必备书籍
- 免费- 算法交易书-粗略的现成指南
- 为了磨练你的衍生品知识,约翰·C·赫尔的《期权、期货和衍生品》被认为是初学者的好读物。
- 对于算法交易,你可以阅读由博士欧内斯特·陈写的《算法交易:获胜策略及其原理》一书。
学习算法交易的免费资源
除了上面提到的书籍,初学者可以参考以下免费资源学习算法交易。
- 资源列表- 看看这个整理的学习算法交易的免费资源列表
- 博客- 关注并阅读各种关于算法交易的博客
- 视频- 观看 YouTube 视频学习
- 播客- 捕捉交易播客(像这些
- 网络研讨会- 参加在线网络研讨会(quantin STI 主办的网络研讨会列表
- 平台- 在 Quantiacs 这样的平台上注册,学习编码
- 免费课程- 你也可以在各种在线学习门户网站上注册免费课程,如 Coursera 、 Udemy 、 Udacity 、 edX 、& Open Intro
- 研讨会- 参加这样的研讨会- 算法交易 3 天研讨会-完整的录音和幻灯片
- 网站- 向一些最好的宽客网站学习
虽然这些免费的资源是学习算法交易的一个很好的起点,但人们应该注意到其中一些资源有自己的缺点。
- 算法交易书不会给你交易的实践经验。
- 在线门户网站上学习算法交易的免费课程可以是针对特定主题的,对严肃的学习者来说可能提供非常有限的知识。
- 另一个需要注意的要点是,当你选择这些免费课程时,缺乏与有经验的市场从业者的互动。
向专业人士、交易专家或市场从业者学习算法交易
学习算法交易的基础是统计学、衍生品、Matlab/R 和 Python 这样的编程语言。有必要从市场从业者的经验中学习算法交易,只有通过和他们一起实践策略,你才能做到这一点。
学习算法交易的培训
你可以作为实习生或实习生加入任何组织,熟悉他们的职业道德和市场最佳实践,并学习算法交易。如果你不可能加入任何这样的组织,那么你可以选择课堂课程/研讨会或付费在线课程。大多数课堂课程/研讨会以 2 天至 2 周的研讨会形式提供,或作为金融工程学位课程的一部分。
在线自学算法交易
在线学习方面,有一些在线学习门户,如 QuantInsti、Coursera、Udemy、Udacity、edX 和 Open Intro,这些门户拥有数学和计算机科学背景的专家教师,他们在课程中与您分享他们的经验和战略思想/策略。
算法交易要领学习算法交易
6 个月的算法交易综合课程,带证书
考虑到算法和量化交易领域的专业人士需要在线认证课程,QuantInsti 提供了一个全面的实践课程,名为算法交易【EPAT】的 高管课程。
EPAT 的目标是让你在成功完成课程后,为算法交易的世界做好市场准备。来自 70 多个国家的数百名课程参与者在金融市场、技术和量化金融等不同领域工作,以不同方式从该课程中受益。
EPAT 的特色
下表列出了 EPAT 算法交易课程的主要特点。
| 课程特色 | 算法交易管理课程(EPAT) |
| 行业认可 | 是 |
| 交付 | 在线的 |
| 课程设置 | 100 多个小时的现场讲座 |
| 200 个学习小时 |
| 课程持续时间 | 6 个月通过周末讲座 |
| 课程模块 | 14 个模块 |
| 教员 | 15+ |
| 兼职 | 是 |
| 现场讲座 | 是 |
| 实际动手曝光 | 是 |
| 证书 | 是 |
| 提供专业化服务 | 是的。资产/战略类型。 |
| 平台 | 各种各样的 |
| 程序设计语言 | 计算机编程语言 |
| Algo 交易策略范例 | 是 |
| 网络和延迟 | 是 |
| 项目 | 是的。在行业从业者指导下进行项目实践。 |
| Algo 交易台设置指南 | 是 |
| 专门的安置服务 | 是的。为所有 EPATians 人提供终身安置援助。 |
| 专门的学生支持团队 | 是的。另外,我们还为您在 EPAT 的 6 个月提供专门的支持经理。 |
| 课程内容访问 | 通过校友门户网站访问终身更新的课程内容。 |
| 校友社区 | 是 |
| 行业优势 | 是的。获得顶级经纪人、供应商、全球活动、尖端工具等的独家优惠。 |
| 客座演讲 | 是的。行业中坚力量的独家客座演讲。 |
| 召集 | 是的。EPAT 竣工网上毕业典礼。 |
| 奖学金 | 是 |
| 经济援助 | 是 |
| 验证认证 | 是 |
| 考试中心 | 在 80 多个国家设有监考中心,参与者可以根据自己的喜好选择在线或中心监考。 |
| 解决疑问和疑问 | 是的。与教师直接在线互动。 |
| 讲座记录可用性 | 是的。通过学生门户网站。 |
| 回溯测试和实时交易 | 访问 Blueshift |
| 咨询会议 | 是 |
| 学习材料 | 是 |
了解来自世界各地的企业家、交易员、开发人员和分析师,他们通过获得算法交易的必备技能改变了自己的生活。在这些关于算法交易的成功故事中。
强化基础:进行 Python 和统计学的预备讲座,确保你建立一个强大的基础。
概念清晰:期中考试有助于参与者在课程进入高级主题之前,对所涵盖的概念有一个清晰的认识。
加入 EPAT 的先决条件: EPAT 参与者具备高度的求知欲,对金融有浓厚的兴趣,并具备分析技能。
虽然没有具体的学位要求,但参加该方案的大多数参与者来自各种定量学科,如数学、统计学、物理科学、工程学、运筹学、计算机科学、金融学或经济学。
其他学科的参与者如果想学习 EPAT,应该熟悉基本的金融市场知识、电子表格和计算问题解决方法。
想了解更多关于 EPAT 的信息,请访问这里,或者直接联系我们。
第三步:获得职位,学习更多知识,并在工作中实施
经常可以看到,希望进入高频交易公司或量化岗位的学生会选择 MFE 项目。
- 大多数的 MFE 课程都很好地概述了数学概念,包括微积分、偏微分方程和定价模型。
- 对于学习量化交易,还需要的是在模拟环境下对实际市场数据实施这些技巧/理论。
- 如果你的目标是出去赚钱,最好是接受从业者和交易者的培训。
- 如果你想从事这些领域的研究,那么建议你走一条更学术的道路。
一旦你被安排在一家算法交易公司,你就要在真实市场中为你的公司应用和实施你的算法交易知识。作为一名新员工,你还需要了解其他流程,这是你工作流程链的一部分。
例如,交易低延迟策略的公司通常将他们的平台构建在 C++上,而在延迟不是关键参数的交易公司中,交易平台可以基于像 Python 这样的编程语言。因此,对于有抱负的新 Quant 开发人员来说,理解这两个世界变得至关重要。
从事特定项目的新员工可能会接受简短的培训,以便很好地掌握该主题。交易公司通常会让新员工在不同的部门(如量化部门、编程部门、风险管理部门)呆上一段时间,让他们对组织中遵循的工作流程有一个公平的理解。
用微妙的话说,
算法世界里的学习永不停止!!
学习算法交易后,你可以从事的职业机会
- 你可以在 EPAT 寻求的 Algo 交易职业机会
- 建立自己的交易机器,像专业人士一样发展
- 如何成为独立的算法交易员?
- 技术和金融专家如何成为量化分析师?
- 【Algo 交易的职业和技能
- 以算法交易为职业
关于算法交易的常见问题
以下是我们在算法交易的提问环节中遇到的一些最常见的问题。
问题: 如何从 0 到 90 一步步走到算法交易?
回复:所以,如果你从 0 开始,这里要注意的关键是,算法交易通常有 3 个主要支柱,这是 quant trading 的整个算法的基础。
- 统计学和计量经济学
- 金融计算
- 量化交易策略
如果你在这三个领域的知识都是 0,那么第一件事就是去了解它。外面有很多可用的资源。即使在 QuantInsti 的网站上,也有很多资源可以免费获取,然后逐步走向自动化。
- 如果你不熟悉交易策略,那就学习一下吧。
- 如果你已经是一个交易者,但正在考虑自动化,那么你可以使用一些经纪人 API 并开始自动化你的策略。
- 但是如果你已经这样做了,在这种情况下,你可以继续前进,得到一个中频交易策略,并在供应商平台上编码。
- 如果你自己是一个专业的程序员,或者你有一个专业的程序员团队,那么你也可以建立自己的 API,也可以建立自己的交易平台。
- 你可以在这个平台上编码你策略,如果一切都准备好了,那么作为一个机构或一家房地产公司,你可以在高频领域冒险。
这通常是 0 到 90。
问题: 我是一个交易者,但我不知道如何编程。算法交易应该怎么入门?
回复:好的方面是,对于你在算法交易中需要完成的大多数任务,你不需要像 C++或 C 这样的语言的核心编程专业知识,但如果你有,那很好,但即使你没有,或者对像【Python】这样的语言没有很好的理解,那也是可行的。在过去的 5 年里,Python 已经出现了。所以,如果你懂一点 Python,但不懂 C++或 Java,那也可以,但你确实需要懂一点,否则你会有障碍。
另一个好的方面是,我们看到许多没有编程背景的人能够轻松地掌握 Python 这样的编程语言,相比之下,他们使用 C++或 Java 要困难得多。但是,如果你以前从未做过编程,这将需要你付出大量的努力、时间和承诺。
问题:****EPAT 能帮我把三项技能(统计学&计量经济学、金融计算和量化交易策略)全部开发出来成为算法交易员吗?
回复:有!肯定可以。
问题:****《EPAT 计划》有多全面?我能从 EPAT 那里得到有利可图的策略吗?
回复:我觉得挺全面的。EPAT 有趣的地方在于,我们从量化交易和算法交易的基础开始,我们在前面的问题中已经讨论过几次了。但它上升得相当快,确实触及了相当多的高级话题,以及关于交易统计方式的更深入的话题。
另一个有趣的部分是,EPAT 的大多数教员都是从业者,这意味着你从实践的角度学习更多的东西,理论有时是必需的,必须涵盖,但我们试图保持一定程度的实际接触。我们并没有宣称给我们的学生提供有利可图的策略。这并不是说我们给你 10-20 个策略,你就可以用它们交易,同时赚很多钱,这绝对不是这个项目的想法。问题是,如果有一个策略对你有效,它可能对我无效。我可能有不同的基础架构、不同的设置、不同的风险承受能力、不同的系统,有太多的变量存在。
因此,这与盈利战略无关,而是如何对这些战略进行建模,提出战略想法并对其进行测试、优化、实施以及整个流程。我们的想法是,在课程结束时,你应该能够创造数百种自己的交易策略,然后由你决定,你实施什么,不实施什么。所以这更多的是关于知识的力量而不是策略的力量。
问题: 你们提供专业的校友社交网络吗?
回复:我们现在正在建立一个社区,它只对所有 EPAT 的参与者和校友开放。所以有两个东西,一个是专为他们提供的,附带了很多东西,另一个已经对所有人开放,但我们正在对它进行一些改进,以增强体验,这将在今年实现。
建议阅读:
- 如何成为量化分析师?
- 如何成为量化开发者?
- 如何在投行找到工作?
- 如何成为一名风险分析师?
- 如何在高频交易公司找到工作?
我们整理了一些最受欢迎的由专家撰写的关于算法交易的博客。
结论
这篇文章给出了算法交易的概述,关注的核心领域,以及认真的有抱负的算法交易者学习算法交易可以探索的资源。
请让我们知道你的想法,并在下面的评论中分享你的建议。
如果你也对发展终身技能感兴趣,这些技能会帮助你提高交易策略。在这个 algo 交易课程中,你将接受统计学&计量经济学、编程、机器学习和量化交易方法的培训,因此你精通每一项在量化&算法交易中出类拔萃所必需的技能。现在就了解更多关于 EPAT 的课程吧!
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
Tine-Tarriro Matambo |南非|学习 Python 进行交易
原文:https://blog.quantinsti.com/learn-python-trading-quantra-success-story-tine-tarriro-matambo/
一开始是一个发展他学习 Python 的技能的机会,帮助 Tine-Tarriro 学习了用于交易的 Python,并获得了在金融和交易领域应用它的基本技能。
他是怎么做到的?他分享了他的故事并解释道。
亲爱的同学们,
我是来自南非约翰内斯堡的 Tine-Tarriro Matambo。本人经济金融专业,一直在 IT 部门金融部门工作,管理与技术相关的项目。
我在本科学习期间交易股票,我发现我对交易有真正的兴趣和热情。以我的技术背景,我对算法交易很好奇。我开始在网上查找课程,在那里我偶然发现了 Quantra。
Python 现在被广泛应用于金融领域。最初,我曾经雇人为我制定交易策略,但最终的结果总是不符合我想要的,所以我觉得有必要自己学习 Python。虽然我熟悉编程语言,但我并不十分精通 Python。
我一直在市场上学习其他关于 Python 的通用课程,但是我意识到学习和完成这些课程将花费我大量的时间。因此,我决定不妨做一些非常具体的事情,以便我可以尽快开始实际使用和实施所学的知识。
我对 Quantra 的课程感兴趣的原因是,即使我发现我可以自动化策略,我也找不到很多资源可以帮助我理解和学习定量交易策略。当我看到 Quantra 提供的学习材料时,我注意到它有专门为金融量身定制的课程。
我选择了 Quantra 的交易课程的基础 Python。我真的很感激这门课在某些部分有一个 Jupyter 笔记本,你可以去看看程序员是如何在笔记本上写脚本和代码的。
甚至练习也很有帮助,它们对学习 Python 很有帮助。我认为这是使用定量方法开始你的算法交易之旅的良好基础。
干得好!
谢谢你的美言!我们很高兴一直在那里,为您提供能够指导您学习的 apt 学习资源。我们祝你未来一切顺利。
如果你也想学习 Python 并使用它来分析金融数据集,这里有一个详细而全面的交易基础 Python 课程,为来自全球的 28K+学习者建立一个强大的 Python 基础!更何况?完全免费!立即注册。
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
为什么我要学习一种特定交易风格的量化方法?
原文:https://blog.quantinsti.com/learn-quantitative-approach-trading/
交易中的定量方法要求一个人精通数学和统计学。大多数情况下,价格和交易量是进行交易定量分析的常用输入变量。
例如,定量分析意味着用过去的数据来测试交易策略(回测),以根据一些流行的性能统计方法来显示策略的性能,这些方法包括诸如 ARIMA(自回归积分移动平均线)、SMA(简单移动平均线)、指数平滑、神经网络(NN)等模型。以及夏普比率、索提诺比率等性能评价。
使用定量方法的交易风格有:
展望未来,这篇文章包括:
- 在每种交易风格中使用量化方法的原因
- 定量方法与其他方法相比有何优势?
- 如何从量化交易开始?
在每种交易风格中使用定量方法的原因
对于上面提到的每种交易风格,量化方法在交易者中的成功背后都有一些原因,这些原因是:
- 捕捉中短期上涨趋势
- 能够迅速采取行动
- 用于在投资前识别风险
- 对于位置调整
- 为投资银行和对冲基金提供量化策略
捕捉中短期上涨趋势
能够用动量交易、摆动交易等交易方式成功交易。我们需要捕捉中短期的上涨趋势。定量分析有助于发现交易机会。
定量分析利用了神经网络 (NN)、ARIMA(自回归积分移动平均)、SMA(简单移动平均)等统计方法。预测趋势。
移动平均线的示例如下:

在上图中,显示了价格(12 个观察值)和相同间隔的时间段数。实际数据点以蓝色显示,而 SMA 是使用以下公式计算的:
截至最后一个时间段的增加值(收盘价)/考虑的总时间段
使用 SMA 公式计算每个下一个间隔的值。因此,紫色线表明 SMA 显示上升趋势。正如你所看到的,在第 5 期和第 6 期之间,实际价格有一个低谷。然后,从 6 到 7,显示价格的峰值。
总而言之,在图形表示中有很多峰值和谷值。SMA 显示趋势,交易者在此基础上发现是否会有看涨趋势或看跌趋势。这就是在统计方法的帮助下,交易者如何在市场中捕捉短期或中期上涨趋势,并创建在上涨趋势中买入和在趋势峰值出现时卖出的算法。
能够迅速采取行动
能够对这种系统交易采取快速行动是另一个原因。在定量交易的情况下,交易者发现大量的机会,然后采取行动执行金融市场中的交易。
交易者希望手动还是自动执行交易完全取决于交易者。无论是哪种情况,统计方法都会给投资的未来价值带来一定程度的确定性。
这个自动化系统可以快速地在金融市场上开仓和平仓。而人工交易的话,通过统计的方法做了定量分析之后,交易者可以很快给经纪人打电话下单。
如今,使用 Python 等计算机语言,提取过去的数据、用统计计算对策略进行回溯测试以及执行交易的速度比以往任何时候都快。
用于在投资前识别风险
借助于诸如夏普比率和 T2 的计算,量化交易者可以在投资前识别风险。通过计算,定量分析师发现了金融市场的风险,并在此基础上发现了机会。
例如,夏普比率衡量投资资产或交易策略中每单位标准差的超额回报。夏普比率越高,投资者每单位风险得到的回报就越多。夏普比率越低,投资者对单位风险的预期回报就越少。
例如,假设您预期您的投资组合的年化回报率为 12%。如果无风险利率是 7%,你的投资组合有 8%的标准差。您投资组合的夏普比率计算如下:
夏普比率= (Rp - Rf) / σ
其中,
Rp=平均投资组合收益
Rf= 无风险利率
σ=投资组合的标准差
夏普比率= (12% - 7%)/ 8% = 0.625
类似地,最大压降可以用公式表示为:
最大压降= L-P/P
其中,
P =最大跌幅前的最大值
L =新高前的最小值
在您的交易或投资期间,您的投资组合会多次贬值。这些价值的减少被称为提取。这些提款值的最大值给了我们一个投资组合可能下降的最大值的估计。从技术上讲,它被定义为一个投资组合从高峰到低谷的最大价值减少。
例如:
假设你的投资组合的初始值是 10,000 美元。在一段时间内,它增加到 50,000 美元,然后下降到 7500 美元。然后反弹到 55,000 美元,然后再次下跌到 48,000 美元。
在这种情况下,最大下降值为
(7500 – 50000) / 50000 = -85%.

你可以用这些业绩评估方法来比较两个投资组合,并且可以选择一个与另一个相比具有更高的夏普比率和更小的最大提款值。
对于位置调整
为了维持你的投资组合,头寸规模是非常重要的。头寸规模决定头寸的规模,包括多少股票、合约、债券等。每笔交易都应该买进卖出。通过定量方法,你可以用诸如最优 f、凯利等技术来分析策略的性能。
在投资银行和对冲基金从事量化策略工作
量化交易员通常受雇于投资银行和对冲基金。一些商业银行也雇佣定量分析师。定量分析师可以在对冲基金和投资银行的前台和后台工作,如 Bridgewater Associates、Goldman Sachs 等。
后台的定量分析师进行研究,创建交易策略,并进行风险管理。此外,后台部门的定量分析师正在验证基于趋势线、股票价值等创建的模型。然而,前线办公室的定量分析师更专注于实施和执行交易策略。
定量方法如何优于其他方法?
与传统的和非量化的交易方法相比,量化交易是有用的,因为它的结果在本质上更具体。
| 量化交易 |
| 量化数据是一种客观的分析 |
| 借助夏普比率、索提诺比率、最大压降等绩效评估指标和 ARIMA、SMA 等模型对数据进行分析。 |
| 该分析基于过去特定情况的发生来量化数据 |
| 它涵盖了一个大型数据集 |
| 研究方法在数字上是决定性的 |
| 传统交易和非量化方法 |
| 不要量化数据 |
| 只做趋势或模式分析,不做数字分析 |
|
数据通常不是很大,因为没有定量方法很难测试大型数据集 |
| 由于战略无法衡量,只能通过查看数据值来预测,因此决策力没有那么大 |
| 研究方法是决定性的,没有确切的数字或测量 |
| 在非定量方法的情况下,情绪通常不受控制 |
如何从量化交易入手?
从量化交易开始,我们有全面的博客文章、课程和一些有趣的视频来帮助你。
学习量化交易的资源
博客学习量化交易
博客文章涵盖了从教育背景到成为专业的量化分析师和工作角色等话题。以下是推荐的 quant 博客:
学习量化交易的视频
以下视频将带您深入了解量化交易策略:
学习量化交易的课程
以下课程将为您构建量化交易策略或交易风格的知识和技能:
结论
交易的量化方法允许你利用金融市场的机会。机会是通过将复杂的行为模式分解成数值来发现的。
为了在金融市场中承担更多的计算风险,数学和统计方法有助于从交易决策中提供一些确定的预期。
探索我们关于动量交易策略的课程,了解更多信息。你也可以看看我们在动量交易的博客。
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
学习升级:Zahra 从手工交易到算法交易的旅程
原文:https://blog.quantinsti.com/learn-upgrade-manual-trading-algorithmic-trading/
虽然交易经常被认为是一种赚取利润的方式,但由于涉及的风险,许多人仍然对开始交易持怀疑态度。然而,学习和超越的热情是成功的关键,还有实践经验。
一个年轻时就开始交易的人叫 Zahra。她的旅程表明了她必须提高和更新技能的决心,从而学习算法交易。
以下是我们与萨拉的对话!
-
Hi Zahra, tell us about yourself.
我目前正在学习 B. Com。我对金融市场有足够的了解。当我意识到交易可以成为额外收入的一个很好的来源时,在我爸爸和我哥哥的帮助下,我对市场的兴趣增加了。我从手工交易开始,在做了更多的研究后,我发现了算法交易这个概念,它迫使我做更多的研究,加深我对这个领域的了解。
-
As a manual trader, when did you decide to learn algorithmic trading?
我 17 岁开始交易。起初,我做虚拟交易,每天用不同的方式交易。这让我疯狂地想要深入了解它。当手动交易时,有情绪和疲劳是正常的,为了克服这一点,我决定进一步学习量化金融的最新趋势。因为几乎所有的东西都像一台机器。
-
What made you choose EPAT to explore this field?
我是在上网的时候知道这个节目的。我发现这个领域的课程并不多。在我看来,EPAT 看起来很有希望首发。
-
Tell us about your experience.
加入 EPAT 的主要原因之一是学习机器学习。虽然课程内容丰富,但我也学到了很多东西,如数学模型、回溯测试、编码、使用统计套利、套期保值和编程工具,如 Python 和 r。我还喜欢 Rajib Borah 先生的期权交易讲座,也喜欢 Nitesh Khandelwal 先生的教学方式。教员和支持团队非常有帮助和经验。旅程很短,但课程结构相当全面,我真的很喜欢用不同的方式学习不同的市场策略。
-
How did you apply and make use of the skills you learned?
我认为,量化金融是一个秘密领域,人们不会分享想法。但是,通过 EPAT 项目,我学到了一些好的概念和策略。我在利用我的技能提升我的策略。这提高了我的决策技能,并帮助我理解了我们在市场中占据特定位置的标准。几个月来,我也有了新的理解,并通过不断的练习继续这样做。
-
Do you have anything you want to say to aspiring quantitative analysts and algorithm traders?
在交易中,你可以很激进,但要有适当的风险管理技巧。你可能是防御性的,但你可能最终利润较低。
从手工交易到算法交易,Zahra 成功地完成了 EPAT 之旅。
EPAT 的目标是培训有抱负的算法交易员,并让他们具备开始算法交易所需的强大技能。这是一门综合课程,不仅涵盖金融知识,还包括编码交易策略所需的技术知识,包括统计学和计量经济学、金融计算和技术、算法和量化交易等主题。
免责声明:为了帮助正在考虑从事算法和量化交易的个人,本案例研究是根据 quantin STI EPAT 项目的一名学生或校友的个人经历整理的。案例研究仅用于说明目的,并不意味着用于投资目的。EPAT 项目完成后取得的结果对所有人来说可能并不一致。T3】
Algo 交易的学习、认证和安置之旅
原文:https://blog.quantinsti.com/learning-certification-placement-algo-trading-journey-bns-kumar/
“世界是你的”
一个现在流行的短语,它是由威廉·莎士比亚创造的。
这句话对埃帕提安·BNS·库马尔来说非常正确。一个专业的量化分析师和一个 T2 的理学硕士。在经济学领域,BNS 成为金融和经济市场的一部分已经超过 12 年。
管理时间,致力于学习,也相信传授知识,BNS 一直在不断提高自己。获得了 EPAT 优秀证书,BNS 现在已经成功地在算法和量化交易领域确立了自己的地位。
我们通过电话与他取得了联系,以下是我们关于他与我们分享他的旅程的讨论。
嗨,BNS,给我们介绍一下你自己

我是 BNS·库马尔,在过去的十年里,我一直在量化领域工作。我拥有金融经济学硕士学位,目前正在印度精算师学院学习精算课程。我目前是一名的定量分析师助理。
我喜欢网球和拉小提琴。现在,我的大部分时间都花在管理我非常活跃的孩子上,给他读书,带他去学校。我从孩子们身上学到了很多。他们不放弃,不断尝试,直到实现目标。这是我应用于算法交易的一点。
市场是关于风险管理的。教会一台机器管理风险是困难的。我的市场实验围绕着这些方面,并找到一个有效的方法来退出交易。
你总是对学习交易感兴趣吗?
我的职业是金融领域,但不是交易。我开始了我的旅程,分析资产负债表,账单,在 Excel 中建立财务模型,并使用 VBA 软件自动生成 Excel 表格。
我想了解这些数字背后的含义,所以我继续攻读硕士学位。就在我找到一份建立投资组合模型的工作之后。从那以后,我一直手动交易,只是遵循一些技术规则,不像一个正常的交易者。
事实:由 BNS·库马尔和他当时的经理撰写的关于结构性金融和债券市场发展的出版物也发表在《亚洲银行和金融研究杂志》上。
我的个人交易之旅是从仓位交易开始的。我过去常常分析一些证券的资产负债表和季度报告,然后手动购买。
在一段时间内,有大量数据涌入,我们开始进行数据分析。这帮助我基本上减少了交易频率,增加了数据研究交易自动化。
我想让这个过程自动化,因为它会在心理上帮助我,更好地管理我的交易。大约在 2014-15 年,我一直在寻找能够给我介绍算法交易的课程。
我考虑过金融工程课程,但没有选择,因为我已经有了硕士学位。我想做兼职,幸运的是我遇到了 QuantInsti。离开 EPAT 已经 5 年了,现在我自动交易,大部分时间花在研究上。
EPAT 对你的职业生涯有什么影响?
EPAT 彻底改变了我对金融世界的看法。它教会了我如何不仅从财务角度,而且从数据角度来看待公司。
EPAT 给了我很多应用我所学的机会。我相信如果你不知道如何应用,学习就没有意义。完成《EPAT》一年后,我有机会为一家完全专注于 algos 的公司工作。这是我在这个领域的第一份工作,之后我获得了多次线下工作的机会,并为一些投资者担任顾问。
除了职业上的好处,在个人方面,它帮助我专注于研究,看看我们是否能在策略上有所突破。
你最喜欢 EPAT 的哪个特征?
在众多原因中,我最喜欢 EPAT 的三点。
安置小区
完成 EPAT 后我直接找了一份交易方面的工作。EPAT 给了我很多机会,并帮助我参加了很多最初的算法交易或基于量化的职位的面试。我花了一些时间去理解公司在寻找什么,我应该了解什么样的技术。
我设法破解了一个这样的采访,然后事情发生了变化。虽然我不是程序员,也没有工程背景,但我自学了编码和统计方法,并将其应用于 Algo 交易。
QuantInsti 帮助我从一个普通人成长为一名算法交易员。
为非交易者提供学习
EPAT 向我介绍了移动平均线等简单的策略,并转移到市场微观结构等高级主题。我在这里学到的重要一点是,有人在关注复杂的事物,比如市场微观结构。我开始专注于此,并学习如何基本上真正的订单簿。我最终开发了一些策略并部署了它们,这是一次很好的学习经历。
你可以开发策略,并对它们进行回溯测试,但是把它付诸实践是一种完全不同的体验。我不知道人们开始在实时市场交易时是否失败,但我在最初阶段失败了。
打下了坚实的基础
EPAT 打下了坚实的基础。在 EPAT 之前,我已经开始学习基本面分析和一些技术分析,但我不知道如何实现或测试它。在 EPAT,我们从 Excel 开始,输入每日数据并进行简单的移动平均测试,然后通过改变参数实现自动化。这是我的第一个战略发展。当我探索技术分析、微观结构、基于数量的规则等时,这一切完全改变了。
疫情对你的交易有什么影响?
当疫情在 2020 年 3 月来袭时,我停止交易了 3-4 个月,因为波动性太高了。随着封锁,不能去任何地方,一个人变得无聊。你必须管理你的内心空间,这比看起来要困难得多。
但幸运的是,事情发生了变化,几个月后封锁解除,我们可以出去了。我不会说这是一个困难的阶段,而是一个有趣的阶段,在这个阶段,你基本上将学会如何只靠最基本的东西生存,并用它来管理一个家庭。
你会给那些想从事算法交易的人什么信息?
首先,一个人需要了解他们想要实现什么,并正确看待事情。此外,你应该非常擅长编码,或者你应该练习编码,然后开始申请这份工作。
如果你想进入 Algo 交易和 EPAT,就要清楚你的方法。
不同的人应该有不同的方法:
- 一个学生需要专注于编码,通过练习变得擅长,然后开始申请工作
- 一个有经验的交易者应该对 EPAT 的算法行业有一个大致的了解,然后从算法交易台开始他们的旅程
如果你想改变你的领域或者在算法交易中找一份工作,那么这是一个不同的视角。
还读了一个鼓舞人心的成功故事
如果你已经是一个交易者,想开始一个 algo 交易台,想知道什么在进出,这可以是另一个角度。
这真是鼓舞人心的 BNS。我们确信人们真的会喜欢阅读你的故事。非常感谢您的所有知识、坦率的谈话以及抽出时间与我们联系。
你知道吗?不久前,BNS·库马尔还与我们一起主持了一场 EPATians 分享会,他在会上谈到了构建 algo 交易基础设施。你可以在这里看。
算法交易(EPAT)的高管课程是一门综合课程,涵盖的主题从统计学和计量经济学到金融计算和技术,包括机器学习等等。开始你的探索,与 EPAT 一起提升你的算法交易知识。点击查看。
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
从 14 岁学习交易到现在的算法交易——塔伦的旅程
原文:https://blog.quantinsti.com/learning-trading-14-algorithmic-trading-tarun-journey/
成功的交易者在交易实践中体现的一个强大的品质是信念。你可能会惊讶,EPAT 校友塔伦在 14 岁就开始交易了。与此同时,他得到了他哥哥的指导和教导,并一直敏锐地交易。他向我们吐露,他在自己的工作中找到了信念和快乐。
我们联系了 Tarun,尽管冠状病毒处于封锁状态,他还是和我们分享了他进入算法交易世界的旅程。这是他的故事。
你好,塔伦!你能给我们介绍一下你自己吗?
嗨!我是塔伦·辛格·乔汉。我在孟买工作。我现在是大学的最后一年,学习数学和统计学——由于冠状病毒疫情,目前暂停了学习。我喜欢足球,在学校的比赛中踢了很多次,现在我仍然喜欢踢足球。

我 14 岁开始交易,在 MCX 为哥哥执行黄金和原油订单。我 15 岁的时候就开始设置止损单和目标单。我在过去的 9 年里一直从事交易,我热爱它。我对我现在做的事情很有信心,但我还不热衷于工作方面。
全职交易,我和我的哥哥 Jatin Singh 一起工作。我们认为交易是一项运动,每个人都有自己的玩法。
目前,我正在处理指数期权(银行俏皮俏皮)。期权有希腊特色,你有很大的发挥空间,你需要精通数学,让它在期权中发挥作用。这是我真正喜欢的东西。
因为我对问题陈述和当市场横盘运行而没有产生阿尔法的探索非常感兴趣。我一直在设计算法,通过数学定价模型的帮助来检测期权的错误定价,并以对冲的方式利用它们,我还一直在研究算法,通过找到各种脚本之间的稳健关系并利用这些关系中检测到的偏差来执行统计套利。
有趣的是,你才 14 岁就开始交易了。算法交易是如何走进你的生活的?
我接触交易的真正原因是我哥哥,他自己已经交易了 18 年,他自己 19 岁就开始交易了。
他比我大 15 岁。这一切都是从我 13 岁左右开始对市场感兴趣开始的,那时我 8 年级,在印度中央邦的印多尔上学。我只是有点喜欢这个市场,并被我哥哥坐在终端上交易的方式迷住了。
在九年级的时候,我住在一所寄宿学校,我决定要在暑假学这个。因为我很快就明白了事情的本质,我和我哥哥决定去私立学校学习,这样我就可以花更多的时间去交易,从而放弃传统的学校教育。
我在私人学校完成了我的初中和高中学业,同时,我开始和我哥哥一起交易,学习衍生品、市场、交易所以及交易领域是如何运作的。我也开始代表我的兄弟执行指令,根据他的指示,什么时候做多,什么时候做空,用什么工具。
当我 16 岁的时候,我实际上知道衍生品市场和各种接近市场的方式,技术分析和基本面分析——什么是期权、期货、限价单、股票限价,以及以非常基本的方式交易所需的一切。
大约在这个时候,我开始编写趋势检测、内置仓位大小的动量系统等等。我从 AFL 开始,这是 Amibroker 的语言,一个制图软件。两年来,我一直在 AFL 中制作基本系统,尝试在各种工具中绘制实时信号,如黄金、原油、铜。
当我 18 岁时,我开始寻找我对编码的兴趣和我对市场的领域知识的交集。我们决定我应该选择学习数学和统计学,因为它在交易中有非常直接的应用。所以,我开始全心全意地学习它,但是我没有写那么多代码。
20 岁时,我开发了一个端到端的趋势跟踪策略,在 MCX 交易大宗商品,主要是贵金属,并在一年内产生了三位数的回报,但后来我意识到,尽管趋势跟踪策略有较高的预期,但它们的夏普比率相对较低,需要相对较长的时间来实现预期,这促使我开始寻找夏普比率更高的阿尔法
一年前,我 21 岁的时候,我们偶然发现了 QuantInsti 网站,然后我们决定这是一门完美的课程,需要个人学习算法交易的热情。
算法交易是我感兴趣的,QuantInsti 似乎为我提供了学习的方法。我对课程进行了详细的概述,那时我意识到,由于我的编码背景和交易领域的知识,我应该加入 EPAT。因为 QuantInsti 是这两者之间的关键环节。
因此,我在正确的时间出现在正确的地方。我认为我很幸运有我的兄弟作为我的导师,否则,我不会在这里。在他的指导下,我很快学会了交易,在他的经验和知识的指导下,我相信如果我自己学的话,会花更多的时间。
今天,在 EPAT 获得的知识和技能对你有什么帮助?
EPAT 帮助我从宏观上了解了不同类型的阿尔法,这些阿尔法可以通过使用由编码、数学和金融原理创建的算法来加以利用。人们面临的最困难的部分是将这三个领域联系在一起。
工科生不懂金融,金融生不懂编码。而算法交易是工程和金融的交叉点。在这方面,EPAT 提供了各种风格的要点。因此,它让我意识到,利用我目前的编码技能和金融知识,并结合这两者来创造市场阿尔法值,可以获得不同的交易风格。
现在我意识到了各种各样的概念,比如我如何将我的技能应用到交易中,等等。我的方法也很精致。对我哥哥万分感激。
你最喜欢 EPAT 的哪一个特色?
支持功能,不言而喻!这很好。每当我想和老师联系时,我就打电话给我的课程协调员。他们只是把它安排在日历上,然后嘣!你接到电话了。
你可以和在 EPAT 教你的市场专家分享具体的问题。
这个过程非常无缝。对我来说,支持是突出的关键特征。我从来没有遇到过任何问题。我的支持经理 Subash 和校友经理 Deepa 总是支持我。
你对有抱负的算法交易者有什么话要说吗?
印度市场目前可能缺乏流动性,但它正在增长。由于它是一个发展中经济体,对市场的参与也将随着时间的推移而增加。算法交易将成为下一个完全统治市场的事物,这只是时间问题。
如果你登上火车,你就会到达它要去的目的地。
我肯定会推荐 EPAT,这样你就能意识到算法交易到底是什么,为了把算法交易作为职业,你应该记住哪些要点。
除了 QuantInsti,我不知道有任何机构专门教授算法交易。由于它强大的支持系统,我认为它绝对物有所值!
谢谢你和我们分享你的旅程,Tarun。得知爱人的支持和指导对一个人的生活和职业生涯有多么激励人心,有多么积极的影响,真的很鼓舞人心。我们祝你未来一切顺利。
你想用终生的技能来武装自己吗?这些技能将永远帮助你提升你的交易策略。通过统计学和计量经济学,金融计算和技术,机器学习等主题,EPAT 确保你精通在交易领域取得成功所需的每一项技能。在此查询。
免责声明:为了帮助那些考虑从事算法和量化交易的人,这个案例研究是根据一个学生或 QuantInsti 的 EPAT 项目的校友的个人经历整理的。案例研究仅用于说明目的,并不意味着用于投资目的。EPAT 项目完成后所取得的成果对所有人来说可能并不一致。
交易者可以从职业赌徒身上学到的东西-第二部分
原文:https://blog.quantinsti.com/lessons-traders-can-learn-professional-gamblers-2/

由杰伊·马尼尔
好吧,这是上一篇博客 交易&赌丨博:交易者可以从职业赌徒身上学到的教训 的续篇。现在,很多人会想,交易者真的可以从这些职业赌徒身上学到什么呢?也许有更多,也许没有!你可以看看这个博客,自己决定。
在之前的博客中,我们讲的第一课是 下注,或者在市场中,只交易你知道的东西。 更进一步,我们甚至明白,当你交易时,一个 自律的心态是必要的。如果你必须玩,一开始就决定三件事:游戏规则、赌注和何时退出。T15】
让我们从第三课开始:
3。计数-做数学计算并理解期望值
在我们开始理解这个之前,我想和你打个赌。你可以选择以下任何一个赌注来打倒我:
Bet 1:
我想和你一起出去走走,在附近的花园里走 10 分钟。我们会谈论政治、生活和哲学(或者只是喝杯酒放松一下)。在这十分钟内,如果有一只鸟扑到你身上,我将付给你 10,000 美元,否则你将付给我 500 美元。
条款和条件:花园应该由赌丨博双方友好地同意。
Bet 2:
你从一副公平的牌中抽出一张黑桃 a(由第三方洗牌),你将赢得 1000 美元。否则,我将赢得 50 美元。
Bet 3:
案例 1:我们将掷一个公平的骰子。选择你的幸运数字。如果这个数字出现,你将赢得 500 美元,否则你将失去 250 美元。
例 2:假设你没有 1-6 这个幸运数字。假设骰子正面出现 2,你赢 500 美元,否则你输 150 美元。
Bet 4:
让我们试试玩轮盘赌。如果你的球落在红色口袋里,你赢了 50 美元,你输了 50 美元。
相信我,最终我会赢的。是的,永远!如果有人认为这是夸张的话, 你不会是唯一一个被我玩弄的人 。我会和每个来找我的人一起玩这个游戏,一年 365 天,每天都玩。但是,“总是”是不是有点夸张。也许吧,但是嘿,如果你也想赌一把,欢迎你来我的赌场把我打倒。
交易时,有必要对你要交易的工具进行计算。 举个例子:如果你做多一个看涨期权,你的期权以价内(ITM)结束的概率是多少?一个简单的答案是期权的 delta。如果期权的 delta 是 0.3,那么它意味着在这个时间点上,你的期权是无价值的(OTM),期权在金钱中结束的概率是 30%。因此,你应该相应地购买。(您的保费支付)
许多散户投资者“购买”期权。他们要么做“多头买入”,要么做“多头卖出”,支付溢价,然后等待期权兑现。你知道这个有趣的事实吗?85%的情况下,这些散户交易者会损失溢价,而期权卖方会获利。如果你不相信我,你可以在网上搜索一下。
不管怎样,回到上面的 4 个赌注,为什么我总是赢?或者,如果不是这样,我会下注吗?
我的 期望值= [(我赢的概率)(我赢的金额) - (你赢的概率)(我要给你的金额)】
EV(Bet 2)=[(51/52)* 50 美元]-[1/52 * $ 1000]= $ 49.03-$ 19.23 =$ 29.28
请注意我在赌注 2 上的正$29 EV。
EV (Bet 3)案例 1 =[(5/6)* 250 美元]-[1/6 * $ 500]= $ 208.33-$ 83.33= $ 125(Bet 3)EV(Bet 3)案例 2 =[(5/6)* $ 150]-[1/6 * $ 500]= $ 125-$ 83.33 =$ 41.67
**在赌 3 中,我还做了一件事。通过让你选择自己的“幸运数字”,我给了你一种感觉,你将能够控制结果。尽管我赢的概率和你输的概率是一样的, 我已经引入了一个 行为偏差 ,现在我将在这上面赚得更多。(情况 1 EV 大于情况 2 EV)。是的,欢迎你来我的赌场。
EV(Bet 4)=(0.5 * 50 美元)- (0.5*50) = $0(不盈利,不亏损 EV)。基本上,赌 4 就是让我赌场的每个人都忙起来。
嗯,赌注 1 是随机事件,不在我手里,也不在你手里(或者我应该说别的而不是手里)。我真的无法量化,怎么,什么时候,有多少鸟会往你身上打(它们的粪便)。我可以,但不会用简单的语言解释。(如果你觉得我不行,想打赌吗?😛)。顺便问一下,你听说过 吗? 没错,赌 1 就是我赌场的拉人。尽管如此,让我“数”一下我在赌注 1 中的风险。如果我在 365 天中每天玩一次,并且每天都赢,那么我将赢得$500 * 365 * 1 = $182,500。因此,我可以承受一年亏损 18.5 次,没有利润,没有亏损。(我希望你明白,即使我输了 20 次,我赌场仍然会盈利,因为我在其他游戏上的 EV 是正数。 另一个教训:交易时要把你的投资组合看成一个整体,而不是基于孤立的交易和心理核算
是的,那是我的赌场。
4。管理好您的资源-您的资本和现实的投资回报率
你有没有观察到,我在开赌场的时候管理我的资源有多好,我在计算我的回报时有多现实(我说的现实是指我所期望的只是“预期价值”,仅此而已。)
因此,如果你有资本,你可以 分散投资 并相应地将资本分配到不同的资产类别。你应该总是知道风险并量化它。此外,回报总是基于你承担的风险,因此你的期望应该是现实的,类似于赌场的期望是现实的。
这是我想结束的地方。如果你喜欢这个博客,请发表评论,让我们知道你的观点。
后续步骤
你可以在 Quantra 上学习一些很棒的交易策略。QuantInsti 的 Quantra 专门提供算法和量化交易的自定进度在线课程。凭借最先进的人工智能学习技术,Quantra 提供了高度互动的练习,有助于促进对交易中复杂概念的理解。请在这里查看的课程。**
交易者可以从职业赌徒身上学到的东西
原文:https://blog.quantinsti.com/lessons-traders-can-learn-professional-gamblers/

由杰伊·马尼尔
不懂股市交易的人最常问的一个问题是“日内交易是不是赌丨博?”对于这个问题,一个简单明了的回答是“不!”。事实上,我甚至会说,如果做得正确,赌丨博也不是赌丨博。这是一场训练有素的比赛,不要失去你的注意力。这是关于你能在多大程度上正确理解一个特定的情况,以及你承受压力的能力。许多明显的“豪赌客”以此为职业,并且相当成功。但是这个博客并不是为了推广赌丨博,因为赌丨博被认为是一种高风险和容易上瘾的习惯。赌丨博被视为社会禁忌,在一些国家甚至是非法的。但总有一些教训需要吸取,而不是引火烧身。
1。只交易你知道的。…
艾伦·伍兹坐在他香港的顶层公寓里,看着电脑屏幕。他敲击键盘时,数字滚动而过。房间另一边的屏幕闪烁着美国股票市场最新的彭博行情。股市是他进行“赌丨博”的地方。他通过一份可靠的工作——赛马来谋生。他很少走出自己的公寓。他的生活类似于会计师或计算机程序员。但他是个职业赌徒。 (摘自理查德·芒奇金的《赌丨博奇才》)
艾伦·伍兹是一名赛马选手,他设计了电脑程序来击败博彩公司。他开发了一些程序,通过这些程序,马匹、比赛、骑师和跑道仅仅是计算统计概率的参数。为了职业,他赌马,为了爱好,嗯,他赌别的马!
对于交易者来说,了解整个股票市场是很重要的。可以在市场上交易的不同金融产品有哪些?日内交易者通常交易股票、股票期货、股票期权、指数期货和指数期权。首先,知道你想在市场上交易的产品。此外,了解产品定价中涉及的关键因素。你应该知道一个产品是如何定价的,因为这将有助于你了解该产品是否定价合理,定价过高或过低。了解你的技术指标以及如何阅读技术价格图表。设计你的交易策略。知道你的入口和出口。看财经新闻。知道事情。如果你有不明白的地方,就去问——永远要寻求知识。
了解事情会让你对你正在做的事情,你能做什么,你应该做什么,你不能做什么,你不应该做什么感到舒服。如果你不明白这 5 个“是什么”是完全不同的,请不要继续往下读。
2。一个训练有素的头脑减去情绪…
Cathy Hulbert:在我去玩之前,我不会从事任何其他活动。我不接电话。我不社交。之后我没有计划任何社交活动。我不想要任何时间限制。我想让我的心灵尽可能保持平静和安宁。我每天晚上在完全相同的时间睡觉,每天早上在完全相同的时间起床。我在去比赛的前一天晚上不喝酒。当我开车去赌场时,我很清楚我对其他司机有多恼火。我越冷静,就越知道自己会做得更好。 (摘自理查德·芒奇金的《赌丨博奇才》)
这就是职业扑克和 21 点玩家凯茜“猫”赫伯特的心态。游戏节目网称她为“地球上最好的女赌徒”,她还出现在 BBCs 100 名女性名单上。她已经从赌丨博中退休,现在是一名在线赌场顾问。
在股市交易中,拥有冷静和自律的心态多少被低估了,这要感谢好莱坞电影中展示的交易者在冲动交易后获得巨大成功的画面。但是如果你在一年的 250 个交易时段里都要做冲动交易,那么冲动交易对你来说就没什么用了。因此,在知道事情之后,一个人应该知道如何处理事情。你的头脑应该能够吸收你所知道的所有信息(你的家庭作业),并在购买或出售(你的熏肉)时运用这些信息。不要贪婪或恐惧,坚持你的策略。
有一句中国谚语-如果你必须玩,在开始时决定三件事:游戏规则,赌注,和退出时间。如果你的日交易策略告诉你在价格上涨后的一个交易时段内,以 1%的价格预定利润,那么就去做。不要贪婪。你可能会错过 1%后的反弹,但如果你看着它,从长远来看,它会帮助你通过自律在 250 个交易日后预订更大的利润。如果价格向相反的方向发展,一定要止损离场。
记住你不是今天走进拉斯维加斯赌场并期待赢得头奖的赌徒。菜鸟或游客都会这么做。你是“专家”。你所需要的是你今天的回报,因为明天你将再次走进同一个赌场,玩同样的游戏再次获胜。知道什么时候退出非常重要,不管你是赢是输。冷静、自律的心态会帮助你实现这一目标。
交易者可能会对行为偏差上当。“赌徒谬误”是在一系列不好的结果之后,倾向于接受好的结果的心态。例如,如果你赌掷硬币,如果正面朝上,你有 50%的机会赢。因此你第一次下注 50 美元。硬币抛过来了,是反面。你输了 50 美元。现在你认为如果你在第二次掷出正面,你有更大的机会赢得赌注,因为之前的结果是反面。您下注 100 美元,以追回您输掉的 50 美元,并赢得另外 50 美元。又是反面。你输了。现在你更有信心,如果你赌正面,你肯定有超过 50%的机会赢得下一次,因为前两次结果都是反面。因此你下注 150 美元。你没有意识到的是,下一轮的胜算与前一轮无关。任何一次掷硬币都有 50%的胜算,因为它不依赖于前一次掷硬币。
因此,像星星一样上涨的股票不一定会一直下跌,像天使一样下跌的股票也不一定会一直上涨。也没有必要连续三个交易日亏损就能保证第四个交易日盈利。与此相反的是“热手谬误”,它认为连续几个有利可图的交易时段不会保证你第三个有利可图的交易时段。因此,不要屈服于贪婪,不知道自己的概率就交易。
我们将继续这个博客,并提供它的续集。如果你觉得这个有趣,请告诉我们。在这篇博客中,我们讨论了交易前需要做的事情以及交易时的心理状态。请让我们知道您的感受,以及您希望从我们这里听到的更多信息。
干杯!
后续步骤
你可以在 Quantra 上学习一些很棒的交易策略。QuantInsti 的 Quantra 专门提供算法和量化交易的自定进度在线课程。凭借最先进的人工智能学习技术,Quantra 提供了高度互动的练习,有助于促进对交易中复杂概念的理解。请在这里查看的课程。
使用线性判别分析进行量化投资组合管理
原文:https://blog.quantinsti.com/linear-discriminant-analysis-quantitative-portfolio-management/
拉马克·科尔曼
在本帖中,我们将学习线性判别分析,以及如何在量化投资组合管理中使用它。我们将简要回顾什么是线性判别分析,并将其应用于管理量化投资组合的风险。
在我们进入 LDA 之前,让我们简单讨论一下,
为什么是机器学习?
我的意思是它的目的是什么,我们真正要做的是什么?在最近围绕使用机器学习和 API 提供的模型抽象的讨论中,很容易忽略机器学习的目的和意图。
我们使用机器或统计学习的原因是为了进行推理和预测。简而言之,我们希望更多地了解某些特定数据或领域的总体情况。在大多数情况下,人口不是我们可以完全观察到的,或者用统计学术语来说是连续的。存在某个函数, f(x) 描述某个空间内解释变量和因变量之间的性质和关系。回想一下,一个连续随机变量的概率是无穷大, ∞ ,在某个区间之外, a < y < b 。直觉上这是说我们无法确定人口的确切 f(x) 。因此,在机器学习中,我们试图逼近群体的 f(x) 。我们通过获取样本或在一定时间间隔内查看一些数据来做到这一点。
请记住,我们的样本只是总人口的一部分,我们希望尽可能地逼近 f(x) ,一个关键问题是,我们如何知道我们从这部分人口中观察到的实际上代表了人口。换句话说,我们怎么知道这个观察不是随机的?这是假设检验的目的,也是我们计算检验统计和 p 值的原因。
什么是线性判别分析?或者什么是 LDA?
线性判别分析,也称为 LDA,是一种监督的机器学习算法,可以用作分类器,最常用于实现降维。为了了解 LDA 的目标,让我们简单回顾一下线性回归。线性回归是一种参数化的监督学习模型。线性回归的目标是预测一个定量的反应,或标签。我们试图通过建立一个可以接受单个或多个参数或预测值的线性模型来实现这一点。这些预测可以是定量的,或数字的,或定性的或分类的。
与线性回归不同,在线性回归中,我们试图构建一个模型来预测特定的定量响应,在 LDA 中,我们的目标是预测定性响应或类别标签。这方面的一个例子是构建一个模型来预测资产的方向,而不是用线性回归的术语来预测资产的实际价格。更具体地说,LDA 将寻求预测方向的概率。
那么算法是如何工作的呢?
线性判别分析试图求解以下方程:Pr(Y=k ∣ X=x)
如果你学过逻辑回归,这个等式可能看起来很熟悉。它代表给定 x 的第 K 第T3】类或我们预测器的条件概率。
你可能会想,如果逻辑回归和 LDA 都试图找到某个观察值属于某个特定类别的条件概率,或者给定一个值给 x ,或者给定我们的预测值,我们为什么不使用逻辑回归呢?
简而言之,当我们的类别或定性响应是二元的,例如,要么是 1 或 0,要么是真或假时,逻辑回归工作得很好。但是,当我们处理的数据中我们的类可能有两个以上的可能状态时,LDA 可以提供一个更好的选择。此外,当我们的类别和给定的其他条件之间存在高度的可分性时,LDA 可以给我们更好的预测,可以比逻辑回归更稳定。
尽管 LDA 试图解决与逻辑回归中使用的等式相同的等式,但它是以完全不同的方式解决的。在逻辑回归中,我们直接计算上面提供的条件概率。我们用最大似然法计算我们的系数。然后,我们将我们的系数插入逻辑函数,以得出我们的条件概率。逻辑功能如下所示:

LDA 不使用最大似然和逻辑函数,而是使用贝耶定理来求解条件概率方程。
应用于 LDA 的 Baye 定理的等式如下所示:

其中π k 是一个 Y 或一个随机观测值来自第 k 第T7】类的先验概率,fT9】k(x)**是我们的 x 来自第 k 第T17】类的可能性或概率。分母是边际概率。**
先验概率πkT3】计算起来相当简单,并且可以通过计算第 k 个类的分数概率来实现。但是,似然函数,f k (x) 涉及的比较多一点。
最终,我们将上面的等式转换为下面的判别等式:

判别方程等价于条件概率方程
在我们的新方程中, x 是我们的预测值或特征(注意:这种推导是基于仅使用 1 个特征), μ k 是 k th 类或响应的平均值, σ 2 ,是所有分布的集体方差, π k 是我们的先验概率。
你可能想知道我说的集体方差是什么意思。为了计算似然性,LDA 必须假设某种概率密度函数。该模型假设为高斯分布。这意味着该模型将为每个knT5】类创建一个单独的 x 分布,并且每个类都有自己的 μ 但共享一个σ2T11】****
简而言之,当我们拟合我们的模型时,它必须为每个 k n 类创建单独的概率分布,并估计 μ k 、 σ 2 和 π k 的值,并将这些值代入判别方程(注意:这是指如果 p=1,则使用 1 个预测器;否则,该方程将发生一点变化,以考虑多个预测值)以便计算我们的概率,或对我们的数据进行分类。
让我们定义我们的问题陈述
现在我们已经对 LDA 有了一个简要的概述,让我们来定义我们的问题。我们将假设我们正在管理一个由统计套利策略组成的量化投资组合。我们关心的一个主要问题是,在任何给定的时间里,我们可以预期的最大损失。
我们计算我们的风险值,或风险值,并以 95%的信心理解我们的回报不应低于的水平。但是另外 5%呢,或者说尾部风险呢?
尾部风险是风险值分析的主要关注点。直观地说,虽然我们知道我们的回报可能在 5%的时间里低于某个阈值,但我们担心的是,我们不知道在这 5%的区间内,我们可以预期我们的回报会下降到哪里。在这 5%的尾部中,我们可以预期的最大损失是多少?
为了解决这个问题,我们将建立一个由统计套利策略组成的量化投资组合。我们将在 S & P 500 中使用 K-Means 创建的 pairs,在这里可以找到早期的文章:https://blog . quantin STI . com/K-Means-clustering-pair-selection-python/。
一旦我们构建了我们的投资组合,我们将创建我们的 VaR 和蒙特卡罗并分析结果。然后,我们将建立一个 LDA 模型,它可以帮助我们更好地了解在我们的 VaR 之下的某个范围内的回报概率。这将帮助我们更好地了解我们的风险,从而管理我们的量化投资组合。
我们开始吧!
建立我们的量化投资组合
我们将移植 K-Means 系列中的 statarb 类。我们将使用在该分析的第一个聚类中发现的股票来创建我们的统计套利组合。
class statarb(object):
def __init__(self,df1, df2,ma,floor, ceiling,beta_lookback,start,end,exit_zscore=0):
#setting the attributes of the data cleaning object
self.df1=df1 #the complete dataframe of X
self.df2=df2 # the comlete dataframe of Y
self.df=pd.DataFrame(index=df1.index) #creates a new dataframe in the data_cleaning method
self.ma=ma# the moving average period for the model
self.floor=floor #the buy threshold for the z-score
self.ceiling=ceiling #the sell threshold for the z-score
self.Close='Close Long' #used as close signal for longs
self.Cover='Cover Short' #used as close signal for shorts
self.exit_zscore=exit_zscore #the z-score
self.beta_lookback=beta_lookback #the lookback of beta for hedge ratio
self.start=start #the beginning of test period as a string
self.end=end # the end of test period as a string
#create price spread
def create_spread(self):
#setting the new dataframe values for x and y of the closing
#prices of the two dataframes passed in
self.df['X']=self.df1['Close']
self.df['Y']=self.df2['Close']
#calculating the beta of the pairs
self.ols=linregress(self.df['Y'],self.df['X'])
#setting the hedge ratio
self.df['Hedge Ratio']=self.ols[0]
self.df['Spread']=self.df['Y']-(self.df['Hedge Ratio']*self.df['X'])
return self.df
#check for cointegration
def check_for_cointegration(self):
coint=adfuller(self.df['Spread'].dropna())
#writing conditional that states print out
#cointegrated if the t-statistic passes the
#critical value test
if coint[0] < coint[4]['1%']:
print('Spread is Cointegrated at 99% Confidence Interval')
elif coint[0] < coint[4]['5%']:
print('Spread is Cointegrated at 95% Confidence Interval')
elif coint[0] < coint[4]['10%']:
print('Spread is Cointegrated at the 90% Confidence Interval')
else:
print('Spread is not Cointegrated')
return
def generate_signals(self):
#creating the z-score
self.df['Z-Score']=(self.df['Spread']-self.df['Spread'].rolling(window=self.ma).mean())
self.df['Spread'].rolling(window=self.ma).std()
#prior z-score
self.df['Prior Z-Score']=self.df['Z-Score'].shift(1)
#Creating Buy and Sell Signals; when to be long, short, exit
self.df['Long Signal']=(self.df['Z-Score']<=self.floor)*1.0 #buy the spread self.df['Short Signal']=(self.df['Z-Score']>=self.ceiling)*1.0 #short the spread
self.df['Exit']=(self.df['Z-Score']<=self.exit_zscore)*1.0 #tracking our positions self.df['In Long']=0.0 self.df['In Short']=0.0 #variables that track if we enter market self.enter_long=0 self.enter_short=0 #signal generator for i,value in enumerate(self.df.iterrows()): #longs if value[1]['Long Signal']==1.0: self.enter_long=1 #shorts if value[1]['Short Signal']==1.0: self.enter_short=1 if value[1]['Exit']==1.0: self.enter_long=0 self.enter_short=0 self.df.iloc[i]['In Long']=self.enter_long self.df.iloc[i]['In Short']=self.enter_short return self.df def create_returns(self, allocation,pair_name): self.allocation=allocation self.pair=pair_name self.portfolio=pd.DataFrame(index=self.df.index) self.portfolio['Positions']=self.df['Long Signal']-self.df['Short Signal'] self.portfolio['X']=-1.0*self.df['X']*self.portfolio['Positions'] self.portfolio['Y']=self.df['Y']*self.portfolio['Positions'] self.portfolio['Total']=self.portfolio['X']+self.portfolio['Y'] #creating a percentage return stream self.portfolio['Returns']=self.portfolio['Total'].pct_change() self.portfolio['Returns'].fillna(0.0,inplace=True) self.portfolio['Returns'].replace([np.inf,-np.inf],0.0,inplace=True) self.portfolio['Returns'].replace(-1.0,0.0,inplace=True) #calculating the mu,sigma,sharpe;wins and losses self.mu=(self.portfolio['Returns'].mean()) self.sigma=(self.portfolio['Returns'].std()) #self.Sharpe=(self.mu-0.005)/self.sigma self.portfolio['Win']=np.where(self.portfolio['Returns']>0,1,0)
self.portfolio['Loss']=np.where(self.portfolio['Returns']<0,1,0) self.wins=self.portfolio['Win'].sum() self.losses=self.portfolio['Loss'].sum() self.total_trades=self.wins+self.losses #win loss ratio; ie hit ratio self.win_loss_ratio=(self.wins/self.losses) #probability of win self.prob_of_win=(self.wins/self.total_trades) #probability of loss self.prob_of_loss=(self.losses/self.total_trades) #average return of wins self.avg_win_return=(self.portfolio['Returns']>0).mean()
#average returns of losses
self.avg_loss_return=(self.portfolio['Returns']<0).mean()
#calculating payout ratio
self.payout_ratio=(self.avg_win_return/self.avg_loss_return)
#calculating equity curve
self.portfolio['Returns']=(self.portfolio['Returns']+1.0).cumprod()
self.portfolio['Trade Returns']=(self.portfolio['Total'].pct_change()) #non cumulative Returns
self.portfolio['Portfolio Value']=(self.allocation*self.portfolio['Returns'])
self.portfolio['Portfolio Returns']=self.portfolio['Portfolio Value'].pct_change()
self.portfolio['Initial Value']=self.allocation
with plt.style.context(['bmh','seaborn-paper']):
#Plotting Portfolio Value
plt.plot(self.portfolio['Portfolio Value'])
plt.plot(self.portfolio['Initial Value'])
plt.title('StatArb Pair%s Strategy Returns %s to %s'%(self.pair,self.start,self.end))
plt.legend(loc=0)
plt.tight_layout()
plt.show()
return
现在我们有了策略类,让我们导入我们的库。
#data analysis/manipulation libraries
import numpy as np
import pandas as pd
#data gathering library
import quandl as qd
#data visualization libraries
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')
#stats
from scipy.stats import linregress
import warnings
warnings.simplefilter("ignore")
概括地说,我们的 K-Means 算法在聚类 0 中识别了 9 只股票。我们将导入这些股票,并创建它们的不同组合,检查它们的协整性,如果 ADF 测试为正,我们将把它们添加到我们的统计套利组合中。
让我们进口我们的股票。我们将获得 2017-2018 年期间的数据。
#setting start and end dates
start='2017-01-01'
end='2018-01-01'
#assigning our stocks
aiz=qd.get('WIKI/AIZ',start_date=start,end_date=end)
an=qd.get('WIKI/AN',start_date=start,end_date=end)
sig=qd.get('WIKI/SIG',start_date=start,end_date=end)
kors=qd.get('WIKI/KORS',start_date=start,end_date=end)
bbby=qd.get('WIKI/BBBY',start_date=start,end_date=end)
gt=qd.get('WIKI/GT',start_date=start,end_date=end)
navi=qd.get('WIKI/NAVI',start_date=start,end_date=end)
pvh=qd.get('WIKI/PVH',start_date=start,end_date=end)
rig=qd.get('WIKI/RIG',start_date=start,end_date=end)
现在我们有了数据,让我们简单地看一下我们的数据框架。我们将使用 kors 。
kors.head()
| 日期 | 打开 | 高的 | 低的 | 关闭 | 卷 | 除息 | 分流比 | 开放的 | Adj .高的 | 低的 | 接近的 | 可调音量 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2017-01-03 | Forty-two point seven eight | Forty-three point four five | Forty-two point zero nine five | Forty-three point zero eight | One million nine hundred and twenty-nine thousand six hundred and thirty-four | Zero | One | Forty-two point seven eight | Forty-three point four five | Forty-two point zero nine five | Forty-three point zero eight | One million nine hundred and twenty-nine thousand six hundred and thirty-four |
| 2017-01-04 | Forty-three point two | Forty-three point nine three | Forty-three point two | Forty-three point five | Two million one hundred and forty-six thousand eight hundred and sixty-seven | Zero | One | Forty-three point two | Forty-three point nine three | Forty-three point two | Forty-three point five | Two million one hundred and forty-six thousand eight hundred and sixty-seven |
| 2017-01-05 | Forty-two point six five | Forty-two point seven one | Forty point eight one | Forty-two point one | Three million six hundred and ninety-five thousand nine hundred and four | Zero | One | Forty-two point six five | Forty-two point seven one | Forty point eight one | Forty-two point one | Three million six hundred and ninety-five thousand nine hundred and four |
| 2017-01-06 | Forty-two point one eight | Forty-two point seven six | Forty-two point one two | Forty-two point four seven | Two million five hundred and sixty-two thousand two hundred and ninety-two | Zero | One | Forty-two point one eight | Forty-two point seven six | Forty-two point one two | Forty-two point four seven | Two million five hundred and sixty-two thousand two hundred and ninety-two |
| 2017-01-09 | Forty-two point four four | Forty-two point five six | Forty-one point eight five | Forty-two point zero four | Two million one hundred and thirty-seven thousand seven hundred and sixty-three | Zero | One | Forty-two point four four | Forty-two point five six | Forty-one point eight five | Forty-two point zero four | Two million one hundred and thirty-seven thousand seven hundred and sixty-three |
我们可以看到我们的数据框架包含开盘价、最高价、最低价、收盘价、调整收盘价和成交量。让我们画出样本期内数据的价格。
让我们创建一个绘图函数来绘制我们的数据。
def plot_close(symbols):
plt.figure(figsize=(10,6))
plt.plot(symbols[symbol],label='Close')
plt.legend(loc=0)
plt.ylabel('Price')
plt.title('%s Equity Curve from %s to %s' %(symbol.upper(),start,end))
#plt.show()
我们将创建一个字典来保存我们的符号
symbols={'aiz':aiz['Close'],'an':an['Close'],'sig':sig['Close'],'kors':kors['Close'],'bbby':bbby['Close'],'gt':gt['Close'],'navi':navi['Close'],'pvh':pvh['Close'],'rig':rig['Close']}
我们现在可以使用我们的函数来绘制我们的符号的收盘价。
for count,symbol in enumerate(symbols):
plot_close(symbols)
既然我们已经可视化了我们的数据,我们可以开始创建我们的对,以便我们可以进行 ADF 测试,然后建立我们的统计套利组合。我们有 9 种不同的股票来自 0 类。我们的目标是创建这些股票的不同组合,并测试它们的协整性。我们可以使用下面的组合函数来确定有多少种可能的组合。
import math
def possible_combinations(n,k):
combinations=math.factorial(n)/(math.factorial(k) *math.factorial((n-k)))
return (int(combinations),'Possible Combinations')
我们知道有 9 只股票是我们的 n,2 只是我们的 k。让我们运行我们的可能组合函数。
possible_combinations(9,2)
(36, 'Possible Combinations')
为了识别所有可能的组合并检查它们的协整性,我们将首先创建一个符号列表。然后,我们将创建一个函数,使用符号列表创建所有可能的符号对。然后,我们可以创建一个方法来迭代我们的符号字典,传递我们的符号列表,并检查每一个可能的协整对。
让我们首先创建一个符号列表。
symbolList=['aiz','an','sig','kors','bbby','gt','navi','rig','pvh']
现在让我们创建一个方法,从我们的符号列表中创建每一个可能的对。
#creating method to identify each possible pair
def find_pairs(symbolList):
#creating a list to hold each possible pair
pairs=[]
#intializing placeholders for the symbols in each pair
x=0
y=0
for count,symbol in enumerate(symbolList):
for nextCount,nextSymbol in enumerate(symbolList):
x=symbol
y=nextSymbol
if x !=y:
pairs.append([x,y])
print('Length of Pairs List is:',len(pairs))
return pairs
find_pairs(symbolList)
('Length of Pairs List is:', 72)[['aiz', 'an'], ['aiz', 'sig'], ['aiz', 'kors'], ['aiz', 'bbby'], ['aiz', 'gt'], ['aiz', 'navi'], ['aiz', 'rig'], ['aiz', 'pvh'], ['an', 'aiz'], ['an', 'sig'], ['an', 'kors'], ['an', 'bbby'], ['an', 'gt'], ['an', 'navi'], ['an', 'rig'], ['an', 'pvh'], ['sig', 'aiz'], ['sig', 'an'], ['sig', 'kors'], ['sig', 'bbby'], ['sig', 'gt'], ['sig', 'navi'], ['sig', 'rig'], ['sig', 'pvh'], ['kors', 'aiz'], ['kors', 'an'], ['kors', 'sig'], ['kors', 'bbby'], ['kors', 'gt'], ['kors', 'navi'], ['kors', 'rig'], ['kors', 'pvh'], ['bbby', 'aiz'], ['bbby', 'an'], ['bbby', 'sig'], ['bbby', 'kors'], ['bbby', 'gt'], ['bbby', 'navi'], ['bbby', 'rig'], ['bbby', 'pvh'], ['gt', 'aiz'], ['gt', 'an'], ['gt', 'sig'], ['gt', 'kors'], ['gt', 'bbby'], ['gt', 'navi'], ['gt', 'rig'], ['gt', 'pvh'], ['navi', 'aiz'], ['navi', 'an'], ['navi', 'sig'], ['navi', 'kors'], ['navi', 'bbby'], ['navi', 'gt'], ['navi', 'rig'], ['navi', 'pvh'], ['rig', 'aiz'], ['rig', 'an'], ['rig', 'sig'], ['rig', 'kors'], ['rig', 'bbby'], ['rig', 'gt'], ['rig', 'navi'], ['rig', 'pvh'], ['pvh', 'aiz'], ['pvh', 'an'], ['pvh', 'sig'], ['pvh', 'kors'], ['pvh', 'bbby'], ['pvh', 'gt'], ['pvh', 'navi'], ['pvh', 'rig']]
好的,太好了!我们有 36 种可能的组合。如果我们在配对中颠倒 X 和 Y,我们可以在技术上创造一个完全不同的价差。当在我们的符号列表中考虑这一点时,能够创建每个组合对,每个符号都是 X 和 Y,我们得到 36 * 2 种可能性或 72 种可能性。这个数字等于 find pairs 函数中的 pairs 的长度。
我们现在可以将我们的配对存储在一个变量中,这样我们就可以访问它们并检查协整性。
pairs=find_pairs(symbolList)
('Length of Pairs List is:', 72)
现在让我们找出哪些对是协整的。我们可以通过创建一个接收符号字典和符号对的方法来实现这一点。我们将遍历 pairs 列表,测试协整性,然后存储协整的 pairs。
让我们导入 ADF 测试来检查协整性。
from statsmodels.tsa.api import adfuller
现在让我们创建函数来检查我们的配对是否协整。
def test_pairs(symbols,pairs):
cointegrated_pairs=[]
for count,pair in enumerate(pairs):
spread=symbols[pair[0]]-symbols[pair[1]]
adf_test=adfuller(spread.dropna())
if adf_test[0] < adf_test[4]['10%']:
cointegrated_pairs.append([pair[0],pair[1]])
return cointegrated_pairs
我们将把函数存储在一个变量中,这样我们就可以访问我们的 cointegrated_pairs 列表。
#initialzing our variable as our function
cointegrated=test_pairs(symbols,pairs)
现在让我们检查我们的协整变量,看看我们的协整对列表。
#checking our cointegrated variable
cointegrated
[['aiz', 'sig'], ['aiz', 'navi'], ['an', 'sig'], ['sig', 'aiz'], ['sig', 'an'], ['sig', 'bbby'], ['sig', 'gt'], ['sig', 'navi'], ['sig', 'rig'], ['kors', 'rig'], ['bbby', 'sig'], ['gt', 'sig'], ['gt', 'navi'], ['navi', 'aiz'], ['navi', 'sig'], ['navi', 'gt'], ['rig', 'sig'], ['rig', 'kors']]
既然我们已经发现了哪些对在我们的测试期间是协整的,我们可以使用我们的 statarb 类来创建我们的策略。我们将使用我们发现的协整对的两种组合。
让我们开始编写一个函数,允许我们为每个协整对创建 StatArb 策略。
def generate_portfolio_returns(cointegrated):
for pair in cointegrated:
test=statarb(eval(pair[0]),eval(pair[1]),30,-1.5,1.5,30,start,end)
test.create_spread()
test.generate_signals()
test.create_returns(100000,'%s_%s'%(pair[0].upper(),pair[1].upper()))
现在我们有了函数,让我们传入嵌套的对列表并计算它们的返回。
generate_portfolio_returns(cointegrated)

在浏览了我们对的股票曲线后,我们可以看到需要优化我们的参数来提高我们的表现。我们可以创建一个函数,让我们找到参数的最佳值,从而产生最佳的总体性能。在实践中,我们会对每一对都这样做,但这里我们只使用第一对。
def optimize_strategy_lookback(ma1,ma2,X,Y):
for i in range(ma1,ma2):
test=statarb(eval(X),eval(Y),i,-1.5,1.5,i,start,end)
test.create_spread()
test.generate_signals()
test.create_returns(100000,'%s_%s MA:%s'%(X.upper(),Y.upper(),i))
现在我们有了参数优化器函数,让我们将它应用到配对列表中的第一对。
optimize_strategy_lookback(40,90,cointegrated[0][0],cointegrated[0][1])

好的,让我们回顾一下我们刚刚完成的内容。我们编写了一个方法,允许我们从早期的 K-Means 系列中创建聚类 0 中股票的每一个可能的组合对。在找到所有可能的组合后,我们将这些组合传递给我们构建的另一个函数,该函数对这些可能的组合对执行 ADF 测试,并返回那些协整的组合。由于得到了协整的配对,我们编写了另一种方法,在我们组合投资组合之前查看每一对的表现,我们还创建了一种方法来优化我们的回顾。基于我们优化策略回顾分析的结果,我们将使用 57 作为我们的回顾。
现在我们可以创建我们的统计套利策略组合。我们将创建另一个方法,允许我们迭代我们的协整对,用这些对创建一个 statarb 策略,并存储返回。
def create_portfolio_return(cointegrated_pairs):
returns=pd.DataFrame()
retsList=[]
for pair in cointegrated_pairs:
test=statarb(eval(pair[0]),eval(pair[1]),57,-1.5,1.5,57,start,end)
test.create_spread()
test.generate_signals()
test.create_returns(100000, '%s_%s'%(pair[0].upper(),pair[1].upper()))
retsList.append([test.portfolio['Portfolio Value']])
returns['Portfolio Value'+str(pair)]=test.portfolio['Portfolio Value']
#returns['Total Value']=returns['Portfolio Value'+str(pair)]
return returns
现在让我们使用 create portfolio returns 函数来创建我们的投资组合回报。我们将把我们的函数存储在一个变量中,这样我们就可以访问我们的返回数据帧。
portfolio=create_portfolio_return(cointegrated)

好吧。现在我们已经得到了每种策略的回报,让我们来看看我们的投资组合数据框架。
#looking at the head of our portfolio df
portfolio.tail()
| 日期 | 投资组合价值['aiz ',' sig'] | 投资组合价值['aiz ',' navi'] | 投资组合价值['an ',' sig'] | 投资组合价值['sig ',' aiz'] | 投资组合价值['sig ',' an'] | 投资组合价值['sig ',' bbby'] | 投资组合价值['sig ',' gt'] | 投资组合价值['sig ',' navi'] | 投资组合价值['sig ',' rig'] | 投资组合价值['kors ',' rig'] | 投资组合价值['bbby ',' sig'] | 投资组合价值['gt ',' sig'] | 投资组合价值['gt ',' navi'] | 投资组合价值['navi ',' aiz'] | 投资组合价值['navi ',' sig'] | 投资组合价值['navi ',' gt'] | 投资组合价值['rig ',' sig'] | 投资组合价值['钻机',' kors'] |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2017-12-22 | 179977.977935 | 91408.570457 | 圆盘烤饼 | 117626.022091 | One hundred thousand | One hundred thousand | 113219.354595 | 84358.647887 | One hundred thousand | One hundred thousand | 圆盘烤饼 | -56900.096850 | 97881.584901 | 101131.516629 | -78726.338519 | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 |
| 2017-12-26 | 175927.156915 | 91408.570457 | 圆盘烤饼 | 117626.022091 | One hundred thousand | One hundred thousand | 113219.354595 | 86367.651524 | One hundred thousand | One hundred thousand | 圆盘烤饼 | -60230.249887 | 97881.584901 | 101166.119109 | -80601.208547 | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 |
| 2017-12-27 | 180909.666770 | 91408.570457 | 圆盘烤饼 | 117626.022091 | One hundred thousand | One hundred thousand | 113219.354595 | 84690.231011 | One hundred thousand | One hundred thousand | 圆盘烤饼 | -57582.898012 | 97881.584901 | 101592.883037 | -79035.783087 | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 |
| 2017-12-28 | 185365.569892 | 91408.570457 | 圆盘烤饼 | 120523.214753 | One hundred thousand | One hundred thousand | 113219.354595 | 82993.305609 | One hundred thousand | One hundred thousand | 圆盘烤饼 | -55510.536590 | 97881.584901 | 101858.168721 | -77452.155006 | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 |
| 2017-12-29 | 179410.862992 | 91408.570457 | 圆盘烤饼 | 116651.511831 | One hundred thousand | One hundred thousand | 113219.354595 | 84319.638107 | One hundred thousand | One hundred thousand | 圆盘烤饼 | -58074.035690 | 97881.584901 | 100946.970066 | -78689.933276 | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 |
现在我们已经有了包含每个策略回报的投资组合数据框架,我们可以创建总投资组合价值列。在检查了我们的列的长度之后,我们发现我们有 18 个不同的对列。我们可以:
- 手动初始化总值列,方法是自己将所有这些相加,或者我们可以
- 用编程的方式解决这个问题,节省很多时间,甚至有一些代码我们可以存储在一个函数里,以后再用。
让我们用第二个。我们将编写一些逻辑,允许我们将总值列初始化为所有个人投资组合价值的总和。
#creating a copy of our portfolio dataframe
portfolioCopy=portfolio.copy()
#creating Total Value column and initializing to 0
portfolioCopy['Total Value']=0
#creating a pandas Series to hold the cumulative value of each row
rets=pd.Series(index=portfolioCopy.index)
#iterating over each row
for count,row in enumerate(portfolioCopy.iterrows()):
#iterating over each column within each row
for count2,column in enumerate(row):
#storing sum of each column within each row into rets at same location
rets.iloc[count]=np.sum(column)
#storing the returns series into the Total Value column in our dataframe
portfolioCopy['Total Value']=rets
既然我们已经以编程方式初始化了总值列,那么让我们来看看 dataframe 的头部。
portfolioCopy.tail()
| 日期 | 投资组合价值['aiz ',' sig'] | 投资组合价值['aiz ',' navi'] | 投资组合价值['an ',' sig'] | 投资组合价值['sig ',' aiz'] | 投资组合价值['sig ',' an'] | 投资组合价值['sig ',' bbby'] | 投资组合价值['sig ',' gt'] | 投资组合价值['sig ',' navi'] | 投资组合价值['sig ',' rig'] | 投资组合价值['kors ',' rig'] | 投资组合价值['bbby ',' sig'] | 投资组合价值['gt ',' sig'] | 投资组合价值['gt ',' navi'] | 投资组合价值['navi ',' aiz'] | 投资组合价值['navi ',' sig'] | 投资组合价值['navi ',' gt'] | 投资组合价值['rig ',' sig'] | 投资组合价值['钻机',' kors'] | 总值 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2017-12-22 | 179977.977935 | 91408.570457 | 圆盘烤饼 | 117626.022091 | One hundred thousand | One hundred thousand | 113219.354595 | 84358.647887 | One hundred thousand | One hundred thousand | 圆盘烤饼 | -56900.096850 | 97881.584901 | 101131.516629 | -78726.338519 | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 | 1.13888e+06 |
| 2017-12-26 | 175927.156915 | 91408.570457 | 圆盘烤饼 | 117626.022091 | One hundred thousand | One hundred thousand | 113219.354595 | 86367.651524 | One hundred thousand | One hundred thousand | 圆盘烤饼 | -60230.249887 | 97881.584901 | 101166.119109 | -80601.208547 | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 | 1.13167e+06 |
| 2017-12-27 | 180909.666770 | 91408.570457 | 圆盘烤饼 | 117626.022091 | One hundred thousand | One hundred thousand | 113219.354595 | 84690.231011 | One hundred thousand | One hundred thousand | 圆盘烤饼 | -57582.898012 | 97881.584901 | 101592.883037 | -79035.783087 | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 | 1.13962e+06 |
| 2017-12-28 | 185365.569892 | 91408.570457 | 圆盘烤饼 | 120523.214753 | One hundred thousand | One hundred thousand | 113219.354595 | 82993.305609 | One hundred thousand | One hundred thousand | 圆盘烤饼 | -55510.536590 | 97881.584901 | 101858.168721 | -77452.155006 | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 | 1.14919e+06 |
| 2017-12-29 | 179410.862992 | 91408.570457 | 圆盘烤饼 | 116651.511831 | One hundred thousand | One hundred thousand | 113219.354595 | 84319.638107 | One hundred thousand | One hundred thousand | 圆盘烤饼 | -58074.035690 | 97881.584901 | 100946.970066 | -78689.933276 | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 | 1.13598e+06 |
我们可以看到,我们的总值列现在等于所有单个对列的总和。
创建我们的蒙特卡洛和 VaR
现在我们准备计算我们的风险价值。我们只用回报的前 10 个月来避免前瞻偏差。这样做的目的是,我们将使用我们的 VaR 来建立 95%置信度的损失下限,以便我们可以创建具有不同回报区间的标签或类别,来代表我们尾部风险的某个百分比。我们不想使用我们所有的数据,因为我们的风险值或 95%置信度下的最差预期日损失将基于我们所有的回报,因此当我们使用 LDA 模型预测一定程度的尾部风险时,我们的预测将基于我们已经看到的回报和尾部风险,我们希望预测。这将极大地扭曲我们的结果。前 10 个月对应于 80/20 训练测试分割,我们将使用它来构建我们的 LDA 模型。
让我们从初始化一些参数开始。我们将把我们的 Returns 列添加到我们的数据框架中,然后手动切掉前 10 个月并创建我们的参数。
#adding return column to our portfolioCopy dataframe
portfolioCopy['Returns']=portfolioCopy['Total Value'].pct_change()
#slicing out first 10 months of our data
first10=portfolioCopy['Returns']['2017-01-01':'2017-10-31']
#initializing our parameters
test_range=300
beginning_value=portfolioCopy['Total Value'][0]
mu=first10.mean()
sigma=first10.std()
days=202
name='StatArb Portfolio'
在继续之前,让我们简单回顾一下我们的参数。我们的测试范围是我们将要做的迭代次数。在本例中,我们将这个数字保持得很低,但实际上,这个数字会高得多。我们的初始价值是我们投资组合的初始价值。我们的 mu 是我们投资组合在前 10 个月的平均回报,我们的 sigma 是我们投资组合在前 10 个月的标准差。天数代表我们模拟周期的长度。我们已经包含了一个名称参数,该参数将被传递到我们的蒙特卡罗函数中用于绘图目的。
让我们创建我们的蒙特卡罗函数。
def monte_carlo(initial_portfolio_value,days,mu,sigma,asset_name):
'''
PARAMETERS
##########
initial_portolio_value - some starting value for strategy or portfolio
days- the amount of time to run MC over (i.e. 252 for one year)
mu- mean of asset or strategy
sigma- volatility/standard deviation of asset or strategy
asset_name- the name of strategy/asset as a string you want to appear on chart
dt- time delta(i.e. 1/days)
'''
dt=1/days
#creating price array
Portfolio_Value=np.zeros(days)
Portfolio_Value[0]=initial_portfolio_value
shock=np.zeros(days)
drift=np.zeros(days)
for x in range(1,days):
#calculate shock
shock[x]=np.random.normal(loc=mu*dt,scale=sigma*np.sqrt(dt))
#calculate drift
drift[x]=mu*dt
#calculate portfolio value
Portfolio_Value[x]=Portfolio_Value[x-1]+(Portfolio_Value[x-1]*(drift[x]+shock[x]))
return Portfolio_Value
现在我们有了蒙特卡罗函数,让我们将它传递到一个循环中,在我们的采样周期内进行模拟。
plots=pd.DataFrame()
for count,i in enumerate(range(0,test_range)):
values=monte_carlo(beginning_value,days,mu,sigma,name)
plots['Value'+str(count)]=values
with plt.style.context(['seaborn-poster','ggplot']):
plt.figure(figsize=(12,8))
plt.plot(plots)
plt.xlabel('Days')
plt.ylabel('Value')
plt.title('%s Monte Carlo Simulation'%(name))
我们的蒙特卡洛模拟表明投资组合低至 150 万美元左右。回想一下,我们用 10 万美元初始化每个策略,有 18 个不同的组合,因此我们的初始投资组合价值为 180 万美元。现在我们已经计算了蒙特卡罗,让我们通过直方图生成 VaR。
#creating histogram VaR
trials=np.zeros(test_range)
np.set_printoptions(threshold=7)
hist=pd.DataFrame()
for count,value in enumerate(range(0,test_range)):
trials[count]=monte_carlo(beginning_value,days,mu,sigma,name)[days-1]
hist['Value'+str(count)]=trials
#plotting histogram
#setting 5% quantile
q=np.percentile(trials,5)
with plt.style.context(['seaborn-poster']):
plt.hist(trials, bins=50)
#showing starting value
plt.figtext(0.6,0.8,s='Initial Value: $%.2f' %(beginning_value) )
#annotating tail
plt.figtext(0.15,0.7,"VaR(0.95): $%.2f" %(q))
plt.axvline(x=q,linewidth=5,color='b')
plt.title('StatArb Portfolio Value at Risk')
我们刚刚完成了风险值分析。我们从创建蒙特卡洛模拟开始。我们的蒙特卡洛显示投资组合价值略高于 150 万美元。然后,我们使用蒙特卡洛创建直方图,并以 95%的置信度获得我们的风险值。我们可以通过打印 q 变量来验证这个投资组合的价值。
#printing out VaR threshold
q
1800000.0
我们可以看到,根据这一分析,我们的风险值为 166 万美元。我们现在可以在此分析的基础上,通过使用 LDA 来预测我们的蒙特卡洛风险值分析所确定的尾部风险中特定损失的概率。
构建我们的 LDA 模型
在这一点上,我们已经测试了 K-Means 系列的聚类 0 中的每一对组合的协整性,并确定了那些被协整的组合。我们已经构建了我们的统计套利策略组合,并进行了蒙特卡洛风险值分析。根据我们的风险分析,我们了解到,在 95%的信心下,我们的投资组合不应低于 166 万。
我们最初的投资组合价值是 180 万美元。降至 166 万美元意味着我们的投资组合价值下降了 7.7%。虽然拥有这些信息可以帮助我们管理我们的投资组合,但我们最关心的是,当我们的投资组合可能低于这 166 万时,会发生 5%的情况。
为了改善我们的投资组合风险管理,我们将使用 LDA 来预测我们的投资组合落入尾部风险区域内某个阈值的概率。我们可以从柱状图中看到,我们的分析下限为 160 万美元。这一投资组合价值意味着 11%的提款。我们将把我们的最大提款设置在我们的风险值和下限的中点。这相当于 163 万英镑,下降了 9%。这是我们愿意在投资组合中承担的最大风险。
为了确保我们将损失限制在最大 9%,我们希望能够预测超过这一阈值的概率。我们将使用 LDA 来解决这一问题。
我们将在用于蒙特卡罗分析的相同时期内训练我们的模型,即样本的前 10 个月。我们需要添加一个二进制类来表示我们是否已经超出了最大暴露量。我们还需要计算我们的解释变量或特征,这些变量或特征将用于预测违反最大风险敞口的可能性。
我们将使用两个滞后的回报以及更广泛的市场波动作为我们的特征。
让我们导入 S&P 指数,计算其在一段时间内的波动性,并将其添加到我们的投资组合副本数据框架中。
import fix_yahoo_finance as yf
index=yf.download('^GSPC',start,end)
让我们检查一下索引数据的头部。
index.head()
| 日期 | 打开 | 高的 | 低的 | 关闭 | 接近的 | 卷 |
|---|---|---|---|---|---|---|
| 2017-01-03 | 2251.570068 | 2263.879883 | 2245.129883 | 2257.830078 | 2257.830078 | -524437296 |
| 2017-01-04 | 2261.600098 | 2272.820068 | 2261.600098 | 2270.750000 | 2270.750000 | -530077296 |
| 2017-01-05 | 2268.179932 | 2271.500000 | 2260.449951 | 2269.000000 | 2269.000000 | -533147296 |
| 2017-01-06 | 2271.139893 | 2282.100098 | 2264.060059 | 2276.979980 | 2276.979980 | -955077296 |
| 2017-01-09 | 2273.590088 | 2275.489990 | 2268.899902 | 2268.899902 | 2268.899902 | -1077357296 |
我们将计算指数收益和波动性,并把它们放到数据框架中。
index['Returns']=index['Close'].pct_change()
#computing the index volatlity
index['Volatility']=index['Returns'].rolling(window=5).std()
现在让我们再看一下我们的索引数据。
index.head()
| 日期 | 打开 | 高的 | 低的 | 关闭 | 接近的 | 卷 | 返回 | 波动性 |
|---|---|---|---|---|---|---|---|---|
| 2017-01-03 | 2251.570068 | 2263.879883 | 2245.129883 | 2257.830078 | 2257.830078 | -524437296 | 圆盘烤饼 | 圆盘烤饼 |
| 2017-01-04 | 2261.600098 | 2272.820068 | 2261.600098 | 2270.750000 | 2270.750000 | -530077296 | 0.005722 | 圆盘烤饼 |
| 2017-01-05 | 2268.179932 | 2271.500000 | 2260.449951 | 2269.000000 | 2269.000000 | -533147296 | -0.000771 | 圆盘烤饼 |
| 2017-01-06 | 2271.139893 | 2282.100098 | 2264.060059 | 2276.979980 | 2276.979980 | -955077296 | 0.003517 | 圆盘烤饼 |
| 2017-01-09 | 2273.590088 | 2275.489990 | 2268.899902 | 2268.899902 | 2268.899902 | -1077357296 | -0.003549 | 圆盘烤饼 |
让我们回顾一下我们的投资组合副本数据框架。
portfolioCopy.head()
| 日期 | 投资组合价值['aiz ',' sig'] | 投资组合价值['aiz ',' navi'] | 投资组合价值['an ',' sig'] | 投资组合价值['sig ',' aiz'] | 投资组合价值['sig ',' an'] | 投资组合价值['sig ',' bbby'] | 投资组合价值['sig ',' gt'] | 投资组合价值['sig ',' navi'] | 投资组合价值['sig ',' rig'] | 投资组合价值['kors ',' rig'] | 投资组合价值['bbby ',' sig'] | 投资组合价值['gt ',' sig'] | 投资组合价值['gt ',' navi'] | 投资组合价值['navi ',' aiz'] | 投资组合价值['navi ',' sig'] | 投资组合价值['navi ',' gt'] | 投资组合价值['rig ',' sig'] | 投资组合价值['钻机',' kors'] | 总值 | 返回 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2017-01-03 | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | 1.8e+06 | 圆盘烤饼 |
| 2017-01-04 | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | 1.8e+06 | Zero |
| 2017-01-05 | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | 1.8e+06 | Zero |
| 2017-01-06 | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | 1.8e+06 | Zero |
| 2017-01-09 | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | One hundred thousand | 1.8e+06 | Zero |
现在,我们可以创建滞后回报列,并将指数波动率列添加到数据框架中。
#creating our lagged returns columns
portfolioCopy['Lag1']=portfolioCopy['Returns'].shift(1)
portfolioCopy['Lag2']=portfolioCopy['Returns'].shift(2)
#adding our index volatility column
portfolioCopy['Index Volatility']=index['Volatility']
让我们检查一下数据帧的头部。
让我们首先用 0 填充 NaN 值。当我们准备好适应我们的模型时,这将是有益的
portfolioCopy.fillna(0).tail()
| 日期 | 投资组合价值['aiz ',' sig'] | 投资组合价值['aiz ',' navi'] | 投资组合价值['an ',' sig'] | 投资组合价值['sig ',' aiz'] | 投资组合价值['sig ',' an'] | 投资组合价值['sig ',' bbby'] | 投资组合价值['sig ',' gt'] | 投资组合价值['sig ',' navi'] | 投资组合价值['sig ',' rig'] | 投资组合价值['kors ',' rig'] | ... | 投资组合价值['navi ',' aiz'] | 投资组合价值['navi ',' sig'] | 投资组合价值['navi ',' gt'] | 投资组合价值['rig ',' sig'] | 投资组合价值['钻机',' kors'] | 总值 | 返回 | Lag1 | Lag2 | 指数波动 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2017-12-22 | 179977.977935 | 91408.570457 | Zero | 117626.022091 | One hundred thousand | One hundred thousand | 113219.354595 | 84358.647887 | One hundred thousand | One hundred thousand | ... | 101131.516629 | -78726.338519 | 88907.110597 | Zero | Zero | 1.138884e+06 | -0.006932 | -0.004255 | -0.000237 | 0.003257 |
| 2017-12-26 | 175927.156915 | 91408.570457 | Zero | 117626.022091 | One hundred thousand | One hundred thousand | 113219.354595 | 86367.651524 | One hundred thousand | One hundred thousand | ... | 101166.119109 | -80601.208547 | 88907.110597 | Zero | Zero | 1.131672e+06 | -0.006333 | -0.006932 | -0.004255 | 0.001859 |
| 2017-12-27 | 180909.666770 | 91408.570457 | Zero | 117626.022091 | One hundred thousand | One hundred thousand | 113219.354595 | 84690.231011 | One hundred thousand | One hundred thousand | ... | 101592.883037 | -79035.783087 | 88907.110597 | Zero | Zero | 1.139617e+06 | 0.007020 | -0.006333 | -0.006932 | 0.001279 |
| 2017-12-28 | 185365.569892 | 91408.570457 | Zero | 120523.214753 | One hundred thousand | One hundred thousand | 113219.354595 | 82993.305609 | One hundred thousand | One hundred thousand | ... | 101858.168721 | -77452.155006 | 88907.110597 | Zero | Zero | 1.149194e+06 | 0.008404 | 0.007020 | -0.006333 | 0.001355 |
| 2017-12-29 | 179410.862992 | 91408.570457 | Zero | 116651.511831 | One hundred thousand | One hundred thousand | 113219.354595 | 84319.638107 | One hundred thousand | One hundred thousand | ... | 100946.970066 | -78689.933276 | 88907.110597 | Zero | Zero | 1.135982e+06 | -0.011497 | 0.008404 | 0.007020 | 0.002686 |
现在,我们可以为阈值添加列,并创建响应列。
#adding our threshold value
portfolioCopy['Threshold']=1630000
#adding our response column
portfolioCopy['Tail Risk']=np.where(portfolioCopy['Total Value']<portfolioCopy['Threshold'],'Yes','No')
现在我们已经添加了阈值和响应,让我们重新检查我们的数据框架。
portfolioCopy.tail()
| 日期 | 投资组合价值['aiz ',' sig'] | 投资组合价值['aiz ',' navi'] | 投资组合价值['an ',' sig'] | 投资组合价值['sig ',' aiz'] | 投资组合价值['sig ',' an'] | 投资组合价值['sig ',' bbby'] | 投资组合价值['sig ',' gt'] | 投资组合价值['sig ',' navi'] | 投资组合价值['sig ',' rig'] | 投资组合价值['kors ',' rig'] | ... | 投资组合价值['navi ',' gt'] | 投资组合价值['rig ',' sig'] | 投资组合价值['钻机',' kors'] | 总值 | 返回 | Lag1 | Lag2 | 指数波动 | 阈值 | 尾部风险 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2017-12-22 | 179977.977935 | 91408.570457 | 圆盘烤饼 | 117626.022091 | One hundred thousand | One hundred thousand | 113219.354595 | 84358.647887 | One hundred thousand | One hundred thousand | ... | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 | 1.13888e+06 | -0.006932 | -0.004255 | -0.000237 | 0.003257 | One million six hundred and thirty thousand | 是 |
| 2017-12-26 | 175927.156915 | 91408.570457 | 圆盘烤饼 | 117626.022091 | One hundred thousand | One hundred thousand | 113219.354595 | 86367.651524 | One hundred thousand | One hundred thousand | ... | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 | 1.13167e+06 | -0.006333 | -0.006932 | -0.004255 | 0.001859 | One million six hundred and thirty thousand | 是 |
| 2017-12-27 | 180909.666770 | 91408.570457 | 圆盘烤饼 | 117626.022091 | One hundred thousand | One hundred thousand | 113219.354595 | 84690.231011 | One hundred thousand | One hundred thousand | ... | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 | 1.13962e+06 | 0.007020 | -0.006333 | -0.006932 | 0.001279 | One million six hundred and thirty thousand | 是 |
| 2017-12-28 | 185365.569892 | 91408.570457 | 圆盘烤饼 | 120523.214753 | One hundred thousand | One hundred thousand | 113219.354595 | 82993.305609 | One hundred thousand | One hundred thousand | ... | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 | 1.14919e+06 | 0.008404 | 0.007020 | -0.006333 | 0.001355 | One million six hundred and thirty thousand | 是 |
| 2017-12-29 | 179410.862992 | 91408.570457 | 圆盘烤饼 | 116651.511831 | One hundred thousand | One hundred thousand | 113219.354595 | 84319.638107 | One hundred thousand | One hundred thousand | ... | 88907.110597 | 圆盘烤饼 | 圆盘烤饼 | 1.13598e+06 | -0.011497 | 0.008404 | 0.007020 | 0.002686 | One million six hundred and thirty thousand | 是 |
太好了!现在我们准备好建立我们的 LDA 模型。让我们从导入必要的库开始。
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as lda
from sklearn.model_selection import train_test_split
让我们将 LDA 模型初始化为一个模型。
model=lda()
让我们将数据分成训练集和测试集。请注意,我们只需要最后添加的 4 列,即 Lag1 和 2、指数波动率和尾部风险。
首先,我们将从 portfolioCopy 数据框架中创建一个仅包含相关列的数据框架。
sample_data=pd.DataFrame(dict(Lag1=portfolioCopy['Lag1'],Lag2=portfolioCopy['Lag2'],IndexVolatility=portfolioCopy['Index Volatility'],TailRisk=portfolioCopy['Tail Risk']))
我们刚刚创建了一个 sample_data 数据帧,其中包含来自 portfolioCopy 数据帧的相关数据。让我们检查一下。
sample_data.head()
| 日期 | 指数波动性 | Lag1 | Lag2 | 尾部风险 |
|---|---|---|---|---|
| 2017-01-03 | 圆盘烤饼 | 圆盘烤饼 | 圆盘烤饼 | 不 |
| 2017-01-04 | 圆盘烤饼 | 圆盘烤饼 | 圆盘烤饼 | 不 |
| 2017-01-05 | 圆盘烤饼 | Zero | 圆盘烤饼 | 不 |
| 2017-01-06 | 圆盘烤饼 | Zero | Zero | 不 |
| 2017-01-09 | 圆盘烤饼 | Zero | Zero | 不 |
现在让我们填充这些 NaN 值,因为当我们准备好拟合我们的模型时,它们会造成问题。
#filling NaN values with 0
sample_data.fillna(0).tail()
| 日期 | 指数波动性 | Lag1 | Lag2 | 尾部风险 |
|---|---|---|---|---|
| 2017-12-22 | 0.003257 | -0.004255 | -0.000237 | 是 |
| 2017-12-26 | 0.001859 | -0.006932 | -0.004255 | 是 |
| 2017-12-27 | 0.001279 | -0.006333 | -0.006932 | 是 |
| 2017-12-28 | 0.001355 | 0.007020 | -0.006333 | 是 |
| 2017-12-29 | 0.002686 | 0.008404 | 0.007020 | 是 |
现在让我们创建我们的训练和测试集。回想一下,我们将进行 80/20 分割。
sample_data = sample_data.dropna()
#creating our features space by dropping our response from our data
X=sample_data.drop('TailRisk',axis=1)
#creating our response by initializing y as TailRisk
y=sample_data['TailRisk']
#creating our 80/20 split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=.20)
现在我们已经分割了数据,让我们来训练我们的模型。
#fitting our model to our data
model.fit(X_train.fillna(0),y_train.fillna(0))
LinearDiscriminantAnalysis(n_components=None, priors=None, shrinkage=None,
solver='svd', store_covariance=False, tol=0.0001)
既然我们已经把模型和数据拟合好了,让我们用它来预测我们的尾部风险和结果。
#passing in our new labels; those not yet seen by our model
predictions=model.predict(X_test)
现在我们有了我们的预测,我们可以检查我们的模型在预测我们的投资组合超过我们的最大风险敞口的可能性方面有多准确。
让我们从 sklearn 导入我们的混淆矩阵和分类报告。
from sklearn.metrics import classification_report, confusion_matrix
现在我们准备打印我们的报告。
#printing out confusion matrix
print(confusion_matrix(y_test,predictions))
#printing out classification report
print(classification_report(y_test,predictions)) # target_names=response_names))
[[ 0 18]
[ 0 31]]
precision recall f1-score support
No 0.00 0.00 0.00 18
Yes 0.63 1.00 0.78 31
avg / total 0.40 0.63 0.49 49
在我们进入模型的结果之前,让我们简单地确保我们理解了前面的代码在做什么。我们首先创建了一个仅包含我们的预测指标(即 Lag1、Lag2、指数波动率)和我们的反应或标签(即尾部风险)的数据框架。然后,我们将数据分为训练集和测试集,使用我们的训练数据(X 训练或我们的预测器,y 训练或我们的响应)训练我们的模型,然后使用我们的 X 测试集或我们的模型尚未看到的预测器进行预测。因此,我们传递我们的 y 测试集,或者我们预测响应的实际响应,并检查我们模型的准确性。
true_negative,false_negative,false_positive,true_positive=confusion_matrix(y_test,predictions).ravel()
print('Interpreting Confusion Matrix')
print('Actual NO & Predicted NO:', true_negative)
print('Actual YES & Predicted NO:', false_negative)
print('Actual NO & Predicted YES:', false_positive)
print('Actual YES & Predicted YES:', true_positive)
解读混淆矩阵
('Actual NO & Predicted NO:', 0)
('Actual YES & Predicted NO:', 18)
('Actual NO & Predicted YES:', 0)
('Actual YES & Predicted YES:', 31)
让我们检查一下我们的理解。我们的混淆矩阵可以从左到右阅读,列是实际否和实际是,行是预测否和预测是。混淆矩阵显示的是我们的投资组合没有违反我们的风险敞口的次数,我们预测它不会用矩阵中的 0 表示;它显示了我们的投资组合违反我们的风险敞口的次数,我们预测它不会,在矩阵中用 31 表示。它显示了我们的投资组合有多少次没有违反我们的风险敞口,我们预测它会违反,在矩阵中用 1 表示。它显示了我们的投资组合违反我们的风险敞口的次数,我们预测它会违反,在矩阵中用 19 表示。
我们的分类报告为我们提供支持信息,但格式不同。例如,我们知道我们的投资组合实际违约的总次数是 50 次。
我们可以通过简单地将我们实际的“是”列 31+19=50 相加来看到这一点。
我们还知道,我们正确预测了 19 次暴露缺口。我们可以用我们暴露的总次数来划分,19/50 = 38;在分类报告的“精度”列中,我们在“是”行得到了完全相同的结果。这表明,我们的精确度或我们的模型正确识别我们的投资组合何时会违反我们的风险限额的能力是 38%的时间。
我们使用的参数在我们的模型对我们的观察结果进行正确分类的能力中起着重要的作用。回想一下,在上面的例子中,我们使用了回报的两个滞后期以及指数的波动性。必须评估模型开发中的不同考虑因素。我们不会在这里解决这些问题,但是我们要做的是,如果我们只根据指数的波动性进行预测,我们的精度会如何变化。
让我们创建一个新的训练和测试集,仅使用指数波动率作为我们的预测器。
sample_data_2=sample_data.copy()
让我们检查我们的第二个样本数据的头部,以确保其有效性。
sample_data_2.head()
| 日期 | 指数波动性 | Lag1 | Lag2 | 尾部风险 |
|---|---|---|---|---|
| 2017-01-10 | 0.003656 | Zero | Zero | 不 |
| 2017-01-11 | 0.002861 | Zero | Zero | 不 |
| 2017-01-12 | 0.003061 | Zero | Zero | 不 |
| 2017-01-13 | 0.002665 | Zero | Zero | 不 |
| 2017-01-17 | 0.002490 | Zero | Zero | 不 |
好吧。现在,我们可以用 0 填充 NaN 值,删除我们的 2 个滞后列,并执行我们的训练和测试拆分。
#filling NaNs
sample_data_2.fillna(0)
#dropping our Lagged columns
sample_data_2.drop(['Lag1','Lag2'],inplace=True,axis=1)
#initializing our X and y vairables
X_2=sample_data_2.drop('TailRisk',axis=1)
y_2=sample_data_2['TailRisk']
#creating our training and testing sets
X_train_2,X_test_2,y_train_2,y_test_2=train_test_split(X_2,y_2,test_size=0.20)
让我们检查我们的 X 和 y。
X_2.head()
| 日期 | 指数波动 |
|---|---|
| 2017-01-10 | 0.003656 |
| 2017-01-11 | 0.002861 |
| 2017-01-12 | 0.003061 |
| 2017-01-13 | 0.002665 |
| 2017-01-17 | 0.002490 |
y_2.head()
Date
2017-01-10 No
2017-01-11 No
2017-01-12 No
2017-01-13 No
2017-01-17 No
Name: TailRisk, dtype: object
好了,现在我们已经确认了数据的有效性,让我们只使用指数波动率来拟合我们的新模型。
#creating a new instance of LDA object
new_model=lda()
#fitting our model on our training data
new_model.fit(X_train_2.fillna(0),y_train_2)
LinearDiscriminantAnalysis(n_components=None, priors=None, shrinkage=None,
solver='svd', store_covariance=False, tol=0.0001)
现在,我们只使用指数波动性作为预测指标,使我们的模型符合我们的数据。我们现在可以像以前一样使用我们的模型进行预测,并查看我们的混淆矩阵和分类报告。
#making predictions
predictions_2=new_model.predict(X_test_2)
#creating our new confusion matrix and classication reports
print('Creating Confusion Matrix and Classification Report for P=1, Volatility')
print(confusion_matrix(y_test_2,predictions_2))
print(classification_report(y_test_2,predictions_2))
Creating Confusion Matrix and Classification Report for P=1, Volatility
[[ 1 18]
[ 6 24]]
precision recall f1-score support
No 0.14 0.05 0.08 19
Yes 0.57 0.80 0.67 30
avg / total 0.41 0.51 0.44 49
我们可以看到,仅仅通过改变我们用于预测的参数,我们预测暴露限值违规的能力就从 38%提高到了 52%。在我们使用 Lag1 和 Lag2 以及指数的 5 期滚动标准差或波动性之前。这一次,我们只使用了指数的波动性,这样做提高了我们预测敞口限额违规的能力。
当然,我们可以做更多的事情来进一步改善这一点,但我们不会在这篇文章中涉及。最重要的是:
- 我们在尾部风险范围内预测违反最大敞口的能力,以及
- 假阴性,或者当我们预测我们的投资组合不会违反我们的最大风险限额,但它确实违反了
经常有这样的情况,我们会在一个类中比另一个类更重视预测的准确性。在这个例子中,我们正确预测违反我们的风险敞口限额和限制假阴性的能力,远比我们预测何时我们不会违反我们的限额以及何时我们会错误地声明我们会违反的能力更重要。这是因为我们最大的风险是当我们超出了我们在尾部风险中设定的限度。
让我们回顾一下
我们在这篇文章中已经谈了很多。首先,我们了解了线性判别分析,以及在使用 API 创建模型时实际发生了什么。这种分析非常重要,因为对模型实际运行情况的深入了解将对您优化模型的能力以及为您的问题选择最合适的模型起到关键作用。API 的抽象很容易导致您低估这些信息的重要性。
在了解了 LDA 寻求实现的目标后,我们使用 K-Means 系列的数据构建了 StatArb 投资组合。我们使用包含 9 种不同股票的聚类 0。我们学习了如何创建这些股票的每一个可能的配对组合,并使用扩展的 Dickey-Fuller 检验来检查它们的协整性。我们还学习了如何解析出那些协整的组合,并使用我们的 statarb 类来创建定量投资组合。
建立我们的投资组合后,我们学习了如何使用蒙特卡罗模拟进行风险分析,以计算我们的风险价值。我们讨论了风险值的一个关键限制,并设计了一种方法来改进我们的风险值分析。我们确定了风险值阈值,然后为我们的投资组合设定了最大敞口。有了最大敞口,我们就能够在我们的投资组合超过这一最大预期提款时做出集体反应。
然后,我们创建解释变量或预测变量来预测我们的投资组合何时可能超过我们的最大尾部风险阈值。我们了解到,我们在模型中使用的参数对模型的精度起着重要作用。我们看到,通过简单地改变我们使用的参数,我们的模型的精度从 38%提高到 52%。
挑战:看看你能否将这一分析应用于日内交易
我们已经讨论了如何分析我们的投资组合风险以及管理风险的方法。我们将这一分析应用于我们的总投资组合价值。这种分析可用于从日常角度管理我们的风险值。挑战你自己,看看你如何运用我们在这里学到的逻辑来管理当天的风险。
先行一步
这篇文章介绍了机器学习和线性判别分析。如果你想了解更多,你可能会对算法交易的执行程序感兴趣。EPAT 涵盖了统计学和计量经济学、定量交易策略和机器学习等主题。你可以了解更多关于 EPAT 项目以及我们的校友 T2 所做的一些工作。
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
下载数据文件
- 使用线性判别分析进行量化投资组合管理- Python 代码
线性回归:假设和限制
原文:https://blog.quantinsti.com/linear-regression-assumptions-limitations/
由 Vivek Krishnamoorthy 和 Udisha Alok
在这篇博客中,我们对线性回归模型的假设进行了批判性的审视,如何检测和修正它们,以及它们在现实世界中有多少水分。我们将在 Python 中检查其中的一些假设和测试,这将为使用众所周知的库的其他情况提供蓝图。我们也将检查它的缺点和它的假设如何限制它的使用。
在本系列的第一篇博客中,我们解构了线性回归模型,它的各种别名和类型。在第二篇文章中,我们用 Python 和 r . net 查看了线性回归在市场数据上的应用
我们的报道沿着以下路线进行:
- 什么是线性回归?
- 线性回归的假设
○线性关系○无多重共线性○误差项的高斯分布
○无误差项的自相关○误差项的同态分布
○误差项的零条件均值 - 线性回归的局限性
○在某些情况下过于简单
○对异常值的敏感性
○易于欠拟合
○复杂模型的过拟合 - 参考文献
什么是线性回归?
线性回归模拟响应(或因变量)变量(Y)和一个或多个解释(自变量)变量(X)之间的线性关系。
我们可以用下面的等式来表示它:
(Y_{i} = \beta {0}+ \betaX_{i}+\epsilon _{i})
在单个解释变量的情况下,称为简单线性回归,如果有多个解释变量,则称为多元线性回归。
在回归分析中,我们的目标是通过找到样本的因变量和自变量之间的关系,对总体做出推断。通常,OLS(普通最小二乘法)被用来估计回归系数。OLS 通过最小化误差的平方和找到最佳系数。
高斯-马尔可夫定理
高斯-马尔可夫定理说明在一定条件下,普通最小二乘(OLS)估计量是最佳线性无偏估计量(蓝色)。这意味着当数据集中满足这些条件时,OLS 模型的方差是所有线性无偏估计量中最小的。
让我们来看看“线性”和“无偏”这两个术语。
- 线性 -线性估计量意味着它们与因变量有线性关系。这使得它们更容易理解和实现。
- 无偏 -无偏估计量意味着当重复应用一个模型时,平均而言,估计量将达到它们的真实值。
我们现在来看看前面提到的形成高斯-马尔可夫定理核心的“在某些条件下”(即假设)。
线性回归的假设
根据假设是关于解释变量(即特征)还是残差,我们可以将线性回归的基本假设分为两类。
关于解释变量(特征)的假设:
- 线性
- 无多重共线性
关于误差项(残差)的假设:
- 正态分布
- 同方差
- 无自相关
- 零条件均值
线性
顾名思义,线性回归模型的基本假设是因变量和自变量之间存在线性关系。这里,线性仅与参数有关。奇怪的是,对解释变量本身的程度或形式没有这样的限制。
因此,以下两个等式代表线性回归:
(Y_{i} = \beta {0}+ \betaX_{i}+\epsilon _{i}\qquad\qquad - (1))
这里,模型的参数是线性的,解释变量也是线性的。
(Y_{i} = \beta {0}+ \betaX_{i}^{2}+\epsilon _{i}\qquad\qquad- (2))
该模型的参数是线性的,而解释变量是非线性的。
解释变量可以是指数、二次、三次等。它仍然可以被框定为一个线性回归问题。
以下等式不是线性回归:
(Y_{i} = \beta {0}+ \beta^{2}X_{i}+\epsilon _{i}\qquad\qquad- (3))
线性回归通过求解一组线性方程来最小化估计未知β的误差(均方误差)。
当贝塔采用非线性形式时,事情变得更难,我们不能使用我们提到的方法(但不是派生的!)早前。因此,我们不能在等式 3 的情况下使用线性回归。因此,(参数的)线性假设很重要。
如何检测线性度?
残差图有助于我们识别数据和回归模型之间较差或不正确的曲线拟合。这可能是检查线性或缺乏线性的最简单的方法。良好的均匀分布表示线性。
如何修正线性度?
现在棘手的部分是得到正确的方程的函数形式。
- 我们可以尝试通过对独立项和/或从属项应用非线性变换来重新构建它。我们可以通过规范化、记录原始值等方法来转换杂乱的数据。这将使数据呈线性。
- 我们也可以尝试在等式中加入另一个独立变量(比如(X^{2})).
无多重共线性
另一个假设是自变量彼此不相关。如果一个或多个解释变量之间存在线性关系,就会增加模型的复杂性,而无法描述每个解释变量对响应变量的影响。
如果我们根据一群专业人士的年龄和经验来模拟他们的工资。
(salary_{i} = \beta {0}+ \beta(years; of; experience){i}+\beta(age; in; years)_{i}+ \epsilon _{i})
线性回归研究每个自变量(X)对因变量(Y)的影响。但是当自变量相关时,就像在这种情况下,很难隔离单个因素对因变量的影响。如果你增加了年的经验,那么的年龄也会增加。
那么,薪水的增加是因为经验还是年龄?
这将影响系数的准确性以及标准误差。
如何检测多重共线性?
- 检查独立变量之间的相关性。
- 差异膨胀系数
如何修复多重共线性?
处理独立变量之间多重共线性的一种方法是使用 PCA 等技术进行降维,以创建具有最大方差的不相关特征。
误差项的高斯分布
经典的线性回归模型假设误差项是正态分布的。让我们看看这意味着什么。
残差((\ε))是因变量(Y)的值的变化,它不能用自变量来解释。因此,线性回归假设(X)无法解释的(Y)的可变性是正态分布的。
如果违背了这个假设,问题不大,尤其是我们有大量的观测数据的情况下。这是因为如果我们有大量的观察值,中心极限定理将适用,这意味着对于大样本量,不管母体分布如何,抽样分布将类似于正态分布。
但是,如果观察值很少,并且违反了正态假设,则模型输出中的标准误差将是不可靠的。

如何检测正常?
- 在残差图中,大多数点应该以零为中心,并且应该随着我们远离最佳拟合线而变得稀疏。残差均值应该为零。
- Q-Q plot
- 安德森-达林试验
- 夏皮罗-维尔克检验
- 瑞安-乔伊纳试验
- 科尔莫戈罗夫-斯米尔诺夫试验
如何修复常态?
- 首先要检查的是我们是否有异常值。如前所述,线性回归模型使用“最小二乘法”得出最佳拟合。因此任何异常值都会严重影响残差。
- 如果可能,添加更多观察。
- 如上所述,我们可以通过应用非线性变换来尝试修改回归方程的函数形式。
误差项没有自相关
假设线性回归模型中的残差是独立同分布的。这意味着每个误差项都是独立的,与其他误差项无关。
因此,知道一个误差项并不能告诉我们关于其他误差项的任何信息。此外,所有误差具有相同的分布,即正态分布(具有零均值和有限方差)。
特定时间点的误差项应该与任何过去的值没有关联。这使得误差项相当于无法预测的随机噪声。
在残差之间存在相关性的情况下,模型的精度会受到影响。自相关或序列相关是涉及时间序列数据的回归所特有的问题。你可以阅读更多关于自相关和自协方差的内容。
处理时间序列数据时,如果特定时间 t 的值依赖于某个时间((t-1))的值,则在模型拟合步骤之后,残差之间可能存在相关性。如果你知道一个给定时间的剩余值,你就能合理地知道下一个剩余值在哪里。
无自相关是 OLS 成为有效模型的关键要求(根据高斯马尔可夫定理)。当这个假设被违背时,尽管模型仍然是无偏的,但其效率会受到影响。
标准误差会增加,拟合优度可能会被夸大。显著回归系数可能看起来具有统计显著性,但实际上并非如此。

如何检测自相关?
- 显示残差图中残差的某种聚类的蛇形波状图案表示误差项的自相关。
- 德宾-沃森试验
市场数据的线性回归——用 Python 和 R 从头实现
原文:https://blog.quantinsti.com/linear-regression-market-data-python-r/
由 Vivek Krishnamoorthy
这是我的金融回归分析系列的第二部分。在第一期中,我们谈到了金融计量经济学中最重要的技术:回归分析,特别是线性回归及其最流行的两种风格:
- 单变量线性回归,以及
- 多元线性回归。
在这篇文章中,我们将回归的知识应用到实际的财务数据中。我们将使用Python和R对前一篇文章中的关系进行建模。我在两种语言中运行它(在适用的地方有可下载的代码),以便精通一种语言或应用程序的读者可以更直观地了解它在其他语言中的实现。
如今,开发和实现模型所需的许多构建模块都是现成的软件。照原样使用它们现在是量化交易从业者的标准做法。
许多假设是线性回归模型的基础。与之密切相关的还有它的缺点。如果您计划使用线性回归进行数据分析和预测,我建议您先查阅一下。我打算接下来写这个话题。
现在,我将把这些担忧置之度外,继续实现。
使用 Python 实现
在Python中有多种方法进行回归分析。statsmodels、sklearn和scipy库是很好的选择。
为了简洁起见,我们使用前两个实现简单和多元线性回归。
当我们浏览下面的代码时,我指出了方法上的不同。
我们用两种方法来量化变量之间线性关系的强度。
- 计算变量之间的成对相关性。
- 线性回归建模(首选方式)。
我们从必要的进口开始,并获得所需的财务数据。
在 Scikit-learn 中构建和调整线性回归模型
原文:https://blog.quantinsti.com/linear-regression-models-scikit-learn/
由阿舒托什·戴夫
在的上一篇博客中,我们研究了在 scikit learn 中训练和优化分类模型的步骤。在这篇博客中,我们将重点放在线性回归模型上。我们将讨论正则化的概念、其示例(山脊、套索和弹性网正则化)以及如何使用 scikit learn 库在 Python 中实现它们。
内容
- 导入库
- 数据:来自 Scikit Learn 的“糖尿病”数据集
- 数据预处理
- 模型评估指标
- 简单线性回归
- 多元线性回归
- 为什么要正规化?
- 什么是岭回归?
- 在 scikit learn 中实现岭回归
- 什么是拉索回归?
- 什么是弹性净回归?
- 总结
线性回归问题也属于监督学习,其目标是构建一个“模型”或“估计器”,该模型或“估计器”可以在给定一组特征(X)值的情况下预测连续因变量(y)。
任何线性回归模型的一个基本假设是,因变量(y)是(至少在某种程度上!)自变量(Xis)的线性函数。也就是说,我们可以使用数学表达式估算 y:
(y = b _ 0+b _ 1 X _ 1+b _ 2 X _ 2+b _ 3 X _ 3+\ cdots+b _ n X _ n ),
其中,(b_i)s 是模型要估计的系数。
我们寻求最小化的成本函数是误差平方和(也称为残差)。这种方法被称为普通最小二乘法(OLS)方法。换句话说,我们想要最小化( \sum (y - \hat{y})^2\ \ ),其中(\hat{y})是模型预测的 y 值的 bis 的那些最佳值。
尽管 OLS 方法在很多情况下都很有效,但当数据中存在大量异常值或预测变量((X_i)相互关联时,它也有自己的缺点。
这可能会对模型的整体预测准确性产生重大影响,尤其是对于样本外数据或新数据。在这种情况下,某种形式的正规化是有帮助的。
两种最流行的正则化技术是岭回归和套索回归,我们将在这个博客中讨论。
让我们从基础开始,即导入所需的库。
导入库
我们将需要一些常用的库,如 pandas、numpy 和 matplotlib 以及 scikit learn 本身:
金融中的线性回归分析
由 Vivek Krishnamoorthy
Quantra 上的实时交易集成
原文:https://blog.quantinsti.com/live-trading-integration-quantra/
你想要一个可以学习、回溯测试、优化和交易市场策略的地方吗?
这样的地方难道不是交易爱好者的天堂吗?
Quantra 试图做到这一点。在 Quantra,你可以学习不同的交易策略,从动量到均值回归,日间交易策略,甚至机器学习策略。
您还可以分析和优化策略的性能,一旦您对性能感到满意,通过一键式集成功能,您可以将您的策略投入使用。
在这篇博客中,您将学习基于机器学习创建一个简单的交易策略,通过 Quantra 平台在实时市场中一键实施相同的策略,并分析策略性能。
本文涵盖以下主题:
什么是机器学习?
机器学习是人工智能的子集,它为机器提供了基于经验、观察和模式自主学习的能力,而无需显式编程。我们输入一个数据集,机器通过它学习并建立一个模型来进行预测和决策。
我们来了解一下如何在交易中使用机器学习。
假设你有一个机器学习算法拥有所有的智能。该算法可以像线性回归、支持向量分类器一样简单,也可以像深度神经网络一样先进。
你需要决定的下一件事是你想从机器学习算法中得到什么。机器学习算法在交易中的典型结果是找到进入和退出头寸的点。
简单来说,什么时候买入或卖出,什么时候退出开仓。另一个结果是买卖的股票数量或买卖的价格。
你已经定义了你的机器学习算法,也定义了结果。但是这个算法是如何实现这个结果的呢?
这需要数据,或者用更复杂的语言来说,你可以说它是一个特征,它将帮助 ML 算法预测结果。
这是任何机器学习算法中最重要也是最耗时的部分之一。特征的一些例子是历史价格,如 OHLC 数据、蜡烛图、交易时间、技术指标或基本面数据,如市盈率。
总而言之,你将特征或数据传递给机器学习算法,它将预测你定义的结果。

让我们用这个概念来构建一个机器学习交易策略,来预测标准普尔 500 第二天的走势。
构建简单的机器学习策略
导入库和包
设计和创建 ML 策略的第一步是导入您需要使用的库和包。一些常用的库是:
如果您不知道将在策略创建过程中使用的库,也可以根据需要导入这些库,而不是一次导入。
[网络研讨会]学习并实时交易机器学习策略
原文:https://blog.quantinsti.com/live-trading-session-12-january-2021/
https://www.youtube.com/embed/tUN9XGAGRYg?rel=0
2021 年 1 月 12 日星期二
美国东部时间上午 7:30 | IST 时间下午 6:00 |新加坡时间晚上 8:30
会议概述
这一实践环节将向您介绍机器学习的概念、功能和目标变量。为交易创建一个机器学习策略和可用的算法选择。
据《福布斯》报道,“预计从 2018 年到 2024 年,全球机器学习(ML)市场将以 42.8%的复合年增长率(CAGR)增长,四年后将价值 306 亿美元。”
学习成果
-了解设计和创建机器学习策略的步骤
-调整策略并对历史数据进行回溯测试
-在实时市场中实施机器学习策略
-分析纸上交易和实时交易时的表现
关于演讲者

伊桑·沙阿是 quanti nsti Quantra 的助理副总裁,领导该公司的内容和研究团队。在此之前,他曾在巴克莱银行的全球市场团队和美银美林工作。他在金融市场拥有丰富的经验,在不同的资产类别中担任不同的角色。
Python 上的长调用蝴蝶策略
原文:https://blog.quantinsti.com/long-call-butterfly-strategy-python/
我们在之前的一篇文章中讨论了涵盖的拜访策略。在本帖中,我们将介绍长叫蝴蝶。当预期基础证券价格波动不大时,做多蝴蝶是交易者采用的一种流行策略。长叫蝴蝶策略包括三个部分:
- 买入较低的价内执行(ITM)看涨期权
- 购买更高的价外(OTM)看涨期权
- 卖出两个平价(ATM)看涨期权
在这种策略中,所有的看涨期权都有相同的到期日,并且各组成分支的每个执行价格之间的距离必须相同。让我们举一个例子来理解做多蝴蝶的运作,它的收益,以及策略中包含的风险。
举例:
ABC 股票的交易价格是 100 卢比。2015 年 1 月 2 日 225。为了创造一个长叫蝴蝶翅膀,
1)以 12.50 卢比的价格购买 2015 年 1 月 29 日的 215 罢工认购,每手 100 股
2)在 2015 年 1 月 29 日卖出 2 手 225 份行权价为 6.50 卢比的看涨期权,每手 100 股
3)以 3.00 卢比的价格购买 2015 年 1 月 29 日的 235 罢工认购,每手 100 股
持有这些头寸的净借方金额等于:
短期认购收到的认购溢价减去长期认购支付的认购溢价
1300 卢比–1550 卢比=-250 卢比
如果到期时股价为 230 卢比,则较低的行权价和中等行权价看涨期权将被行使,而较高的行权价看涨期权到期时将一文不值。
利润由下式给出
利润=(ITM 电话的利润-支付的保险费)加上(收到的保险费-自动柜员机电话的损失)减去(OTM 电话支付的保险费)
利润=(1500-1250 卢比)+(1300-1000 卢比)-300 卢比= 250 卢比
多头蝴蝶的风险回报情况如下:
- 最大风险–已支付的净借方
- 最大奖励-(相邻好球之间的差异-已支付的净借方)
长时间调用蝴蝶收益图的 Python 代码:
我们使用上面使用的同一个例子来说明如何用 python 编写策略。
import numpy as np
import matplotlib.pyplot as plt
s0 = 225 # Initial stock price
k1 = 215;c1 = 12.50; # Strike & premium for ITM Call
k2 = 225;c2 = 6.50; # Strike & premium for ATM Call
k3 = 235;c3 = 3.00; # Strike & premium for OTM Call
shares = 100 # Shares per lot
# Stock Price at expiration of the Call
sT = np.arange(0,2*s0,5)
# Payoff from the Lower Strike ITM Long Call Option
y1 = np.where(sT > k1,((sT-k1) - c1) * shares, -c1 * shares)
# Payoff from ATM Short Call Option
y2 = np.where(sT > k2,((k2-sT) + c2) * 2 * shares, c2 * 2 * shares )
# Payoff from the Higher Strike OTM Long Call Option
y3 = np.where(sT > k3,((sT-k3) - c3) * shares, -c3 * shares)
# Payoff for the Long Call Butterfly
y = y1 + y2 + y3
# Create a plot using matplotlib
fig, ax = plt.subplots()
ax.spines['top'].set_visible(False) # Top border removed
ax.spines['right'].set_visible(False) # Right border removed
ax.spines['bottom'].set_position('zero') # Sets the X-axis in the center
ax.tick_params(top=False, right=False) # Removes the tick-marks on the RHS
plt.plot(sT,y,lw=1.5)
plt.title('Long Call Butterfly')
plt.xlabel('Stock Prices')
plt.ylabel('Profit/loss')
plt.grid(True)
plt.axis('tight')
plt.show()

我们使用 numpy 的 np.where 函数来计算策略的每一步的收益。然后我们使用 matplotlib 库来绘制图表。我们首先创建一个空的图形,并添加一个支线剧情。然后我们移除顶部右边的&,并在中心移动 X 轴。使用 plt.plot 函数,我们绘制了多头蝴蝶的收益图。最后,我们在图表中添加标题和标签。请注意,我们没有画出它的任何组成部分的收益。
下一步
这是一篇使用 Python 写的关于多头蝴蝶及其收益图的简短文章。在我们接下来的文章中,我们将涵盖更多的期权策略,并举例说明如何使用 Python 绘制它们的收益图。如果你想了解更多的策略以及在现实市场中实施这些策略的方法,那么你应该考虑通过点击这里注册 EPAT。
- 龙打电话给蝴蝶 Payoff.rar
- 长呼蝴蝶心诚(2)。巴拉圭
仅做多、低频率的资产分配算法
了解和学习,你如何能够专注于算法,利用机器学习的核心来做出资本分配的选择。你可以想出一个低频策略,定期在预先选定的一组基础资产(篮子资产)中优化配置其主要资本。
通过这个过程,您可以创建只做多头、低频率的资产分配算法。除此之外,你还将学会根据普通的分配策略来衡量这些,普通的分配策略仅仅依靠经验的动量指标来做决定。
这个项目中使用的完整代码的链接可以在文章末尾找到。
本文是作者提交的最后一个项目,作为他在 QuantInsti 的算法交易管理课程( EPAT )的一部分。请务必查看我们的项目页面,看看我们的学生正在构建什么。
关于作者

Vivin Thomas 是金融服务行业的一名定量分析师,常驻印度孟买。他在量化金融领域积累了 9 年的专业经验,涵盖衍生品定价和风险。
他在多个职位和组织中成长,特别是近年来在两家全球知名的投资银行担任副总裁。Vivin 拥有 IIT 马德拉斯大学的工程学士和硕士学位。Vivin 还自豪地获得了 EPAT 卓越证书。
项目摘要
- 这个项目的目的是提出一个低频策略,可以在预先选定的一组基础资产(篮子资产)中定期优化分配其主要资本。
- 这种算法/策略有许多选择。在这个项目中,我们主要关注那些在其核心利用机器学习为我们做出资本分配选择的算法。在这方面使用了一套机器学习算法,并将每一种算法与另一种算法进行比较。
- 为了确保我们有一个合适的基线,我们还尝试提出一个“基于规则”(即非 ML)的分配方案,主要用于比较目的。这将有助于理解 ML 算法与基于规则的算法相比是否确实提供了一个可见的优势。
- 我们如何选择底层资产也是一个重要的考虑因素,尤其是篮子中的资产数量。这将在下一节中详细讨论。
项目动机
这里的想法是提出一个只做多的资产配置策略,在预先确定的一篮子基础资产中优化地重新分配其当前资本。
这种重新分配也称为重新平衡,以固定的频率发生,在我们的例子中选择为 7 天。这个想法是明智的分散投资——也就是说,当我篮子里的一项资产表现不佳时,我希望篮子里的其他资产通过显著的优异表现来“缓冲”它。
分配可以是部分的,也可以是全部的,即在一个再平衡期内。我们可以选择将我们的全部资本分配给篮子中的一项资产,或者根据我们的算法预测,在即将到来的再平衡期间,将部分财富分配给篮子中的每项资产。
我们做多的原因只是为了复制传统基金/投资组合的简单性。做空作为一个概念可能不容易被大多数(不那么老练的)散户投资者理解,他们可能希望投资于你的基金,这可能会使他们不太愿意投资。
简单也是我们试图将重新平衡频率设置为合理值的原因。极低的频率会让我们很难做出准确的预测(预测一天的表现比预测一年的表现相对容易)。
另一方面,极高的频率会带来巨大的交易成本和滑点,从而减少我们的整体回报。自然,我们可以在回溯测试中引入交易成本,并对再平衡频率进行“优化”。
然而,我们将这一讨论排除在范围之外,因为它会给我们已经很高维的优化问题增加一个额外的维度(我们将在后面看到)
篮子底层的选择
如前所述,为本次演习选择的底层的数量和确切名称也是一个重要的考虑因素。
我们的目标是首先提出我们认为的“类别”的定义,然后为每个类别选择合理的代表性资产。
类别可以基于行业(制药、IT、基础设施、金融等),也可以基于资本(大、中、小盘),或者基于资产类型(股票、债券)。我最终选择了第一个定义。这种选择是任意的,可以对任何其他类别定义执行相同的算法(尽管有不同的最佳参数)。
选择修正这个定义是为了确保设置的简单性。出于同样的原因,我决定选择交易所交易基金来代表每个行业,而不是进行另一项复杂的练习,为每个类别选择“正确的代表性股票”。
这将额外确保股票选择导致的特殊行为不会在我们的整体算法性能中发挥作用。
只是为了开始,除了纯粹的“现金”之外,我还选择了 4 只 ETF 作为最初的候选。这些交易所交易基金是
- 一只 PSU 银行 ETF (KOTAKPSUBK。NS),
- infra ETF (INFRABEES。NS),
- 一只黄金 ETF (HDFCMFGETF。NS)和
- Nifty-50 ETF(由于一些数据问题,我为此选择了^NSEI 指数。总的来说这个应该是可以的)。
考虑到我们的分析,每个 ETF 在整个期间实现的回报可以在下面找到。

像这样一个相对较大的篮子(包括现金在内总共 5 个)有明显的缺点。当我们试图解决多类分类问题时,这些缺点变得更加严重。
分类器基于在整个集合中哪个标签被分配了最高的“预测概率”来进行预测。随着我们增加用于预测的标签数量,概率阈值自然会变小,从而增加了我们预测中的噪声,使其容易受到更多不正确预测的影响。
此外,如果在预测中使用“N”个技术指标作为特征(这里就是这种情况——我们将在后面的章节中看到),那么每增加一个资产都会导致在您的分类模型中增加 N 个新特征,这可能会导致模型过度拟合。
当我在这个大小为 5 的篮子上运行整个工作流(在后续部分中描述)时,这个假设也得到了非正式的证实。
获得的结果确实很差,这是我回去对资产选择进行更多分析的主要动力。
分析背后的一些直觉可以在下面的中找到:
- 要考虑的主要项目是反相关性。回想一下本节前面描述的“缓冲”概念。
- 有多个底层可供选择的原因是基于这样的假设:当你的基础底层(让我们以 Nifty 50 为例)表现不佳时,你有另一个底层可以“锚定”你的策略。
- 对于这样的行为,合理程度的反相关是必要的。如果你的集合中有两个底层是正相关的,那么期望其中一个“锚定”另一个是没有意义的。
- 对我们每一个底层投资者的 5 天回报率(任意选择以减少噪音)进行快速相关计算,得出以下结果
| | ^NSEI |
| ^NSEI | One |
| KOTAKPSUBK.NS | Zero point six four |
| 红外线扫描 | Zero point seven |
| HDFCMFGETF。纳秒 | -0.10 |
(我截断了矩阵,但很明显,唯一与基础资产负相关的资产是黄金。)
- 我们可以形象化这种关系的另一种方式是,对于市场/基础底层投资者(Nifty 50)的给定回报值(超过 5 天,任意选择),绘制其他底层投资者之一给我们带来正与负回报(频率)的频率。
- 粗直方图可视化可以在下面找到。



- 正如你所看到的,黄金 ETF 比其他两个基金有明显的优势——当市场产生负回报时,黄金产生正回报的可能性超过 50%。该轮廓实际上与其他 2 个轮廓完全相反
这是当我决定截断我的初始基础清单,只包括 3 个,包括现金。黄金交易所交易基金必须在名单上,因为它是唯一一种与其他资产呈负相关的资产。
另一个可以选择剩下的三个中的任何一个。我选择讨论使用 Nifty-50 和 Infra ETF 获得的结果,以便可以在一个以上的场景下评估算法的适当性。
算法描述 -基于规则和基于分类器的资产分配模型将在以下小节中详细描述
基于动量的资产配置(基于规则)
想法是在每个再平衡日期计算每项资产的指标,并为每项资产分配与该指标成比例的可用资本的一部分。
在这种情况下,我试图提出一个反映资产潜在动力的指标。这个想法是,如果一个资产开始建立势头,它将在一个合理的时间框架(时间范围)内平均朝着那个方向发展。
对于我们的案例,我们感兴趣的时间范围是 7 天(之前讨论过)。动量指标越高,趋势可能越强,我们应该考虑分配的份额越高(如果趋势为正)。
如果一项资产的动量/趋势指标为负,那么我们的算法应该确保它不会得到分配。如果所有的资产都是负动量,那么我们应该简单地什么都不分配给我们的篮子,而是把我们所有的资本都作为现金储备。
我决定采用的动量指标是过去几天收盘时的简单平均回报率。该指标是试探性得出的(即,没有文献必然支持该特定计算优于其他动量指标的优势)。

在哪里,
Mom i,j 是截至第 j 个交易日观察到的篮子中第 i 个资产对应的动量度量,
r k 是从第(k-1) 日到第 k 日日的收盘价百分比收益。
MA window 是我们要计算平均回报率的历史日期数。
这是模型的超参数之一。
在每个重新平衡日,分配给每项资产的权重计算如下。

在哪里,
w i,j 为截至第 j 个交易日第 i 项资产对应的权重
Mom i,j 已经在上面定义了,并且
M c 是我们赋予现金的默认动量值。
M c 是我们模型中的第二个超参数。
请注意,对于所有篮子资产都为 0 或动量为负且 M c 设置为 0 的情况,所有权重都自动分配为 0,正如我们在上面的等式中看到的那样。
w i 在每个再平衡日进行计算,我们从中获得需要分配给资产 I 的近似资本。
然后,我们用这一近似资本除以该资产的当前收盘价来计算股票数量。这个数字被四舍五入到最接近的整数,以得到实际的股份数,我们可以从中获得实际分配的资本。
所有资产的实际分配资本相加,该总额与再平衡日的总资本之差就是剩余的现金量。
给定再平衡日分配给每项资产的股份数量与其前一个再平衡日的股份数量之差就是在该再平衡日需要买入/卖出的股份数量。
很明显,这是一种分数分配策略。我们也可以把它转换成一种整体分配策略,简单地把我们所有的资本分配给具有最高动量的资产。
但是为了这个分析的目的,我们保持分配分数。
多类别 ML 资产分配
在这里,我们不会根据规则做出任何决定。相反,我们训练一个多类分类模型来代表我们做决策。
请注意,为了保持简单性,这种 ML 分配策略在整体模式下运行,即在每个再平衡期开始时,我们的全部资本将被分配给该期间被认为是预测的赢家的资产。
预测(因变量)被称为赢家。在任何一个任意的观察日,我们都会观察每种资产在再平衡期间的累积未来回报。
具有最高累积回报的资产被指定为该日期的中奖证券(注意,现金的累积回报被假定为 1)。
作为本练习的一部分,预测变量可能属于以下两组中的任何一组:{INFRABEES。NS,HDFCMFGETF。NS,Cash}或{^NSEI,HDFCMFGETF。NS,Cash}
自变量或特征的选择可以是多种多样的。我们选择了 talib 上可用的标准技术指标(特别是 MACD、7 天 ROCP 和 RSI)。
我们如何选择指标的确切类型和数量将在随后的章节中讨论。
正如任何好的机器学习练习一样,我们首先将整个数据集分为训练、验证和测试数据集。我选择 60-20-20 作为分成。上面提到的技术指标(特征)与获胜标记一起被填充到篮子中的每个资产,即预测变量。
可以选择多种分类模型来拟合数据并进行后续预测。传统分类模型,例如:
- k-最近邻居,
- 支持向量分类器,
- 决策树,
- 逻辑回归,
- 岭回归,
- 朴素贝叶斯——永远是第一选择。
如果传统分类器的性能没有达到标准,那么可以利用 boosting 或 bagging 技术——可以尝试 bagging 和 boosting 原生分类器、随机森林、xgboost 等。
在极端情况下,如果其他方法都失败了,我们还可以利用神经网络分类器作为最后的手段。
要注意的一点是,虽然分类器的预测能力会在每个重新平衡期开始时调用一次,但训练和验证本身是在每日历史时间序列的每一天进行的。
为了保持训练和验证数据集的粒度等于回溯测试而进行的下采样是不必要的,并且只会导致样本量的减少。
基础设施设置
代码尽可能以模块化的方式建立。这样做是为了确保出于实验目的而需要进行的微小更改/添加不会导致实现核心功能的代码发生变化。此外,git 中的整个代码库都有版本控制。
基础设施的显著特点/组成如下:-
lib .引擎
在 lib.engines 中可以找到许多可以跨多个策略重用的核心功能。这包括各种历史数据生成器、模拟器和策略“接口”,以促进鸭子分型。
选择接口样式是为了确保任何被编码的策略都必须实现某些关键方法,以便它们可以在通用的回溯测试程序或优化程序脚本中被调用。
这些方法包括但不限于从/向数据库/文件读取/写入相关市场数据、将算法执行的结果写入数据库/文件、更新指标、信号发生器、下单、绩效指标计算等。
自由策略
实际的策略(类)可以在 lib.strategies 中找到。每个策略都应该从 lib.engines 中定义的一个接口继承,以确保它们可以被公共的 backtester 或 optimizer 函数调用。
这些类需要实现上面列出的所有方法,以及任何其他定制的方法,具体取决于策略功能。
lib .配置
各种策略配置与 lib.configs 中的核心策略实现保持完全分离。
有一个优化器配置,它存储策略超参数的数组/组合,策略需要在这些参数上进行优化。
另一个配置存储特定运行的超参数设置,使用其自己的 run_name 标识符字符串等进行唯一标识
lib .示例
可执行文件可以在 lib.examples 中找到。可执行文件可以是优化器脚本,可用于对优化器配置中定义的多个参数配置顺序运行测试+验证。
有一些回测脚本会根据提供的 run_name 输入来运行回测,以帮助确定它需要在哪个特定的配置上运行。优化器和 backtester 脚本都将逐条执行细节和相应的性能指标保存到 file/db 中。
还包括了一个“绘图仪”可执行脚本,该脚本可以绘制多个策略性能之间的相互关系。我们只需要指定文件/表名,绘图仪可执行文件会完成剩下的工作。
这些可执行文件中的每一个都以某种方式实现,以便能够通过命令行调用运行,并具有可通过参数指定的多种配置。
图书馆实验
lib.experiments 文件夹,顾名思义,包括对任何其他文件都有最终影响的特定实验代码。
该文件夹中的脚本包括用于运行上述相关性分析的脚本、各种移动平均线的试验脚本和另一个 PCA 试验脚本。
utils script
lib 中有一个独立的 utils 脚本。除了在整个项目中使用的帮助器函数之外,该脚本还包含基于通过配置提供的输入参数分配和拟合适当的分类模型的函数。
最后,我在 batch 文件夹中添加了几个批处理文件,当我们希望按顺序运行多个回溯测试或优化器可执行文件时,这些文件非常有用。
结果分析
我们跳过讨论最终结果。为了得出最终构型而进行的试验和实验的顺序,将在下一节中讨论,这里已经给出了最终构型的回测结果。
这对于 ML 模型尤其重要,在 ML 模型中,测试和比较了数百种不同的配置,包括许多分类器,这些分类器甚至不包括在最终结果中,例如:
- 岭/逻辑回归,
- 袋装 KNN,
- 自适应增压等。
本分析所考虑的总时间段为 2010 年 10 月 5 日至 2020 年 5 月 29 日。对于 ML 模型,训练-验证-测试的比例是 60-20-20。
对于基于规则的动量分配器,这一比例是 80-20,因为没有训练阶段,只有优化阶段。
原始结果
{^NSEI 测试期间的策略比较。NS}可以在下面看到:

{ infra bees }测试期间的策略比较。NS,HDFCMFGETF。NS}可以在下面看到:

下面显示的是{^nsei hdfcmfgetf 的每个单独策略的性能统计数据。NS}:

下面显示的是{ infra bees }的每个单独策略的性能统计数据。NS,HDFCMFGETF。NS}

评论
- 基于规则的动量再平衡策略似乎是所有考虑的策略中最一致的。在这两种情况下,其在测试阶段的表现至少等于所考虑的资产对中表现最好的资产。
- 在最大似然模型中,我发现具有均匀权重的 KNN 分类器给出了最稳定的结果。与基于规则的策略一样,在测试阶段,这两种情况下的性能几乎与表现最好的资产的性能相匹配。此外,一般来说,与基于距离的权重的 KNN 相比,具有统一权重的 KNN 是更好的选择,因为后者的结果会严重偏向在欧几里德距离方面与其“最接近”的训练数据,从而使其对噪声非常敏感。
- 最佳决策树模型在这两种情况下表现都很差,可以放心地不予考虑。XGBoost 分类器也是如此。
- SVC 在第二个案例中表现出色。当您将 SVC 的得分与其他明显优于它的得分进行比较时,这是有意义的。但是,第一种情况的性能相当一般。选择一种性能依赖于数据对的实际选择的策略可能不是一个好的决定,因为这可能会被认为是一种迹象,表明该策略在不同的制度下可能无法很好地工作。
- 很难确定合适的分数/指标如何转化为战略绩效。但是有几个有趣的地方需要记住:
- 一般来说,样本内度量越接近样本外度量,性能越好。差异(如极高的样本内得分和极低的样本外得分)表明过度拟合。例如,对于决策树分类器(对于所选择的“最优”超参数),散度看起来通常更高。在这两种情况下,该分类器的表现也往往不如其他分类器。
- 一般来说,对于那些预测正确性/准确性更均匀地分布在所有 4 个类别中的配置,可以看到策略性能更好。同样优选的是,在同一个类中,精确分数和召回分数均匀分布。KNN 似乎在这方面做得很好,因此我们认为它在这两种情况下的表现相对更稳定。另一方面,我们注意到在第一种情况下运行的 XGB 分类器的 cash 得分较低,这可能会导致性能下降。这也是我们在使用 SVC(尤其是第二种情况)时应该三思的原因,因为它对现金的简单回忆分数相当低。
帮助 ML 模型公式化的实验
在下一节中,我们将讨论在最后的回溯测试阶段之前我需要运行的许多实验中的一些。
特征选择
在最大似然模型的情况下,最重要的练习之一是提出一组适当的特征来进行预测。
我们最初用人工计算的特征来表示短期动力、短期风险、长期动力和长期风险。
- “短期”由 10 天的滚动窗口任意表示,而“长期”由 100 天的滚动窗口任意表示。
- “动量”由在所选时间窗口内计算的收盘价到收盘价的平均值表示。
- “风险”由在所选时间窗口内计算的收盘价收益的标准差表示。
这些指标是针对篮子中的每项资产计算的。因此,如果我们选择在篮子中有 N 项资产,我们最终会有 4*N 个特征。
我们从上述公式转向另一个基于 TA-lib 指标的公式。这些指标数量众多,但可以分为几个功能组,例如:
- 势头,
- 音量,
- 波动性,
- 周期指示器和
- 模式识别指示器等等。
最初的想法是从每组中选择 1-2 个有代表性的指标——ADX、MACD、RSI、ROCP、ATR、OBV。
然而,如前所述,假设每个这样的指标将被添加到篮子中的每个资产,每个新的指标将有效地增加“N”个特征集。
任何回归/分类问题中的大型特征集都会遭受众所周知的缺点,例如过度拟合。因此,将特性集最小化为最重要的特性是必要的。
也许最直接的方法是利用 sklearn.feature_selection 模块中的众多算法之一,例如 RFE。
然而,我决定采用一种相对更加手动的方法,一个接一个地明确添加特征,并选择那些在 insample+outsample 拟合质量方面提供最大增量(定性)改进的特征。
这原来是 MACD,RSI 和 7 天 ROCP。请注意,这些指标是为篮子中的每项资产计算的。
特征约简
上面选择的 3 个 TA-lib 指示符仍然意味着我们最终有 6 个(3*N,其中 N=2)特征来运行我们的分类。很难断定我们的配方是否容易过度拟合。
不管是不是,理解我们选择的特征是否可以被分解成更少的组成部分仍然是一个好的实践,通过这些组成部分我们可以解释总方差的大部分。这可以通过简单的 PCA 来实现。
在通过 PCA 运行之前,我们首先对每个特征分别应用 StandardScaler()变换。这将有助于确保通过将所有要素转换为单位方差和 0 均值变量来均衡它们。
我们还可以指定一个方差阈值(默认值为 95%)来帮助降低特征集的维数。训练/验证/测试是在转换+缩减的特征集上进行的。
特征标准化
一般来说,在传统的分类/回归问题中,已经根据经验观察到归一化产生更好质量的拟合。
因此,最好将此作为一个选项——在标准化前后生成拟合质量,并观察标准化后是否有任何显著的改进。
代码以这样的方式实现,以便能够轻松地应用 sklearn 中任何可用的规范化例程。在这个练习中,我选择了“QuantileTransformer”。
如果归一化后拟合质量没有显著提高,那么最好恢复到非归一化数据集。
价格平滑
众所周知,金融数据具有很高的信噪比。因此,我们试图拟合金融数据的任何最大似然模型都会自动地更容易受到噪声的影响。
一种可能规避这个问题的方法是通过应用任何合适的移动平均或频率过滤器来平滑价格数据。虽然这种应用可以增加 SNR(并且因此稳定分类模型的方差),但是捏造特征值本身可能引入偏差和/或响应延迟。
因此,如果我们在应用平滑后没有观察到任何显著的改善,那么最好是恢复到原始的时间序列。
我通过局部更改代码,以特别的方式(即,不像其他一些实验那样,通过配置支持平滑的无缝应用)尝试了 EMA、d EMA、MAMA、SMA、WMA。
合体质量没有显著改善。事实上,我观察到性能略有下降。因此,决定继续使用原始价格数据。
样本加权
对于市场状况良好的样本来说(在再平衡期间,每项资产的波动都很小),有可能的赢家更难预测。
此外,在这种市场情况下,把中奖股票搞错也没什么大不了的,因为这种失误的成本也相对较小。然而,来自上述良性市场的样本可能会增加我们模型预测的可变性(噪音样本?).
此外,在市场剧烈波动的情况下,做出正确的预测自然更为重要,因为市场剧烈波动会导致错误预测的高昂代价。
记住这一点,我们包括了通过“错误预测的成本”来缩放样本的能力。通过计算中奖股票和其他股票(包括现金)之间的收益差的平方和,计算每个样本的成本。
差值越高,权重越大。因此,来自更不稳定条件的样品将被赋予更大的权重。
希望这也意味着对高影响情景的预测更加准确。
该实现允许用户能够指定是否应用该加权方案。样本权重的计算本身是硬编码的(如上所述的 L2 式加权)。
请注意,并非所有分类器都支持应用样本权重。在实验过程中,我确实观察到一些分类器模型在样本加权的情况下表现得更好(就整体策略表现而言)。
预测概率阈值应用
所有分类器预测都有一个相关的“预测概率”,它代表预测的确定性。自然,预测概率越高,确定性就越高。
在多类分类问题中,例如我们在此尝试解决的问题,类越多,将它指定为预测特征所需的典型概率就越低。
例如:
如果只有 2 个类别可供选择,则被指定为该样本的预测类别的类别的预测概率需要大于 50%。
如果有 3 个类,那么有可能 34%就够了等等。
因此,当我们增加分类问题中可供选择的类别数量时,我们的预测可能会变得更加嘈杂,阈值也会变得更低。
规避这个问题的一个方法是减少我们运行预测的类集的大小。这正是 2.1 节中所执行的。
另一种方法是通过明确指定进行预测的最低阈值要求来引入一定程度的保守性。
例如,我们可以将概率阈值设置为 0.7,并且仅当预测变量的概率超过该阈值时,才将该预测变量指定为赢家。如果不是,那么我们将现金指定为该样本的获奖股票。
我考虑了 0.5、0.7 和“无阈值”作为优化的场景。这些值可通过配置来指定。
合成数据生成
我们通常只有有限的数据来训练和测试我们的模型。增加数据集大小的方法之一是运行模拟。然而,我们需要考虑股票扩散的潜在特征,如自相关、波动聚集等。你可以阅读更多关于自相关和自协方差的内容。
对于多资产篮子,我们还需要额外考虑两两相关。总而言之,这项运动将会非常激烈。
此外,如果任何潜在的特征不被满足,并且我们结束了在这样的数据上训练我们的模型,那么我们的最终预测可能会失控。
因此,虽然我确实对合成数据进行了一些实验,但我确实记住了潜在的缺点。因此,通过合成数据获得的任何优化结果都没有在实际回测中使用。相反,它们仅用于“排除”测试。
例如,如果在实际历史数据上获得的最佳配置是在任何合成数据集上的最差配置,则该配置被排除在回溯测试之外。
此外,生成琐碎的数据集有助于消除代码中任何明显的错误。
例如,如果您输入合成对数据,其中一个资产总是在增加,而另一个却停滞不前(或减少),那么您会期望 ML 分类器始终选择第一个资产。
或者,如果价格波动,但一个上涨,另一个下跌,反之亦然,那么你也会期望分类器在大多数情况下做出正确的预测。
我还实现了一个“数据混洗器”作为交叉验证的代理,它也主要用于排除测试。
最佳化
前面小节中描述的大部分功能都经过了优化。我们还根据正在优化的分类器对特定的超参数进行了优化。
运行优化的典型配置可能如下所示

优化既在“全局”参数上运行,如“do_pca”、“predict _ probab _ thresh”等,也在“model_params”下定义的模型特定超参数上运行。
优化将在多维空间上运行,多维空间由每个单独的“优化”参数与其他参数的叉积定义。
功能选择、价格平滑和综合数据生成等具体实验是作为一次性练习进行的,并不意味着优化。
指标生成和比较
最后一步是在优化过程后选择最佳配置。
用于确定这种配置的机制将基于比较由每个配置生成的某些度量,并挑选出给出最佳结果的一个。
可在第 5.1 节提供的表格中查看指标列表。最重要的指标是性能指标,如命中率、归一化命中率、CAGR、夏普、索提诺等。
此外,对于最大似然模型,我们还生成对应于每个类别的总体准确度分数、精确度分数和召回分数,包括样本内和样本外。
从优化步骤后生成的数字堆中提出最佳配置是一项重要的任务。我决定保留这个流程手册。
大多数时候,我们可能倾向于选择具有最高夏普/索提诺和/或 CAGR 的配置。然而,大多数时候这种配置只是“幸运”的执行者。
这也是我决定在两个独立的篮子上进行这个练习的原因之一——{^nsei,HDFCMFGETF。NS}和{INFRABEES。NS,HDFCMFGETF。NS}。
一个合理的配置应该对两个篮子都有很好的表现。此外,正如 6.7 节所讨论的,它们不应该在合成数据上表现不佳。我们经常观察到,70-80%文件范围内的配置在各种场景中是最一致的。
结论
我能够从这个项目中得出的结论是,基于规则的动量再平衡策略在所有测试的配置中表现得最为一致。
原始结果可在第 5.1 节查看。优化结果相对更稳定,验证和测试数据集中的性能或多或少是一致的。
当谈到最大似然算法时,有相当大的空间来改进它的性能,特别是通过考虑以下一些附加因素
经由隐马尔可夫模型(HMM)的状态识别
基本上,我们试图将整个历史数据时期聚类成单独的状态(熊市对牛市,良性对波动性等),并为不同的状态训练不同的模型。在回溯测试或实时交易中,我们需要首先识别制度,并使用专门为该制度训练的模型进行预测。
更好的功能选择
这些功能是从 TA-lib 上的可用选项中选择的。有可能存在比从历史价格得出的 TA-lib 指标更好的预测指标。我们可以考虑使用替代数据。
稳健的合成数据生成
尽管如第 6.7 节所述进行了尝试,但其应用仅限于将特定配置列入黑名单,而不是通过提供更多数据来提高现有模型的稳健性。这当然可以极大地提高模型的性能。
优化再平衡周期和/或添加再平衡触发器
我选择了一个合理的低重新平衡频率,并保持不变。回测性能极有可能随频率单调增加(分类模型预计会在更短的预测间隔内做出更准确的预测)。
然而,更高的再平衡频率会导致更高的交易成本。显然,我们可以增加交易成本作为参数,并优化再平衡频率,但这将增加一定程度的不确定性,因为这些成本不容易观察到。
此外,如果在再平衡期内,被选为获奖股票的资产表现差于表现最佳的资产一定幅度,我们可以添加触发器,以发出过早再平衡机会的信号。
这可能确保了我们尽快摆脱亏损头寸,而不必等到再平衡期结束。
多头/空头
这适用于基于规则的策略和 ML 策略。除了限制自己只做多或不做,我们还可以尝试做空我们预测在再平衡期间表现不佳(负回报)的资产。
这有可能通过利用股票“下跌”来提高我们的回报。此外,根据经纪商/交易所的不同,做多+做空可能会降低我们的总体保证金要求,从而也增加我们的总体回报。
参考书目
- Scikit Learn (了解并设置各种分类算法)
- TA-Lib (找到我在 TA-Lib 指示器周围的路)
- 堆栈交换(用于学习)
如果你想学习算法交易的各个方面,那就去看看算法交易(EPAT) 的高管课程。课程涵盖统计学&计量经济学、金融计算&技术和算法&定量交易等培训模块。EPAT 教你在算法交易中建立一个有前途的职业所需的技能。现在报名!
你可以在这里访问完整的代码:
免责声明:就我们学生所知,本项目中的信息是真实和完整的。学生或 QuantInsti 不保证提供所有推荐。学生和 QuantInsti 否认与这些信息的使用有关的任何责任。本项目中提供的所有内容仅供参考,我们不保证通过使用该指南您将获得一定的利润。
多空股票策略
顾名思义,多空股票策略是指我们在不同的股票中同时持有多头和空头头寸。由于其固有的低风险特征,这种策略通常被对冲基金用来产生更大的风险调整回报。
在本文中,您将了解这个策略是如何工作的,以及应该如何构建这样一个策略。您还将看到它在 Python 中的实现以及回溯测试的结果。
我们将讨论以下主题:
- 什么是多空股票策略?
- 退货的来源有哪些?
- 多空股票策略的利弊
- 多空股票策略的运作
- 建立多空股票策略的步骤
- 在 Python 中实施多空股票策略
- 多空股权策略排序方案的选择
- 多空股权策略的资金配置选择
- 多空股票策略的再平衡频率
- 风险管理和行业趋势
- 多空股票策略的交易成本和失误
什么是多空股票策略?
多头空头股票策略是对冲基金使用的一种流行策略,在这种策略中,多头投资于回报率较高的股票,空头投资于回报率较低的股票。
基本原理是多头头寸的价值预计会增加,而空头头寸的价值预计会减少。
以这种方式构建的投资组合有助于在市场崩盘时避免损失。因此,这种策略被称为市场中性策略。
构建这种投资组合的一个更复杂的方法是,在每个部门的多头和空头配置等量的资金,形成一个部门中性的投资组合。
这种方法将有助于保护投资组合的业绩不受任何行业价格下跌的影响,并降低投资组合的波动性。
退货的来源有哪些?
采用多空策略的对冲基金经理必须善于在多空投资组合中识别正确的股票。通过在适当的多头或空头头寸中积极选择股票,经理可以最大化两种头寸的回报,同时仍然保持投资组合的市场中性。
经理的卖空技巧尤其重要,因为它不仅能在崩盘时对冲头寸,还能帮助从估值过高/质量差的股票中获得回报。
为了获得更大的风险调整回报,基金经理倾向于投资高度多元化的投资组合,包括大量不同行业的股票,以及一些全球股票市场投资。
这种策略的市场风险通常较低,大多数基金旨在将长期贝塔系数保持在 0.5 以下。最后,额外的回报来源取决于经理们根据他们不断变化的市场观点做出战术决策以修改投资组合的净市场敞口的能力。
多空股票策略的利弊
这种策略的最大好处是限制了投资组合的下行风险。从历史上看,用标准差衡量,这种策略的回报波动很小。
与其他投资组合相比,典型的多空策略也有较低的最大提取额度。这里的理由是,多空策略并不仅仅依靠上涨的市场来产生回报。相反,这种策略旨在从上涨和下跌的市场中获得回报。
这种策略的潜在缺点是,对冲基金通常收取约 2%的高额年度管理费,以及高达利润 20%的业绩费。
与共同基金和交易所交易基金相比,这些费用偏高,其费用比率约为 1%至 3%。这种策略的另一个缺点是,50-50 的多头和空头头寸可能会导致牛市中的回报率非常低。
多空股票策略的运作
为了理解这种策略的工作原理,让我们看一个例子。一个对冲基金持有苹果和谷歌各 1000 美元的多头头寸,以及微软和 IBM 各 1000 美元的空头头寸。
投资组合(科技板块)
| 股票名称 | 多头头寸 | 股票名称 | 空头头寸 |
| 苹果 | $1000 | 微软 | -$1000 |
| 谷歌 | $1000 | 国际商用机器公司 | -$1000 |
| 总计 | $2000 | 总计 | -$2000 |
如果一个事件导致所有科技股下跌,对冲基金将因苹果和谷歌的多头头寸而蒙受损失,但会因微软和 IBM 的空头头寸而获利。
因此,对投资组合的影响很小。同样,一个导致科技板块所有股票上涨的事件,对投资组合的影响也微乎其微。对冲基金采取这一立场是因为他们预计苹果和谷歌的股价将上涨,微软和 IBM 的股价将下跌。
如果基金经理的观点偏向于做多方,那么他可以给予投资组合中做多方更多的权重,例如将 70%的资本给予做多方,将 30%的资本给予做空方。
但是,市场崩盘对投资组合的影响会更大。但这种多头头寸比例更高的结构将有助于投资组合价值在牛市中更快升值,就像新冠肺炎下跌后出现的情况一样。
建立多空股票策略的步骤
多空股票策略由以下步骤构成:
- 步骤 1 -定义宇宙
- 步骤 2 -存储股票
- 步骤 3 -定义多头或空头证券的参数
- 步骤 4 -资本分配
让我们详细了解每个步骤,并创建我们自己的多空股票策略。
步骤 1 -定义宇宙
确定我们要建仓的股票范围。这个世界可以根据美元数量、市值、价格和影响成本来定义。在这里,我们将使用市值来确定我们的股票。
第二步-存储股票
在股票领域,我们将根据技术、制药、汽车、金融服务和快速消费品等行业来选择股票。对于我们的例子,我们将使用技术部门。
步骤 3 -定义多头或空头证券的参数
这是工作流程中的关键步骤。在这里,我们将根据前一天的回报对股票进行排名。表现好的股票会排名靠前,表现差的股票会排名靠后。我们将使用均值回归原则进行交易。我们将做多级别较低的股票,做空级别较高的股票。
注意:这里可以使用季度收益增长、PE 比率、P/BV、移动平均线和 RSI 等参数的组合,每个参数的权重不同,以创建一个有利可图的策略。
第四步- 资金分配
为第三步中入围的每只股票分配等量的资金是一种流行的资金分配策略。等权重方法有助于避免投资组合中某一只股票的集中。
在 Python 中实施多头空头股权策略
首先,让我们从导入所有必需的库开始。我们将使用 yfinance 库来导入我们的数据。对于这一策略,我们选择了在纽约证券交易所上市的 42 只大型科技股。
Python 中的长扼杀选项策略
原文:https://blog.quantinsti.com/long-strangle-option-strategy-in-python/

由尼廷·塔帕尔
简介
从事期权交易的交易者享受着选择投资规模和降低交易过程中损失风险的优势。与市场上的许多其他工具相比,期权被认为是成本有效且风险较低的。关于期权交易,我最喜欢的是有许多策略可以练习和遵循。然而,许多交易者不理解他们可以使用的策略范围,这些策略最适合他们的交易风格。
举几个例子

今天,我们来谈谈多头扼杀交易策略。
什么是期权交易中的‘长扼杀’?
多头扼杀是最受欢迎的期权交易策略之一,允许交易者持有到期周期相同但执行价格不同的看涨和看跌期权。
战略要点
要购买的期权的价格:
- 从投入的资金中
- 资金看涨期权之外
利润潜力:无限
最大损失:买入溢价+卖出溢价
盈亏平衡:上涨时的盈亏平衡=执行价+买入溢价+卖出溢价
下跌时的盈亏平衡=执行价格-买入溢价-卖出溢价
如何实施这一战略?
在这个例子中,我将使用富通医疗保健有限公司(股票代码:Fortis)的期权。如果标的资产大幅波动,无论其走势如何,交易者都会从多头扼杀策略中受益。如果你看看下面的图表,就会发现富通的股价也是如此
过去 1 个月的股价走势(来源——谷歌财经)

富通集团的股票价格有很大波动,在过去的一个月里,最高为 157.30 印度卢比,最低为 114.20 印度卢比。根据 Google Finance,当前价值为 138.90 印度卢比,IV 为 83.35%
就本例而言;我会买 1 份价外看跌期权和 1 份价外看涨期权。
这里是富通 2018 年 2 月 22 日 日 到期日的期权链。



我将为行使价为 135 印度卢比的看跌期权支付 4 印度卢比,为行使价为 145 印度卢比的看涨期权支付 3.50 印度卢比。期权将于 2018 年 2 月 22 日 和 到期,为了让我从中获利,富通的股票在到期前应该会出现大幅波动。
启动该交易所支付的净溢价将为 7.50 印度卢比,因此在该策略实现盈亏平衡之前,股票需要下跌至 127.5 印度卢比或上涨至 152.50 印度卢比。考虑到各种因素导致的市场大幅波动,并考虑到市场从最近的下跌中复苏的过程,我们可以假设这里有机会获利。
Python 中如何计算策略收益?
现在,让我用 Python 编程代码带你浏览一下收益图。
导入库
import numpy as np
import matplotlib.pyplot as plt
import seaborn
定义参数
# Fortis stock price
spot_price = 138.90
# Long put
strike_price_long_put = 135
premium_long_put = 4
# Long call
strike_price_long_call = 145
premium_long_call = 3.50
# Stock price range at expiration of the put
sT = np.arange(0.7*spot_price,1.3*spot_price,1)
电话支付
我们定义一个函数来计算购买看涨期权的收益。该函数将 sT 作为输入,sT 是到期时股票价格、认购期权的执行价格和认购期权的溢价的可能值的范围。它返回看涨期权的收益。
def call_payoff(sT, strike_price, premium):
return np.where(sT > strike_price, sT - strike_price, 0) – premium
payoff_long_call = call_payoff(sT, strike_price_long_call, premium_long_call)
# Plot
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT,payoff_long_call,label='Long Call',color='r')
plt.xlabel('Stock Price')
plt.ylabel('Profit and loss')
plt.legend()
plt.show()

放收益
我们定义一个函数来计算购买看跌期权的收益。该函数将 sT 作为输入,sT 是到期时股票价格、看跌期权的执行价格和看跌期权的溢价的可能值的范围。它返回看跌期权的收益。
def put_payoff(sT, strike_price, premium):
return np.where(sT < strike_price, strike_price - sT, 0) – premium
payoff_long_put = put_payoff(sT, strike_price_long_put, premium_long_put)
# Plot
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT,payoff_long_put,label='Long Put',color='g')
plt.xlabel('Stock Price')
plt.ylabel('Profit and loss')
plt.legend()
plt.show()

扼死回报
payoff_strangle = payoff_long_call + payoff_long_put
print ("Max Profit: Unlimited")
print ("Max Loss:", min(payoff_strangle))
# Plot
fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.plot(sT,payoff_long_call,'--',label='Long Call',color='r')
ax.plot(sT,payoff_long_put,'--',label='Long Put',color='g')
ax.plot(sT,payoff_strangle,label='Strangle')
plt.xlabel('Stock Price')
plt.ylabel('Profit and loss')
plt.legend()
plt.show()

正如你在上面的收益图中看到的,任何人的最大损失是持有看涨和看跌期权支付的总溢价,在我的例子中是 7.50 印度卢比。这是指执行价格介于我们在到期时购买的两个期权之间。
另一方面,一旦股价向任何方向大幅波动,你可以获得的利润是无限的。
在我的下一篇文章中,我将谈论“看涨期权传播策略”
下一步
如果你想学习算法交易的各个方面,那就去看看算法交易(EPAT)中的 T2 高管课程。该课程涵盖了统计学&计量经济学、金融计算&技术和算法&定量交易等培训模块。EPAT 让你具备成为成功交易者所需的技能。现在报名!
免责声明:股票市场的所有投资和交易都有风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。
下载数据文件
- option _ thrught _ strategy . ipynb
如何在期权交易中赔钱[工作坊]
原文:https://blog.quantinsti.com/lose-money-trading-options-20-september-2022/
https://www.youtube.com/embed/LYOofrrRSiE?rel=0
尤安·辛克莱博士分享他在期权交易方面的知识和经验。有抱负的期权交易者必须参加的会议。
扬声器
尤安·辛克莱博士(头寸期权交易的作者和期权交易的行业领袖)

尤安博士拥有超过 20 年的期权交易经验。他目前是波动性交易基金 Talton Capital Management 的合伙人。他拥有布里斯托尔大学的理论物理学博士学位,写过两本书《波动性交易》和《期权交易》,这两本书都由 Wiley 出版,他还写过许多论文和文章。
关于 Algo 交易大会 2022
QuantInsti 举办的 2022 年算法交易大会对有抱负的算法交易者来说是一个很好的学习机会。这是您联系您最喜爱的专家并免费获得所有问题答案的机会。
该活动于美国东部时间 2022 年 9 月 20 日下午 1 点(IST 时间晚上 10 点 30 分)举行。
LSTM 网络公司:他们能预测股票指数价格吗?
原文:https://blog.quantinsti.com/lstm-networks-predict-price-project-krishna-tunga/
在本文中,我们将研究一个基于递归神经网络的深度学习框架,以预测每日股票指数价格波动。具体来说,重点将放在长期短期记忆(LSTM)网络——这是一种递归神经网络。
将研究不同类型的输入和网络架构,以确定它们对可预测性的影响。我们将看到,通过投入和架构的适当组合,可以开发出夏普比率高于简单的买入并持有方法的策略。
还将强调与传统机器学习方法相比的差异、限制和需要考虑的因素。通读完这篇文章后,读者应该能够创建一个基于 LSTM 的基本神经网络来根据公开可用的数据轻松预测任何工具的价格变动。
本文是作者提交的最后一个项目,作为他们在 QuantInsti 的算法交易(EPAT ) 的管理课程的一部分。请务必查看我们的项目页面,看看我们的学生正在构建什么。
关于作者

Krishna Tunga 博士拥有 IIT-马德拉斯大学的学士学位,佐治亚理工学院的硕士和博士学位,都是工程学学位。他的兴趣领域包括半导体、可靠性和风险预测、建模和仿真、人工智能、机器学习、深度学习、金融和金融衍生品。
概述
合理的预期是,股票指数会随着普遍和预期的宏观经济前景而变动。然而,诺贝尔奖获得者 Tversky 和 Kahneman[1]最近的工作表明,交易者和投资者普遍存在行为偏差,并可能导致价格波动持续几天、几周甚至几个月。这使得根据历史价格(和交易量)变化预测未来价格成为可能。
许多技术指标属于重叠指标、动量指标、波动性指标等更广泛的类别。已经被用于预测价格变动几十年了。
计算能力的最新进展使得使用传统的监督机器学习方法成为可能,如支持向量机、决策树、主成分分析、随机森林、集成方法等。通过使用几个技术指标的组合以及价格作为输入来预测未来价格。
上述传统机器学习方法的一个缺点是,它们都需要手动挑选指标,基于所挑选的指标具有预测能力的预先假设,预先计算它们,然后在机器学习模型中使用它们作为独立预测器。
这种假设可能不总是正确的,并且不可能通过反复试验来确定一组理想的独立预测值,因为要测试的这种可能组合的数量理论上是无限的。
递归神经网络(RNN)是一种有监督的机器学习方法,可以潜在地解决这个问题。Christopher Olah[2]已经提供了一个很好的关于 RNN 的理论概述,本文不做讨论。
RNN 概念的核心是一个拥有基于历史价格变化的持久内部状态的单元。该单元首先被初始化为随机状态,并以价格(或数量或任何其他适当的数据)的形式接收输入数据,这些数据以确定和规则的时间间隔顺序地输入到该单元中。
当每个输入数据被一个接一个地馈送到该单元时,该单元的状态改变,并且该改变的状态在下一个时间序列与新的输入数据一起被传送回该单元。因此,单元的状态基于其先前的状态和新的输入数据不断地随时间变化。
因此,输入数据中的所有历史移动都以某种方式被单元“理解”,并由其当前状态来表示。因此,无需基于假设预先单独计算所有技术指标,并将其作为预测值输入到模型中,但如果需要,也可将其添加到输入数据中。
长短期记忆(LSTM)网络是由 Hochreiter & Schmidhuber 于 1997 年提出的。LSTMs 除了像 rnn 那样的短持续时间依赖性之外,还可以学习更长持续时间的依赖性。他们能够通过引入三个门(遗忘门、更新门和输出门)来实现这一点,这三个门分别规定:
a .应该保留的单元的先前内部状态的部分,
b .应该保留并添加到先前内部状态的新输入数据和先前输出数据的部分,
c .应该用于确定输出并与当前内部状态一起传输到下一个单元的当前内部状态的部分。
通过将具有已知历史输入的模型拟合和校准到已知输出标签或标签值来确定这些分数。当然,这是对 LSTMs 非常简单的概述。关于更详细的解释,建议读者阅读参考文献[2]。
所有这些都带来了额外的计算成本。因此,LSTMs 在计算上是昂贵的,并且在具有足够 GPU 核心的机器上运行这些模型将是有帮助的。
数据和基础网络描述
在这项研究的第一部分,我将首先使用一个基本的 LSTM 网络,如下图 1 所示,使用前 3 个月的价格数据作为输入,预测未来 3 天的 SPY 指数的平均每日回报,所有这些都基于调整后的收盘价。整个网络是用 Keras 库和 Python 3.7 编写的。
这项工作使用的输入数据是从雅虎下载的从 1998 年 1 月 2 日到 2019 年 12 月 19 日的 SPY 指数的每日价格回报。前 90%的历史数据用于训练网络,后 10%的数据用于验证。
通过使用 StandardScaler()拟合和转换训练集,训练集的返回数据被转换为 z 分数。来自 sklearn.preprocessing,的 fit_transform() 函数,然后将它们用作模型的输入。
使用根据训练集数据确定的拟合平均值和标准偏差来转换验证集的返回数据。

Figure 1. LSTM Base Structure
基础结构有两个 LSTM 层。两层的电池状态和电池输出使用 64 个节点表示。两层的初始单元状态(状态 1 0 和状态 2 0)和单元输出(输出 1 0 和输出 2 0)被设置为由 Keras 提供的默认选项。
第 1 层将过去 60 天的 fit 转换的历史价格回报数据作为输入,如前所述。
来自层 1 的输出被馈送到具有 20%下降的下降层,以减少过度拟合和对该层内仅少数节点的过度依赖。
来自漏失层的输出被馈送到一个批量标准化层,以避免协变偏移影响模型。
批量标准化也有轻微的正则化效果,这有助于减少过度拟合。来自 LSTM 层 1 的输出被馈送到 LSTM 层 2,随后是另一个丢弃和批量标准化层。
来自第二 LSTM 层的最后一个单元的输出随后被馈送到具有 32 个节点的密集层中,其后是整流线性(ReLu)激活函数,已知该函数可以提高学习速率。
然后,来自该密集层的输出被馈送到只有一个节点的最终输出层,随后是提供 0 和 1 之间的输出值的 Sigmoid 激活。
将 Sigmoid 函数的输出与真实输出进行比较,并使用“二元交叉熵”计算模型损失。真实的输出是接下来 3 天的平均每日回报的二进制版本,如果回报为正,输出设置为 1,如果回报为负,输出设置为 0。
Keras 自动执行反向传播,以尽量减少训练数据的损失,并相应地确定权重。具有默认学习率 0.001 和学习率衰减 1e-6 的 Adam 优化器用于拟合模型。该模型运行 100 个时期,批次大小为 128。
基础网络结果
LSTM 网络使用反向传播来获得最佳权重。整个过程在本质上是随机的。这在估计的权重和预测的输出中带来了一些随机性。
用于初始化单元状态和权重矩阵的随机权重的选择也引入了随机性。输出的随机性是神经网络的缺点之一,当模型的拟合损失较低时(或当拟合精度较高时),输出的随机性通常会降低。
在这项研究中,为了消除随机性并消除非确定性部分,相同的模型运行了 10 次。来自 10 次运行的输出的平均值和偏差用于评估拟合模型的质量和有用性。

Epoch loss

Figure 2. Training set and Validation set loss vs. Epochs
图 2 显示了训练集(左图)和验证集(右图)的模型拟合的损失变化,该变化是训练的时期数的函数。
带有 Adam optimizer 的反向传播在减少带有训练集数据的拟合模型的损失方面做得很好。然而,当将拟合的模型与验证数据一起用于验证时,我们可以看到损失随着时期的数量而增加,并且显著高于用训练集观察到的损失。
由于损失没有最小化,我们还可以看到 10 个不同模型运行之间的损失有相当大的变化,达到大约 10%的标准偏差。所有这些都表明,模型很可能过度适应了定型数据,因此没有很好地处理验证集。
但是,请记住,对于信号产生,我们不一定需要模型具有低水平的损耗或高水平的精度。如果模型可以产生准确率超过 50%的好信号,如果正确信号的收益高于错误信号的亏损,那么它仍然是有利可图的。
所用的 LSTM 模型基本上是一个二元分类器,它输出一个介于 0 和 1 之间的值,然后分别对卖出信号(负)和买入信号(正)离散化为 0 或 1。
这意味着我们可以查看其他指标,如精确度、召回率(敏感度)和 f1 得分,来评估模型的性能。精度表示模型预测的买入信号中实际上是真实买入信号的部分。回忆量化了模型预测真实购买信号的有效性。
换句话说,它表示模型正确预测的真实买入信号的比例。F1score 是精确度和召回率之间的调和平均值,将这两个指标合并为一个指标。如果这三个指标都大于 0.5,则该模型有可能盈利。
图 3 给出了显示训练集和验证集的所有三个度量的变化的图。

Figure 3. Precision, recall and f1score for the training and validation set
所有三个度量都随着训练集数据的历元数而增加,并且在 100 个历元的训练中大于 0.9。然而,当使用验证数据进行测试时,这些指标明显较低,并且似乎在大约 50 个时期时达到平稳状态。然而,平均平台水平高于 0.5,表明该模型可能仍然有用。
除了我们已经在使用的间谍价格数据输入之外,让我们通过添加更多的输入来尝试改进模型预测。下面给出了我们将用于进一步研究的输入列表:
a .仅间谍价格数据(基本情况)
b .间谍价格和数量数据
c .间谍价格和数量以及历史波动数据
d .间谍和 TLT 价格和数量数据
交易量数据的转换方法与价格数据的转换方法相同,即首先根据每日收盘价转换成百分比变化值,然后使用 sklearn 的 StandardScaler() 函数进行拟合和转换。
使用根据训练数据确定的拟合平均值和偏差来转换体积的验证数据。使用上月价格的标准差计算历史波动率。在将历史波动率值用作模型的输入之前,使用上述拟合和转换方法将其转换为 z 得分。
美国国债在历史上一直是避险期间的避风港,投资者通常会将资金从股市撤出,投入债券市场。因此,至少在过去几十年里,美国国债与美国股票指数呈负相关。
与美国长期国债的负相关性更强。因此,作为最后一个案例,我添加了 20 年以上长期国债 ETF——TLT——的价格和交易量数据作为额外的输入(案例 d ),看看我们是否能获得一个更好的预测模型。
我们将查看上述所有四种情况的验证数据集损失和 f1 得分,并进行比较,以了解添加额外输入是否有帮助。此外,我们还将对上述四种情况下的受试者工作特征(ROC)曲线下面积(也称为 AUC)进行比较。
ROC 曲线通常用于通过绘制不同阈值水平下的收益与成本来选择最优的二元分类器系统。收益等于模型正确预测的阳性比例(真阳性率或灵敏度),成本等于模型错误预测的阴性比例(假阳性率或 1-特异性)。
随机二元分类器将给出 0.5 的 ROC 曲线下的面积。因此,为了让模型比随机分类器更好,我们希望 ROC 曲线下的面积大于 0.5——越高越好。
图 4 给出了显示 100 个时期后上述四种情况的验证数据集损失、f1 得分和 ROC-AUC 的均值和标准差(来自 10 次模型运行)的图。
除了价格数据之外,包括交易量数据导致 f1 得分和 ROC-AUC 得分非常微小的增加,代价是损失略高。ROC-AUC 仍然低于 0.5,使得该模型仍然不是非常有用。除了交易量数据之外,增加历史波动性数据不会改变 ROC-AUC 平均值。相反,它导致 f1 分数略微下降,使模型略微变差。
由于历史波动性是从价格数据中得出的,除了价格数据已经提供的信息之外,添加这些数据可能并不能真正提供任何额外的信息。如果使用隐含波动率,而不是使用历史波动率,性能可能会更好。
然而,这项工作中没有研究这一点。包括 TLT 的价格和数量数据确实导致了 f1 评分和 ROC-AUC 值的增加。ROC-AUC 值等于或高于 0.5,即使包括一个可能变异的标准偏差。
当用作输入时,损失也低于单独使用 SPY 价格和数量数据时的损失。

Figure 4. Loss, F1 score and AUC for the validation data set
上述所有四种情况的拟合模型与验证数据集一起使用,以每天生成买入/卖出信号,然后用于做多或做空间谍指数 ETF。
图 5 比较了买卖信号产生的股票曲线的夏普比率。假设交易的每日收盘价和佣金为零。用于比较的基准是 SPY 指数值(调整后的收盘价)。
从图中可以看出,仅使用价格从 LSTM 网络生成买入/卖出信号会导致性能下降,即使在包括 10 次模型运行的偏差后也是如此。
包括交易量或历史波动性或 TLT 价格/交易量数据可以极大地提高性能。但是,从统计上看,这三种情况并没有太大的区别。此外,从统计数据来看,夏普比率似乎并没有比基准更好。
接下来,我们将看看是否可以通过改变 LSTM 网络架构来提高模型性能。

Figure 5. Sharpe ratio comparison for four input cases
网络架构变化
有几种方法可以改变 LSTM 网络结构,包括但不限于,改变 LSTM 层的数量,改变代表单元状态和单元输出的节点数量,改变密集层及其节点的数量,改变 LSTM 层和/或密集层内的激活函数等。
我们将关注可能会显著影响网络性能的两个关键变化:
a)在现有的两个层之外添加一个额外的 LSTM 层
b)在每个 LSTM 层中使用三种不同的节点大小:32、64(当前)和 128。
我们将比较相同的三个关键指标——损失、f1 得分和 ROC-AUC——以及上一节中列出的最后两个案例的夏普比率,即作为输入的间谍价格/数量数据和作为输入的间谍/TLT 价格/数量数据。
图 6 显示了 50 个时期后,每个场景运行 10 个模型的关键指标的比较。增加一个额外的 LSTM 层不会明显改变验证数据丢失、f1 评分或 ROC-AUC 评分。
然而,减少每个 LSTM 层中的节点数量确实产生了巨大的影响。随着节点数量的增加,模型很可能会过度拟合数据,从而导致更高的损失。
随着节点的减少,损失显著减少,f1 得分显著增加,特别是当使用间谍/TLT 价格/交易量数据作为输入时。随着节点的减少,ROC-AUC 评分仅在 SPY/TLT 价格/交易量用作输入数据时有所改善。因此,从所有三个指标来看,具有 32 个节点且未添加额外层的 LSTM 网络是最佳配置。

Figure 6. Effect of an additional LSTM layer and LSTM node count on metrics
图 7 显示了根据使用这些不同的 LSTM 配置生成的权益曲线确定的夏普比率的比较。
当间谍和 TLT 数据都被用作输入时,夏普比率随着更少的节点而提高,当没有额外的层被添加到 LSTM 网络时,提高最高。
具有 32 个节点且没有添加额外层的配置再次看起来是最佳选择。

Figure 7. Effect of an additional LSTM layer and LSTM node count on Sharpe ratio
历史和未来期间变化
到目前为止所做的分析侧重于使用过去 3 个月的历史价格/交易量数据来预测未来 3 天的平均每日回报。
在这一节中,我们将研究如何改变这两个参数,看看是否可以进一步提高模型的可预测性。我们将了解三个不同的历史时期——30、60 和 90 个工作日——以及三个不同的未来时期——2、3 和 4 个工作日。
节点数量保持在 32 个。模型运行 50 个时期(因为所有的验证度量在大约 50 个时期后达到平稳状态),并且为每种情况运行 10 次这样的模拟,以确定所有度量的平均值和标准偏差。
图 8 显示了 50 个时期后验证数据的关键模型度量的曲线。ROC-AUC 评分随着更长的历史持续时间和更长的未来持续时间而改善,最高平均值接近 0.6。
然而,这也是以更高的损失为代价的。f1 得分似乎没有遵循任何可预测的趋势,但都在 0.6 以上,这很好。

Figure 8. Effect of a historical and future period variation on key model metrics
除了夏普比率之外,我们还将考察三个额外的回报指标-%最大提取额、%盈利和损益比率(盈利回报与亏损回报的比率)。
除了 90-3(历史时期-未来时期)的情况,所有其他情况下的夏普比率似乎与间谍买入并持有基准没有显著差异。
然而,最大提款百分比似乎比所有情况下的基准都好得多,90-3 是最好的情况。平均%收益率低于基准(90-3 组合是最好的),平均 PL 比率高于基准(90-3 也是最好的)。
总的来说,纵观所有四个回报指标,90-3 组合似乎是最佳选择。

Figure 9. Effect of a historical and future period variation on return metrics
我们现在将查看使用经过训练的 90-3 输入-输出周期组合、具有 32 个节点的双层 LSTM 网络生成的权益曲线,该网络将 SPY+TLT 价格和交易量数据作为输入,并生成买入/卖出信号。
这些信号被用于每日使用收盘价交易间谍指数 ETF,以生成一条权益曲线——所有这些都假设零佣金。
该模型运行 10 次,以说明 LSTM 网络的随机性质,并获得所生成曲线的标准化误差的估计值。
图 10 显示了生成的权益曲线与 SPY 基准的比较。从图中可以看出,即使考虑到预测结果中的标准化误差,该策略也确实提供了较高的回报。
验证数据集有大约 460 个交易日,基准收益率在此期间接近 22%。在同一时间段内,使用 LSTM 网络的策略预计回报率为 37.5%至 52.5%。

Figure 10. Equity curve for the best LSTM configuration
总结与结论
在这项研究中,我们研究了一种增强版的递归神经网络,称为 LSTM 网络,用于根据历史价格和交易量数据预测间谍股票指数价格。
我们最初从一个基础网络开始,只有间谍价格作为输入数据,与简单的买入并持有策略相比,我们的表现更差。通过添加与交易量和美国长期国债价格/交易量数据相关的额外输入数据,可预测性大大提高。
通过减少节点数量(防止过拟合)以及改变历史输入周期和预测的未来输出周期,网络的性能得到了进一步“优化”和提高。
因此,要回答本文标题中提出的问题:是的,LSTMs 可以用来预测未来的价格变动,但是,很少有如下所述的警告。
不必预先选择和计算几个技术指标并作为输入输入到模型中的优点至少部分地被取消,因为必须输入 LSTM 网络定义其架构所需的几个附加参数,例如:
- LSTM 层数,
- 每层中的节点数量,
- 输入序列的长度,
- 致密层的数量和尺寸,
- 激活类型等
-所有这些都被称为超参数。
因此,选择最佳架构需要一定量的超参数调整。
正如我们在本研究中在某种程度上所做的那样,找到一个最佳的架构可能并不总是保证将来有更好的信号,特别是如果有一个以前没有看到并从训练集中学习到的制度转变。
防止这种情况发生的一种方法是改变网络的结构,并使用适用于当前体制的最新数据不断对其进行训练,并使用新训练的网络进行预测。
这将需要大量的计算能力!
-
LSTM 网络使用反向传播来拟合模型,反向传播是一种随机优化过程,需要对权重和初始细胞状态进行随机初始猜测。
使用某种形式的随机梯度下降过程进行优化,该过程需要定义额外的超参数,例如:学习率、学习率衰减、β1、β2、正则化参数、退出百分比等。
因此,基于初始化的权重和拟合模型之前选择的超参数集,拟合的模型权重可能不同。
由于使用测试数据确定的模型损失与来自训练数据的损失相比通常总是较高,因此在同一模型的不同运行之间,估计权重的可变性也可能较高。
因此,该模型应运行几次,以平均出模型的非确定性部分,并得出预测权重、输出和回报指标的平均估计值。
这使得提供买入/卖出建议非常耗时,并且需要更高的计算能力,尤其是在用于高频算法交易时。
-
几次模型运行的预测平均结果的标准误差与运行次数的平方根成反比。因此,增加同一个模型的模拟次数应该有助于获得更具确定性的输出。
通过使用来自 numpy.random 或 tensorflow.set_random_seed 的随机种子,也可以部分减轻由 LSTM 网络做出的预测中的随机性。
这两者的影响并未作为本研究的一部分进行调查,但可能有助于进一步研究。
如果你想学习算法交易的各个方面,那就去看看算法交易(EPAT) 的高管课程。课程涵盖统计学&计量经济学、金融计算&技术和算法&定量交易等培训模块。EPAT 教你在算法交易中建立一个有前途的职业所需的技能。
免责声明:就我们学生所知,本项目中的信息是真实和完整的。所有推荐均由学生或 QuantInsti提供,不做任何保证。学生和 quantin STI否认对这些信息的使用负有任何责任。本项目中提供的所有内容仅供参考,我们不保证通过使用该指南您将获得一定的利润。T15】**
参考文献
- 前景理论:风险下的决策分析,丹尼尔·卡内曼和阿莫斯·特沃斯基,《计量经济学》,第 47 卷,第 2 期,第 263-292 页
- https://colah.github.io/posts/2015-08-Understanding-LSTMs/
文件在下载
- 基于 Python 脚本的网络
- Splyce 电子竞技俱乐部
- TLT
机器学习及其在外汇市场中的应用——第二部分——工作模型
原文:https://blog.quantinsti.com/machine-learning-application-forex-markets-part-2/
T2】
在我们关于机器学习的上一篇文章中,我们使用 r 中的 SVM 算法推导出了外汇策略的规则。在这篇文章中,我们更进一步,演示了如何回测我们的发现。
概括一下上一篇文章,我们使用抛物线 SAR 和 MACD 直方图作为机器学习的指标。抛物线 SAR 指标跟随价格,因为趋势随着时间延伸。当价格上涨时,SAR 低于价格,当价格下跌时,SAR 高于价格。当价格趋势反转并突破它的上方或下方时,SAR 停止并反转。
MACD 振荡器由 MACD 线、信号线和 MACD 直方图组成。MACD 线是 12 天指数移动平均线(EMA)减去 26 天 EMA。MACD 信号线是 MACD 线的 9 日均线。MACD 直方图表示 MACD 线和 MACD 信号线之间的差异。当 MACD 线高于其信号线时,直方图为正,当 MACD 线低于其信号线时,直方图为负。
下面的欧元/美元价格序列图表显示抛物线 SAR 以蓝色绘制,MACD 线、MACD 信号线和 MACD 柱状图位于欧元/美元价格序列下方。

我们的目的是在 MACD 线交叉点和抛物线 SAR 反转点周围定位。当抛物线 SAR 给出买入信号,MACD 线向上交叉时,我们买入。当抛物线 SAR 给出卖出信号,MACD 线向下交叉时,我们卖出。

选择指标后,我们对欧元/美元数据运行 SVM 算法,得到如上图所示的曲线。看看 SVM 的预测,我们现在制定规则,并对它们进行回溯测试,看看我们策略的表现。
空头规则=(价格–SAR)< 0.0010 & MACD histogram < 0.0010 Long rule = (Price – SAR) >-0.0050 & MACD 直方图>-0.0010
我们已经使用了迈克尔·卡普勒的系统投资者工具箱来回测我们的 r 模型。我们首先加载工具箱和必要的库。

接下来,我们创建一个新环境,并使用 getSymbols 函数加载历史 EUR/USD 数据。

我们将对照简单的“买入并持有”模型来检验我们基于规则的模型的性能。为此,我们首先创建了一个“买入并持有”模型。

我们的下一步是计算基于规则的模型的指标。

我们在这里运行两个模型,“多头空头”模型,另一个“多头空头”模型使用止损和止盈。首先,我们创建一个没有止损和止盈的多空模型。

接下来,我们设置止盈和止损水平,并使用这些水平创建一个多空模型。我们称这个模型为“止损.止损.获利”模型。

现在让我们运行所有三个模型,并检查它们的相对性能。


正如你可以看到的,基于规则的策略有一个平滑的权益曲线,并给出了一个更好的 CAGR 5.97 比简单的“购买持有”模型 CAGR 1.18。我们策略的最大减仓是 13.92,相比之下“买入持有”策略的最大减仓是 30.11。你可以调整指标设置,改变多空规则或止损止盈水平,进一步完善模型。
一旦你理解了机器学习算法,这些可以成为制定盈利策略的伟大工具。要了解更多关于机器学习的信息,您可以观看我们最新的网络研讨会“交易中的机器学习”,该研讨会由 QuantInsti 主办,由我们的嘉宾演讲者 Inovance 首席执行官/联合创始人 Tad Slaff 主持。
QuantInsti 开展的算法交易(EPAT)课程中的高管课程涵盖了机器学习。要了解更多关于 EPAT 的信息,请查看 EPAT 课程页面,或随时联系我们在 contact@quantinsti.com 的团队,询问关于 EPAT 的问题。
下载 R 代码
机器学习在外汇市场中的应用——工作模型
原文:https://blog.quantinsti.com/machine-learning-application-forex-markets-working-models/
由米林德·帕拉德卡
在上一篇文章中,我们简要介绍了机器学习(ML)的概念。在这篇文章中,我们将解释更多的 ML 术语,然后使用 r 中的 SVM 算法为一个外汇策略制定规则
利用机器学习进行交易,我们从历史数据(股价/外汇数据)入手,加入指标,用 R/Python/Java 建立模型。然后,我们选择正确的机器学习算法来进行预测。
T3T5
在了解如何在外汇市场使用机器学习之前,我们先来看一些与 ML 相关的术语。
机器学习算法—有许多 ML 算法(算法列表)被设计用于学习和预测数据。ML 算法既可以用来预测类别(解决分类问题),也可以用来预测方向和大小(机器学习回归问题)。
示例:
- 根据公司过去的季度业绩,预测 3 个月后股票的价格。
- 预测美联储是否会提高基准利率。
指标/特征—指标可以包括技术指标(均线、波段、MACD 等。),基本面指标,或者/和宏观经济指标。
示例 1 -相对强弱指标(14),价格-均线(50)和 CCI(30)。我们可以使用这三个指标,来建立我们的模型,然后使用适当的 ML 算法来预测未来值。
示例 2 -相对强弱指数(14),相对强弱指数(5),相对强弱指数(10),价格-SMA(50),价格-SMA(10),CCI(30),CCI(15),CCI(5)
在本例中,我们选择了 8 个指标。其中一些指标可能与我们的模型无关。为了选择正确的指标子集,我们利用特征选择技术。
特征选择–这是选择相关特征子集用于模型的过程。特征选择技术分为三大类:过滤方法、基于包装的方法和嵌入方法。为了选择正确的子集,我们基本上在某种组合中使用 ML 算法。所选择的特征在机器学习中被称为预测器。

支持向量机(SVM)–SVM 是一种著名的监督机器学习算法,用于解决分类和回归问题。
一个 SVM 算法作用于给定的标记数据点,并通过边界或超平面将它们分开。SVM 试图最大化分离超平面周围的余量。支持向量是最接近决策面的数据点。

在 R 中使用 SVM 的外汇策略的框架规则-鉴于我们对特征和 SVM 的理解,让我们从 R 中的代码开始。我们选择了 1 小时时间框架可追溯到 2010 年的欧元/美元货币对。这里使用的指示器是 MACD (12,26,9) 和抛物线 SAR ,默认设置为(0.02,0.2)。
首先,我们在 R 中加载必要的库,然后读取 EUR/USD 数据。然后,我们使用“TTR”包中提供的各自的函数来计算 MACD 和抛物线 SAR。为了计算趋势,我们从每个数据点的 SAR 值中减去收盘欧元/美元价格。我们滞后指标值,以避免前瞻偏差。我们还根据价格变化创建了一个 Up/down 类。

此后,我们将指标和类合并到一个数据框架中,称为模型数据。然后将模型数据分为训练数据和测试数据。

然后,我们使用“e1071”软件包中的 SVM 函数来训练数据。我们使用预测函数进行预测,并绘制模式。我们在这里获得了 53%的准确率。

从图中我们可以看到两个不同的区域,上方较大的红色区域是算法进行短期预测的地方,下方较小的蓝色区域是算法进行长期预测的地方。

SAR 指标落后于价格,因为趋势随着时间的推移而延伸。当价格上涨时,SAR 低于价格,当价格下跌时,SAR 高于价格。当价格趋势反转并突破它的上方或下方时,SAR 停止并反转。我们对价格和 SAR 的交叉感兴趣,因此在代码中将趋势度量作为价格和 SAR 之间的差异。类似地,我们使用 MACD 直方图值,这是 MACD 线和信号线值之间的差异。
看着这个图,我们设计了两个规则,并在测试数据上测试它们。短线法则=(价格-SAR)>-0.0025 &(价格-SAR)< 0.0100 & MACD >-0.0010 & MACD< 0.0010 Long rule = (Price–SAR) >-0.0150 &(价格-SAR)< -0.0050 & MACD >-0.0005

我们的短线交易准确率为 54%,长线交易准确率为 50%。SVM 算法在这里似乎做得很好。我们在这一点上停下来,在我们下一篇关于机器学习的文章中,我们将看到像上面设计的框架规则如何被编码和回溯测试,以检查交易策略的可行性。
下一步
QuantInsti 开展的算法交易(EPAT)课程中的高管课程涵盖了机器学习。要了解更多关于 EPAT 的信息,请查看 EPAT 课程页面或随时联系我们在contact@quantinsti.com的团队,咨询关于 EPAT 的问题。
在本系列的下一篇文章中,我们将更进一步,演示如何回测我们的发现。因此,请坐下来享受'机器学习及其在外汇市场的应用的第二部分。
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
可下载内容
机器学习基础:组件、应用、资源等
机器学习已经成为当今的热门话题,世界各地的企业家都转向机器学习来进行商业运营。机器学习已经取得了进步,它甚至可以在没有明确编程的情况下预测结果。
这不仅仅是它,当谈到机器学习在交易中的应用时,还有很多。通过这个博客,你将了解机器学习的所有基础知识,以及如何开始学习机器学习,学习资源,机器学习的应用等等!
深入了解这个有趣的博客,它涵盖了:
- 什么是机器学习?
- 机器学习的例子
- 机器学习的历史
- 机器学习的重要性
- 机器学习的组件
- 机器学习分类
- 机器学习和深度学习的区别
- 学习机器学习的先决条件
- 用于机器学习的 Python 库
- 机器学习中常用的术语
- 机器学习在交易中的应用
- 学习机器学习的资源
- 机器学习的未来
什么是机器学习?
顾名思义,机器学习为机器提供了基于经验、观察和分析给定数据集内的模式进行自主学习的能力,而无需显式编程。
当我们为某个特定的目的编写程序或代码时,我们实际上是在编写一组明确的指令,机器将会遵循这些指令。
而在机器学习中,我们输入一个数据集,机器通过识别和分析数据集中的模式来学习。然后,机器将根据其观察和从数据集中的学习自主做出决策。
机器学习的例子
虽然有很多机器学习的例子,但我们在这里只涉及其中的几个。
- Facebook:例如,想想 Facebook 的面部识别 ⁽ ⁾ 算法,它会在你上传照片时提示你给照片加标签。
- Alexa、Cortana 和其他语音助手:另一个例子是使用机器学习来识别和服务用户请求的语音助手。
- 特斯拉汽车:另一个例子是特斯拉的自动驾驶 ⁽ ⁾ 功能。
现在让我们看一个“鸟类物种识别学习”问题的例子。这个例子解释了模型的任务、模型的性能测量以及准确结果所需的训练经验:
- 机器学习模型的任务:对图像中的鸟类种类进行识别和分类
- 性能测量:正确分类的鸟类物种的百分比
- 机器学习模型的训练经验:在给定分类的鸟类物种数据集上训练
因此,机器学习模型将根据机器学习模型的性能测量和所需的训练经验来学习任务。
机器学习的历史
机器学习并不是最近的现象。事实上,神经网络最早是在 1943 年 ⁽ ⁾ 引入的!
虽然在早期,由于计算成本高,机器学习的进展有些缓慢。高昂的计算成本使得这个领域只有大型学术机构或跨国公司才能进入。此外,数据本身很难满足公司的需求。
但是随着互联网的出现,我们现在每天都在产生万亿次的数据 ⁽⁴⁾ !
再加上计算成本的降低,我们发现机器学习不仅仅是一个可行的提议 ⁽⁵⁾ 。
机器学习历史上一些值得注意的事件是:
- 1950 年——这是“艾伦·图灵” ⁽⁶⁾ 第一次创造了一个测试,以检验一台机器是否能欺骗人类,让人类相信它在和一台机器说话。
- 1952 年——第一个计算机学习程序,一个跳棋游戏,是由亚瑟·塞缪尔编写的。
- 1957 年,弗兰克·罗森布拉特发明了第一个计算机神经网络,它模拟了人类大脑的思维过程。
- 1967 年——最近邻算法写成。
- 1979 年 -加州斯坦福大学的学生发明了斯坦福小车,它可以自己导航和躲避障碍物。
- 1997 年——IBM 的深蓝击败国际象棋世界冠军。
- 2002——一个名为 Torch 的机器学习软件库首次发布。
- 2016——谷歌 DeepMind 开发的 AlphaGo 算法在中国棋盘游戏围棋比赛中,成功拿下五局。
这些事件可以表示为:

Timeline of machine learning
机器学习的重要性
机器学习在企业领域扮演着重要的 ⁽⁷⁾ 角色,因为它使企业家能够最大限度地减少手工劳动。机器学习模型在人类的帮助下学习,但最终,机器会学习并接管学习的任务。
尽管需要最低程度的干预来确保不会出现“与机器相关的”故障或更新输入的数据。
如今,像谷歌、亚马逊、脸书、特斯拉等领先公司都在有效地利用这些技术。因此,机器学习被证明成为运营和功能的核心部分。
此外,有大量的使用案例可以应用机器学习来削减成本,减轻风险,提高包括风险管理在内的整体生活质量。此外,全球机器学习(ML)市场预计将增长 ⁽⁸⁾ ,从 2022 年的 211.7 亿美元增长到 2029 年的 2099.1 亿美元,预测期内的复合年增长率为 38.8%。
机器学习的组件
机器学习算法有数万种,每年都有数百种新算法被开发出来。
每个机器学习算法都有三个组成部分:
- 表示:这暗示了如何表示知识。示例包括决策树、规则集、实例、图形模型、神经网络、支持向量机、模型集成等。
- 评估:这是评估候选方案(假设)的方式。示例包括准确性、预测和召回、平方误差、可能性、后验概率、成本、利润、熵 k-L 散度等。
- 优化:最后但并非最不重要的,优化是候选程序生成的方式,被称为搜索过程。例如,组合优化、凸优化和约束优化。
所有的机器学习算法都是这三个部分的组合,是理解所有算法的框架。
机器学习分类
机器学习算法可以分为:
让我们更深入地研究一下这些机器学习基础算法。
监督机器学习算法
在这种类型的算法中,训练机器的数据集由标记数据组成,或者简单地说,由输入参数和所需输出组成。
让我们以前面的面部识别为例,一旦我们识别出照片中的人,我们将尝试将他们分类为婴儿、青少年或成人。
在这里,婴儿、青少年和成人将是我们的标签,我们的训练数据集已经根据某些参数被分类到给定的标签中,通过这些参数,机器将学习这些特征和模式,并根据从这些训练数据中的学习对一些新的输入数据进行分类。
监督机器学习算法可以大致分为两种类型的算法;分类和回归。
分类算法
顾名思义,这些算法用于将数据分类到预定义的类别或标签中。我们将讨论最常用的分类算法之一,称为 K-最近邻(KNN)分类算法。
回归机器学习算法
这些算法用于确定两个或多个变量之间的数学关系以及变量之间的依赖程度。这些可用于基于两个或更多变量的相互依赖性来预测输出。
例如,一种产品价格的上涨会减少其消费量,这意味着,在这种情况下,消费量将取决于该产品的价格。
在这里,消费量将被称为因变量,产品价格将被称为自变量。消费金额对产品价格的依赖程度将帮助我们根据产品价格的变化预测消费金额的未来价值。
无监督机器学习算法
与监督学习算法不同,在监督学习算法中,我们处理带标签的数据进行训练,对于无监督机器学习算法,训练数据将是无标签的。根据变量之间的相似性将数据聚类成特定的组。
一些无监督的机器学习算法是 K-均值聚类和神经网络。
一个简单的例子是,给定足球运动员的数据,我们将使用 K-means 聚类,并根据他们的相似性来标记他们。因此,这些聚类可以基于前锋对任意球或成功铲球得分的偏好,即使算法一开始没有给出预定义的标签。
k-均值聚类对那些认为不同资产之间可能存在表面上看不到的相似性的交易者是有益的。
虽然我们在无监督机器学习算法中提到了神经网络,但可以争论的是,它们既可以用于监督学习算法,也可以用于无监督学习算法。人工神经网络和递归神经网络也属于无监督机器学习算法。
强化机器学习算法
强化学习是一种机器学习,在这种学习中,机器需要确定特定上下文中的理想行为,以使其回报最大化。
它的工作原理是奖惩原则,也就是说,对于机器做出的任何决定,它要么受到奖励,要么受到惩罚。因此,它将理解决定是否正确。
这就是机器将如何学习采取正确的决策,以实现长期回报最大化。
对于强化算法,机器可以被调整和编程,以更加关注长期回报或短期回报。当机器处于一个特定的状态,并且必须为下一个状态采取行动以实现奖励时,这个过程被称为马尔可夫决策过程。
机器学习和深度学习的区别
机器学习模型缺乏识别错误的机制,在这种情况下,程序员需要介入来调整模型以做出更准确的决策,而深度学习模型可以识别不准确的决策,并在没有人工干预的情况下自行纠正模型。
但要做到这一点,深度学习模型需要大量的数据和信息,不像机器学习模型。
学习机器学习的先决条件
学习机器学习有一些先决条件,没有这些先决条件,人们就会失去继续学习机器学习所需的重要概念。这些是:
统计概念
在机器学习中,统计概念对于从数据中创建模型至关重要。方差分析和假设检验等统计数据对于构建算法至关重要。
概率
概率有助于预测未来的后果,机器学习中的大多数算法都是基于不确定的条件,需要可靠的决策。
数据建模
数据建模能够识别底层数据结构,找出模式并填补数据不存在的地方之间的空白。
编程技巧
我们都知道,机器学习主要依赖于算法,这意味着一个人应该掌握至少一种编程语言的良好知识。Python 被认为是一种容易掌握的语言,并且被大多数 quants 使用。
用于机器学习的 Python 库
Python 库有助于消除从头编写代码的需要。他们在开发机器学习模型方面发挥着至关重要的作用,因为他们需要算法。下面让我们来看看一些最受欢迎的图书馆。
Scikit-learn
它是一个基于 SciPy 库构建的 Python 机器学习库,由包括分类、聚类和回归在内的各种算法组成,可以与 NumPy 和 SciPy 等其他 Python 库一起用于科学和数值计算。
它的一些类和函数是 sklearn.cluster、sklearn.datasets、sklearn.ensemble、sklearn.mixture 等。
TensorFlow
TensorFlow 是一个开源软件库,用于高性能数值计算和机器学习应用程序,如神经网络。它允许跨各种平台(如 CPU、GPU、TPU 等)轻松部署计算。由于其灵活的架构。在这里了解如何安装 TensorFlow GPU。
Keras
Keras 是一个深度学习库,用于开发神经网络和其他深度学习模型。它可以建立在 TensorFlow、Microsoft Cognitive Toolkit 或 Theano 之上,并专注于模块化和可扩展。
机器学习中的常用术语
这里有一些机器学习基础术语,在你开始机器学习算法的旅程时会有所帮助。
偏见
如果机器学习模型的可预测性水平高,则称其具有低偏差。换句话说,它在处理数据集时犯的错误更少。
当我们必须对同一问题陈述比较两种机器学习算法时,偏差起着重要的作用。
交叉验证偏差
机器学习中的交叉验证是一种提供机器学习模型性能的精确测量的技术。这种表现暗示了你对未来在没有任何人类帮助的情况下使用模型的期望。
简而言之,交叉验证偏差发现机器学习模型是否正确地学习了任务。
机器学习模型的应用是从现有数据中学习,并使用这些知识来预测未来的未知事件。机器学习模型中的交叉验证需要在现场交易之前彻底完成,以便不会出现意外错误。
欠拟合
如果一个机器学习模型不能准确预测,那么我们说这个模型不适合。这可能是由于各种原因,包括没有为预测选择正确的特征,或者只是问题陈述对于所选择的机器学习算法来说太复杂。
过度拟合
在机器学习和统计学中,当模型与数据拟合得太好时,或者简单地说,当模型太复杂时,就会发生过度拟合。过度拟合模型学习训练数据中的细节和噪声,以至于对模型在新数据/测试数据上的性能产生负面影响。

Overfitting
过拟合问题可以通过减少特征/输入的数量或增加训练样本的数量来解决,以使机器学习算法更加通用。解决过度拟合问题的更常见的方法是正则化。
这些是我们在《机器学习基础》中讨论过的几个术语。上面提到了大部分流行的机器学习算法。
机器学习在交易中的应用
机器学习应用于各种服务。机器学习在企业领域发挥着重要作用,因为它使企业家能够理解客户行为和业务运作行为。
目前,几乎每个公共领域都由机器学习应用提供动力。仅举几个例子,医疗保健、搜索引擎、数字营销和教育是主要受益者。
让我们具体看看,机器学习系统涵盖了哪些所有服务。

Applications of machine learning
学习机器学习的资源
各种资源可用于学习机器学习概念。要学习从基础到高级、概念、术语、项目等等,你可以看看这些关于机器学习的博客。
让我们看看下面的一些其他资源。
课程
首先让我们来看看学习机器学习可以探索哪些课程。下面是一个列表:
学习路线中的课程涵盖了从简单到复杂的各种模型。
因此,无论是初学者还是希望进入下一个高级阶段的专家,这条学习路线都适合所有人。
通过这些课程,您将学到:
- 调谐超参数
- 梯度推进
- 集成方法
- 构建稳健预测模型的先进技术
- 在交易中使用无监督学习来增强算法
该课程非常适合那些希望开始使用 Python 进行机器学习的人。通过这个课程,你将得到一个关于创建交易的机器学习算法的循序渐进的指导。
还可以评估机器学习算法的性能,用 Quantra 的集成学习进行回测,纸上交易和现场交易。
录像
欧内斯特·陈博士的《交易的机器学习》
在介绍视频之前,让我们先了解一下陈博士。
陈博士是算法和量化交易领域的全球知名人士。他是 QTS 资本管理有限责任公司的管理成员。此外,自 1997 年以来,他曾在多家投资银行(摩根士丹利、瑞士瑞信银行、Maple)和对冲基金(Mapleridge、Millennium Partners、MANE)工作。
在这个视频中,欧内斯特·陈博士回答了 QuantInsti 为您带来的关于机器学习交易的一些最常见的问题。
交易者的机器学习:介绍
这个视频适合那些想知道什么是机器学习以及编程语言(Python,C++等)中的常规算法之间的区别的人。)和一个机器学习算法。
此外,这个视频包括现实世界中的机器学习(ML)算法的例子,使用机器学习的行业以及机器学习在交易中的实施和使用。
交易者的机器学习:术语
在这个视频中,我们讨论机器学习中的某些术语。他们正在训练和测试数据集。本视频还将帮助您了解机器学习任务的类型,即-
- 监督学习
- 无监督学习
- 强化学习
在本视频中,您将了解以下几点:
- 分类介绍
- 在各种领域中的应用,例如:
- 医疗诊断
- 欺诈检测
- 手写识别
- 客户细分
- 风险评估
- 电子商务网站使用的分类示例
- 它不限于文本和数字,甚至图像也可以分类
- 监督分类器算法
- 可以选择分类器算法,这取决于
- 训练数据的大小
- 特征集的独立性
- 系统速度
此外,本视频中介绍的分类器算法包括:
- k-最近邻算法(KNN)
- 使用决策树的随机森林
- 人工神经网络
- 朴素贝叶斯分类
书
此外,也是最后一点,有一些有用的书籍可以帮助你学习所有关于机器学习的知识。对于那些喜欢以学习为目的阅读的人来说,书籍是一个很好的学习来源。此外,那些想学习有更详细解释的概念的人可以选择书籍来学习。
机器学习的未来
机器学习是一种通用且强大的技术。机器学习的未来格外令人兴奋。
机器学习对于企业或组织来说可能是一个有争议的优点,因为目前由人工完成的任务在未来将完全由机器来完成。
根据⁽⁹⁾的报告,2021 年机器学习(ML)市场规模为 154.4 亿美元。在预测期内,市场规模预计将从 2022 年的 211.7 亿美元增长到 2029 年的 2099.1 亿美元,CAGR 为 38.8%。
参考书目
- Solomonoff,r . j .(1964 年 6 月)。“归纳推理的形式理论。第二部 ⁽ ⁰⁾ 。信息和控制。
- 汤姆·米切尔(1997) ⁽ ⁾ 。机器学习 ⁽ ⁾ 。纽约:麦格劳·希尔。
- 科尔特斯,科琳娜⁽⁾;弗拉基米尔·瓦普尼克(1995 年)。【支持向量网络】。机器学习 ⁽ ⁴⁾ 。
- Stuart J. Russell,Peter Norvig (2010)人工智能:现代方法 ⁽ ⁵⁾ ,第三版,普伦蒂斯霍尔。
结论
机器学习在各个领域都非常重要,它因为所有正确的原因而广受欢迎。通过了解先决条件并采用这些条件,人们可以使用机器学习。还有,机器学习的未来似乎一片光明。因此,了解著名的机器学习有几个好处。
从我们的机器学习简介课程开始你的机器学习世界之旅,成为使用机器学习算法的专家。
借助该领域的几项重要研究,本课程将帮助您了解不同的机器学习算法是如何在金融市场数据上实现的。
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
Python 中的机器学习分类策略
原文:https://blog.quantinsti.com/machine-learning-classification-strategy-python/
在你继续构建你的机器学习分类算法之前,有一个问题要问你。你知道泰斯拉和网飞有什么共同点吗?
两家公司的首席执行官都更愿意遵循古老的“首要原则”哲学。
第一性原理的哲学是什么?
简单来说,当面对一个困难的问题时,你会试着把它分解成更小的部分,然后从那里开始。
但是,为什么在一个关于机器学习分类模型的博客中会提到“第一原则”?
在我们用 python 建立分类模型之前,我们将从基础开始,这就是机器学习。让我们看看博客里为我们准备了什么:
机器学习简介
让我们来简单定义一下机器学习。机器学习为机器提供了基于过去的经验、观察和分析给定数据集中的模式来自主学习的能力,而无需显式编程。
为了分解它,早期的程序员使用显式编码机器应该做什么。以带动力转向的汽车为例。如果司机把方向盘转到右边,有一个程序告诉汽车把轮子转到右边。这会使汽车向右转。
当我们加入机器学习时会发生什么?
我们可以在车上安装一个摄像头和一些接近传感器,这将有助于程序“看到”车前的情况。而且我们会教机器检查车前是否有障碍物,如果没有,那就往前开。
这显然是一种过度简化,但这是制造“无人驾驶”汽车的首要原则之一。特斯拉、福特和宝马等公司正在使用机器学习和人工智能来完成所有这些任务。
如果你想知道更多关于机器学习的基础知识,一定要看看机器学习基础知识博客。
机器学习是如何在交易中实现的?
我们可以使用数据来创建机器学习模型,然后用它来预测未来,这些数据可能是 OHLC 或价格数据、基本面数据,或者是替代数据,如关于某项资产的推文和新闻数据。
当我们说预测未来时,我们是说机器学习模型将为我们提供信号,告诉我们是购买还是出售资产以增加我们的收益。当然,没有人是完美的,机器学习在准确预测未来之前还有很长的路要走。
因为如果可以的话,每个用它的人现在都是百万富翁了。然而,在交易领域,机器学习可以给你超越竞争对手的优势。
当谈到机器学习时,有不同类型的方法来解决问题。概括地说,你可以将机器学习模型分为三个不同的类别:
在下一节中,让我们尝试理解机器学习如何使用机器学习分类模型来帮助预测未来。
什么是机器学习中的分类算法?
人类本质上是喜欢对事物进行分类的生物。事实上,这是我们学习识别事物的方式之一。
想象一个婴儿正在试图理解他所看到的世界。
- 他看见他的父母,他们有两只手和两条腿。
- 但是有一次当他在一个花园里时,他也注意到一个有四条腿和一条尾巴的生物。
- 婴儿的妈妈说这个生物是一只狗。
- 然后婴儿的父亲展示了一张猫的照片,并说这是一种不同的生物。
- 现在这个婴儿能识别人类、猫和狗。
这是机器学习模型如何通过分类学习的简化版本。最初,我们为机器学习模型提供一些示例来训练模型。然后,我们通过给它一些例子作为测试来检查机器已经学习了多少。
有各种类型的机器学习模型来满足不同类型的分类任务。让我们在下一节检查几种类型的机器学习算法。
我们从无数可用的学习辅助工具中挑选了一些最好的。以下是排名前十的机器学习博客列表。
根据分类任务的机器学习中分类算法的类型
以下是基于不同分类的机器学习中的各种类型的分类算法。
二元分类
在这种类型的分类中,您只有两个类别可供分类。一个常见的例子就是垃圾邮件或者不是垃圾邮件,或者买或者不买。
多类分类
顾名思义,在这种分类任务中有两种以上的类。例如,模型必须分类为买入、持有和卖出。
不平衡分类
如果给你的数据中某一类的数据占多数,那么这就是一种不平衡分类任务。例如,如果采用 S&P500 的数据,任务是预测我们是否应该持有一年,我们会发现,由于 S&P500 每年都在增加,模型总是会说持有一年。
根据不同的任务,您可以选择不同的分类模型。事实上,看看交易书中的机器学习,我们已经解释了各种机器学习模型,包括 Python 中的分类。如果你想了解 Python 中不同类型的分类模型,可以在这里阅读。
现在让我们用 Python 建立一个分类模型,帮助我们决定是否购买一项资产。
在 Python 中实现分类
这里有一个简短的声明,你也可以用其他编程语言建立一个机器学习分类模型。但是在这里,我们将重点放在 Python 中的分类上,因为它的通用性和易用性。
虽然掌握 Python 需要一些时间,但由于从第一天起 Python 中各种库的支持,您可以理解代码及其功能。
如果没有这些库,您将不得不花时间编写各种函数来执行您想要的任务。但是有了这些库,你只需要写几行代码,任务就完成了。这里我们将使用“sk learn”Python 库来创建一个简单的分类模型。
我们将一边进行一边解释代码,您将会理解 Python 语言的简单性。
我们将使用支持向量分类器(SVC)在 S & P500 上实现一个机器学习分类算法。
SVC 是监督学习分类模型。一组训练数据被提供给机器学习分类算法,每个数据属于其中一个类别。
例如,类别可以是买入或卖出股票。分类算法基于训练数据建立模型,然后将测试数据分类到其中一个类别中。
步骤 1:导入库
在我们开始编码任何交易策略之前,我们必须导入必要的 Python 库。在我们的例子中,这些包括 sklearn 机器学习库。
此外,我们使用 pandas 库来存储和执行各种数据操作任务。最后,我们使用 matplotlib 和 seaborn 库来可视化数据。
机器学习分类算法
原文:https://blog.quantinsti.com/machine-learning-classification/
由克什蒂杰·马克瓦纳和 T2 主持
让我先问一个非常基本的问题。什么是机器学习?机器学习是教会计算机系统某些算法的过程,这些算法可以通过经验来改进自己。
一个非常专业的定义是,
“如果一个计算机程序在 T 上的性能,如 P 所测量的,随着经验的增加而提高,那么就说它从关于某个任务 T 和某个性能测量 P 的经验 E 中学习。”——汤姆·米切尔,1997 年
就像人类一样,该系统将能够执行简单的分类任务和复杂的数学计算,如回归。它包括建立用于分类或回归的数学模型。
为了‘训练’这些数学模型,你需要一组训练数据。这是系统在其上构建模型的数据集。本文将涵盖你所有的机器学习分类需求,从最基础的开始。
在这里,我们将谈论:
数学模型根据其训练数据分为两类——监督和非监督学习模型。

Fig. 1. Machine Learning Algorithms
监督学习
在构建监督学习模型时,所使用的训练数据包含所需的答案。这些要求的答案被称为标签。例如,你展示了一张狗的图片,并且也给它贴上了狗的标签。
因此,有了足够多的狗的照片,该算法将能够正确地对狗的图像进行分类。监督学习模型也可以用于预测连续数值,如某家公司的股票价格。这些模型被称为回归模型。
在这种情况下,标签将是股票过去的价格。所以算法会遵循这个趋势。一些流行的算法包括
- 线性回归
- 支持向量分类器
- 决策树
- 随机森林
无监督学习
在无监督学习中,顾名思义,用于训练的数据集不包含所需答案。相反,该算法使用诸如聚类和降维等技术来训练。
无监督学习的一个主要应用是异常检测。这种方法使用聚类算法来找出图形中的主要异常值。这些用于信用卡欺诈检测。
监督模型的类型
监督模型在标记数据集上训练。它可以是连续标签,也可以是分类标签。
回归模型
当一个人在处理连续值时使用回归,例如当给定位置、覆盖面积、历史价格等特征时的房价。流行的回归模型有:
- 线性回归
- 套索回归
- 里脊回归
分类模型
分类用于将数据分成多个类别,每个类别由一个标签表示。训练数据必须包含标签,并且必须对每个标签有足够的观察,以便模型的准确性是值得尊敬的。一些流行的分类模型包括:
- 支持向量分类器
- 决策树
- 随机森林分类器
也有各种评估方法来找出这些模型的准确性。我们将更详细地讨论这些模型、评估方法和一种称为超参数调整的技术来改进这些模型。
分类类型
根据数据集中存在的类的数量和级别,有三种分类类型。
二元分类
这种分类只有两类。通常,它们是布尔值- 1 或 0,真或假,高或低。可以使用这种分类的一些例子是在癌症检测或电子邮件垃圾邮件检测中,其中对于癌症和垃圾邮件,标签是肯定的或否定的,或者对于垃圾邮件检测,标签不是垃圾邮件。
让我们举一个例子。我们使用的是乳腺癌检测数据集,可以从这里下载。
k-最近邻算法:用 Python 实现的步骤
原文:https://blog.quantinsti.com/machine-learning-k-nearest-neighbors-knn-algorithm-python/
在这篇博客中,我们将向您概述 K-最近邻(KNN)算法,并了解使用 Python 中的 K-最近邻一步步实现交易策略。
本博客涵盖以下内容:
机器学习的使用越来越多
机器学习是人工智能中最流行的方法之一。在过去的十年里,机器学习已经成为我们生活中不可或缺的一部分。
它是在像识别人类笔迹这样简单的任务或像自动驾驶汽车这样复杂的任务中实现的。预计在几十年后,更加机械的重复性工作将会结束。
随着越来越多的数据变得可用,有很好的理由相信机器学习作为技术进步的必要元素将变得更加普遍。
ML 在许多关键行业产生了巨大的影响:金融服务、送货、市场营销和销售、医疗保健等等。不过这里我们就讨论一下机器学习在交易中的实现和用法。
关于 K-最近邻(KNN)
k-最近邻(KNN)是用于回归和分类问题的机器学习中最简单的算法之一。KNN 算法使用数据,并基于相似性度量(例如距离函数)对新数据点进行分类。
分类是通过对其邻居的多数投票来完成的。数据被分配给具有最近邻居的类。随着最近邻数量的增加,k 值的精确度可能会增加。
现在,让我们来了解一下在 Python 中创建交易策略时 K 近邻(KNN)的实现。
如果你不熟悉 Python 并且希望学习 Python,这本免费课程和免费书籍将对你有极大的帮助。
用 Python 实现 K 近邻(KNN)的步骤
步骤 1 - 导入库
我们将从导入在 Python 中实现 KNN 算法所需的必要的库开始。我们将导入 numpy 库进行科学计算。(你可以在这里了解 numpy ,在这里了解 matplotlib )。
接下来,我们将导入用于绘制图形的 matplotlib.pyplot 库。
我们将导入两个机器学习库:
- KNeighborsClassifier 来自 sklearn.neighbors 实现 k 近邻投票和
- accuracyscore 来自 sklearn.metrics 的准确度分类分数。
我们还将导入 fixyahoo_finance 包来从雅虎获取数据。
Python 中的机器学习逻辑回归:从理论到交易
原文:https://blog.quantinsti.com/machine-learning-logistic-regression-python/
在这篇博客文章中,我们将学习逻辑回归如何在交易的机器学习中工作,并将在 Python 中用逻辑回归来预测股票价格的运动。
任何机器学习任务可以大致分为两类:
- 预期的结果已经确定
- 预期结果尚未确定
第一个第一个数据由一个输入数据和带标签的输出组成,称为监督学习。第二种和方法,其中由没有标记响应的输入数据组成的数据集被称为无监督学习。还有另一种叫做强化学习的类别,试图对模型进行反馈以提高性能。
逻辑回归和线性回归
逻辑回归属于监督学习的范畴;它通过使用逻辑/sigmoid 函数估计概率来衡量分类因变量与一个或多个自变量之间的关系。尽管名为“逻辑回归”,但这并不用于任务是预测实值输出的机器学习回归问题。这是一个分类问题,用于在给定一组独立变量的情况下预测二元结果(1/0,-1/1,真/假)。
逻辑回归有点类似于线性回归或者我们可以说它是一个广义线性模型。在线性回归中,我们基于输入变量的加权和来预测实值输出' y' 。


线性回归的目的是估计模型系数 c,w 1 ,w 2 ,w 3 的值。w n 并以最小的平方误差拟合训练数据并预测输出 y
逻辑回归做同样的事情,但有一个额外的。与线性回归类似,逻辑回归模型计算输入变量的加权和,但它通过特殊的非线性函数(逻辑函数或 sigmoid 函数)运行结果,以产生输出 y。在这里,输出是二进制或 0/1 或-1/1 的形式。


sigmoid/logistic 函数由下式给出。
y = 1/1+e-xT3】
正如您在图表中看到的,这是一条 S 形曲线,当输入变量的值增加到 0 以上时,它越来越接近 1,当输入变量的值减少到 0 以下时,它越来越接近 0。当输入变量为 0 时,sigmoid 函数的输出为 0.5。

因此,如果输出大于 0.5,我们可以将结果分类为 1(或正),如果小于 0.5,我们可以将其分类为 0(或负)。
现在,让我们考虑预测股价运动的任务。如果明天的收盘价高于今天的收盘价,那么我们将买入该股票(1),否则我们将卖出它(-1)。如果输出是 0.7,那么我们可以说有 70%的几率明天的收盘价高于今天的收盘价,归类为 1。
现在,我们对逻辑回归和 sigmoid 函数有了一个基本的直觉。我们将学习如何在 Python 中实现逻辑回归,并使用上述条件预测股票价格的走势。
代码概述

导入库
我们将从导入必要的库开始。
# Data Manipulation
import numpy as np
import pandas as pd
# Technical Indicators
import talib as ta
# Plotting graphs
import matplotlib.pyplot as plt
# Machine learning
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
from sklearn.model_selection import cross_val_score
# Data fetching
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
导入数据
我们将导入从 2000 年 1 月 1 日到 2018 年 1 月 1 日的 Nifty 50 数据。使用'' pandas _ datareader【T3 ' '从雅虎财经导入数据。
df = pdr.get_data_yahoo('^NSEI', '2000-01-01', '2018-01-01')
df = df.dropna()
df = df.iloc[:,:4]
df.head()
让我们打印列的前五行“开仓”、“高位”、“低位”、“收盘”。

定义预测值/自变量
我们将使用 10 日均线、相关性、相对强弱指数(RSI)、昨日开盘价与今日开盘价之差、昨日收盘价与今日开盘价之差、开盘价、最高价、最低价、收盘价作为指标进行预测。
df['S_10'] = df['Close'].rolling(window=10).mean()
df['Corr'] = df['Close'].rolling(window=10).corr(df['S_10'])
df['RSI'] = ta.RSI(np.array(df['Close']), timeperiod =10)
df['Open-Close'] = df['Open'] - df['Close'].shift(1)
df['Open-Open'] = df['Open'] - df['Open'].shift(1)
df = df.dropna()
X = df.iloc[:,:9]
您可以打印并检查用于进行股票价格预测的所有预测变量。
定义目标/因变量
因变量与上面例子中讨论的相同。如果明天的收盘价高于今天的收盘价,那么我们将买入该股票(1),否则我们将卖出它(-1)。
y = np.where(df['Close'].shift(-1) > df['Close'],1,-1)
分割数据集
我们将把数据集分成训练数据集和测试数据集。我们将使用 70%的数据进行训练,剩下的 20%进行测试。为此,我们将创建一个分割变量,以 70-30 的比例分割数据帧。 X 列车和’Y列车为列车数据集。 X 测试和’Y测试是测试数据集。
split = int(0.7*len(df))
X_train, X_test, y_train, y_test = X[:split], X[split:], y[:split], y[split:]
用 Python 实例化逻辑回归
我们将使用' LogisticRegression '函数在 Python 中实例化逻辑回归,并使用' fit '函数在训练数据集上拟合模型。
model = LogisticRegression()
model = model.fit (X_train,y_train)
检查系数
pd.DataFrame(zip(X.columns, np.transpose(model.coef_)))

计算类别概率
我们将使用' predict_proba '函数计算测试数据集的类的概率。
probability = model.predict_proba(X_test)
print probability

预测类别标签
接下来,我们将使用测试数据集的预测函数来预测类标签。
probability = model.predict_proba(X_test)
print(probability)
predicted = model.predict(X_test)
如果您打印'预测的变量,您将观察到分类器预测的是 1,而变量'概率的第二列中的概率大于 0.5。当第二列中的概率小于 0.5 时,则分类器预测为-1。
评估模型
混淆矩阵
混淆矩阵用于描述分类模型在真实值已知的一组测试数据集上的性能。我们将使用'混淆矩阵'函数计算混淆矩阵。
print(metrics.confusion_matrix(y_test, predicted))

您可以将上述矩阵解释为:

分类报告
这是检验分类模型性能的另一种方法。
print(metrics.classification_report(y_test, predicted))

f1 分数告诉您与所有其他类别相比,分类器在对该特定类别中的数据点进行分类时的准确性。它是通过取精确度和召回率的调和平均值来计算的。支持度是该类中真实响应的样本数。
模型精度
我们将使用' score '函数计算测试数据集上的模型准确性。
print(model.score(X_test,y_test))
0.528
我们可以看到 52%的准确率。
交叉验证
我们将使用 10 重交叉验证来交叉检查模型的准确性。为此,我们将使用从' sklearn.cross_validation 库中导入的' cross val score 函数。
cross_val = cross_val_score(LogisticRegression(), X, y, scoring='accuracy', cv=10)
print(cross_val)
print(cross_val.mean())

精确度仍然是 52%,这意味着模型工作正常。
使用模型创建交易策略
我们将预测买入(1)或卖出(-1)的信号,并计算测试数据集的累计 Nifty 50 回报。接下来,我们将根据测试数据集中模型预测的信号计算累积策略回报。我们还将绘制累积收益图。
df['Predicted_Signal'] = model.predict(X)
df['Nifty_returns'] = np.log(df['Close']/df['Close'].shift(1))
Cumulative_Nifty_returns = np.cumsum(df[split:]['Nifty_returns'])
df['Startegy_returns'] = df['Nifty_returns']* df['Predicted_Signal'].shift(1)
Cumulative_Strategy_returns = np.cumsum(df[split:]['Startegy_returns'])
plt.figure(figsize=(10,5))
plt.plot(Cumulative_Nifty_returns, color='r',label = 'Nifty Returns')
plt.plot(Cumulative_Strategy_returns, color='g', label = 'Strategy Returns')
plt.legend()
plt.show()

结论
可以观察到,Python 中的逻辑回归模型以大约 52%的准确度预测类,并产生良好的回报。现在轮到你通过改变参数来玩代码,并根据它创建一个交易策略。
想知道如何在 python 中使用机器学习进行交易?这篇博客将解释机器学习可以帮助新工具用一个这样的模块生成更多的 alpha。
更新-我们注意到一些用户在从雅虎和谷歌金融平台下载市场数据时面临挑战。如果你正在寻找市场数据的替代来源,你可以使用 Quandl 来获得同样的信息。
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
下载中的文件:
- 机器学习逻辑回归 Python 代码
为只做多策略建立一个机器学习模型,作为散户交易者使用
这个项目帮助你学习如何通过机器学习实施只做多策略来买卖股票。
本文是作者提交的最后一个项目,作为他在 QuantInsti 的算法交易管理课程( EPAT )的一部分。请务必查看我们的项目页面,看看我们的学生正在构建什么。
关于作者

Pranav Lal 是一名来自印度的行动导向型信息安全经理。Pranav 是一名商科毕业生,拥有研究生工商管理硕士学位。他拥有超过 20 年的专业经验,是 EPAT 大学的校友。
项目摘要
一个只做长的策略已经被编码到一个机器学习模型中。该模型产生两组信号,即 1 和 0。如果信号是 1,我们就做多,如果信号是 0,我们就做空。没有保持状态。
许多指标的买入触发已经被用来决定何时应该买入一只股票。他们的卖出指标还没有编码。这样做是为了保持模型简单。
此外,决策树已被用来确保模型易于解释,并尽量减少隐藏变量。我们不想要一个会泄露交易决策的黑匣子。我们想要一个决策可以被看到、理解和调试的模型。
项目动机
我是交易新手,但不是编程新手。我不知道市场因此想要一种能够以尽可能少的人力投入进行交易的机制。
我本来可以使用指标,如移动平均线收敛发散,但不知道该插入什么值来优化策略回报。这就是为什么我的导师建议我使用机器学习模型,并让它决定何时购买。
我所要做的就是在模型中编码买方触发器。这些回报变成了我预测的变量。但是,我将返回转换为二进制标签,以更好地满足来自模型的信号的二进制性质。
数据挖掘
我在获取高质量数据方面遇到了巨大的挑战。作为一名散户,我的预算有限。在撰写这个项目时,我选择了雅虎财经。这是唯一给我调整后收盘价的供应商。
我本可以研究单个企业的行为,并将它们纳入模型,但鉴于我缺乏经验,我看不出这种行为有什么价值。此外,我不会得到任何东西,并且会在我的代码中引入更多的复杂性。
我也正在和一个支持算法交易的经纪人签约。我现有的经纪人没有我需要的数据。
我确实考虑过直接从美国国家证券交易所(NSE)下载。最初的结果是有希望的,但 python 包装器无法有效地做到这一点,因此我选择使用雅虎财经。
我在使用机器学习,所以我需要数据。为了简单和减少错误,我选择使用每天结束时调整后的收盘价来训练我的模型。
我要回到 10 年前。我可以追溯到更久远的年代,但鉴于印度的变化,我看不出根据非常陈旧的数据训练一个模型有什么价值。
数据分析
我最初关注的是模型得分,比如准确性。然而,我的导师建议我强调与业务相关的矩阵,如战略回报、夏普比率和最大提取额。
我用的是 nifty 50 股票,已经实现了 28%的年回报率。话虽如此,某些情况下的最大降幅为-22%。
这个模型目前只适用于一只股票。为投资组合建立一个模型是可能的,但这需要大量的研究。
注:
我已经开始与卢比的资本。10000.看到一些漂亮的 50 家公司的以下输出。
HDFCLIFE.NS
mcc=0.2323
{'0': {'precision': 0.5766423357664233, 'recall': 0.7117117117117117, 'f1-score': 0.6370967741935484, 'support': 111}, '
1': {'precision': 0.6595744680851063, 'recall': 0.5166666666666667, 'f1-score': 0.5794392523364487, 'support': 120}, 'ac
curacy': 0.6103896103896104, 'macro avg': {'precision': 0.6181084019257648, 'recall': 0.6141891891891892, 'f1-score': 0.
6082680132649985, 'support': 231}, 'weighted avg': {'precision': 0.6197239629449599, 'recall': 0.6103896103896104, 'f1-s
core': 0.6071448147872628, 'support': 231}}
all done, model saved
HDFCLIFE.NS
end capital=13025.661671336782
cumulative returns=0.01
annualized returns=11.946754317747708
sharp ratio=2.430894954720865
maximum draw down=-5.335562897550606
event based back testing
inventory=0
total trades62
Worst drawdown periods Net drawdown in % Peak date Valley date Recovery date Duration
0 5.34 2021-07-19 2021-07-30 2021-08-26 29
1 4.61 2021-09-30 2021-10-14 2021-12-03 47
2 1.48 2021-09-17 2021-09-28 2021-09-30 10
3 1.40 2021-07-05 2021-07-06 2021-07-14 8
4 0.28 2021-06-22 2021-06-23 2021-06-25 4
(
AXISBANK.NS
mcc=0.1157
{'0': {'precision': 0.5460251046025104, 'recall': 0.6444444444444445, 'f1-score': 0.5911664779161948, 'support': 405}, '
1': {'precision': 0.5714285714285714, 'recall': 0.46943765281173594, 'f1-score': 0.5154362416107382, 'support': 409}, 'a
accuracy': 0.5565110565110565, 'macro avg': {'precision': 0.5587268380155409, 'recall': 0.5569410486280902, 'f1-score': 0
.5533013597634665, 'support': 814}, 'weighted avg': {'precision': 0.558789254395949, 'recall': 0.5565110565110565, 'f1-s
core': 0.5531152903867946, 'support': 814}}
all done, model saved
AXISBANK.NS
end capital=11912.529405911413
cumulative returns=0.01
annualized returns=14.396557602433907
sharp ratio=1.2692911988723536
maximum draw down=-11.401175197958969
event based back testing
inventory=0
total trades270
Worst drawdown periods Net drawdown in % Peak date Valley date Recovery date Duration
0 11.40 2021-10-27 2021-12-27 NaT NaN
1 2.58 2021-05-25 2021-06-03 2021-06-28 25
2 2.30 2021-05-03 2021-05-11 2021-05-18 12
3 1.85 2021-06-30 2021-07-09 2021-08-05 27
4 1.74 2021-09-24 2021-09-27 2021-10-12 13
(
CIPLA.NS
end capital=10108.381471799057
cumulative returns=0.01
annualized returns=12.97248677553947
sharp ratio=-0.17873433713762618
maximum draw down=-8.419739036394535
event based back testing
inventory=1
total trades253
Worst drawdown periods Net drawdown in % Peak date Valley date Recovery date Duration
0 8.42 2021-09-03 2021-12-22 NaT NaN
1 8.10 2021-03-08 2021-03-19 2021-06-11 70
2 1.91 2021-06-11 2021-06-18 2021-07-15 25
3 0.36 2021-07-15 2021-07-16 2021-08-02 13
4 0.00 2021-03-08 2021-03-08 2021-03-08 1
(
HINDALCO.NS
mcc=0.2139
{'0': {'precision': 0.6022727272727273, 'recall': 0.6463414634146342, 'f1-score': 0.6235294117647059, 'support': 410}, '
1': {'precision': 0.6122994652406417, 'recall': 0.5668316831683168, 'f1-score': 0.5886889460154242, 'support': 404}, 'ac
curacy': 0.6068796068796068, 'macro avg': {'precision': 0.6072860962566845, 'recall': 0.6065865732914755, 'f1-score': 0.
606109178890065, 'support': 814}, 'weighted avg': {'precision': 0.6072491426769502, 'recall': 0.6068796068796068, 'f1-sc
ore': 0.6062375835549887, 'support': 814}}
all done, model saved
2021-03-07
2022-01-04
HINDALCO.NS
end capital=24400.365307225453
cumulative returns=0.02
annualized returns=25.342755013632857
sharp ratio=4.32476549991755
maximum draw down=-7.444258699940887
event based back testing
inventory=0
total trades270
Worst drawdown periods Net drawdown in % Peak date Valley date Recovery date Duration
0 7.44 2021-10-27 2021-12-07 2022-01-03 49
1 3.73 2021-07-06 2021-07-09 2021-07-19 10
2 2.18 2021-09-01 2021-09-02 2021-09-14 10
3 2.11 2021-07-19 2021-07-20 2021-07-28 8
4 2.06 2021-10-05 2021-10-06 2021-10-13 7
(
主要发现
更多的数据并不总是导致逻辑输出
我最初试图将几只股票组合成一个庞大的投资组合,因为我相信更多的数据对我的机器学习模型有好处。我确实取得了不错的结果,但年度回报等业务矩阵却超出了预期。结果无效。
您输入的预测值一定有一定的逻辑
我曾尝试将多种策略结合成一个超级智能模型。这不起作用。准确性很低,并且在回测期间不能依赖模型的结果。
起步小
当我听从导师的建议,专注于一只股票时,这个项目向前推进了。回报和其他矩阵(如最大水位下降)是合理的,在预期参数范围内。
你的模型应该只有一个目标
我最初尝试制作一个超级模型,它会告诉我何时买入、卖出和持有。在与我的项目导师进行审查后,我决定只关注每个指标的长期条件。然后这个模型开始产生有用的结果。
获取数据既困难又昂贵
我试图获得一个可靠的数据来源,但最终坚持雅虎财经。数据供应商价格昂贵,他们中的许多人没有调整后收盘价的数据。大约 7 年的数据成本约为 100 万卢比。40000.此数据未经调整。我回到雅虎财经,但提议从我的经纪人那里获取数据。
挑战/限制
- 高质量数据的来源是困难的,而且可能是昂贵的。
- 使用该模型的票据交易仍在进行中。
- 该项目支持只做多策略。
- 该项目不是以 iBridgePy 或类似框架的结构编写的,因此必须做一些工作来适应它。
实施方法
这个项目已经在 nifty 50 股票上进行了测试。不可能用经纪人提供的数据来测试项目。
系统在开市时运行,运行模型。产生的信号被用来决定买或卖。
结论
散户有可能利用机器学习建立一个有效的策略。在生产环境中开始使用该策略需要仔细的特性选择和特性工程。
金融数据的一个优势是,与图像处理等机器学习的其他领域相比,它的数量较少。这允许可能没有最新和最棒的机器学习硬件的用户开始使用。如果你做中低频交易,普通的商务级机器就足够了。
附录/代码
该项目分为 3 个主要模块。
- FetchData 类。
- 动量策略课程。
- stockbot 脚本。
FetchData 类从 yahoo finance 中提取数据,并将其放入字典中。首先将数据下载到一个帧中,然后将该帧放在一个字典中,以 ticker 符号作为关键字。
MomentumStrategy 类获取这些数据,并计算一系列指标和其他变量,如百分比和对数回报。该类返回一个包含计算变量和原始股票数据的大型 pandas 数据框。NA 值也被移除。
stockbot.py 脚本使用指定的数据训练模型,并运行预测。
这就是订单生成逻辑将被合并的地方。也有适当的报告代码。
在撰写本文时,如果系统收到买入信号,它将检查库存,如果有多种股票,它将忽略该信号。如果没有库存,市场订单将被用来购买股票。数量将根据可用资本来确定。
如果系统得到一个 0 信号,并且库存大于零,那么所有的可用数量将被售出。
系统将生成适当的报告,稍后将引入事务日志记录。
如果你想学习算法交易的各个方面,那就去看看这个算法交易课程,它涵盖了统计&计量经济学、金融计算&技术和算法&量化交易等培训模块。EPAT 教你在算法交易中建立一个有前途的职业所需的技能。现在报名!
免责声明:就我们学生所知,本项目中的信息是真实和完整的。学生或 QuantInsti 不保证提供所有推荐。学生和 QuantInsti 否认与这些信息的使用有关的任何责任。本项目中提供的所有内容仅供参考,我们不保证通过使用该指南您将获得一定的利润。
使用蓝移可视化编程的机器学习策略
原文:https://blog.quantinsti.com/machine-learning-strategy-using-blueshift-visual-programming/
作者高拉夫·辛格
算法交易是关于你如何研究,回溯测试,分析,然后实时交易你的策略。Blueshift 是一个平台,在这里你可以构建、分析和交易你的系统投资策略。在 Blueshift 上,你可以根据历史数据回溯测试你的策略。在令人满意的回溯测试结果之后,你可以通过连接你的经纪人和 Blueshift 进行纸上交易或现场交易。Blueshift 的伟大之处在于它是一个免费使用的平台!
你可以在 Blueshift 上看到完整的机器学习策略会是什么样子。只需点击下面的按钮!一个新的窗口将会打开,带有在这篇博客中讨论的预先构建的策略。
在本文中,您将学习构建一个机器学习策略。你可以很容易地使用 Blueshift 的酷新添加的可视化编程接口来制定这个策略。这个策略将在不写一行计算机代码的情况下建立。此外,在您的系统中不需要特殊的软件安装。一切都将在蓝移平台上完成!
本文涵盖:
Blueshift 的可视化编程是什么?
有很多人有丰富的交易经验,但他们不擅长计算机编程。这大大增加了参与算法交易的门槛。Blueshift 最近增加了一个名为可视化编程的功能。这个特性使你能够在没有任何编码知识的情况下创建策略。没错,您只需通过拖放策略构建模块就可以创建策略!
你可以在 Blueshift 的可视化编程上查看 7 集 youtube 系列。本系列解释了用户界面和平台的不同特性。它还构造了一个简单的交叉策略。
Blueshift 可视化编程中的机器学习管道
可视化编程不仅仅是一个简单易用的界面来定义一套简单的交易规则。可视化编程是一种几乎完整的编程语言,能够处理任何逻辑。
这意味着你也可以建立复杂的策略,比如机器学习模型。你可以使用 Blueshift 来回溯测试或实时交易机器学习策略,就像你可以回溯测试一个简单的交叉策略一样容易。如果不熟悉机器学习,可以在 Quantra 上做免费课程交易用机器学习入门!
在易于使用的界面下,是一个智能软件引擎,它验证可视块并将其转换为 python 代码。Blueshift 可视化编程中的机器学习流水线遵循 sklearn 流水线流程。

如果您不熟悉管道术语,也不用担心!流水线只是一组应用于数据集的转换器和估计器。换句话说,应用一系列数学运算来适当地转换数据。然后,估计器基本上试图在数据中找到模式。这种模式发现也被称为“模型拟合”。衡量模型与新数据“吻合”程度的标准被称为“得分”。“分数”让我们了解模型预测任何未知数据的准确性。
机器学习流水线中的最后一个估计器只需要实现“fit”函数,就可以得到结果。分数调用估计量的基本“分数”函数。
下图给出了如何构建和使用机器学习模型的想法,以及相关的 Blueshift 可视化编程块。该模型通过添加特征、目标和估计器来建立。理想情况下,特征之间应该是不相关的,并且具有弱预测性。目标是数据集,该数据集是或者应该是机器学习输出。
基于手头的问题陈述选择估计器。例如,如果最终输出是预测价格,则使用回归估计量。但是,如果最终输出是一个分类(维持多头头寸或不维持头寸),则使用分类器估计器。
注:目标可以是回归(不需要级别)也可以是分类(需要级别)。

然后使用“估计”模块对模型进行编译和拟合。然后使用“预测”模块计算模型预测。最后,使用“评分”模块对未知数据的模型进行评分。
构建机器学习策略
在本文中,您将学习如何使用随机森林分类估计器构建一个 只长机器学习模型。这意味着,该策略将只采取多头头寸,底层机器学习估计器是随机森林分类器。
您可以从这里建立的策略(回溯测试从 2015 年 1 月开始到 2020 年 11 月)中预期的关键回溯测试结果如下:
| 公制 | 值 |
| 年度回报 | 10.98% |
| 累积回报 | 83.58% |
| 年度波动性 | 9.96% |
| 夏普比率 | One point zero nine |
| 最大水位下降 | -10.60% |
注意 :每次运行模型时,回溯测试的结果都会略有不同。这种差异是由于模型用来拟合数据的随机森林算法中固有的随机性。
现在,让我们使用 Blueshift 的可视化编程来创建这个策略。如果不熟悉用户界面,可以参考界面概述视频。
https://www.youtube.com/embed/0dvKxuWcGMY?start=50&feature=oembed
该策略是通过以下步骤构建的:
策略设置
初始策略块如下所示:

确保选择数据集为 NYSE-DAILY ,因为您将根据 NYSE 每日数据设计策略。当你在做多头策略时,将多头选项设置为“真”。要了解每个参数的更多信息,可以参考策略设置和交易宇宙视频。
https://www.youtube.com/embed/vu6HBVJbt6w?feature=oembed
定义宇宙
将“设置范围”和“选择资产”块连接到“定义范围”步骤。对于这个样本策略,您可以选择这些股票:AMZN,AAPL,WMT,MU,BAC,KO,BA,AXP。

定义 Alpha(机器学习模型)
你策略的 alpha 将是机器学习模型的预测输出。所以你需要将机器学习模型定义为你的策略 alpha 。为了刷新你对阿尔法和变量的记忆,你可以参考变量和阿尔法函数视频。
https://www.youtube.com/embed/1maN14wxVnQ?feature=oembed
使用左侧机器学习菜单中的“使用模型”创建模型。可以将模型命名为“model_1”。

将“model_1”块连接到“定义 alpha”步骤。

要定义模型,您需要指定这三件事:
- 特征
- 目标
- 估计量
特征
Blueshift 可视化编程中可用的功能如下:
- 技术:交叉、MFI、RSI、斐波那契等等
- 统计:峰度、var、均值、中值等
- 价格行为特征:多空、吞没、跳空/下跌等
您可以使用这些功能的任意组合来分析性能。向模型添加特征非常容易。只需将相关模块连接到“添加功能”并点击选择功能。

菜单显示哪些功能可用,哪些功能当前已被选中。
通过加载本节末尾的 预构建策略,可以看到本示例策略中使用的特性。

目标
目标将价格回报性能(基于收盘价)自动映射到估计器目标(分类或回归输出)。定义目标所需的输入有:
- 编码的级数:在样本分类策略中,可以“保持多头”也可以“不保持仓位”。因此,编码级别将是二。如果估计量属于回归类型,那么级数将为零。
- 回望期:收益计算的回望期。
- 衡量回报表现的方法:在计算回报时使用百分比变化或差异。对于示例策略,选择“pct_change”选项。

估计量
除了预处理和特征选择,还可以使用 Blueshift 可视化编程中的机器学习管道进行降维。最后,添加一个估计器来获得模型输出。
可用选项包括:
- 特征选择:选择 k 个最佳特征
- 降维 :
a) PCA
b)线性核 PCA
c) rbf 核 PCA - 估计器和滚动估计窗口 :
a)分类:Logit、岭、随机森林、xgboost 等
b)回归:OLS、拉索、岭、随机森林等
对于你的策略,选择 PCA 降维到 25 个分量。选择分类估计器块,估计器为“ rf ”(随机森林),滚动估计窗口为500 个周期(日频率数据约为 2 年)。

定义交易规则和交易时间表
你现在要定义交易规则并安排你的策略。如果不熟悉交易规则块,可以参考交易规则和动作和调度和下单参数教程视频。
https://www.youtube.com/embed/djheRnTCu4U?feature=oembed
样本策略在每月的第一天交易,在市场关闭前 2.5 小时。
相应地添加调度块。

然后,您需要编译并拟合模型,然后才能使用其预测。您通过使用“估计”块来编译和拟合模型。

现在你已经准备好利用这个模型了。但是,你想一直使用模型吗?
不要!当模型精度比随机预测差时,您不希望使用该模型。所以您添加了一个逻辑“如果条件”,它声明只有当模型得分优于 0.5 (50%平均准确度)时,我们才会使用该模型。

“score”块调用估算器的基础 sklearn 得分函数。由于您使用的是随机森林分类器,它会根据给定的测试数据和标签(来源)为您提供平均准确度。
现在,您将使用“predict”块来了解模型是将其预测为 0 类(不维持仓位)还是 1 类(维持多头仓位)。

您可以为分类输出 1 制作一个长条目。分类输出 0 的长退出。你已经在交易规则和行动视频中学到了这些。
https://www.youtube.com/embed/EJAh435hdoc?feature=oembed

订单类型以“目标类型方法设置为 0.1 的“组合分数”。这意味着你将持有这些资产的头寸,从而将 10%的可用投资组合财富分配给多头头寸。同样,如果分类输出为 0,你退出多头。
您的策略现已完成!你可以点击这个按钮来启动蓝移可视化编程,这个策略是预先建立的!
您也可以通过点击屏幕右下方的“查看代码”按钮来查看自动生成的代码。

可以在新的弹出窗口中看到生成的代码。可视化编程接口的所有模块都被转换成 python 代码,然后由 Blueshift 平台运行。

回溯测试和实时交易策略
您可以通过点击“新回测”按钮获得机器学习策略的详细回测。选择数据集为 NYSE-DAILY ,对 2015 年 1 月至 2020 年 11 月的策略进行回溯测试。
关键绩效指标如下:

有趣的是,由于新冠肺炎疫情,基准回报率在 2020 年初大幅下降。但是,在 2020 年的前几个月,投资组合回报显著优于基准。
总的来说,当基准回报率突然下降时,这种策略避免了大规模提款。在近 5 年的时间里,夏普比率达到 1.09 也被认为是好的。
在满意的回测结果后,你就可以进行纸上交易,然后对你的模型进行现场交易!只需点击“上线”按钮。
按照屏幕上的步骤实时交易您的策略!可以参考回测和现场交易视频,详细看每个步骤。
https://www.youtube.com/embed/UrzDnv3w3qg?feature=oembed
一旦您连接了您的经纪人并添加了策略设置,该策略就被设置为在实时价格日期进行交易。您可以在实时交易概览中分析交易日志、策略指标和控制台输出。

该战略的未来改进
你在这里学到的策略实现了一个基于几个特征的随机森林分类器。您可以尝试不同的输入特性组合,看看是否能提高性能。如前所述,可以从易于使用的图形界面中选择功能。您只需将相关模块连接到“添加功能”并从菜单中选择。
您还可以更改策略超参数,如回顾窗口和估计器数量。在你的交易领域中,机器学习模型对不同的资产会有不同的表现。你可以改变可交易的资产并分析其表现。
您可以添加复杂的风险管理交易规则以及不同的止损和止盈标准。随意调整这个策略来满足你的需求!
如果你需要回忆如何使用界面或任何模块,你可以参考可视化编程教程系列。
https://www.youtube.com/embed/videoseries?list=PLD7IrLyN7uvKttgKqWOMBvRikEk3xezoU
如果您需要任何帮助或支持,请通过 Quantra 社区论坛联系我们,或者通过 blueshift-support@quantinsti.com给我们写信。
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
机器学习十大博客| 2021
原文:https://blog.quantinsti.com/machine-learning-top-blogs-2021/
由维拉伊巴加&T2】查尼卡塔卡
机器学习在科技领域带来了一场革命。机器学习在医疗诊断、图像处理、股票价格预测等领域得到了广泛应用。
多年来,为了迎合您的要求和新兴行业,我们已经撰写了多篇关于机器学习的文章。尽管很难,我们还是从无数的作品中挑选出了一些最好的。这是我们十大机器学习博客的列表!
使用 Python 中的机器学习进行交易
你是否好奇过如何使用机器学习算法进行交易?这篇博客旨在用它来指导你,并传授使用带有 Python 的机器学习系统进行金融市场交易的知识。最后,你将能够使用 Python 创建和使用机器学习算法进行交易。利用这一点,你可以创建一个简单的 ML 算法来预测股票第二天的收盘价。
面向初学者的 10 大机器学习算法
利用机器学习的力量来进行更好的交易,方法是理解一些流行的、非常足智多谋的机器学习算法背后的基本逻辑,这些算法已经被交易社区所使用,并作为你创建最好的机器学习算法的基石。
机器学习分类算法
机器学习大致分为监督学习和非监督学习,它们进一步分为对你的学习和应用至关重要的各种概念和术语。了解完整的结构和分类以及它们在 Python、models 等中的实现!所有这些都在这篇大文章中以稳健的方式涵盖了。
Python 中的层次聚类
聚类分析的应用范围从医疗到人脸识别再到股市分析。在这篇博客中,我们将讨论层次聚类——一种无监督学习,它将相似的数据点或对象分成称为聚类的组。通过详细的介绍、差异、分类、概念、利弊等来了解它的所有内容。
Python 中的神经网络:简介、结构和交易策略
人脑、神经元、网络和技术?这两者之间有什么联系呢?这是我们最喜欢的教程之一,它解释了神经网络的概念,它们是如何工作的,以及它们在交易中的应用。学习梯度下降,反向传播,甚至创建自己的交易策略。
深度学习 Python 中使用 TensorFlow 的人工神经网络
利用 TensorFlow 开发一种叫做深度学习(人工神经网络)的机器学习技术,在 python 中预测股票价格。在本文结束时,您将学习如何使用 TensorFlow 构建人工神经网络,以及如何使用神经网络的预测来编码策略。
RNN、LSTM 和 GRU 进行交易
你也可以使用 RNN(递归神经网络)、LSTM(短期记忆网络)和 GRU(门控递归单元网络)的力量来预测股票价格!怎么会?这篇博客讨论了从编码策略到构建模型的整个过程。除此之外,还有其他几个重要的子主题成本函数,优化器等。在这里解决。
Python 中的机器学习 K-最近邻(KNN)算法-简介
在回归和分类问题的机器学习中使用的最简单的算法之一,这个博客解释了 K-最近邻 ie。KNN 机器学习算法。KNN 算法使用数据,并基于相似性度量(例如距离函数)对新数据点进行分类。在这篇博客中,KNN 机器学习算法的一步一步的实现是使用 Python 来创建交易策略的。
利用 Python 中的机器学习进行黄金价格预测
你知道预测黄金价格是可能的吗?了解使用机器学习回归技术来预测最重要和最珍贵的金属之一(即黄金)的价格的有趣概念。读者的最爱,这是任何交易爱好者或专家的必读之作!
使用回归模型建立交易系统
这个博客一步一步地展示了如何使用回归模型建立一个简单的交易系统模板。你不仅会理解回归及其类型,还会学习如何建立一个以回归分析为核心的交易系统。Python 编程语言被用于此。
荣誉奖
价格数据中的一点错误信息会导致你的机器学习模型产生错误的结果。没有人希望这种情况发生。这个博客是关于以最简单的形式回答你的数据清理问题。它处理数据清理中的基本挑战,如丢失和重复数据,并提供简单的解决方案。
有可能提高决策树的性能。我们向您介绍装袋和增压的概念。这篇博客主要关注 Bagging 和 Boosting,分别以并行和顺序的方式构建决策树。然后,它集成输出,以提高预测的准确性和减少差异。
TensorFlow 是一个核心的开源库,可以帮助你开发和训练 ML 模型。将这一点与 GPU 的卓越性能相结合,您可以大大重复使用时间和精力。本博客详细分享了在 Nvidia GPU 系统上安装 Tensorflow GPU 的步骤。有了这个指南,即使是完全的初学者,你也能够成功地安装 Tensorflow GPU。
XGBoost 已经能够并行化 boosting 算法的树构建组件。因此,它减少了计算时间,消耗了更少的资源,这导致处理时间的大幅增加,因为我们可以使用更多的 CPU 内核,甚至可以继续利用云计算。这篇博客解释了这一切,并提供了一个 Python 代码来预测美国股票的多空。
这篇博客旨在帮助读者了解如何使用分类器来预测在 NSE 上市的银行 Nifty 指数在第二天开盘时是上涨还是下跌,使用了两种深度学习模型,即股票模型和指数模型。它将带您详细了解关键发现和模型实现。
是的,有无数更多的博客和教程,你可以查看并探索这个机器学习的辉煌世界。你可以在我们的博客这里查看它们。
希望你喜欢 2021 年我们读者最喜欢的 10 大机器学习博客。请发表评论,让我们知道你希望我们在 2022 年写博客的主题。
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
机器学习十大博客| 2022
算法交易见证了人工智能(AI)和机器学习(ML)应用的快速扩张。这些技术的发展彻底改变了算法交易。做出明智的决策需要仔细分析当前和历史市场数据。
为了分析数据并对有效的交易决策做出有效的预测,人工智能和机器学习是有用的工具。尽管存在挑战,我们还是从无数可用的学习辅助工具中筛选出了一些最佳的学习辅助工具。以下是排名前 10 的机器学习博客列表。
机器学习基础知识
你知道吗,全世界的企业家都在转向机器学习来进行商业运作。
因为 ML 可以预测结果,而不需要特别训练,所以它对所有交易者来说都是非常有价值的工具。在利用机器学习进行交易之前,先弄清楚你的基本面。这个博客是交易机器学习的完整指南,也是有志交易者的必读之作。
面向初学者的 10 大机器学习算法
利用机器学习来改善你的交易。理解某些受欢迎且非常足智多谋的机器学习算法背后的基本推理将有助于您通过作为坚实的基础来构建最伟大的机器学习算法。这些算法已经被贸易界所采用。
使用 Python 的机器学习分类策略
在算法交易中,需要处理大量的数据集。这就是机器学习的用武之地。它将数据分为 OHLC 或价格数据、基本面数据或替代数据,如推文和新闻数据。它创建了一个机器学习模型,并使用该模型预测未来。
了解更多关于模型、整体结构、分类以及如何在 Python 中实现它们的信息!所有这些在这篇精彩的文章中都有全面的介绍。
用于交易的人工智能和机器学习
在今天,我们必须知道人工智能和大都会人寿是如何推动有利可图的交易的。这篇文章从交易的角度阐述了对人工智能和机器学习的理解。了解人工智能和机器学习在交易中的作用、用途和应用无疑会对你有益。
使用 Python 中的机器学习进行交易
有兴趣了解如何以及为什么将机器学习算法应用到您的交易中吗?
这个博客旨在引导你去最好的地方学习机器学习在交易中的应用。到本博客结束时,你将有能力创建和使用机器学习算法。使用 Python 进行交易。您还将找到创建 ML 模型的先决条件和免费的 Python 代码
利用 Python 进行数据预处理,并结合实例进行机器学习
数据预处理是交易中最重要的步骤之一。这是任何好的机器学习模型的基本要求。预处理数据意味着使用机器学习模型容易读取的数据
通过本课程,您将掌握任何机器学习模型最重要的两个步骤所需的基本知识,这两个步骤是:数据清理和特征工程
利用机器学习 Python 进行黄金价格预测
有可能预测黄金价格的走向吗?
是啊!使用机器学习回归技术,你实际上可以预测最珍贵的金属之一黄金的价格。
这是一个使用 Python 中的机器学习来预测黄金价格的分步指南。这篇博客详细介绍了 python 库和各种概念,创建了一个线性回归模型,开发了 Python 代码,并检验了预期的结果。对于任何交易者来说,这都是必读的!
使用机器学习预测 SL/TP 信号
交易中最具挑战性的部分是决定何时退出头寸。这个 EPAT 项目可以帮助你预测何时退出买入/卖出头寸。在没有人工干预的情况下,通过使用机器学习来预测 SL/TP 信号,可以以 65.86%的准确率检测 SL/TP。可下载数据可用!
用机器学习预测金属价格走势
另一个由 EPATian 人设计的项目。这个项目将帮助你学习如何在你的交易实践中使用机器学习来预测金属的价格趋势。它将带你逐步使用计算机视觉创建一个卷积神经网络(CNN),它可以预测价格运动。
本项目中使用的完整数据文件和 Python 代码也可以在最后以可下载的格式获得。
学习机器学习交易的免费资源
谈到金融技术领域,算法交易实践在机器学习算法方面效率极高。有各种各样的资源可以用来学习机器学习交易,但是这篇文章的目的是让你可以使用免费的资源来学习机器学习交易。
这些免费资源分为以下几类- 课程、博客、电子书、研究论文和视频
荣誉奖
Python 中的机器学习 K-最近邻(KNN)算法
机器学习算法用于回归和分类问题。本文将带您详细了解 Python 的 K 近邻(KNN)概念。
KNN 算法使用数据根据相似性度量对新数据点进行分类。实现 KNN 机器学习算法的分步指南(Python 代码可用)。
机器学习逻辑回归 Python
通过这个博客,你将了解线性和逻辑回归的概念。它将带您完成从安装预打包的 Python 机器学习库到使用逻辑回归分类器预测股票价格运动到用 Python 开发 ML 模型并利用它们进行交易的所有事情。
使用机器学习构建最优投资组合
投资组合管理和风险管理技术。在本文中,您将了解立体投资组合优化(SPO)框架,以及它如何改善量化交易策略。
机器学习交易模型中的交叉验证
机器学习中的交叉验证是一种提供机器学习模型性能的精确测量的技术。看完这个,你就可以确定你的模型是否擅长预测模型在不同压力情景下的哪个信号和表现了。
结论
有许多其他的博客和教程可以帮助你探索机器学习的迷人领域。你可以在我们的博客这里查看它们。
我们真诚地希望你喜欢这份关于机器学习的 10 大博客的快速浏览,我们的读者发现这些博客在 2022 年最受欢迎。请发表评论,让我们知道您希望我们在 2023 年的博客中涉及的主题。
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
基于回归的股票价格预测机器学习
原文:https://blog.quantinsti.com/machine-learning-trading-predict-stock-prices-regression/
Sushant Ratnaparkhi
前几天我读了一篇关于人工智能和机器学习迄今为止进展如何以及它们将走向何方的文章。我肃然起敬,很难理解作者对未来可能性的描绘。
以下是我的反应。(不,我没有乔伊好看,但你应该知道)

这是人工智能应用于医疗领域的一种可能性,
外科医生可以用她的运动皮层来控制机器手术刀,而不是拿在手里,她可以从手术刀接收感官输入,这样对她来说就像是第 11 个手指。因此,这就好像她的一个手指是一把手术刀,她可以不用任何工具来做手术,让她更好地控制她的切口。一个没有经验的外科医生在进行艰难的手术时,可以带几个她的导师到现场,通过她的眼睛观察她的工作,并思考给她的指示或建议。如果真的出了什么问题,他们中的一个可以“控制方向盘”,将他们的运动皮层连接到她的输出,以控制她的手。
你可以在这里阅读文章。
目前,人工智能和机器学习已经取得了足够的进展,所以我们现在可以在交易中应用这些机器学习技术并达到很高的准确性吗
什么是机器学习?T3】
定义是这样的,“机器学习是指使用计算机算法从数据和信息中自主学习,并改进现有算法”
但简单来说,机器学习是这样的,以这个孩子为例——考虑他是一个智能机器,现在,
- 给他一个棋盘
- 解释游戏的基本规则
- 给出 100 个好游戏的记录
- 把孩子锁在一个房间里(同时扔进一些食物和水)

10 天后,

当孩子走出那个房间时,你会看到一个相当好的棋手。在这种情况下,孩子是机器,过去的比赛记录是数据,国际象棋规则书是算法。我们只给机器输入了一个基本算法和一些可以学习的数据。这台机器通过数据进行筛选,了解哪些步骤提高了赢得比赛的机会,并将这些步骤添加到算法中。这就是机器学习的全部概念。与人类相比,计算机的优势在于,对于更大的数据集和连续的一段时间,计算机可以快速完成这项工作。
然而,这只是一个例子,机器学习有不同的方面,它们非常有趣。但是在这篇文章中,我们将坚持基本原则。
此外,人们经常在人工智能、机器学习和深度学习之间感到困惑。人工智能是一个更大的空间,涵盖了很多东西,而机器学习是人工智能的一部分,进一步的深度学习是机器学习的一个子集。这里,我为你手绘了这张图。

如果你想更深入地了解这些话题的细节,你可以看看这个。
为什么机器学习最近变得如此流行?
如果你深入挖掘,你会发现机器学习已经存在很久了。例如,在 1763 年,托马斯·贝叶斯发表了一部作品'一篇旨在解决机会主义中的一个问题的论文',这导致了'贝叶斯规则',机器学习中使用的一个重要算法【1】
但是今天,机器学习正以前所未有的速度前进。我们可能没有意识到,但是机器学习的应用无处不在,例如,
- 推荐系统(facebook 新闻源、亚马逊产品推荐)
- 自然语言处理(Siri、谷歌语音)
- 医疗诊断(图像中的斑点模式)
- 物体识别和跟踪(面部识别、车牌读取和跟踪)
- 挖掘“大数据”——分析(具有这种模式的股票往往会上涨)
- 数据的分类和聚类(欺诈检测、序列挖掘等。)
所有这些都是基于从过去的数据中学习并预测未知/新情况的结果的概念,就像人类学习的方式一样。但计算机的优势在于,它们可以处理更大规模、更复杂的数据,这是人类根本无法理解的。
考虑到今天的环境,每天都有数万亿千兆字节的数据生成,人类不可能处理这些数据并从中做出有用的推断。当然,聪明人可能能够做出更好的预测和推断,但机器学习算法在规模和复杂性方面击败了我们。随着时间的推移,这些计算机做出的预测将超过人类的水平。
所以,当每个行业都开始以某种形式实施机器学习时,作为交易者,你为什么不利用这一点来提升你的交易技能呢?你猜怎么着?机器学习和交易就像奶酪和葡萄酒一样齐头并进。一些顶级交易员和对冲基金经理已经使用机器学习算法来做出更好的预测,并因此赚钱!
在本帖中,我将教你如何使用机器学习,利用回归进行股价预测。
什么是线性回归?
以下是正式定义,“线性回归是一种对标量因变量 y 和一个或多个解释变量(或自变量)X 之间的关系进行建模的方法”【2】
让我以非常基本的方式解释一下回归的概念,假设你经营一家制造汽车的公司,你想了解原材料(比如说钢铁)价格的变化将如何影响汽车的销售。一般的理解是,钢铁价格的上涨将导致汽车价格的上涨,从而导致需求减少,进而导致销量下降。但是我们如何对此进行量化呢?以及我们如何根据钢价的变化程度来预测销量会发生多大的变化。这就是回归出现的时候。
为了便于理解,让我们考虑下面提到的样本数据,

让我们把它做成一个图,这个图叫做散点图

y 轴是一辆车的销量(这是我们的因变量),X 轴是钢材价格(自变量)。通过一般观察,你会发现只要钢材价格下降,汽车的销量就会增加。
样本数据是回归算法的训练材料。现在,它将帮助我们预测,如果钢价下降到 168(相当大的降幅),我们可能实现什么样的销售,这是算法的新信息。
我们将接受 Excel 的帮助来处理这些数据,
因此,当您将样本数据放入 excel 电子表格中并执行回归时(您可以观看此视频以了解如何在 excel 中执行回归),您将获得下图所示的回归线

像这样一些看起来很奇怪的数字,但为了基本理解,我将只关注其中的几个指标。线性回归函数的目的是找到一条距离所有数据点最近的直线,这样每当我们想要计算新因变量的预测值时,我们就可以选择与 X 轴上的自变量相对应的直线上的下一个点。

因此,上述计算是基于下面的等式进行的,也称为回归表达式。

Y' -汽车销量或因变量,这是我们试图预测的
X' -钢价或自变量,这将用于预测' Y '
b 0 '-截距是回归线穿过 y 轴的值
b 1 ' -斜率系数,它告诉我们,x 增加一个单位,预期会导致 y 的变化量
eI’——误差项,当我们用这个方程对任何变量表达的关系不能完全代表自变量和因变量之间的实际关系时,代表这个差异的变量称为误差项或残差项、扰动项或余项
R 2 - R 的平方或相关系数,这表示数据与拟合回归线的接近程度
如果你看上面的回归图,你会看到一个回归方程,它是
y = -4.6129x + 1297.7
所以在这个等式中,
b 1 = -4.6129
b0+T4】eI= 1297.7
请注意,斜率系数或 b 1 为负,这意味着两个变量(钢价和汽车销量)负相关,这意味着当钢价上涨时,汽车销量下降。
方程的 R 2 是 0.92,这很好,我们希望这个值尽可能接近 1,以便更好地预测。
现在到了令人敬畏的部分,以钢铁价格的任何变化为例,比如说钢铁价格是 168,我们想计算汽车销售的预测增长。你应该这样做,
(汽车销量)= -4.6129 x (168) + 1297.7
钢材价格跌至 168 英镑时,汽车销量= 522.73 英镑
是不是很神奇?猜猜看,即使有多个变量影响一辆汽车的销售(就像现实世界中一样),我们也能够计算出一个预测。当回归中有多个自变量时,称为多元回归模型。
我希望你明白这一部分,如果你还有任何疑问,你可以问他们到我们的社区这里
回归与股市
现在,让我向你展示回归在股票市场中的实际应用。例如,我们持有 Canara 银行股票,希望了解 Bank Nifty(银行指数)价格的变化如何影响 Canara 的股价。我们的目标是找到一个函数,帮助我们根据给定的指数价格预测 Canara 银行的价格。
我们将采用银行 Nifty & Canara 过去两个月的收盘价,我们采用调整后的收盘价以保持数据的一致性。请注意,拥有准确的数据非常重要,因为即使数据中的一个数字也会导致回归函数发生显著变化。
在这些数据中,我们将前 40 天作为训练数据,后 20 天作为测试数据,我们将检查回归算法做出的预测与实际数字的接近程度。
您可以点击下面的“下载”按钮下载工作 excel 表格。
散点图显示了数据。使用相同的 excel 函数,我们绘制了这条回归线,其决定系数(R 2 为 0.85。这意味着 Canara Bank 和 Bank Nifty 有 85%的相关性。
这是回归表达式,

让我们来看看由机器学习回归算法做出的预测,这些预测用蓝色标记

查看数据,我们可以看到预测非常接近(考虑 85%的系数),也许不可交易,但这给了我们一个方向。您可以并且应该通过添加多个独立变量来进一步改进这种方法。这样做将有助于减少残差或误差,并有助于让你更接近实际价格。
我只取了 2 个月的数据,你可以取几年的数据来得到更准确的结果。训练数据越多,结果越好。随着你继续添加新的市场数据,你会看到这个函数会通过重新计算系数和截距值来不断改进自己。
接下来的步骤
报名参加我们在 Quantra 上开设的关于交易中的神经网络的最新课程。本课程由 Ernest P. Chan 博士撰写,涵盖了核心概念,如反向和正向传播,以及在 Keras 中使用 LSTM 模型,所有内容都以简化的方式涵盖,并为高级学习者提供了额外的阅读材料。您还可以利用动手编程经验和可下载的策略,在课程结束后继续学习。
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。T3】
下载数据文件
- NiftyBank _ Canara _ 回归分析. xlsx
交易问答中的机器学习
原文:https://blog.quantinsti.com/machine-learning-webinar-11-june-2019/
众所周知,机器学习和人工智能改变了我们生活的世界。从对网飞的系列推荐,到协助医生进行癌症研究,机器学习已经成为这个世界不可或缺的一部分。而且,它已经在贸易领域崭露头角。
这些年来,我们在 Quantra 上收到了很多关于我们机器学习课程的查询。最近,我们主持了 Q & A 环节与Ernest p . Chan(QTS 资本管理有限责任公司的管理成员)在观众中引起了巨大的反响。虽然欧内斯特·陈博士回答了大部分问题,但我们的 EPAT 教师Varun diva kar也帮助解答了多个疑问。
今天,我们给大家带来一份关于机器学习在交易中的作用的详尽的 Q & As 列表,希望大家能更好的了解 ML 在交易中的作用。
本文涵盖 :
50 问答:交易中的机器学习
我们将一些常见问题汇集在一起,以便读者能够更好地理解以下类别中的答案:
以 ML 开始进行交易
问题#1: 交易是怎么一回事,怎样才能盈利?
陈欧内斯特博士:如果你查看你所在地区的股票交易所,你会发现股票价格总是动态的,即它们每天要么上涨要么下跌。事实上,有些人也在一小时内疯狂摇摆。我们称之为波动性。
现在,股票价格是多种因素共同作用的结果,比如公司一个财政年度的收入、利润或亏损,甚至是他们所处的行业。现在,交易是关于理解这些因素的影响,以及研究市场的分歧和预测结果,以赚取利润。随着对市场运动结果的准确预测,你的交易的盈利能力会增加。虽然你确实有某些人在一天之内获得巨额利润的例子,但这种情况很少。如果你不想被市场情绪所淹没,你应该在进入市场前制定交易策略并坚持下去。
问题#2: 作为一个对算法交易知之甚少或者一无所知,又没有编程背景的人,如何在金融贸易领域的机器学习方面下手?你能给我们推荐一本书吗?
Varun Divakar: 你生活的这个时代最伟大的事情就是互联网的存在。我们有很多可信的网站为你提供相关知识,这样你就可以开始学习机器学习,并将其应用于交易领域。investing.com、福布斯、华尔街等网站会给你金融世界的一般信息,而 Coursera、麻省理工学院甚至牛津大学都有面向金融专业人士的机器学习课程。然而,你应该首先从基本的在线阅读材料开始,一旦你熟悉了 ML 术语,就去学习课程。在线和离线教学模式之间似乎没有什么区别,因此在线课程就足够了。在报名参加众多电子学习提供商的课程之前,试着了解你的需求。我们在 Quantra 上有免费和付费的课程,你可以去看看。说到关于算法交易的书籍,你可以在这个博客上找到一份详尽的清单。
问题#3: 金融贸易机器学习中使用最多的编程语言和框架有哪些?这真的适用于像我这样的散户或日内交易者吗?
Varun Divakar: 高频交易公司用 C/C++的同时,个人交易者更喜欢 R 或者 Python。随着越来越多的人用 Python 编写他们的策略,我们注意到了向 Python 的逐渐转变。
Python 之所以被交易者偏爱,是因为学习和执行起来相对更简单。选择 Python 的另一个好处是有大量活跃在各种技术论坛和网站上的全球社区。事实上,你会找到解决你遇到的任何问题的方法,这些方法已经发布在网上了。因此,Python 将是比 r 更好的交易工具。当然,它可以用于零售和日内交易。
问题#4: 基础知识,学这个的前提条件。需要多少统计数据和编码?
- Varun Divakar: 有一个博客概括了成为算法交易者所需的技能:
- 定量技能 -数学能力,即统计学知识、数学模型、统计研究方法支配着你的定量技能
- 编程知识 -编码或编程是成为成功的算法交易者必须掌握的另一项关键技能。
- 金融市场敏锐度 -任何类型的交易方法都需要对金融市场有清晰的理解和知识。
- 解决问题的能力——交易是帮助你实践解决问题能力的完美平台。
- 数据管理 -获得高质量的数据对任何交易者都很重要。虽然每日价格数据有充足的数据来源,但对历史日内数据的访问可能会受到限制。了解全球不同市场和交易所的数据模式非常重要。
- 系统架构——知道如何使用交易系统很重要,了解交易系统的内部也很重要。
- 管理风险 -风险管理是另一个重要的组成部分。这些策略会帮助你赚钱,但你的风险管理系统通常是负责保存钱的系统。
- 合规和法规 -每个国家和地区都有自己的一套法规和合规要求,在各自的交易目的地进行交易时必须遵守。
当然,你可以参考这篇文章了解更多细节。
职业和工作
问题#1: 量化研究和数据科学的主要区别是什么?这两者有没有某种程度上重叠的可能?
瓦隆·迪瓦卡尔:的确,他们在某种程度上确实有所重叠。数据科学撒下的网比量化研究更广,举个简单的例子,数据科学的最终目标主要是准确性或其他指标,而量化研究的最终目标是利润,数据主要是时间序列。
问题二:如何在外地找工作?
Varun Divakar: 随着不同行业寻找使用 ML 的新方法并解决困扰它们的问题,ML 正处于繁荣期。和其他任何有需求的领域一样,你需要证明你拥有适合这份工作的技能。因此,由于它是一个技术领域,一旦你获得了该领域的全面知识,就创建模型,然后在 GitHub 和技术论坛上发布博客/代码,以获得牵引力。这反过来会帮助你通过求职过程并获得工作。
问题#3: 我一直在学习人工神经网络(ANN),最近用 Python 实现了自己的长短期记忆网,用来评估股市数据。我想知道我是否应该继续我的自学之路,通过网上的信息自学人工智能,或者你是否建议我回到学校攻读人工智能博士学位。我已经获得了石油工程硕士学位。我今年 24 岁,想在未来的很多年里继续在科技领域工作。陈欧内斯特博士:要把人工智能应用到交易中,你不需要人工智能博士学位。我的博士学位是物理学,但我作为一名研究员加入了当时世界上最好的人工智能小组之一。
问题#4: 技术分析& Algo 交易有什么区别?在 Algo 交易培训中应用知识需要什么软件?他们是付费的还是免费的?印度哪些公司提供 Algo 交易平台的交易账户?
Python 或 R 是编程语言,用于编码你的 algo 交易策略。他们都是免费的。Zerodha 和 IB (Interactive Brokers)是在印度提供 algo 交易平台交易账户的公司
问题#5: 我对金融市场很了解。我想学 ML 做股票和货币交易。在投资中实施 ML 之前,投资者应该记住什么?另外,你用这种技术交易的成功率是多少?哪种资产类别最适合实现这种技术?我还想知道一个对金融知识和 AI 理解都还过得去的应聘者,工作前景如何?陈欧内斯特博士:这取决于你试图解决的问题,以及你能在多大程度上为算法设计出要解决的问题。除了上述内容之外,您还应该注意用于训练模型的数据的质量。你可以在所有资产类别中使用 ML/AI。目前,人工智能/人工智能交易员的就业前景非常好。
应用
问题#1: 如何在股票或 F & O 期权中应用机器学习/人工智能?如何进行算法交易设置?
陈欧内斯特博士:机器学习的优势在于,即使在部署之后,它也能继续学习。一个简单的例子是 facebook 算法,它可以识别照片中的人脸,并建议给 facebook 的个人资料添加标签。以类似的方式,一旦我们根据历史数据训练了机器学习算法,它就可以开始预测趋势或交易的利润和止损目标。同样,在 F & O 中,您可以使用机器学习来创建不同类型的策略,如备兑买入、保护性卖出。algo 交易设置可以通过估计未来几个周期的高点和低点来完成,然后相应地对冲风险。我想在这里补充一点,即使你是观察图表模式和使用各种指标预测未来价格的天才,你也可以通过用 Python 编写你的策略,然后让机器为你做这些工作,从而从 ML/AI 算法中受益。
问题#2: 一个 AI 能像 DeepMind 能打败围棋一样打败股市吗?如果实现 AI、机器学习、深度学习,会有多大的提升和影响?
Varun Divakar: 交易和围棋有一个主要区别。虽然棋盘游戏有一套固定的规则,但交易有一个情感方面,可能是也可能不是理性的。因此,尽管这可能被证明是困难的,但随着时间的推移,人们不能排除人工智能应该能够跑赢股市的可能性。因此,只要你的策略稳健,你就能获得比股市更好的回报。就影响而言,这取决于你定义问题陈述和提供准确输入的能力。在某些情况下,它可以将效率提高 100%。
问题三:云是如何用来支持算法交易的?
Varun Divakar: 有时候执行交易策略需要大量计算。在这种情况下,云被广泛用于规避架构问题。
问题#4: 与计算机视觉、图像分类等更传统领域的应用相比,AI/机器学习在金融领域的应用有何不同?输入数据有多重要?
陈欧内斯特博士:主要区别在于,由于套利活动,金融中的信噪比远低于其他应用。此外,由于套利,存在“阿尔法衰减”,因此预测准确性通常会随时间下降。金融市场偶尔会经历制度变化,因此并非所有过去的数据都适合作为训练 ML 分类器的特征。
问题# 5:‘机器学习’能否有效应用于交易,因为交易不仅取决于历史数据;它还取决于其他动态因素,如政府法规、市场条件等。
Varun Divakar: 是的,可以和 twitter 数据上的 NLP 之类的市场情绪指标一起应用。
数据
问题#1: 市场不可预测。ML 需要输入数据来训练算法以达到更好的结果,那么一个不可预测的市场数据怎么能成为 ML 算法的输入呢?
陈欧内斯特博士: ML 常用于在嘈杂的环境中进行预测。例如,自动驾驶汽车不能指望行人以完全预测的方式行事!
问题#2: 处理假新闻时,从社交媒体网站获取数据的最佳方式是什么?
Varun Divakar: 要使用来自社交媒体的数据,您可以使用 tweepy。你可以使用 botometer,这是一个用来检查特定推文是否由机器人制作的库。
问题#3: 什么是好的数据集、要应用 ML 的特征?你将如何使用 ML 进行订单流模式识别?开始应用 ML 的最佳时间范围是什么?
Varun Divakar: 你可以参考关于在 SSRN.com 的 HFT 交易中使用 SVM 的研究论文,这应该能让你很好地了解如何使用这类模型。你也可以在 Quantra 上的交易课程中尝试[免费机器学习。
问题#4: 如何为一个流动性很强的工具准备来自 OHLC 的训练数据,卷,开兴趣数据?假设我们有一分钟蜡烛,那么可靠的预测模型所需的最小数据长度是多少?如何选择正确的 MI 型号?
Varun Divakar: 前一天的 1 分钟烛台数据应该足够了。如果您想要预测趋势,请使用分类器;如果您的数据未经调整且非常庞大,请使用购物车模型。
问题#5: 如何将多个条形,即识别条形图案,合并到 algo 中?
Varun Divakar: 可以在 Python 中使用来自塔利布(技术分析库)的日式烛台图案。事实上,该库有一套全面的函数来创建](https://quantra.quantinsti.com/course/introduction-to-machine-learning-for-trading)烛台图案。
车型
问题#1: 如何利用 ML/AI 进行数量管理(买入/卖出的股票数量)从而实现利润最大化?如何创建一个 ML 模型,它可以很好地处理基于历史趋势的未来股票价格的不确定性?一个模型如何根据之前的交易决策来改进它的操作?
瓦隆·迪瓦卡尔:你可以随时使用预测的概率来调整批量大小,以实现利润最大化。你需要大量的数据,包括一个股票的不同生命周期,来制作一个健壮的 ML 算法。您需要创建另一个模型,该模型可以将该模型的预测作为输入,并预测行为。
问题 2: 你认为什么类型的 ML 或 DL 模型最适合应用于交易系统?为什么呢?
欧内斯特·陈博士:说到机器学习算法,分类模型通常优于回归模型,CART 模型和 XGBoost 在交易方面都非常好。
问题#3: 机器学习模型的自变量和输出变量是什么,运行频率如何?如果有的话,子模型是什么?假设我们已经基于货币对价格、指标等拟合了 ML 模型。在过去的 252 天里。该模型现在可以预测第二天的价格。如何在市场条件下使用?我们简单的把前一天的数据我们根据预测买/做多?我们每天都这样做吗?它的有效期有多长?我们是否每天都在更新(拟合)模型?在真实条件下,这将如何工作?
Varun Divakar: 例如,技术指标或任何与此相关的 OHLCV 数据都可以作为自变量用于预测,趋势预测作为因变量。模型应该连续运行,并尽可能快地追加新数据。
问题#4: 用于训练监督式 ML 交易模型的时间范围应该是什么。我们应该确保培训涵盖牛市和熊市吗?
Varun Divakar: 你应该尽可能频繁地训练他们,以确保算法总是最新的。
问题 5: 考虑到股票市场的噪音和随机性,在制作 ML 模型时,我们应该试图预测什么——价格、方向、幅度?还有什么模型最好用——有监督的,无监督的,强化,两者结合?
陈欧内斯特博士:使用分类器预测趋势是最常用的技术之一。但这取决于你在交易中试图解决的问题。
问题#6: 能否给我们呈现一个简单真实的 ML 模型,以及它是如何在 FXCM 这样的交易平台或者互动券商上实现的?
Varun Divakar: 你可以参考 Quantra 课程关于利用互动经纪人实施策略。
交易策略
问题 1: 定量交易的机器学习领域有多深?是否仍有空间容纳更多的量化公司,或者市场正在变得过度拥挤(就像在 HFT)?特别是对于统计套利策略?
陈恩斯特博士:就像每个交易者都有自己的逻辑来定义他/她将在交易中停留的时间,选择一个指标或定义止损目标,我们有不同的公司尝试不同的方法来创造一个最佳策略。因此,有很大的空间,因为每家公司都在尝试做一些新的事情,套利策略也是如此。
问题 2: 我可以在我目前已经拥有阿尔法的策略中应用一种不断改进的机器学习算法来帮助我更新策略参数,以保持阿尔法在不断变化的市场条件下生存吗?
陈冯富珍博士:是的,绝对正确。机器学习相对于传统算法的优势在于,根据所设计的策略,它可以不断学习和改进。
问题 3: 有没有一个策略可以让 VWAP·阿尔戈斯用进入和尾随退出来交易期权。
现在,随着强化学习在其他领域获得更多的关注,它在交易中如何适用?
瓦伦·迪瓦卡尔:使用长短期记忆(LSTM)模型进行进入和退出。您也可以使用深度学习模型,只需输入价格和与价格相关的成交量,模型将为您提供 VWAP 。深度强化模型也可以用来给出交易的进入点和退出点。例如,如果 algo 预测市场预期会低于现有价格 10 点,那么您应该输入比现有价格低 5-6 点。
同样,在下一个时间段,如果市场预期会涨至 15 点,那么你就把退出点放在这个价格附近。当然,这也将取决于您的风险偏好,上述示例只是一个概括,而不是规则。
问题 4: 在外汇和隐币交易中,是否存在夏普比率大于 1.0 且持续盈利的机器学习策略?
T29】Varun diva kar:是。有许多交易者一直这样做。
市场交易
问题#1: 对于几乎没有编程经验的新手级别的交易员,如果花 5-10 小时/天/周学习 setup Algo 业务需要多少时间?
Varun Divakar: 如果你在努力,那么你可以在 6 个月内成为一名合格的 algo 交易者。
问题二:预测股市最好的 algo 是什么?
陈欧内斯特博士:预测股市没有“最好”的算法。每个交易者都有他/她自己的交易风格,这是基于你如何利用你的经验和机器的计算能力来开发你的模型。任何符合你期望的算法都是最适合你的。
问题#3: 有没有证据证明算法交易对期货、股票、外汇、加密货币等市场有效??
Varun Divakar: 就对 algo 交易的接受度而言,80%的美国股票交易都是基于 algo 的,而且还在上升。你可以参考 SSRN.com 发表的关于算法交易各个方面的文章。因此,我觉得这是算法交易在各种市场都有效的最好证明。
问题#4: 机器学习在动荡的市场中行得通吗?怎么会?
Varun Divakar: 虽然机器学习适用于所有类型的市场,但它取决于创建和编码交易策略的人的技能。因此,只要你能优化进场点和出场点,并部署一个能合理准确预测股市的策略,你的盈利能力就会增加。
问题 5: 我有一个低买高卖的算法。一旦进入交易,它可以因止损(交易从一开始就有负 P & L)或归还(交易从第一天开始赚钱)而平仓。盈利/亏损交易的比例大约是 80/20,但是亏损交易在每次交易的基础上是非常强大的。我有其他信号来剔除亏损的部分,但它也剔除了一些盈利的交易。ML 或 AI 在这方面有帮助吗?
Varun Divakar: 你需要训练一个 ML 模型,通过在交叉验证期间瞄准精度和召回指标来识别获胜的交易。
问题#6: 我想从几个市场网站中找出一些关于上市公司的正面新闻,以帮助我确定哪些股票可能会在短期内上涨。然后我想从一些指标中反弹这些股票,然后实时给我信号。NLP 能帮助我识别哪些新闻故事可能会产生积极影响吗?或者,你会推荐另一种过滤新闻的方法吗?这种方法最有可能导致短期的真实或基于情绪的上涨。
Varun Divakar: 可以使用 NLP 技术,从 Tweepy 导入数据,了解市场情绪,创建模型。
问题#7: 人们应该期待在相对静态的系统(如信用欺诈)上最有效的机器学习在市场这样的动态系统上持续成功吗?陈欧内斯特博士:用 ML 预测金融市场肯定比预测信贷欺诈更具挑战性。但是有人成功了。
计划、工具和因素
问题#1: 我们可以单纯基于机器学习进行交易吗?机器学习会终结散户可以交易的市场低效吗?
陈欧内斯特博士:机器学习在不同的领域有着各种各样的应用,包括金融。使用机器学习进行交易的主要目的是消除人工交易的情绪成分,以及比正常人更快地发现市场中的低效之处。在这方面,回答这个问题,是的,我们可以使用机器学习创建一个交易策略,一旦部署,它可以自己触发买入或卖出订单。
回答第二个问题,机器学习很有可能会终结市场的低效率。但是,你必须明白,每个交易者都有自己的风险偏好,这将反映在他们的交易策略中。因此,机器学习交易策略主导市场的未来可能是一个不同的场景,但总会有不同的机会存在。
问题#2: 开发 alpha 有什么系统化的方法、流程或工具吗?
Varun Divakar: 你可以先试试蓝移。这是一个免费的快速回溯测试平台,拥有涵盖多个资产类别和市场的分钟级数据。
问题#3: 如何设置应急预案拔掉插头?
Varun Divakar: 杀死一个 algo 要考虑止损标准和下单率。对交易进行持续的绩效监控是一种方法。例如,如果在一段时间内,交易者损失超过 0.5%,那么你就砍掉它。最终,这取决于你的风险偏好。
问题 4: 在众多不同的神经网络工具中,你会推荐哪一个?
Varun diva kar:深度强化模型在交易中效果不错。也可以用、和甘来交易。
问题五:强化学习交易可靠的因素有哪些?
Varun Divakar: 订单行为以及分笔成交点数据是可靠的强化交易所需的一些因素。
问题#6: 期权交易中有没有抵消滑点的技巧?你能定制订单,让它们对某些潜在事件而不是期权定价做出反应吗?
Varun Divakar: 是的,你可以使用强化模型,它可以被训练来对某些事件做出反应,例如购买或出售事件。为了抵消滑点,你可以用一个算法来预测我们应该使用限价单还是市价单。
问题#7: 股票阿尔法交易可以使用什么样的机器学习工具?
Varun Divakar: 你可以使用深度学习模型来创建指标/策略,这将有助于创建基于 alpha 的模型。为了优化阿尔法,你可以尝试决策算法。
问题#8: 是否可以使用渐变来检查峰值?
Varun Divakar: 是的,可以使用渐变来检查峰值。在 Python SciPy 库中,您可以使用最小化和最大化函数来查找可用于检查波谷和波峰的局部最小值和局部最大值。
问题#9 :如何使用机器学习进行正风险调整的 alpha 生成?
Varun Divakar: 你可以指定问题语句,然后生成一个决策树模型,可以解决它。一旦您对模型感到满意,就可以使用决策树来创建 alpha。
回测
问题#1: 如何才能避免过拟合的问题,回测时需要考虑哪些特殊点?
Varun Divakar: 可以使用正规化或者增加数据点。简而言之,在我们开始练习之前,我们应该清理数据,并努力确保模型更侧重于找到一种模式,而不是记忆数据。除此之外,您还应该执行超参数调整以及交叉验证。
问题#2: 你会推荐构建自己的回溯测试器吗?或者我应该使用已经可用的回溯测试工具吗?你会推荐什么样的回溯测试软件/工具?
陈欧内斯特博士:最好使用那些已经可用的,因为从头构建一个是一个非常耗时的过程。你可以随时尝试 Blueshift ,它不仅仅是一个回溯测试平台。
预测
问题#1: 目前在做一个关于时间序列预测的项目,使用生成式对抗网络(GANs)进行股票市场价格预测。不是真的有预测的意图,更多的是作为概念的证明。除了 OHLC 加卷,我试图找到好的功能,技术指标,其他资产等。我可以用来喂甘。问题是:我可以使用哪些,或者哪些是交易者目前用来了解股价走势的?
陈欧内斯特博士:你可以尝试添加基于情绪的数据来提高准确性。例如,使用 tweepy 获取 twitter feed 情绪,然后添加滚动情绪得分。
除此之外,交易者确实使用技术指标,如移动平均线、RSI,以及交叉策略来获得市场运动的公平想法。
问题#2: 使用神经网络 (MLP)预测股票价格时,数据中包含技术分析指标一般有帮助吗?还是用具体的股价数据就足够了?
陈欧内斯特博士:是的,技术指标的确有助于预测股票走向。
不,仅靠股价可能不足以盈利。
问题三:在一个分类问题上,你想预测股票会涨还是会跌?你是怎么做到的?请解释你是如何用你的代码下订单的?
Varun Divakar: 可以使用 Sklearn 的分类器模型。例如,您可以使用决策树分类器,并将过去的 OHLC 数据和一些指标作为输入,并将数据中的上升趋势点和下降趋势点标记为要预测的相应输出。虽然实际代码会太长,但你可以参考任何一个机器学习博客和代码,它们详细解释了各种概念。
简报
您可以点击此处查看本次网络研讨会的 powerpoint 演示文稿:
https://www.slideshare.net/slideshow/embed_code/key/e9ujBrSJtPCedz
交易中的机器学习 Q & A 作者欧内斯特·陈博士 来自 QuantInsti 查看我们所有的 40+之前的幻灯片演示文稿。
网上研讨会录制
https://www.youtube.com/embed/m4BFOSaos7M
概述
欧内斯特·陈博士关于交易中的机器学习的问答环节是向他提出任何关于这个话题的问题的绝佳机会。这对那些希望在人工智能、云、机器学习等领域应用他们的技术技能的人很有帮助。金融市场或渴望成为算法交易社区的一员。
在我们的网络研讨会中,我们会尽力满足与会者提出的所有问题/疑问。有些问题对很多人来说是共同的,而有些则是独有的和小众的。这两种类型的问题都为所有参与者带来了新的视角,并使主题更加清晰。
事件规格:
- 美国东部时间 2019 年 6 月 11 日星期二上午 11 点| IST 时间晚上 8 点 30 分|新加坡时间晚上 10 点
- 在网上研讨会之前,问题被列入候选名单。
- 问题针对以下类别:人工智能、机器学习、深度学习及其在金融市场中的应用。
关于作者T5】
关于陈欧内斯特T5】
欧内斯特·陈博士是 QTS 资本管理有限公司的管理成员。自 1997 年以来,他曾在多家投资银行(摩根士丹利、瑞士瑞信银行、Maple)和对冲基金(Mapleridge、Millennium Partners、MANE)工作。
陈博士获得了康奈尔大学的物理学博士学位,在加入金融业之前,他是 IBM 人类语言技术集团的成员。他是总部位于芝加哥的投资公司 EXP Capital Management,LLC 的联合创始人和负责人。
陈的作者也是:
- 量化交易:如何建立自己的算法交易业务(Wiley),
- 算法交易:获胜策略及其基本原理
- 机器交易:运用计算机算法征服市场。
他是 http://epchan.blogspot.com 一位受欢迎的财经博主。
关于 Varun Divakar
Varun Divakar 是
QuantInstiQuantra研发团队的成员,负责使用
量化和机器学习技术创建交易策略的内容。在 QuantInsti 之前,Varun 在 Futures First 担任助理商品交易员,管理国际能源和软件市场。
您可以在 Quantra 上注册在线机器学习课程,该课程涵盖分类算法、机器学习中的性能测量、超参数以及监督分类器的构建。
量化金融机器学习导论
原文:https://blog.quantinsti.com/machine-learning-webinar-15-june-2017/
https://www.youtube.com/embed/V1vMkd8jFy4?rel=0
6 月 15 日星期四,IST 时间晚上 8:30 |太平洋标准时间上午 8:00 |美国东部时间上午 11:00
机器学习导论
这几天大家都在讨论机器学习。这个关于机器学习的激动人心的网络研讨会将带您了解机器学习的基础知识,它将涵盖 Quantiacs 工具包的酷功能,并说明如何使用 Quantiacs 创建和测试机器学习策略。
会议大纲
- 机器学习概述
- 机器学习过程
- Quantiacs 工具包的各种功能
- 使用 Quantiacs 将机器学习应用于期货数据
- 讨论结果
- 机器学习技巧和陷阱
- 问题和答案
//www.slideshare.net/slideshow/embed_code/key/lTKT3cJkkrdgNn
Introduction to machine learning for quantitative finance webinar ppt from QuantInsti
扬声器
埃里克·哈默
首席技术官-quanti ACS

Eric Hamer 是一位连续创业者,拥有物理学和计算机科学学位。Eric 的经验包括机器学习、云计算和 Python 编程。在加入 Quantiacs 之前,Eric 是移动媒体公司 NetInformer 的创始首席技术官,该公司的客户包括美国职业棒球大联盟、NCAA 和威瑞森无线。在 NetInformer 之前,Eric 在 Keynote Systems 工作,在那里他发明了获得专利的 Transactive Perspective,用于测量和监控互联网的性能。
谁应该参加?
- 对机器学习感兴趣的 Python 程序员
- 对机器学习感兴趣的交易员/定量分析师/分析师
- 期货交易员
- 学生和学者
宏观经济学:介绍,因素,政策,对交易的影响
以重香重香
宏观经济学是一个庞大的话题,但其核心类似于一个家庭的财务规划。每个家庭都知道他们必须平衡收入、支出和储蓄。我们这里用一个简单的等式,收入=支出+储蓄,希望储蓄部分每次都最大化。宏观经济学是类似的,除了它处理整个国家的钱!或者在某些情况下,甚至是一组国家。
让我们回顾一下本博客中讨论的主题:
宏观经济学的定义
宏观经济学是对影响整个国民经济的力量的研究。一个国家的政府试图关注国内生产总值、失业率、通货膨胀率等因素,并制定政策将它们保持在健康的水平。与关注个人消费者或公司的微观经济学相比,宏观经济学着眼于大局,检查国家的表现。此外,根据其目标,国家制定货币和财政政策,引导经济走向光明的未来。
等等!虽然宏观经济学可能很复杂,无法在一篇文章中涵盖,但我们将尝试专注于几个关键概念。只要记住一点,不管是家庭还是政府,大家都希望你有一个比今天更好的未来。
在我们深入研究这些因素之前,让我们回顾一下过去,了解一下宏观经济学在过去几十年是如何演变的。
宏观经济政策简史
虽然过去有很多理论,但据说数量理论可能是第一个着眼于大局的理论。埃尔文·费雪的版本很简单,
M * V = P * Q
在哪里,
M =货币供应量
V =货币流通速度(货币单位在某一时间用于购买商品/服务的次数)
P =价格水平
Q =生产的商品数量。
在正常情况下,我们通常将货币流通速度和生产的商品数量视为常数。因此,增加货币供应量(M)会导致价格水平的上升。
例如,假设经济中只有一种商品,即手机。现在,如果我们增加货币供应量,这意味着更多的人有更多的钱。现在他们都想买一部手机,但是手机的生产数量是不变的。按照正常的供求情况,厂商提高手机价格,让部分买家望而却步。因此,尽管我们的货币供应量增加了,但价格水平的上升抵消了它。
有趣的事实:这正是通货膨胀的运作方式,本质上,大多数国家的中央银行或美国联邦储备委员会在某些情况下都会这样做,以确保经济不会在路上颠簸。
虽然这个等式在大多数情况下成立,但有时它可能会动摇。怎么会?
人们认为,通常降低商品价格会有助于清仓。然而,在大萧条时期,经济学家无法解释为什么商品卖不出去,工人失业。
在这一点上,凯恩斯经济学站稳了脚跟,并发展成为现在被认为是宏观经济学的领域。虽然这不是实际情况,但随着衰退的开始,公司开始减少商品支出。甚至普通人也开始把钱攥在手里,而不是花在某个地方。这产生了乘数效应,因为没有人愿意花不必要的钱。因此,经济急剧下滑,导致了大萧条。
虽然有几种理论和思想流派,但人们普遍认为,经济应该是自由市场和政府的结合,以确保它不会变得不稳定。
现在让我们开始研究基础知识,理解我们称之为宏观经济学的大图景的各个部分。
宏观经济因素
正如我们之前说过的,宏观经济学着眼于大局,即经济表现如何?为了帮助我们回答这个问题,宏观经济学家提出了如下一些因素:
国内生产总值
简单地说,GDP 给我们一个国家一年生产多少的货币价值。想象一个由两个儿子和两个女儿组成的家庭。姐妹俩生产电动自行车,花了她们 100 万美元。而兄弟俩花了 100 万美元定制自行车引擎。因此,你会说这个家庭一年的 GDP 是 200 万美元。
以类似的方式,你将计算一个国家生产的所有产品的货币价值。
为了让你有一个想法,下面是 2019 年的一些国内生产总值数据:

(来源:【2019 年国内生产总值)
是的,考虑到一个国家有如此多的不同部门、私营企业和公共企业,你想知道如何得到这些数据是对的。通常,该国有一个专门的政府机构来收集和计算该国的 GDP 数据。
其实也可以看到历年的世界 GP,如下图:
https://data.worldbank.org/share/widget?indicators=NY.GDP.MKTP.CD&view=chart
你是如何计算 GDP 的?
概括地说,有三种方法来计算 GDP,它们应该给出相同的数字。让我们看看这些是什么:
A.产出(或生产)法——在这种方法中,你计算出所有生产出来的商品的最终价值,但减去过程中消耗掉的任何中间商品的价值。以家庭为例,如果一辆电动自行车价值 1000 美元,但所用的钢材和材料价值 700 美元。那么最终价值将是 300 美元。
B.支出法——这种方法和早先的方法有点相反,我们计算的是在国内的支出。支出法的一个简单公式如下:
GDP = C + G + I + NX
这里,C 指的是大多数个人或私营公司的消费。
g 指政府支出,
I 代表资本货物投资
NX =出口-进口
简单地说,假设任何支出都将发生在这四项中的任何一项,因此,如果将它们加起来,我们将得到总支出或支出的值,这被称为国内生产总值。
C.收益法——顾名思义,收益法就是告诉我们把所有挣得的工资、租金、利息或利润加起来。这会告诉我们这个国家赚了多少,是 GDP。
这是对 GDP 计算方法的过度简化。在现实世界中,我们还必须考虑包括(或在某些情况下排除)税收、补贴和回扣,这可能会扭曲真实数字。
计算国内生产总值的另一个重要因素是通货膨胀的影响。
但是为什么通货膨胀如此重要呢?
不考虑通货膨胀的 GDP 数字被称为名义 GDP。现在假设一个国家的国内生产总值在 2018 年达到 1 亿美元。由于某些因素,该国实际上在所有部门生产了相同数量的单位。但由于 5%的通货膨胀,名义国内生产总值为 1 . 05 亿美元。
因此,对于一个局外人来说,这个国家的经济看起来增长了 5%,而事实是什么都没有改变。因此,我们使用经通胀调整的 GDP 来清楚地了解该国的表现。这叫做真实 GDP 。
实际国内生产总值总是以某一年为基准来计算的。例如,美国的基准年是 2012 年,而印度是 2011-12 年。
但是现在你想知道不同的国家如何相互比较。例如,虽然印度和英国的 GDP 数据很接近,但人口数据却完全不同。
这就是为什么你用实际人均 GDP 来理解一个国家的表现。因此,尽管印度的 GDP 数字可能比英国大,但它的情况更糟,因为它不得不将这个数字分配给更多的人口。
人均国内生产总值如下:
https://data.worldbank.org/share/widget?indicators=NY.GDP.PCAP.CD
一些宏观经济学家更进一步,使用购买力平价(PPP) 来比较不同的经济体。购买力平价试图比较不同国家之间的类似支出。
例如,在下表中,我们看到同样的租金支出,你在 A 国要比 b 国多支付 10 倍。因此,A 国的购买力平价是 b 国的 10 倍。
| 费用类型 | 国家 | 国家 |
| 两室公寓的租金 | One thousand | One hundred |
| 食品和杂货 | Five hundred | Fifty |
| 总数 | One thousand five hundred | One hundred and fifty |
让我们进一步探讨下一个宏观经济变量。
失业率
失业率就是失业人口占工作人口的百分比。有两种类型的失业:
- 摩擦性失业:在这种类型中,失业是由于处于两个工作之间的人或两个工作之间的过渡时期。
- 周期性失业:随着经济收缩或增长,某些工作可能变得多余,公司被迫解雇员工。
低失业率表明,随着新人进入劳动力市场,经济足以创造新的就业机会。想想看,如果有高失业率,它会导致人们接受他们得到的第一份工作。例如,一个高度合格的专家会从事一份比萨饼送货员的工作,因为没有适合他们专业的工作。这导致就业劳动力的不满以及失业者的不安。
但是如果低失业率对经济有好处,那么 0%的失业率是最好的吗?
答案并不像看起来那么简单。研究表明,如果没有失业人员,劳动力之间就没有竞争,公司可能会倾向于雇用非技术工人或第一个申请工作的人。这可能导致效率降低,并最终减缓经济的发展。
因此,虽然低失业率有助于稳定经济,但 0%以及高失业率都是不可取的。
让我们转向下一个重要的宏观经济变量
通货膨胀率
通货膨胀率告诉我们一件商品的价格增加了多少。例如,如果一条面包在 2019 年定价为 1 美元,但增加到 1.05 美元,那么我们会说价格上涨了 5%。
同样,一个经济体的通货膨胀率是通过确定某一篮子商品的价格水平来计算的。这些将包括食品、服装、住房、电子产品、教育费用等。一旦确定了这些项目,你就可以计算每年的价格水平,从而估算出通货膨胀的程度。
世界通货膨胀率如下:
https://data.worldbank.org/share/widget?indicators=FP.CPI.TOTL.ZG
高通胀对经济来说意味着坏消息吗?
这个问题的答案很复杂,因为乍一看你会想说是。但如果先说基本的,我们来回答一下为什么会发生通货膨胀?
这是一个简单的供求问题。如果一种产品供不应求,价格必然会上涨。在正常情况下,通胀可能是经济实际繁荣的一个指标。
以较早使用的手机为例,如果提高价格,人们仍然购买,这将是现有环境不能够满足需求的迹象。因此,新进入者将进入市场,带来更多的就业机会,生产更多的商品,进而增加支出,从而增加 GDP。
事实上,在 2000 年代,印度和中国的通胀率和 GDP 都很高。当然,在某些情况下,经济可能会因为不受控制的通货膨胀而严重崩溃,这被称为恶性通货膨胀。因此,政府和中央银行总是密切关注通货膨胀率,以确保它不会失控。
这就把我们带到了下一个宏观经济变量。
利率
利率是另一个告诉我们经济状况的宏观经济变量。利率是根据通货膨胀率和经济的流动性要求决定的。
美国联邦储备委员会不断调整利率以控制通货膨胀。我们将在稍后的博客中讨论美联储的角色。
低利率通常会鼓励公司借钱用于扩张,从而帮助经济增长。然而,如果通货膨胀率持续上升,利率就会上升,这就阻碍了个人和公司的借贷,从而减少了市场的流动性。因此,需求通常会降低,通货膨胀也会减少。
这些是一些有助于我们理解经济状况的宏观经济变量。但是我们能控制这些因素吗?
从某种意义上说,是的。让我们在下一节中了解如何做到这一点。
宏观经济政策
也就是说,有两种政策可以用来给出最佳的宏观经济数据。
货币政策
货币政策是由中央政府决定的,比如美国的美联储。中央银行通常为银行设定利率水平,银行反过来控制经济中的货币流动性。
对印度来说,印度央行制定政策并实施各种措施,如设定回购和反向回购利率,以确保印度经济平稳运行。想了解更多,可以访问官网这里。
同样,新加坡金融管理局执行新加坡的货币政策。
财政政策
政府为经济制定财政政策,宣布针对某些地区或行业的特别计划,甚至在困难时期为某些部门提供一揽子刺激计划。税收结构也可以修改,要么刺激经济,要么防止经济过热。政府可以通过投资对私营企业来说太大的关键项目来影响国家的 GDP。
宏观经济因素和政策会影响金融市场吗?让我们在下一节中找出答案。
宏观经济学和金融市场
想想看,你是一个投资者,希望做多一家制药公司。在政府最近的一次预算会议上,宣布药品税将减少 20%。
你知道这会增加制药公司的收入。你将立即购买该公司的股票。其他交易员也有同感,在很短的时间内,该公司的股价就上涨了。在这个时候,公司的运作没有任何变化。
让我们再举一个例子,一家公司正处于成长阶段,正在寻求在其他市场扩张。由于贷款利率的降低,该公司获得了贷款,并用这笔钱在另一个地区建立了一家工厂。由于该公司的产品已经很受欢迎,贸易商知道新工厂将为公司增加收入。因此,该公司的股价上涨。
在特朗普政府期间,制定了一些政策来促进美国本土的制造业。这为采购当地制造的产品而不是从国外采购产品提供了激励。这影响了严重依赖其他国家的公司,这些公司在当地社区找不到高质量的替代品。然而,一个公司可以利用这些政策,迎合这个市场以前并不存在。
相比之下,某些经济体制定吸引外国投资的政策。印度早先是一个封闭的经济体,从 1991 年开始,通过一系列改革向外国投资敞开了大门。这导致了经济的进步,并使得获得外国资本对投资者和印度公司都有利。由于这些政策,信息技术部门蓬勃发展。
这些是宏观经济因素如何影响股票价格的一些例子。众所周知,每当美联储降低利率时,美国股票市场都会经历一次短期的上涨。因此,一些交易者实际上把他们的交易安排在美联储开会的日子。你可以在我们关于事件驱动策略的课程中了解更多关于这些基于事件的交易方法。
如何进一步了解宏观经济因素?让我们在下一节看看。
学习宏观经济学的资源
下面是几本书,也是研究生或研究生水平的经济学学生使用的
- N·格里高利·曼昆的《宏观经济学原理》
- 《宏观经济学:原则、问题和政策》,作者:Campbell McConnell,Stanley Brue,肖恩·弗林
- 宏观经济学,作者保罗·克鲁格曼;罗宾·威尔斯
- 布拉德利·席勒和卡伦·格布哈特的《今日宏观经济》
- 圣路易斯的美联储银行。数据库来获取宏观经济时间序列数据。
- 世界银行公开数据|数据
随着数字学习的出现,你也可以在各种网络平台上注册电子学习课程,学习宏观经济学。
结论
宏观经济学是定量评估一个经济体表现的研究。你已经经历了不同的宏观经济因素,如国内生产总值,失业率和利率。你也了解了财政和货币政策如何影响这些宏观经济变量。此外,你已经看到了宏观经济因素如何影响股票市场。
免责声明:本文中提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。
学习如何帮助马赫什成为算法交易者
“知道是不够的;我们必须申请。愿意是不够的;我们必须这样做。”
——约翰·沃尔夫冈·冯·歌德
这句美丽的名言完美地解释了仅仅获得知识是远远不够的。实际应用是生活中所有事情的关键。交易是一个值得注意的例子,如果你学以致用,付诸实践,并在正确的指导下前进,你只会变得更好。
我们带来了 Mahesh Sangade 的成功故事,他在生活中应用了这一点——无论是个人还是职业——并塑造了自己作为算法交易者的身份。他毕业于知名院校,获得了 IIT 大学的工程学学位、IIM 大学的 MBA 学位和 CFA 学位,尽管他的旅程可能充满挑战,但他积极的态度、纪律、一致性、信心和耐心帮助他成长并取得了成就。
以下是我们与马赫什的对话。
嗨马赫什!你能给我们介绍一下你自己吗?
嗨!我是 马赫什·桑加德 。我完成了我的工程学和 MBA 学位,然后开始了我通往传统公司阶梯的旅程。
尽管我在银行工作,但我的热情是交易,因此在 2015 年后的 4 年里,我一直积极交易。不过,当时我从未想过要全职从事这项工作。我害怕自己是否能持续表现,或者是否有正确的策略。
我总是在想:我应该在股票市场上从事全职工作吗?
我应该继续我的银行日常工作吗?
我不断存钱,并且从未停止用很少的资金测试我的策略。所以我这样做了将近 4 年。然而,我在这里!
在市场时段,我积极交易。所以,是的,现在我正在追求我对全职交易的热情。我还管理着我们的另一项业务,关于手摇纺织机和手工艺品(请务必查看 www.ivariti.com)。
我喜欢阅读金融知识和商业领域的书籍。我喜欢罗伯特·清崎、托尼·罗宾斯、拿破仑·希尔的作品以及很多创业相关的书籍。对我来说,阅读更多的是培养我作为一个商人的能力。
你学习交易的经历是怎样的?
我一直想进入金融领域,但不是特别想进入市场。因此,作为一个典型的金融野心家,我读了 MBA、CFA,还读了 CMT 一级。我有一点信心,我可以做到这一点。我也在积极投资共同基金——每个月差不多有 60-70%的工资投入其中。
所以我为自己攒了一些资本。在我的大学生活中,我不太确定是自己做点什么,还是走上一条人迹罕至的道路,但我阅读了大量商业书籍,大多与金融知识和企业家精神有关。所以,我认为这改变了我很多事情。
我的心态变成了“我应该做我想做的事情,不管一天结束时产生了多少收入”。对我来说,成功的定义已经改变了。我相信你一定会在任何符合你兴趣的领域做得很好。
从化学工程到算法交易?这是怎么发生的?
这不是计划好的;我不太确定,随着接触越来越多,我的目标在学术生活中不断变化。直到 12 日,我的目标是进入 IIT,我进入了 IIT 古瓦哈蒂,并在那里做我的工程和类似的 MBA。
我有银行背景;我的父母和很多亲戚都是银行业的。所以通常,从一开始,我就对同样的事情感兴趣。但当我加入了一家银行,我觉得这不是它。但是,我还是工作了四年,还清了教育贷款,为自己的交易生涯攒钱。
对于交易来说,你肯定需要足够的资金来全职生存。随着时间的推移,我意识到,如果你想在生活中做一些不同的事情,自学是关键,做你喜欢的事情应该是方向。
你能告诉我们你的交易之旅吗?
我在 2015 年开始交易,在我完成 MBA 之后。第一份工作入职前有 2-3 个月的空档期。我有个朋友叫 Ekansh,他经常全职交易。所以,我经常去他那里,看图表,想知道他是怎么交易的。
那是我对交易世界的介绍。从那时起,我一直在不断学习,尝试不同的策略,当然,我已经烧了很多资金,但我认为这是一个市场学习费用,并采取这种方式。
我还努力改变我家人的心态,以确保他们在这段旅程中与我同在。在冒险时,让家人保持一致是非常重要的。
我参加了 QuantInsti 课程,在那里我了解了正确的系统交易方法,其中有一些我们需要遵循的策略——正确的进场、出场和止损。EPAT 是我进入股票市场全职工作的垫脚石。
有很多错误,最终我明白了——需要改变方法。我过去跟踪很多技术分析,交易模式和趋势等等,但随着时间的推移,我意识到最好把统计数据和你的预测能力结合起来。有时候你的预测可能是错误的,但是如果你正确的管理你的交易,你会活下来。
这是我交易思维模式的转变。所以,我减少了定向交易,开始更多地基于统计数据进行交易。目前,我的大部分策略是基差卖出——我做了很多铁秃鹰、蝴蝶或单边垂直价差。我会检查未来几天某个特定价差在特定水平到期的概率。基于判断或方向的呼叫较少,但基于统计的呼叫较多。
所以,在参加了这个课程后,我在两个月内就辞职了,从那以后我就自己做交易了。旅程现在进行得很顺利。
算法交易是如何进入你的职业生涯的?
在一天结束时,NSE 网站上会出现大量市场数据,如 Bhavcopy 数据、OI 数据、交付量等。每天都会产生大量的数据。
每当我工作的时候交易,我意识到很多时候我错过了进场和出场,止损,因为我在那段时间不活跃。我会按 alt+tab 键做交易。
举个例子,如果我在开会或忙于一些活动,我会错过一些进场,甚至当我想在某个特定的水平进场时,市场会很快获得动力,甚至在我进场之前,市场已经波动了很大幅度。
所以,我考虑用算法来做这件事。我不确定这在印度是否合法,那里有很多规章制度,也不太清楚。我甚至不确定散户交易者是否能使用如此强大的交易系统。那是我与 QuantInsti 联系的时候。
我开始相信这对于一个散户来说是可行的。我尝试了一下,EPAT 给我提供了很好的编码、统计、贸易管理知识,并让我接触了 Python。我用 Python 写了很多代码,通过浏览这些数据,帮助我找到了很多交易机会。这样,事情对我来说已经改变了。
Nitesh Khandelwal(QuantInsti 的联合创始人兼首席执行官)做了一次讲座,内容是关于建立自己的 Algo 交易公司。这太好了,它给了我信心,让我相信我可以做到这一点,并在未来朝着这个方向努力。我当然有在贸易方面做大的计划,但是我想先解决我们新开始的生意。
我感谢 QuantInsti 的所有支持。拉克西米,我的关系经理帮了我大忙。Nitesh 打电话给学生并考虑他们的反馈也很好。与 QuantInsti 团队和教职员工的互动非常愉快,他们为我提供指导、支持和快速解决我的问题。
你对以下几点有什么想法?
编码及其作为一项技能的重要性:
媒体上有一句话:“不学习编码的交易者在不久的将来会变得无关紧要”。事情正在发展,随着算法的接管,由算法和人类执行的交易数量将会上升,保持相关性比仅仅依赖传统工具更好。这是我进入编码领域的触发点之一。
我有非常基本的编码知识。我在工程期间学习了 C / C++,那段时间,编码对我来说也很有趣,但是我已经失去了联系。编码只有通过实践才能掌握。
当我开始学习 EPAT 时,我是作为一名新生开始的,因为我什么都不记得了,但自从加入这个课程以来,我第一次在这里学习 Python,并且我一直在定期练习 Python。我可以说我已经积累了相当不错的 Python 知识,这对我帮助很大,并证明对我的交易和数据分析非常有用。
交易变得越来越系统化,而不是情绪化。当然,我是根据我的判断进入交易的,但是交易管理完全是由 algos 管理的。绝对没有人类情感的空间。
我认为交易最重要的部分之一是“T0”纪律,因为我已经看到我的许多交易都是按照计划进行的,但当市场开始出乎意料地表现时,你往往会通过情绪化来扩大止损,然后积极的交易就会变红。有很多例子。因此,说到交易,纪律是最重要的。现在当然要感谢 algos 了!
我认为'信心'是我所说的关于纪律的关键参数之一。信心是交易的第二大因素。数据处理和系统化的方法帮助我获得了自信。
这是交易者必须具备的两个品质。
技术分析是一种技能:
我已经学了 4 年多了。我从基本的技术分析课程开始,学习如何构建蜡烛。这是一个探索技术分析的旅程。我研究过很多技术指标,我过去很依赖布林线或 RSI 或 VWAP。
随着时间的推移,我发现了对我最有效的指标。在过去的几个月里,我一直只用支点和 CPR。当然,不同的指标适用于不同的人,他们的策略,他们的时间框架等。这是一次探索什么适合我的旅程。
在技术分析中,我们总是说图表反映了一切。我看着图表,做一些基本的图表,绘制趋势线等。这给了我一个良好的开端,什么可以在这个脚本可能的贸易。我认为这对我来说是一个很好的起点,它也给了你一个更大的画面和关键级别的想法,这给了你一点安慰,让你有耐心。
我可以等待我的交易顺利完成,因为在期权销售中,即使市场不动,你也能赚钱。所以,这帮助我有耐心在一周内坚持我的交易。
耐心是交易者必须具备的第三个品质。
马赫什,你能给我们讲讲你自己的事业吗?你的下一步是什么?
手摇纺织机业务与 Anupama 合作,我们是一个伟大的团队。她在这方面很有经验,知道 200 种纱丽服的立体图案。她还在写一本关于立体裁剪的书。我们在网站上和立体裁剪工作室销售手摇纺织机和手工艺品。她负责管理公司,我负责管理财务和后台运营。
当你在公司工作时,你有预先定义的角色和职责。但当你在做自己的事时,我觉得这完全是另一回事。
所以我在这里,管理客户,营销,运营等。为此,我还学习了网站设计。你在这个过程中学到了很多东西——我喜欢这样!这都是自学。
你通过做事来学习。
我的重点是交易。目前,事情发生了很大的变化,我们都辞去了工作,去追求我们的激情。因为以前我经常随意交易——或大或小亏损,或大或小盈利——这不是一个稳定的表现。当我以交易为生时,一致性变得非常重要。
你对有抱负的交易者有什么话要说?
当你交易时,纪律、一致性、信心和耐心是非常重要的。
更多地根据数据交易,而不仅仅是根据你的预测。所有交易的管理都应该由算法来完成,而不是受人类情感的支配。当然,你可以输入你的交易基础和你的信念,但是交易管理用 algos 做得更好。
谢谢你的时间,马赫什。和你谈话很愉快。这对你来说是一个相当具有挑战性的学习过程。我们祝你在贸易事业中取得巨大成功,并祝你手摇纺织机生意兴隆。
用终身技能武装自己,这将永远帮助你提升你的交易策略。通过统计和计量经济学,金融计算和技术,机器学习等主题,EPAT 确保你熟悉在交易领域取得成功所需的每一个领域和技能。
在此查询。
免责声明:为了帮助正在考虑从事算法和量化交易的个人,本案例研究是根据 QuantInsti 的 EPAT 项目的学生或校友的个人经历整理的。案例研究仅用于说明目的,并不意味着用于投资目的。EPAT方案完成后取得的成果对所有个人而言可能不一致。T15】


T2】
T2】





由
浙公网安备 33010602011771号