基于动量的低频和高频交易策略

https://www.youtube.com/embed/Pjtuw3y6W2A
在 2015 年 12 月 3 日,QuantInsti 举办了一场关于动量交易策略的综合网络研讨会,iRage Capital 的联合创始人 Nitesh Khandelwal 先生就低频和高频交易中的动量交易进行了讨论。
该网络研讨会重点关注常规/低频以及高频(HFT)的动量交易策略的各个方面。一些流行的动量交易策略也被深入挖掘,以选择利基动量交易策略。该网络研讨会旨在从逻辑和部署角度评估 HFT 动量策略与传统动量策略的不同之处。
详细讨论了以下几点
- 流行的动量交易策略
- HFT 的动量交易
- 动量交易的风险
- 样本模型
现在轮到你了!
- 首先,下载模型
- 修改参数并研究回测结果
- 对其他历史价格运行模型
- 修改公式和策略,添加新的参数和指标!玩逻辑!探索研究!
- 请在下面评论您的结果和建议
下载动量交易策略的样本模型
下载演示文稿
使用 IBridgePy 进行基于动量的实时交易
原文:https://blog.quantinsti.com/momentum-live-trading-ibridgepy/
该项目使用 Ibridgepy,用 Python 编写,通过 IB 网关访问和使用互动经纪商提供的证券历史和实时数据。
本文是作者在 QuantInsti【EPAT算法交易高管课程中提交的期末项目的一部分。请务必查看我们的项目页面,看看我们的学生正在构建什么。
关于作者

Kent Yew 是 Glowill Enterprise Sdn 的公司总监。Bhd。,总部位于马来西亚吉隆坡。Kent 是 EPAT 大学的校友,拥有信息技术硕士学位。
项目摘要
自动化交易计算机程序 (ATCP)用于帮助交易者解决人类交易者面临的限制,如缓慢、低效率和情绪化,导致机会损失和低回报。
本项目将交易下列多种证券和多种资产类别:
- 外汇:欧元美元和美元瑞士法郎
- 股票:XOM(埃克森美孚公司)
在本项目中,根据交易策略,欧元兑美元实时数据将用于生成交易信号,以便对与该货币/外汇对具有强烈正相关或负相关关系的不同资产类别的多种证券下达交易订单。
如果当前欧元兑美元价格高于前 5 天的最高收盘价,ATCP 将下达市场订单,买入欧元美元,卖出美元瑞士法郎和 XOM。
如果当前欧元兑美元价格低于前 5 天的最低收盘价,ATCP 将下达市价单卖出欧元美元,买入美元瑞士法郎和 XOM。
否则,ATCP 将平仓所有未平仓头寸。
选择资产类别的步骤
步骤 1 - 根据 EPAT 模块中教授的 MS Excel、python 或 R 代码进行数据相关性计算,免费数据可从雅虎财经或其他来源下载。
第二步- 根据高度相关且可通过图表目测核实的性质选择资产。


挑战/限制
下面列出了该项目注意到的潜在挑战和限制:
- 自动化交易风险- 所有交易活动都有风险。未经我们同意执行买卖指令的自动化交易会带来更高的风险。
- 市场动态的变化- 当市场条件偏离过去时,以前盈利的策略可能会变成亏损的策略。交易策略的参数并不能保证交易中的利润。
- 技术和软件故障- 技术故障可能来自经纪商,甚至可能导致问题甚至损失的交易交易所。
- 突发事件- 突发或“黑天鹅”事件,如爆发战争、央行或政府的意外决策等。不受交易员或任何自动交易系统控制的交易可能会导致价格波动突然飙升,导致无法挽回的巨大损失。
- ibridgepy 限制- 大部分特性、功能、服务、访问和交易功能只对 ibridgepy Premium 付费账户用户开放,免费 Ibridgepy 账户用户不开放。
结论
与从头开始开发相比,使用 IBridgePy 为简单的交易策略开发和部署 ATCP 相对简单和容易。
如果你想学习算法交易的各个方面,那就去看看算法交易中的高管课程(EPAT )。课程涵盖了统计学计量经济学、金融计算技术和算法量化交易等培训模块。EPAT 教你在算法交易中建立一个有前途的职业所需的技能。立即报名!
免责声明:就我们学生所知,本项目中的信息是真实和完整的。所有推荐都不代表学生或 QuantInsti 的保证。学生和 QuantInsti 否认与使用这些信息有关的任何责任。本项目中提供的所有内容仅供参考,我们不保证通过使用该指南您将获得一定的利润。/海外
**文件下载:**项目的 Python 笔记本
动量交易:类型,好处,策略,等等
作者高拉夫·辛格
动量交易是一种流行的短线交易范式。它包括识别资产价格的变化,然后在价格变化的方向建立头寸**,期望价格会继续朝那个方向移动。**
在这篇博客中,我们将了解更多关于动量交易的知识。
什么是动量交易?
在物理学中,动量这个术语用来定义一个物体的量和运动方向。同样在金融市场中,一项资产的动量是该资产在市场中的方向和价格变化速度。
动量交易是这样一种策略,你在短期分析资产,然后买入价格正在上涨的资产。然后在价格似乎已经见顶时卖出这些资产,从而获利。基本思想是,如果价格变动背后有足够的力量,价格将继续朝那个方向移动。
动量交易的基本原则是**“高买高卖”**,反之亦然。
https://www.youtube.com/embed/e5KAV7NmWvk?rel=0
著名投资家 Richard Driehaus 被认为是动量投资之父,他的投资技巧已经成为动量交易的基础。Driehaus 相信出售输家和让赢家通吃,同时将输家的钱再投资到其他开始显示势头的股票上。
利益
动量交易与通常的“低买高卖”的价值投资模式 和有点不同**。多年来,动量交易策略在金融市场上被证明是有利可图的。**
实际上,动量交易被认为比“低买高卖”更受欢迎。这是因为你购买了一项已经在上涨的资产。你不必购买一项被低估的资产然后等待市场重新评估那只特定的股票,这样你的投资最终会盈利。
使用动量交易的另一个好处是有可能在短期内获得高额利润。因为你利用了市场的波动性,动量交易最终可以归结为追逐市场表现来最大化你的投资。
动量交易是如何运作的?
动量交易策略在短期资产价格运动中寻找机会。假设是如果一项资产的价格在上涨,在没有其他因素的情况下,它将继续上涨。
把动量交易想象成一辆行驶的汽车。当你开始向前移动时,速度变慢。这是当你发现一只价格正在上涨的股票。
随着汽车加速,速度增加。如果你已经确定了股票并购买了它,你的 T4 投资现在开始增长。
看到红色交通信号,汽车减速,减速。这类似于当你看到资产价格动量损失时,在盈利时退出你的头寸。
动量的类型
动量交易有两种类型。时序动量和截面动量。
- 时间序列动量是资产的表现与其自身的历史表现相比较。时间序列动量由某个百分比利润阈值识别,超过阈值的资产买入。
- 横截面动量是一种资产相对于投资组合中其他资产的表现。这可以是被买入的十大表现最好的资产和被卖出的十大表现最差的资产。
动量策略不仅仅适用于股票。它们也可以在 期货 和国债市场实施!
影响势头的因素
资产的短期价格变化受许多因素的影响。其中一些因素如下。
- 基本面因素:如果一家公司发布任何好的或坏的基本面消息,该公司的股价将在接下来的几天内朝着特定的方向移动。理想情况下,市场应该立即对这些信息进行贴现,但对于重大公告来说,消息的渗透需要时间。
- 新闻事件:资产的动量也受到某些新闻事件的影响。在像收益公告这样的预定新闻事件的情况下,这种影响较小,因为新闻是预期的。在类似于合并公告的计划外新闻事件的情况下,动量变化更大。
- 市场波动:市场波动是使用动量交易时要考虑的一个主要因素。由于头寸是在资产价格开始波动后建立的,高波动性意味着价格有进一步上涨的潜在空间,这样你就可以获利。
- 羊群效应:在熊市中,交易者追随多数的倾向更加突出。羊群效应降低了动量交易者的利润空间。
如何发现趋势?
发现动量交易机会是非常重要的,这样你就可以确定资产的进场时间。要检测动量,你可以使用技术指标,也可以使用统计分析。
- 技术指标:检测动量的各种技术指标有:
Quantra 上的动量交易策略课程中的详细示例**涵盖了各种检测动量的方法。
对于复杂的交易策略,你甚至可以将这些指标的信号结合起来,得到更可靠的动量检测算法。
你可以阅读更多关于建立趋势跟踪策略的五个指标。
简单的动量交易策略
让我们研究一个简单的使用均线的动量交易策略的例子。在这里你将看到著名的黄金交叉和死亡交叉算法的实现。这个算法使用两条移动平均线线。
两条均线分别是慢线,或者回看周期更长的慢移动均线,比如 200。以及快线,或者回看周期更短的快速移动平均线,比如 50。

Fig 1. Golden cross and Death cross (Source: TradingView)
金叉是一种图表模式,表明价格趋势看涨。当快线与慢线向上交叉时(即从下到上),出现黄金交叉。
死亡交叉预示着看跌趋势。当快线向下穿过慢速线(即从上至下)时,就会出现这种情况。
可以建立一个简单的策略,在黄金交叉出现时做多资产,在死亡交叉出现时做空资产。
使用移动平均线寻找信号的 Python 逻辑如下。
你可以点击下面的按钮在 Blueshift 上试试这个策略!
启动蓝移上的预建策略
2015 年以来的策略回报如下。

Fig 2. Strategy Performance for long-short strategy
动量策略优于基准。通过实施适当的风险管理技术和微调参数,可以进一步提高战略绩效。
有趣的是,实施只做多策略(仅在黄金交叉时进入头寸)远比在死亡交叉时做空的策略更有利可图**。仅做多策略的回报如下所示。**

Fig 3. Strategy Performance for long-only strategy
动量交易的风险
像所有的交易策略一样,动量交易也不是没有风险。下面列出了一些需要小心的风险因素。
- 进出时机:动量交易策略极其时效性。如果进场的时间太晚,投资可能会亏本。类似地,如果错误地识别了势头的减缓,过早地退出了头寸,即使在识别了机会之后,你也失去了潜在的收益。
- 高交易成本:由于这种类型的策略识别短期机会,当与长期价值投资或买入并持有策略相比时,总交易的数量可能高**。这导致了更大的交易成本。**
- 耗时:交易者必须密切监控机会,并需要更新交易资产的所有相关消息。
- 市场情绪 : 经验上动量交易在牛市中效果最好。这是因为人类在不利条件下群居(熊市)的心理。对于相同的交易机会,羊群行为导致每个交易者的利润减少。这种效果在上面的两个策略结果中也很明显。
- 趋势反转:动量策略假设趋势将继续朝同一方向发展。然而,有时趋势逆转,这种策略失败了。
当你在实时市场交易动量交易策略时,需要实施足够的 风险管理技术。适当的仓位大小和追踪止损可以用来减少策略损失,限制你的市场敞口。
如何开始动量交易?
要开始使用动量交易,你需要首先详细了解动量交易的概念和如何发现动量的 T2,影响动量的 T4 因素和与这种投资模式相关的风险。
一个很好的起点是免费的 外汇交易课程,其中实施了横截面动量策略,并与 Blueshift 整合,这是一个创建、回溯测试和实时交易您的策略的平台。
https://www.youtube.com/embed/KXt7mq_DCx8?rel=0
为了研究动量交易的细节,你可以查看 T2 Quantra 动量交易策略课程,其中的概念由 T4 用例子解释并用 Python 代码解决。课程中教授了更多的交易策略,可以帮助你利用指标捕捉不同类型的动量,利用资产期货和事件驱动机会实施动量交易。动量交易策略在 Blueshift 上实现,也提供了 IBridgePy 的模板!
对于动量交易的高级概念,你可以查看由 Nitesh Khandelwal 主持的网络研讨会。
https://www.youtube.com/embed/Pjtuw3y6W2A?rel=0
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】**
蒙特卡洛模拟:定义、示例、代码
扎克·奥克斯
几年前,我参加了 HFT 一家期货公司的高级 Delta One/Quantitative Futures 职位的最后一轮面试(出于隐私,未透露姓名)。事情进展得很顺利,我已经回答了三分之二的可笑问题,这些问题只适用于撒哈拉以南非洲或金融面试(比如如何从一个 6 加仑和 4 加仑的罐子里取出 5 加仑);我感觉很好。他们问我关于我的优化过程——与大多数相比是上篮——我经历了我的过程,并以蒙特卡洛模拟结束,其中他们的 Quant 负责人问我如何运行蒙特卡洛模拟,以及我使用什么参数。
简单的回答是“我在多图表中运行它”,我点击蒙特卡洛——但是我决定尝试解释我的 Python 代码。我太沉迷于它了,到最后我失去了我的位置,忘记了蒙特卡洛真正在做什么。本应是一个全垒打的答案却成了一个马虎的、拖拖拉拉的、乱七八糟的答案,同时错过了关键点。我本质上解释了世界上最令人困惑的回溯测试/参数优化,并且在我解释的时候对什么是独特的一片空白。我想强调的一点是,蒙特卡洛的不仅仅是五彩缤纷的线条图。
幸运的是,我后来意识到我在抓什么——我用了我最喜欢的比喻;如果回溯测试是一个阶梯,蒙特卡洛随机地重新排列阶梯上的梯级,并确定可能结果的可能性。那个是一个答案——要是我的第一个答案就好了。不用说,我没有得到这份工作,但它给了我重要的一课——知道你的模型和代码在做什么和能够编写它们一样重要。
读完这篇文章后,我将确保你不会成为用蒙特卡罗这样的模型将自己编码到一个角落的受害者。首先,让我澄清一下,蒙特卡洛优化有几种不同的类型——它们并不都是同等创建的。首先,有完全随机的蒙特卡罗,在一个正态分布蒙特卡罗的随机,和简单的随机交易订单。随机可以进一步分为有或没有替换,但我将把它分为这三种类型
—随着我们的继续,这应该对你更有意义。我将主要关注完全(伪)随机蒙特卡罗,因为我发现它们是最有用的/最不容易出错的(关于正态分布局限性的更多信息,我鼓励你阅读纳西姆·尼古拉斯·塔勒布的 Incerto 系列)。
你们中的许多人听说过或广泛使用过蒙特卡罗优化或模拟方法——它是测量不可预测性的无价工具。它们不仅在优化问题中有用,而且对于预测诸如最大 DD 之类的事情,或者诸如你的储蓄足够支付退休费用的概率之类的复杂场景也非常有用。我主要将它们用于开发的两个关键部分;投资组合选择/优化,以及系统/投资组合压力测试。在我们深入应用之前,让我解释一下什么是蒙特卡罗模拟。
蒙特卡罗(MC)模拟是用于模拟复杂事件概率的模型,通过用预先确定的“随机”(变化)变量汇编成千上万种不同的结果。本质上,您使用特定变量的随机值运行 10k 次迭代,希望找到最佳值或确定一系列可能的结果,即使用随机性来解决复杂的问题。一个简单的例子是,根据“随机”证券权重,对投资组合的最大夏普比率进行建模——因此,您有一个由 AAPL、AMZN、AMD 和 ADBE 组成的投资组合,您希望确定这些证券的理想权重,以最大化夏普比率。
另一个更常见的场景是使用蒙特卡罗模拟来确定结果的概率——例如,给定投资组合的回报特征(均值、标准差)和初始余额,投资组合的破产风险%。从金融和工程到物流或社会科学,蒙特卡罗模拟在几乎每个领域都有应用。许多常见的指标,如 VaR 和 CVaR(风险条件价值),其核心都是从蒙特卡洛模拟中得出的,并已被证明是量化工具中的一个有价值的工具。
从中得出的最重要的一点是蒙特卡洛模拟人是无限灵活的
—如果你需要解决一个你 无法 解决的问题,蒙特卡洛模拟有可能让你非常接近正确答案。最近,我试图找到一种方法来优化利用期货市场利差的复杂策略,这种优化算法简直要了我的命。我决定我可以将传播率设置为一个随机变量,并将其作为蒙特卡罗模拟来运行,至少可以得到正确的方向——在 5 分钟& 100k 次迭代中,我有了一个简单的 15 行解决方案,解决了一个问题,当我最初试图使用最小化函数时,我可能需要 350 行 Python 代码。这是你工具箱里的活动扳手。
让我们开始吧,我将对这段代码进行注释,这样就不会太清楚什么在做什么。首先,我们需要你的安全报告。这可以从系统性能(比如我的例子)中提取,也可以通过 quantrautil 使用简单的价格数据提取。DF 应该是以证券报价机为列,有日期行和每日回报值。从技术上来说,它应该是对数回归,所以我已经包括了那个计算——但是差别通常是无关紧要的。
首先初始化数组以保存蒙特卡洛运行的性能值,并设置蒙特卡洛模拟循环,在您的 PC 允许的范围内尽可能多地定义运行次数(从 1k 左右开始,按比例增加)。重要的是要记住权重,这是蒙特卡洛模拟的魔力,因为它每次都会选择一个新值,并为优化提供动力,使每次运行都独一无二。还要注意你保存的每个值(ret,vol,Sharpe)实际上是一个数组,每次运行时都进行索引保存——所以 run 0 开始,随机化权重,并计算回报,将其保存到 ret arr 中的 index 0,然后 vol 保存到 index 0,最后是 SR。一旦你循环完成,你在 SR arr 中运行 argmax()函数(或你最大化的任何值),这将为你提供一个权重,在我的示例中为 477。这个均值跑 477 给了你最高的 SR 值,那就是你的理想体重!您可以找到所有重量的最佳值,用您的最大跑步次数进行索引
(我还包含了一个助手函数,用于将权重和报价器保存到 DF 中,并将其 Pkl 以供参考)。
#Normalize returns--Nat Log -- Technically, it uses log returns, but the difference is immaterial.
#log_ret = np.log(ret/ret.shift(1)) #Calc for log returns, if official is important (This is instead of pct_change())
log_ret = pct
ret = log_ret
#Create Temporary (Random) weights
weights = np.array(np.random.random(15)) #USE NUM SECURITIESS
#Rebalance w/ constraints (CANNOT BE > 1)
weights = weights/np.sum(weights)
print(weights)
#DEFINE ARRAYS FOR STORING METRICS
num_runs = 1000 #Kick this number up 10k-100k for better results
all_weights = np.zeros((num_runs,len(ret.columns)))
ret_arr = np.zeros(num_runs)
vol_arr = np.zeros(num_runs)
sharpe_arr = np.zeros(num_runs)
#Begin MC Loop
for run in range(num_runs):
#Weights
weights = np.array(np.random.random(15)) #CHG to number securities *** THIS is the key to MC, this random value creation for weights
#If you're looking for a challenge, try using a poisson, gamma or Student T dist!
weights = weights/np.sum(weights)
#Save weights (For reference Later)
all_weights[run,:] = weights
#Expected Ret (Record each runs return in ret_arr)
exp_ret = np.sum((log_ret.mean() * weights) * 252)
ret_arr[run] = np.sum( (log_ret.mean() * weights) * 252) #Time = year
#Exp Vol: (Lets attempt some linear algebra w/out runtime error!)
exp_vol = np.sum((log_ret.std() * weights) * 252)
# Sqrt of dot product of Transposed weights X Cov of Log returns & weights--whew.
vol_arr[run] = np.sqrt(np.dot(weights.T,np.dot(log_ret.cov()*252,weights)))
#Sharpe
SR = exp_ret/exp_vol
sharpe_arr[run] = ret_arr[run]/vol_arr[run]

如果你像我一样是一个视觉型的人,你可以用一个快速的 pyplot 来绘制它,使用 retarr 和 volarr max 值,并且可以选择最大锐化来高亮显示,如图所示。那还不算太糟!
import matplotlib.pyplot as plt
'''Plot the Markowitz efficient frontier'''
plt.figure(figsize=(12,8))
plt.scatter(vol_arr, ret_arr, c=sharpe_arr, cmap='cividis')
plt.colorbar(label='Sharpe Ratio')
plt.xlabel('Volatility')
plt.ylabel('Return')
plt.title('Omni Efficient Frontier')
plt.scatter(max_sr_vol, max_sr_ret,c='red', s=50) # red dot
plt.show()

记住,你可以让这些回报和波动列最大化你想要的任何东西——相关性,贝塔,任何东西。你还可以在合理的范围内随机化任何你想优化的东西——你只需要确保逻辑工作,并且它被正确地结合(提示:我已经采取了整个策略,并且在计算回报时简单地在最后放了一个蒙特卡罗模拟循环,并添加了要随机化的权重或阈值,然后乘以回报来优化它们——理论上它甚至可以在条目之前随机化,只需要在那里放一个循环并随机化你的条目特征。).我的希望是为你打开一个蒙特卡洛模拟的可能性世界,来解决你从未想过可能的方程。
#sharpe_arr.argmax()
#MC_SR = sharpe_arr[7145] #Plug in to sharpe_arr10.094382
#find max SR per vol arr and SR array (for plotting)
max_sr_vol = vol_arr[sharpe_arr.argmax()]
max_sr_ret = ret_arr[sharpe_arr.argmax()] #85563 is max idx
#Save optimal weights, calc SR_annualized,
idx = sharpe_arr.argmax()
#all_weights[idx]
MC_SR = sharpe_arr[idx]
print(MC_SR)
SR_ann = np.sqrt((MC_SR))*12
SR_ann
print('Max Sharpe:',MC_SR)
print('Max Annualized Sharpe',SR_ann)
print('max sr ret:',max_sr_ret)
#print('Max sr vol:',max_sr_vol)

我的下一个例子是一个更常见的蒙特卡罗模拟方法,使用投资组合特征来预测预期收益、方差和最坏情况。我将在我的示例中使用相同的数据,并将它们绘制出来以便可视化。别担心,这个简单多了。
这个例子只需要你得出你的系统/投资组合的日平均(对数)回报和日标准差。一旦你插入这些值,你就拥有了你所需要的一切,只需在 range()中插入一些迭代,并确保你的图在循环的内,用。*秀()*外。
import numpy as np
import numpy.random as nrand
import matplotlib.pyplot as plt
import math
#Define vars
S = 1000000
T = 252
mu = 1.92246
vol = .86123 #Between .76 and .86
result = []
for i in range(1000):
daily_returns = np.random.normal(mu/T,vol/math.sqrt(T),T)+1
price_list = [S]
for x in daily_returns:
price_list.append(price_list[-1]*x)
result.append(price_list[-1]) #appending each runs end value --to calculate the mean return
plt.plot(price_list)#This is key, KEEP THIS IN LOOP,votherwise it will plot one iteration/return path.
plt.title('Daily MC')
plt.show()

这张图表虽然有点漂亮,但不是很有用;我更喜欢的利用方法是把它绘制成一个分布图,并采用投资组合运行的各种度量。请记住,这只是使用您的日均值和标准差来运行 1000 年的 1 年(T 值)性能轨迹。我在这里使用了一个正态分布的随机因子来使直方图更清晰,但是你可以在这里使用任何随机分布或者完全随机的值/样本!尝试各种模型,看看它们是如何变化的。
res = [i/S*100 for i in result]
plt.title('MC: Annual Returns %')
plt.xlabel('Return (%)')
plt.ylabel('Distribution')
plt.hist(res,bins=100)
plt.show()
print('Mean return %:',np.mean(res))
print('Median return %:',np.median(res))
print('Min return %:',np.min(res))
print('Max return %:',np.max(res))
#print('Mode:',stats.mode(result))
print('Stdev %', stdev(res))

我喜欢计算各种百分位数,跟踪各种常见指标的最小值。直方图提供了一个更清晰的画面——就绝对值而言,它可能看起来很大,所以我喜欢用它除以初始帐户值,以使它成为百分比值。这应该很简单,除了可能的列表补偿,它只是将每次运行的结果作为初始帐户值的百分比。
from scipy import stats
from statistics import stdev
print('Mean:',np.mean(result))
print('Mean Ret:',np.mean(result)/S*100)
print('Median:',np.median(result))
print('Median Ret:',np.median(result)/S*100)
print('Min:',np.min(result))
print('Min Ret:',np.min(result)/S*100)
print('Max:',np.max(result))
print('Max Ret:',np.max(result)/S*100)
#print('Mode:',stats.mode(result))
print('Stdev', stdev(result))
mc_mu = np.mean(result)
med = np.median(result)
mc_min = np.min(result)
mx = np.max(result)
std = stdev(result)
metrics = [mc_mu,med,mc_min,mx]
print('sharpe:',mu/vol)
print('5% Quantile',np.percentile(result,5))
print('5% Quantile %',np.percentile(result,5)/S*100)
print('95% Quantile',np.percentile(result,95))
print('95% Quantile %',np.percentile(result,95)/S*100)

这就是我们所拥有的——蒙特卡罗模拟是我们所拥有的最灵活的模型之一,熟悉这些模型的内部工作方式可以在优化复杂问题时产生很大的影响。我希望你也已经学会了不要用一个复杂的回答来回答蒙特卡洛面试问题,这种回答没有抓住要点,要深入挖掘基本的运动部分,因为这才是这些模型真正的魅力所在。掌握蒙特卡罗方法将为你提供解决不可逾越的方程和站不住脚的问题的工具——当然,也可以制作非常丰富多彩的线图。
交易愉快!扎克·奥克斯
免责声明:本客座博文中提供的观点、意见和信息仅属于作者个人,不代表 QuantInsti 的观点、意见和信息。本文中所做的任何陈述或共享的链接的准确性、完整性和有效性都不能得到保证。我们对任何错误、遗漏或陈述不承担任何责任。与侵犯知识产权相关的任何责任由他们承担。T3】
Files in the download:
- 蒙特卡洛的 Python 笔记本
- 返回八月份的文件,了解优化模型的快速使用案例
使用均线交叉交易漂亮的期权
原文:https://blog.quantinsti.com/moving-average-crossover-trade-nifty-options/
由 Abhishek Kulkarni
这个博客是一个循序渐进的指南,帮助你学习如何使用移动平均交叉策略来交易漂亮的期权。您还将探索和学习如何使用 Python 编程来执行交叉信号的回溯测试,以从您的交易策略中获得最佳结果。
本博客涵盖:
均线交叉
交易策略可以大致分为动量策略和均值回复策略。动量策略的原则是“趋势是朋友”,要点是高买高卖。
然而,在均值回复策略中,原则是“上升的必然下降”。这意味着当资产超卖时买入,超买时卖出。均线交叉属于前一类。
关于移动平均线交叉策略的信息太多了,有不同的名称,如“黄金交叉”和“死亡交叉”。
该策略涉及不同持续时间的移动平均线指标。
- 较短的回看窗口的平均值被称为 **SMA、**和
- 具有较长回顾窗口的那个被称为 LMA 。
普遍使用的 SMA-LMA 线对包括 20-40、20-60 和 50-200。SMA-LMA 图以及 Nifty looks 调整后的收盘价如下

交易规则很简单。
- 当 SMA 在 LMA 上方交叉时买入资产,并且
- 当 LMA 穿过 SMA 下方时卖出资产。
均线交叉策略是如何运作的?T3】
交叉策略被广泛用于股票交易。在本帖中,我们将探索交叉信号的回溯测试,以使用 Python 交易漂亮的期权。
在下列情况下,我们将购买看涨期权,而不是购买资产:
- SMA(今日)> LMA(今日)和
- SMA(昨日)< LMA(昨日)。
类似地,在下列情况下卖出看涨期权:
- SMA(今天)< LMA(今天)和
- SMA(昨日)> LMA(昨日)。
所需套餐
执行此活动需要 Python 包。
以下是需要的包 :-
- 熊猫-数据阅读器
- NSEpy
- 熊猫
- 日期时间
建议写着
在我们开始之前,这里有一个免费资源列表,可以帮助您做好准备:
分步指导
通过下面的过程,你会明白如何使用移动平均交叉策略来交易漂亮的期权。
它总共包括 7 个步骤:
步骤 1 -导入包
第一步,我们导入必要的 Python 包。
移动平均线交易:策略、类型、计算和例子
原文:https://blog.quantinsti.com/moving-average-trading-strategies/
移动平均线或 MA 是一个用于验证市场运动的技术指标。只有少数其他指标被证明是不偏不倚的,明确的和实际的移动平均线。移动平均线交易帮助交易者识别增加有利交易的趋势。
让我们通过这篇博客了解更多关于移动平均线交易的信息,内容包括:
- 什么是均线?
- 移动平均指标的计算
- 移动平均指标示例
- 计算移动平均指标的回看周期
- 移动平均线的类型
- 移动平均线交易策略
- 在交易中使用均线的优势
- 在交易中使用均线的缺点
- 常见问题解答
- 哪条均线最适合交易?
- 移动平均线交易能提供好的结果吗?
- 如何使用均线?
什么是均线?
移动平均线是一系列数值的平均值。它们有一个预定义的长度,用于计算要平均的值的数量。随着时间的推移,随着更多数据的添加,这组值会向前移动。
给定一系列数字和一个固定的子集大小,移动平均系列的第一个元素是通过取数字系列的初始固定子集的平均值获得的。
然后通过向前移动一个值来修改子集。换句话说,当我们获得更新的数据时,子集的第一个元素被排除,最新的元素被添加,这保持了长度的固定。
移动平均线基于持续时间(也称为回顾期)工作,例如 10 天、20 天等等。根据交易者的偏好,回望期可以是分钟、小时等。
众所周知,移动平均线是滞后指标,因为它们落后于价格/交易量图的变动。滞后指标之所以存在,是因为它们是用历史数据计算出来的。
与较慢的移动平均线(长期或长回望期)相比,较快的移动平均线(短期或短回望期)具有较小的滞后。
持续时间较短的移动平均线被称为快速移动平均线,对趋势变化的反应更快。
快速移动平均线也被称为较小的移动平均线,因为它们对每日价格变化的反应较小。
证券价格倾向于快速波动,因此,图表包含几个波峰和波谷,很难理解整体运动。
但是对于移动平均线交易,移动平均线有助于平滑波动,使分析师和交易员能够预测证券价格的趋势或运动。在金融市场,它最常用于股票和衍生品价格、百分比回报、收益率和交易量。
移动平均指标的计算
让我们看看下面提到的简单移动平均线的计算示例。计算五个数据点的平均值。
| 数字系列 | 7 12 2 14 15 16 11 20 7 |
| MA 系列的第一个值 | (7 + 12 + 2 + 14 + 15) / 5 = 10 |
| MA 系列的第二个值 | (12 + 2 + 14 + 15 + 16) / 5 = 11.8 |
| MA 系列的第三个价值 | (2 + 14 + 15 + 16 + 11) / 5 = 11.6 |
可以看出,用于计算平均值的子集向前移动了一个数据条目,因此称为移动平均值(也称为移动平均值或滚动平均值)。可以为任何时间序列计算移动平均序列。
移动平均指标示例
现在让我们看看移动平均线交易的例子,图表显示 10 天,20 天和 50 天的移动平均线。

Example of moving average
上面的图表显示了期货合约的收盘价(蓝线),10 天移动平均线(红线),20 天移动平均线(绿线)和 50 天移动平均线(紫线)。
可以观察到,50 天移动平均线是最平滑的,10 天移动平均线具有最大数量的波峰和波谷或波动。随着回看周期的增加,移动平均线远离价格曲线。
红线(10 天移动平均线)最接近蓝线(价格曲线),紫线(50 天移动平均线)最远。
用于计算移动平均指标的回望周期
在移动平均线交易中,计算移动平均线最常用的回顾周期是 10、20、50、100 和 200。
这些回顾周期可以是一分钟、每天、每周等等。这取决于交易者希望进行长期交易还是短期交易。
短时间的均线比长时间的均线对价格变化的反应要快得多。
此外,移动平均值可以是任何长度,即 17、29、110 等。并且交易者可以根据历史数据分析自由调整时间段。
移动平均线的类型
根据平均值的计算方式,有许多不同类型的移动平均值。五种最常用的移动平均线是简单(或算术)、指数、加权、三角和可变移动平均线。
不同移动平均线之间的显著差异是在移动平均线周期中分配给数据点的权重。
简单移动平均线对所有数据点应用相同的权重。指数和加权平均值对最近的数据点应用更多的权重。三角形平均线在移动平均线周期的中间对数据施加更多的权重。可变移动平均线根据价格的波动改变权重。
简单移动平均线
简单(或算术)移动平均是一种算术移动平均,计算方法是将时间序列中的元素相加,然后将总和除以时间段数。顾名思义,简单均线是最简单的一种均线。
它可以说是交易者使用的最流行的技术分析工具。SMA 中的所有元素都具有相同的权重。如果移动平均周期是 5,那么 SMA 中的每个元素在 SMA 中的权重是 20% (1/5)。
SMA 通常用于识别趋势方向,但是它也可以用于产生潜在的交易信号。
计算 SMA 的公式很简单:
SMA =(移动平均周期内数据点之和)/(总周期数)
加权移动平均(WMA 或 LWMA)
加权移动平均指的是移动平均周期中的每个数据点在计算平均值时被赋予特定权重的移动平均。指数移动平均是一种加权移动平均,其中移动平均周期中的元素被赋予指数增长的权重。
线性加权移动平均(LWMA),通常也称为加权移动平均(WMA),是通过向移动平均周期中的元素分配线性增加的权重来计算的。
如果移动平均周期包含十个数据条目,则最近的元素(第十个元素)将乘以十,第九个元素将乘以九,依此类推,直到乘数为一的第一个元素。
然后将所有这些线性加权元素的总和相加,并除以乘数的总和。在 10 个元素的情况下,总和将除以 55 (n(n+1)/2)。下图显示了 30 天的 SMA(红线)、EMA(绿线)和 LWMA(紫线)。

Weighted moving average
从上图可以看出,和指数移动平均线一样,加权移动平均线对价格曲线变化的反应比简单移动平均线更快。
但是它对波动的反应比均线稍慢。
对波动反应慢是因为 LWMA 比均线更看重最近的数据。在均线的情况下,每个新数据点的权重以指数方式增加。
下面提到的是在计算 4 天的 EMA 和 WMA 时给元素的权重:
| 元素 | EWMA | LWMA |
| 最新元素: | 2/(4+1) = 40% | 4/10 = 40% |
| 第二个最近的元素: | 40% x 60% = 24% | 3/10 = 30% |
| 第三个最新元素: | 24% x 60% = 14.4% | 2/10 = 20% |
| 第四个最新元素: | 14.4% x 60% = 8.6% | 1/10 = 10% |
| 第五个最新元素: | 8.6% x 60% = 5.2% | 0/10 = 0% |
| 第六个最新元素: | 5.2% x 60% = 3.1% | 0/10 = 0% |
| 第 7 个最新元素: | 3.1% x 60% = 1.9% | 0/10 = 0% |
诸如此类…
指数移动平均线(均线或 EWMA)
简单的移动平均线有时过于简单,当证券价格出现峰值时,它就不能很好地工作。指数移动平均线给予最近的时间段更多的权重。
这使得它们比 SMA 更可靠,更好地代表了证券的近期表现,因此可以用来创建更好的移动平均策略。
均线的计算如下所示:
加权乘数= 2 /(移动平均周期+1)
均线=(收盘价-前一日均线/棒线)x 乘数)+前一日均线/棒线
改写为: EMA =(收盘价)x 乘数+(前一日/棒线的 EMA)x(1-乘数)
短期均线对最新数据的权重大于长期均线。例如,10 期均线的权重为 18.18% (2/11),而 20 期均线的权重为 9.52% (2/21)。
指数移动平均线这个名字是因为在移动平均线周期中的每一项都比前一项具有更大的指数权重。指数移动平均线比简单移动平均线反应更快,这可以从下面的图表中看出。
在下图中,蓝线代表每日收盘价,红线代表 30 日均线,绿线代表 30 日均线。

Exponential moving average
下面我提到了约翰·j·墨菲的著作《金融市场的技术分析》的摘录,该书由纽约金融研究所于 1999 年出版。这项工作包含了一个关于指数加权移动平均线优于简单移动平均线的最好解释。
内容如下:
指数平滑移动平均解决了与简单移动平均相关的两个问题。首先,指数平滑的平均值给较新的数据分配较大的权重。因此,它是一个加权移动平均线。
但是,尽管它不太重视过去的价格数据,但它确实在计算中包括了该工具生命周期中的所有数据。
此外,用户可以调整权重,对最近一天的价格给予更大或更小的权重,该权重将被添加到前一天价格的百分比中。两个百分比值的总和为 100。
三角形移动平均线
三角形移动平均线是一条双重平滑的曲线,这也意味着数据被平均了两次(通过平均简单移动平均线)。TMA 是一种加权移动平均,其中权重以三角形模式应用。按照下面提到的步骤计算 TMA:
首先,计算简单移动平均线(SMA):
SMA = (D1 + D2 + D3 +。。。。。。+ Dn) / n
接下来,计算 SMAs 的平均值:
TMA = (SMA1 + SMA2 + SMA3 +。。。。。。+ SMAn) / n

Triangular moving average
考虑上面的图表,它由每日收盘价曲线(蓝线)、30 天 SMA(红线)和 30 天 TMA(绿线)组成。可以观察到,TMA 比 SMA 平滑得多。TMA 的波动比 SMA 更长更稳定。
因为双重平均,TMA 的滞后大于其他均线,比如 SMA 和 EMA。可以观察到,TMA 需要更长的时间来对价格波动做出反应。
与均线产生的信号相比,TMA 在趋势期间产生的交易信号会远离该期间的波峰和波谷,因此使用 TMA 的利润会更少。
然而,在盘整期间,TMA 不会产生和 SMA 一样多的交易信号,这可以避免交易者持有不必要的头寸,降低交易成本。
可变移动平均线(VMA)
可变移动平均线是由 Tushar Chande 于 1991 年开发的指数加权移动平均线。Chande 建议,指数移动平均线的性能可以通过使用波动指数(VI)来改善,以在市场条件变化时调整平滑期。波动性是衡量价格随时间变化快慢的指标。
波动率指数显示了市场对未来 30 天的波动率预测。
开发 VMA 的目的是在价格处于盘整期时降低平均速度,以避免无效的交易信号,并在市场呈趋势时提高平均速度,以充分利用趋势价格。
下面给出了计算可变移动平均线的方法:
*VMA = (𝛂 * VI 收盘价)+ (1 - (𝛂 * VI)) * VMA[1]
其中,
𝛂 = 2 / (N + 1)
VI =波动率或趋势强度的度量
N =用户决定的平滑周期
VMA [1] =变量移动平均线的前一个值
移动平均线交易策略
现在让我们讨论一些已知的移动平均线交易策略。当你看每一个均线交易指标时,你会看到每个指标在交易时的相关性。
三重移动平均交叉策略
三重均线策略包括绘制三条不同的均线来产生买入和卖出信号。这种均线策略比双均线交叉系统更擅长处理虚假交易信号。
通过使用不同回看期的三条移动平均线,交易者可以确认市场是否真的见证了趋势的变化,或者它只是在继续之前的状态下暂时休息。买入信号在趋势形成的早期产生,卖出信号在趋势结束的早期产生。
第三条均线和另外两条均线一起使用,确认或否定它们产生的信号。这降低了交易者根据错误信号采取行动的概率。
移动平均线周期越短,它就越接近价格曲线。当证券开始上涨时,快速移动平均线(短期)将比慢速移动平均线(长期)更早开始上涨。
假设一种证券在过去 60 个交易日中每天上涨相同的数量,然后在接下来的 60 天中开始下跌相同的数量。10 天移动平均线将在第六个交易日开始下降,20 天和 30 天移动平均线将分别在第 11 天和第 16 天开始下降。
趋势持续的概率与趋势已经持续的时间成反比。因为这个原因,等待交易太久会导致错过大部分收益,而过早进入交易可能意味着进入了错误的信号,不得不亏损退出。
为了说明这种移动平均线策略,我们将使用 10 天、20 天和 30 天的简单移动平均线,如下图所示。
均线的持续时间和类型取决于交易者交易的时间框架。对于较短的时间框架(1 小时或更短),指数移动平均线是首选,因为它倾向于紧密跟随价格曲线(例如 4、9、18 均线或 10、25、50 均线)。
对于更长的时间框架(日线或周线),交易者更喜欢使用简单的移动平均线(例如 5,10,20 日均线或 4,10,50 日均线)。移动平均周期根据交易者的策略和交易的证券而变化。

Triangular moving average
考虑上面图表中的点“A ”,三条均线围绕这个点改变方向。
红线代表快速移动平均线(10 天 SMA),绿线代表中等移动平均线(20 天 SMA),紫线代表慢速移动平均线(30 天 SMA)。
当快速移动平均线穿过中等移动平均线和慢速移动平均线时,卖出信号被触发。这显示了趋势的短期转变,即过去 10 天的平均价格已经低于过去 20 天和 30 天的平均价格。
当中等移动平均线穿过慢速移动平均线之下时,卖出信号被确认。当中等(20 天)移动平均线穿过慢速(30 天)移动平均线之下时,动量的转移被认为是更重要的。
三重均线交叉系统在慢速均线高于中等均线,中等均线高于快速均线时产生卖出信号。
当快速移动平均线高于中等移动平均线时,系统退出。因此,与双重均线交易系统不同,三重均线系统并不总是在市场上出现。
当慢速移动平均线和中等移动平均线之间的关系与中等移动平均线和快速移动平均线之间的关系不匹配时,系统就退出了市场。
更激进的交易者不会等待趋势的确认,而是根据快速移动平均线穿越慢速和中等移动平均线的情况建仓。
你也可以在不同的时间进入头寸,例如,当快速移动平均线穿过中等移动平均线时,交易者可以持有一定数量的多头头寸,然后当快速移动平均线穿过慢速移动平均线时,持有下一组多头头寸。
最后,当介质穿过慢速移动平均线时,建立更多的多头仓位。如果在任何时候观察到趋势逆转,他可能会退出他的位置。
移动平均线带
均线带是均线交叉系统的延伸版本。这种移动平均线策略是通过将大量移动平均线放在同一个图表上创建的(下图使用了 8 个简单的移动平均线)。
在选择均线的长度和类型时,必须考虑时间跨度和投资目标。
当所有的均线都向同一个方向移动时,趋势就被认为是强的。交易信号以类似于三重均线交叉系统的方式产生,交易者必须决定交叉的次数来触发买入或卖出信号。
交易者在快速移动平均线穿过慢速移动平均线时买入,在快速移动平均线穿过慢速移动平均线时卖出。

Moving Average Ribbon
移动平均收敛发散(MACD)
MACD 是移动平均线收敛发散的缩写,是一个趋势跟踪动量指标。它是三个时间序列的集合,根据历史价格数据(通常是收盘价)的移动平均值进行计算。
MACD 线是特定证券收盘价的快速(短期)指数移动平均线和慢速(长期)指数移动平均线之差。
信号线是 MACD 线的指数移动平均线。在这个均线策略中,交易者寻找 MACD 和信号线的交叉点。
MACD 策略由定义策略的三个参数表示,即三个移动平均线的时间周期——MACD(a,b,c ),其中 MACD 系列是时间周期为“a”和“b”的 EMAs 之差。信号线是 MACD 系列的均线,时间周期为“c”。
最常用的 MACD 策略对 MACD 系列使用 12 天和 26 天的均线,对信号系列使用 9 天的均线,用 MACD(12,26,9)表示。下图是根据这些输入参数绘制的
MACD 线=收盘价的 12 日均线-收盘价的 26 日均线信号线= MACD 线的 9 日均线柱状图= MACD 线-信号线

MACD
图表的上半部分包含每日收盘价(蓝线)、12 日均线(红线)和 26 日均线(绿线)。
图表的下半部分由 MACD 系列(蓝线)组成,它是用快速移动平均线(12 日均线)减去慢速移动平均线(26 日均线)计算出来的。
信号序列(红线)是用 MACD 序列的 9 日均线计算出来的,最后 MACD 直方图(黑色垂直线)是用 MACD 序列减去信号序列绘制出来的。
对 MACD 图表有许多不同的解释。最常用的信号触发是当 MACD 线穿过信号线时。
当 MACD 线穿过信号线上方时,建议买入标的证券,当 MACD 线穿过信号线下方时,触发卖出信号。
这些事件被视为潜在安全趋势即将向交叉方向升级的迹象。交易者考虑的另一个交叉叫做零交叉。
当价格曲线的慢速和快速移动平均线交叉时,或者当 MACD 序列改变符号时,就会出现这种情况。
从正到负的变化被认为是熊市信号,而从负到正的变化被认为是牛市信号。零交叉提供了对趋势变化的确认,但在触发信号方面不如信号交叉可靠。
交易者也监控 MACD 线和信号线的背离,可以通过柱状图观察。当柱状图开始下降(向零线移动)时,它表明趋势在减弱,这发生在 MACD 和信号线汇合的时候。
反之,当信号线和 MACD 线背离,或者柱状图上升(远离零线),则表明趋势变强。
在交易中使用均线的优势
在交易中使用均线的优势是:
- 你可以根据市场趋势进行交易。通过分析,你可以发现它是上升趋势(价格在均线上方移动)还是下降趋势(价格在均线下方移动)。
- 还要考虑许多其他因素,如交易周期的长度、移动平均线交叉等。你可以找到交易头寸。当价格趋势强劲时,你也可以找到进场点。
- 可以作为支撑点/阻力点。
- 移动平均线交易通过创建一个不断更新的平均价格来帮助拉平特定时期的价格数据。因此,该指标对新的和更新的信息作出反应,这意味着更好的预测。
交易中使用均线的缺点
现在我们将讨论均线交易的一些缺点,你可以权衡一下成功交易的好处。
以下是均线交易的一些缺点:
- 如果价格波动,价格可能来回波动,产生多个趋势反转或交易信号。当这种情况发生时,最好靠边站或利用另一个指标来帮助澄清趋势。同样的事情也会发生在均线交叉上。在 Quantra 课程中详细学习价格行动交易策略。
- 移动平均线在强趋势条件下运行良好,但在波动或波动条件下运行不佳。调整时间框架可以暂时帮助解决这个问题,但是,在某些时候,这些问题很可能会发生,不管移动平均线的时间框架是什么。
- 均线交易在横盘行情中不起作用。在横向市场的情况下,证券的价格在相当稳定的范围内交易,在一段时间内没有形成任何特定的趋势。在横盘行情中,由于价格线的重叠,移动平均线可能会产生错误的信号。
在上面提到的均线交易不成功的情况下,你可以避免均线交易。
常见问题
哪条均线最适合交易?
在均线交易中,每个均线指标都各有利弊。因此,对于交易者来说,根据影响金融工具价格的一些因素来决定移动平均线指标是很重要的。
例如,由于某些事件(如经济衰退)导致的可预测的价格回撤,价格短暂且波动较大的市场情况等。
每一个均线指标都是不同的,在特定的情况下都能很好地发挥作用。让我们看看均线和 SMA 指标的区别,找出区别。
均线指示器
当价格改变方向时,均线反应更快。例如,如果价格回撤走低,均线开始向下,表明交易信号发生了变化。
形状记忆合金指示器
SMA 移动得慢得多,当价格短暂波动时,它可以让你交易更久。
移动平均线交易能提供好的结果吗?
移动平均线交易指标只是一个帮助你追踪价格变化和波动的指标,这样你就可以对交易头寸采取正确的措施。
好的结果取决于你的交易策略以及根据特定的市场趋势应用正确的移动平均线指标。
均线是如何使用的?
在移动平均线交易中,移动平均线指标只是用来预测价格的变化和金融市场趋势的变化。
例如,如果价格高于 200 天移动平均线,这表明市场正在经历对股票的看涨情绪。
结论
移动平均线交易是最受欢迎的交易,因为移动平均线帮助交易者了解市场的变化趋势,并在此基础上进行交易。
当用移动平均线交易时,你必须考虑许多市场相关因素,如任何预测的价格波动,趋势反转等。在交易之前。
了解均线交易的利与弊也是对交易者的现实检验,这样预测和交易策略就建立在正确的分析基础上。一旦交易者知道如何以最好的方式使用均线指标,均线交易就是成功的。
如果你想了解更多关于移动平均线交易的知识,并希望通过一个完整的课程来学习,请学习我们关于技术分析指标的课程。本课程将使你熟悉移动平均线技术指标,同时帮助你同时比较其他指标。此外,如果你希望使用移动平均线交易,你将能够深入了解每种类型的移动平均线和策略。
祝你成功的移动平均线交易!
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
多策略投资组合:有效结合数量策略
原文:https://blog.quantinsti.com/multi-strategy-portfolios-combining-quantitative-strategies-effectively/

由黄建东
开发一个成功的算法策略已经是一项艰巨的任务。然而,交易一个单一的策略会带来自己的风险,即使这个策略本身是稳健的和有利可图的。
那么,作为算法交易者,我们如何准确地理解我们的系统在传递什么,从开发到实施改变我们的思维模式,并增加我们的风险调整回报?
交易策略的分布分析
大多数交易者都熟悉看标准的业绩报告,里面有统计数据,比如 CAGR,夏普比率和最大亏损。但是这些单一的数字仅仅提供了系统实际交付的一小部分。通过将回报分布分析添加到你的工具包中,你将能够更好地了解系统在更精细的层面上可能产生什么。
最常见的交易系统分类方法是基于进场类型,或者是动量交易或者是均值回归交易。这最终是主观的和受限制的,因为许多策略将结合来自两种制度的元素。例如,均值回归策略可以使用具有动量特性的滤波器。添加过滤器后,它仍然是均值回复系统吗?
这个问题可以通过使用统计方法来解决,以便根据策略分布的描述性统计对策略进行分类,而不是根据主观类型或风格。通过分析偏斜,并查看我们的回报分布的尾部,我们可以更好地了解该策略实际提供了什么。从而使我们能够从数量上判断它属于哪个政权。
作为可投资证券的策略,改变你的心态。
大多数交易新手认为他们的策略是独立的系统,从构思到实施都保持相同的概念。然而,有两种截然不同的环境,定量研究实验室的真空,以及你将执行策略的投资组合。我们需要考虑这一实施的影响,以及它对我们当前投资组合的影响和与我们投资任务的契合度。做到这一点的最佳方法是将配置策略视为一种可投资的证券。
在最基本的层面上,任何策略都有一个单一的目的。即提供具有特定特征的回报序列,通常是超大的风险调整回报。如果是这种情况,那么我们可以考虑一种已经被投资的策略,对特定的回报系列进行长期押注。 这与投资任何股票、商品或其他资产是一样的。
投资你的策略和投资任何其他资产或证券的动机基本上没有区别。你会把最多的资金分配给那些表现出最令人满意的特征的人,而把较少的资金分配给那些没有表现出最令人满意的特征的人。
运用投资组合优化和多样化。
如果我们能接受这一逻辑,即投资于已完成的战略和投资于任何其他资产是一样的。很自然,下一个合乎逻辑的步骤是创建一个投资组合。没有人会建议他们的朋友只买一支股票。那么,作为一个系统交易者,为什么你只想有一个策略呢?
我们现在可以依靠两个领域,投资组合优化和多样化,这两个领域已经在学术界进行了大量研究,并在该领域实践了几十年。通过应用这些创建传统资产投资组合的关键原则,我们可以创建多策略系统的投资组合。你从创建传统资产投资组合中获得的收益,如降低股票曲线波动性和增加风险调整后的回报,可以转移到你的系统交易策略中。
结论
QuantInsti 于 2017 年 5 月 16 日举办了一场名为“多策略投资组合:有效结合量化策略**”**的网络研讨会,由 Foretrade 投资管理有限公司系统交易总监黄建东主持。您可以点击上面提供的链接访问网络研讨会的录音部分。
下一步
如果你想学习算法交易的各个方面,那就去看看算法交易(EPAT)中的 T2 高管课程。该课程涵盖了统计学&计量经济学、金融计算&技术和算法&定量交易等培训模块。EPAT 让你具备成为成功交易者所需的技能。现在报名!
2021 年要掌握的五项当代交易技能
交易领域和世界其他地方一样充满活力。它正在迅速适应技术进步,并转向算法交易领域。考虑到快速的变化,今天的交易者必须提升自己的技能。据估计,在 2021-2025 年间,算法交易市场将增长 37 亿美元。
因此,为了对未来做好准备,让我们来看看 2021 年及以后对交易者来说至关重要的五大技能。
你可以看看下表,快速浏览一下这篇博客中的 5 个交易技巧:
| 等级 | 定量分析 | Python | 回溯测试 | 机器学习 | 风险管理 |
| 第一级:学习要求 | Quant 分析师要求学习金融、统计、数学、计算机科学、数据科学、人工智能等学科。 | 为了学习 Python,你不需要有编码背景。你只需要专注,先找到一个学习基础的好平台 | 为了回溯测试交易策略,你需要学习一门编程语言 | 机器学习需要学习编程语言、数据科学、统计学 | 风险管理需要金融知识、市场因素,如趋势、提款等。 |
| 第二级:概念 | 机器学习、神经网络、概率等概念的实现是在交易中完成的 | Python 实现包括函数、数据帧、循环等概念。 | 实施绩效指标,如夏普比率、索提诺比率等。分析战略的绩效 | 机器学习概念,如回归、决策树等。 | 风险管理包括风险的识别、评估和缓解 |
| 第三级:在交易中的应用 | 量化分析师运用他们的知识和技能来分析市场数据,然后制定可以量化的策略 | Python 编程通过使用机器学习等平台来帮助创建交易策略 | 回溯测试根据历史数据测试交易策略,这有助于发现交易策略的有效性 | 借助编程语言开发的机器学习算法被应用于算法交易实践 | 通过研究市场因素,如趋势、夏普比率、成交量、跌价等,你可以做出交易决定 |
| 第 4 级:使用这个技能你在交易领域能成为什么样的人? | 作为一名定量分析师,你可以运用你的知识成为一名研究分析师,高级定量分析师等。 | Python 编程帮助你成为各种职业的专家,如分析师、算法交易员、开发人员等。 | 回溯测试帮助你测试你自己的交易活动和一些公司的分析师的交易策略 | 有了机器学习概念的知识,你可以成为一名开发人员、数据科学家等。 | 你可以参与投资组合优化、头寸规模、对冲等。帮助降低交易风险 |
在本文中,让我们探索这些关键的专业领域,理解它们的含义,并确定我们自己需要改进的地方。
定量分析
定量分析是基于技术指标如移动平均线、振荡指标等对市场进行的统计/科学研究。简而言之,定量分析师在使用技术指标时,会对策略进行统计回溯测试,就像技术分析一样。
技术分析是通过分析历史市场数据来预测金融证券价格的研究。技术分析使用基于价格和交易量的模型和交易规则。例如,技术分析使用相对力量指数,移动平均线,振荡指标,或者图表模式和波形。
在定量分析的情况下,通过利用神经网络、机器学习和其他统计工具来发现市场的表现,以开发可以量化的交易策略。为了量化分析,需要数学和统计研究工具和方法方面的专业知识。通常,定量分析比技术分析更有助于交易者,因为它提供了一个科学的结果来帮助开发一个带有进场、出场和仓位大小的算法。
例如,定量分析使用烛台模式进行统计测试,然后在可量化分析的基础上发现策略是否可以运行。
这里有一个视频可以帮助你详细了解定量分析和技术分析:
https://www.youtube.com/embed/SohUND7tLNc
定量分析涵盖的技能有:
- 计算机编程语言
- 机器学习
- 数学技能
- 金融技能
- 面向对象编程
- 最佳证券投资理论
- 结石
- 线性代数和微分方程
- 数据库管理
- 回溯测试
建议阅读:
接下来是 Python 语言。让我们看看 Python 是如何支持交易的。
计算机编程语言
编程语言是任何想要利用技术和计算进步(如机器学习或对历史数据进行回溯测试)的新老交易员的先决条件。
在选择编程语言之前,有几个重要的概念需要考虑,比如成本、性能、弹性、模块化和其他各种交易策略参数。
根据交易系统的要求,决定编程语言的选择。2020 年 12 月,Python 成为第二大流行语言。
下图显示了 Python 获得的评分远远高于其他计算机语言,除了位于顶端的语言“C”。

来源: ZDNet
Python 语言帮助交易者快速简单地编码,以导入数据并以图形的形式可视化数据。图形表示使得解释数据进行分析变得更加容易。此外,Python 拥有用于机器学习和数据科学的 API 和库,与其他语言相比,这些 API 和库使得分析更加流畅。
这里有一个视频,来自算法交易领域的专家分享了 Python 在交易中受到青睐的原因:
https://www.youtube.com/embed/fGUbQWgUq8A
python 中包含的技能有:
- 数据结构
- 数据类型和变量
- 面向对象编程
- 机器学习
- 神经网络
- 自然语言处理
- 数据科学中的分析技能
建议阅读:
另一个交易技巧是回溯测试,它帮助交易者根据历史数据分析交易策略。接下来让我们了解更多关于回溯测试的内容。
回溯测试
回溯测试是使用历史数据测试交易策略的过程,以确定该策略的有效性。回溯测试结果通常以流行的性能指标如夏普比率、索蒂诺比率来显示策略的性能。性能指标通常有助于量化风险回报。如果结果符合必要的标准,就可以在一定程度上放心地实施战略。如果结果不太令人满意,可以修改、调整和优化策略的参数,以获得理想的结果。
回测系统主要有两种形式:向量化回测和事件驱动回测。
矢量化回溯测试是回溯测试策略的初始阶段。在矢量化回溯测试中,市场互动的所有方面都没有完全模拟出来。但是,近似值被用来确定潜在策略的性能。
在更现实的环境中进行严格的回溯测试之前,您可以利用矢量化回溯测试来测试核心战略思想。例如,你可以在回溯测试平台上运行你的策略,生成交易信号,计算策略回报,只是为了找出策略的效率。为了详细学习矢量化回溯测试,你可以去参加这个关于交易中的 Python 的课程。
这些回溯测试系统通常是用 Python、R 或 MatLab 编写的。在战略创建的初始阶段,当你在测试粗糙但多样的战略想法时,开发的速度比执行的速度更重要。
在事件驱动的回溯测试中,自动化的交易策略连接到实时市场反馈。交易执行是在纸上/模拟器上完成的,而不是在真实的交易所上。该策略接收市场反馈,然后分析这些数据以触发一个事件,该事件进而产生一个交易信号。这些系统通常在一个连续的循环中运行,以接收事件并适当地处理它们。
主要优势是事件驱动的回溯测试可以有子组件,如历史数据处理器和代理模拟器,允许回溯测试以非常类似于实时执行的方式执行。
有了像 Blueshift 这样的平台,用 Python 语言回测你的交易想法或策略,进行算法交易就很容易了。由于 python 语言的简单性,使用 Blueshift 进行回溯测试更加容易。
当你有交易想法,但没有平台来检验它们时,不能保证根据这些想法建立的交易策略会产生有益的结果。在这里,有利的结果意味着更少或没有损失,从交易策略中获得更多的收益。
此外,在下面的演示视频中,您将了解专家如何开发和回测您的交易策略:
https://www.youtube.com/embed/qLIgx0S8D0w
进行回溯测试需要以下技能:
- 数据分析
- 了解业绩指标,如下降、夏普比率
- 编程技能
建议阅读:
接下来,让我们了解一下机器学习。
机器学习
机器学习顾名思义,就是机器学习的能力,即使没有显式编程。这是一种基于算法的人工智能,用于检测数据中的模式,并相应地调整程序动作。基本上是人工智能的一个子领域。
机器学习算法使用“学习”模型。学习模型允许算法学习输入和输出组合,然后用新数据做出自己的决定。
在交易中,作为机器学习模型的线性回归模型帮助预测金融证券的价格。此外,机器学习算法使用最少的人力或干预来完成任何复杂的任务。可以使用 Python 开发机器学习算法,这已经是一项关键技能。此外,Python 比其他语言更受青睐,这是因为它具有我们上面讨论过的优势。
你可以在这里的视频中找到关于使用机器学习进行交易的信息:
https://www.youtube.com/embed/m_v8K4zIHy8
此外,要了解如何使用机器学习进行实时交易,这里有另一个视频可以让你彻底了解它:
https://www.youtube.com/embed/tUN9XGAGRYg
机器学习的技能包括:
- 神经网络
- 自然语言处理
- 应用数学
- 机器学习算法,如随机森林、逻辑回归、线性回归等。
- 编程;编排
建议阅读:
现在,我们将进一步了解风险管理是交易中的一项重要技能。
风险管理
交易中的风险管理对于控制承担股票市场交易损失的风险至关重要。风险管理涉及风险的识别、评估和缓解。风险通常出现在市场走势与预期相反的时候。
因此,在对市场进行透彻分析的基础上设定你的预期,并对所有风险进行事后预测,这一点非常重要。
在风险管理中,趋势是最重要的因素。趋势意味着市场、资产价格或其他此类指标的总体方向或势头。
最受欢迎的风险管理策略以及在规避风险的同时使您的交易成功的要素如下:
- 投资组合优化-投资组合优化是构建投资组合的过程,以最大化预期回报,同时最小化风险。它包括通过计算每个投资组合的风险和回报来分析不同投资比例的投资组合。
- 对冲-对冲是一种投资策略,旨在抵消潜在的损失。对于套期保值,金融工具如保险、期货合约、掉期、期权等。可以用来对冲。
- 1%原则和 2%投资原则——交易中的 1%和 2%原则意味着每次交易的最大可行风险应该是 1%或 2%。这有助于你避免否则可能发生的过度损失。
- 利用先进技术监控交易-应使用算法交易和回溯测试等技术监控交易。
- 避免不清楚的交易设置——如果你使用均线、均线等移动指标。其中一个指标显示了清晰的交易设置,但与其他指标的交易设置不一致,这就造成了混乱。在这种情况下,最好等待合适的交易,不要在不确定的时候做任何决定。
- 止损——止损是当股票价格达到一个特定的价格即止损价格时触发的买入或卖出指令。这有助于交易者避免持续监控市场。
这里有一个关于交易员风险管理的视频教程,旨在帮助管理投资组合:
https://www.youtube.com/embed/cz7oJZmBHA8
风险管理所需的技能有:
- 交易经验
- 编程技能
- 证券管理
- 市场监控
建议阅读:
结论
因为这个世界正在快速发展和进步,我们为今天的交易者提供了五个当代交易技巧的概述。有了交易技巧和及时的实施,你可以获得最大的收益。交易者有不同的交易方式,如日内交易、趋势交易等。可以从这些交易技巧中获益。
本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。T3】
互斥事件:公式、示例、计算等等
互斥事件是同时停止存在的有趣事件。在这篇文章中,你会发现这两个或更多的互斥事件是如何在金融市场上发生的。
博客内容包括:
什么是互斥事件?
互斥事件是那些不能同时发生的事件。例如,你不能同时向前和向后跑。
扔硬币是另一个例子。你不能指望在一个翻转或事件中正面和反面。同样,在金融市场交易实践中也存在互斥事件。
交易中互斥事件的例子
金融市场交易中互斥事件的一个非常简单的例子可以解释为同时包括你的预算和不同股票的价值。
现在,假设你希望你的投资组合中有股票 A、股票 B、股票 C 和股票 D。这些股票在下面的图表中显示(市场指数用黑线标出),它们的价值随着时间的推移而增加。

Example of mutually exclusive events in trading
假设你的预算是 100 万美元。现在,如果:
- 股票 A 的价格是每股 90,000 美元,而
- 股票 B 的价格是每股 80,000 美元,
- 股票 C 和股票 D 的价格为每股 50,000 美元
预算不允许你投资所有的股票,因为你只有有限的资本投资。在这里,你既可以只投资股票 A,也可以只投资股票 b。或者,你可以同时投资股票 C 和股票 D,因为它们并不相互排斥。
它导致了这些启示:
与股票 A
- 股票 A 和股票 B -互斥
- 股票 A 和股票 C -互斥
- 股票 A 和股票 D -互斥
与股票 B
- 股票 B 和股票 A 相互排斥
- 股票 B 和股票 C -互斥
- 股票 B 和股票 D -互斥
与股票 C
- 股票 C 和股票 A -互斥
- 股票 C 和股票 B -互斥
- 股票 C 和股票 D -不相互排斥
与股票 D
- 股票 D 和股票 A -互斥
- 股票 D 和股票 B -互斥
- 股票 D 和股票 C -不相互排斥
互斥投资的概念也可以由战略考虑来驱动,资金被导向那些将允许你最有效地追求你想要的投资的股票。
计算互斥事件
为了计算互斥事件,可以使用概率。概率被认为是金融、人工智能、博弈论、哲学等各个领域最常用的实践。
在概率的情况下,每个互斥事件都有至少发生一次的可能性。例如,抛硬币可能以正面或反面结束,应用以下公式,每种情况发生的概率为 0.5:
P(A) =有利结果总数/可能结果总数
其中,P(A) =概率
- 有利结果的总数= 1(正面或反面)
- 可能结果的总数= 2(正面和反面)
所以要么正面要么反面的概率是 0.5。
好的,这是一个简单的概率解释。现在,在互斥事件的情况下,可以求出其中一个事件(一个或多个互斥事件)发生的概率。
经济中相互排斥的事件
经济中可能存在一些相互排斥的事件,如通货膨胀和通货紧缩。这两个经济事件不可能同时发生。而且,即使其中一个发生了,比如通货膨胀,那么更进一步的事件,比如降低利率和美元升值也不可能同时发生。
因此,这三个事件是互斥的,因为它们不能一起发生:
- 通货膨胀
- 低利率
- 美元价值的增加
同样,这三个事件是互斥的,并且不能一起发生:
- 通货紧缩
- 更高的利率
- 美元价值下降
互斥事件和独立事件的区别
独立事件是那些不像互斥事件那样相互关联的事件。下表清楚地显示了不同之处:
| 独立事件 | 互斥事件 |
| 两件事之间没有关系,但它们可以同时发生 | 这两件事不可能同时发生 |
| 比如是晴天(一个事件)。我赢得了国际象棋比赛(另一项赛事) | 例如,当你掷硬币时,头和尾不能同时出现 |
交易领域中的独立事件示例
现在,让我们以一个独立事件为例,借助一个被称为相对强度指数或 RSI 的技术指标,更好地了解这两个事件之间的差异。
相对强弱指数 RSI 是一个动量振荡器,用来指示市场中超卖 t 和超卖的情况。它在 0 和 100 之间波动,其值低于某个值,通常是 30,表明市场超卖,而高于另一个值,比如 70,表明超买。
通常,14 天的回顾期被考虑用于其计算,并且可以改变以适合特定资产或交易风格的特征。
现在,两只股票的增减是完全相互独立的。例如,在 RSI 的帮助下,我们有以下两种模式来显示两只不同的股票如何在同一时间出现不同的模式:
以下是 AARON 的 RSI 分析:

Following is the RSI analysis for AARON
以下是 aarey 药物的 RSI 分析:

Following is the RSI analysis for AAREYDRUGS Source: Traders Cockpit
在上面的解释中,很明显,一只股票的模式与另一只完全无关,两种模式可以同时出现。因此,对于 AARON 和 AAREYDRUGS,交易者的进出决定完全独立于其他人的模式。
结论
互斥事件可能会限制一个人同时在两个地方投资,但它们也有助于一个人决定如何分散投资以获得有利的结果。
我们讨论了如何根据预算要求管理多样化的投资组合,以及互斥事件与独立事件有何不同。
你知道你可以用研究论文作为灵感来想出新的交易策略吗?Quantra 关于事件驱动交易策略的课程帮助您创建和回测八种季节性策略,以利用股票、国债和波动市场中存在的异常现象。现在一定要去看看!
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
朴素贝叶斯模型:介绍,计算,策略,Python 代码
以重香重香
你听说过奥卡姆剃刀吗?
简而言之,奥卡姆的威廉说,“最简单的解决方案几乎总是最好的解决方案。”
但是在一篇关于朴素贝叶斯的文章中,我们为什么要讨论剃刀呢?实际上,朴素贝叶斯隐含了这种信念,因为它确实是一个简单的模型。让我们看看如何在交易中使用像朴素贝叶斯模型这样的简单模型。
本文涵盖以下主题:
什么是朴素贝叶斯?
让我们绕一小段路,了解一下朴素贝叶斯中的“贝叶斯”是什么意思。谈到概率,基本上有两种思想流派。一派建议,通过计算所有可能事件的概率,然后计算你感兴趣的事件的概率,可以推导出一个事件的概率。
例如,在抛硬币实验中,你知道正面的概率是因为这里只有两种可能,正面或反面。
另一个学派认为,概率更多地依赖于先验信息以及其他因素。例如,如果一个人说红色是他们最喜欢的颜色的概率是 30%,但如果他们处于爱情婚姻中,那么你的结果将会因他们的婚姻状况而不同。
这就是所谓的贝叶斯推断,你试图根据某个条件来计算概率。
你如何计算这个条件概率?让我们在下一节看看。
贝叶斯定理方程
P ( A ∣ B ) = P ( B ∣ A ) ∗ P ( A ) P ( B ) P(A|B) = \frac{P(B|A)*P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)∗P(A)
假设 A 是一个人说红色是他们最喜欢的颜色的事件。现在,假设 B 是这个人结婚时的事件。
因此,P(A | B)是一个人结婚后说红色是他们最喜欢的颜色的可能性。
这是我们要找到的条件概率。
类似地,P(B | A)是当一个人说他们最喜欢的颜色是红色时,这个人结婚的可能性。
P(A)和 P(B)是各自的概率。
这对我们的交易有什么帮助?
假设我们知道一只股票的 RSI 值。
现在,如果你想找到 RSI 跌破 40 后第二天价格上涨的概率呢?想想吧。如果周二 RSI 低于 40,你会希望在周三买入,希望价格会上涨。
这可以通过使用贝叶斯定理找到。
假设 P(A)是价格上涨的概率,P(B)是前一天 RSI 低于 40 的概率。
现在,我们将通过相同的公式找到如果 RSI 低于 40,第二天价格上涨的概率。
这里,B 类似于我们在机器学习中定义的特征。它也可以被称为证据。
但是坚持住!如果我们想检查 RSI 何时低于 40,以及随机振荡指标的“慢 k”何时大于其“慢 d”时,该怎么办。
技术上,我们可以在贝叶斯定理中有多个条件来改进我们的概率模型。如果 P©是“慢 k”通过“慢 d”的概率,那么贝叶斯定理可以写成:
P ( A ∣ B , C ) = P ( B ∣ A ) ∗ P ( C ∣ A ) ∗ P ( A ) P ( B ) ∗ P ( C ) P(A|B,C) = \frac{P(B|A)*P(C|A)*P(A)}{P(B)*P(C)} P(A∣B,C)=P(B)∗P(C)P(B∣A)∗P(C∣A)∗P(A)
虽然这看起来很容易计算,但如果向模型中添加更多的特征,复杂性就会增加。这就是朴素贝叶斯模型的朴素之处。
假设的朴素贝叶斯模型
朴素贝叶斯模型假设 B 和 C 都是独立的事件。此外,分母也下降了。
这在很大程度上简化了模型,我们可以简单地将方程写成:
**P(A|B,C)= P(B|A)P(C|A)P(A)
你必须记住,这个假设在现实生活中可能是不正确的。从逻辑上讲,RSI 和随机指标都是使用同一个变量计算的,即价格数据。因此,它们并不是完全独立的。
然而,朴素贝叶斯模型的妙处在于,即使这种假设不成立,该模型在各种场景中仍然表现良好。
等等,只有一种朴素贝叶斯模型吗?实际上有三个。让我们在下一节中找出答案。
朴素贝叶斯模型的类型
根据需求,您可以相应地选择型号。这些模型基于您正在处理的输入数据:
多项式:当我们拥有离散数据并对其进行分类时,会使用该模型。一个简单的例子是,我们可以将天气(多云、晴天、下雨)作为我们的输入,我们想知道网球比赛在什么天气进行。
高斯:顾名思义,在这个模型中,我们处理遵循高斯分布的连续数据。一个例子是进行比赛的体育场的温度。
二项式:如果我们的输入数据只是简单的是或否,即一个布尔值,会怎么样?在这种情况下,我们将使用二项式模型。
python 的伟大之处在于 sklearn 库包含了所有这些模型。我们可以试着用它来建立我们自己的朴素贝叶斯模型吗?为什么不试试呢。
建立朴素贝叶斯模型的步骤
在开始编写代码之前,我们将首先尝试理解我们练习的逻辑。我们将使用从雅虎财经导入的苹果价格数据,我们的数据集是从 2010 年 8 月 1 日到 2019 年 1 月 1 日。

此外,我们将使用两个特性。
最后,我们的目标变量是第二天的收益。如果第二天的回报为正,则该值设为 1。
由于我们有二进制值,我们将在 python 中使用二项式朴素贝叶斯模型。此外,请记住,这是一个只做多的策略,但你也可以修改它来使用短信号。但是在这种情况下,您必须向策略中添加更多的规则。现在让我们来看看这一战略的实施情况。
Python 中的朴素贝叶斯模型
我们将从首先导入库和数据集开始我们的策略。
Nasdaq 数据链接|使用 Python 中的 Quandl API 从即用型数据集获得洞察力
安舒尔·塔亚尔
如果您以前处理过数据,您就会知道获取原始数据并将其转换为可用格式是多么困难。作为数据分析师,我们一直在寻找现成的数据集,以节省我们收集、清理和标准化数据的时间。
另一个挑战是,从数据中提取信息已经成为大海捞针的问题,因为每天都会生成万亿字节的数据。干草堆一直在变大,所以寻找针变得异常困难。数据驱动决策的一个基本挑战是找到那几根针。
在这种背景下,当谈到传统数据集时,投资/金融世界也在关注不寻常的数据源。我们称之为替代数据集。市场参与者越来越多地使用替代数据来获得对竞争对手的优势。
这篇文章向您介绍了 Nasdaq Data Link ,这是一个收集了大量传统和替代数据源的平台。
本文包含以下几个部分:
- 什么是 Quandl 和纳斯达克数据链?
- 纳斯达克数据链提供的各类数据集有哪些?
- 如何使用 Quandl API 访问纳斯达克数据链的数据?
- 通过 Python 中的 Quandl API 访问任何数据集的步骤
- 纳斯达克数据链接免费订阅 vs 纳斯达克数据链接高级订阅
什么是 Quandl 和纳斯达克数据链?
Quandl 于 2011 年由在对冲基金行业工作了十多年的量化分析师塔梅尔·卡莱姆(Tameer Kalem)创立。它是作为“数字数据的维基百科”而创建的,旨在从当今可用的海量数据中提取价值。2018 年,纳斯达克收购了 Quandl,以补充其数据和分析业务。
2021 年 9 月,纳斯达克推出了使用 Quandl 基础设施构建的新平台 Nasdaq data link。
纳斯达克数据链允许你访问专有数据(纳斯达克、 Quandl 等。)和通过第三方的数据集(例如交易经济学、智商银行家等。)
纳斯达克数据链提供的各种类型的数据集是什么?
纳斯达克数据链提供三种类型的数据集:
- 核心财务数据
- 环境、社会和公司治理(ESG)数据
- 替代数据
核心财务数据
这些是投资者用来分析和预测股票价格行为的传统金融数据集。它们的范围从债券收益率到股票和外汇衍生品到石油数据库。这里有 223 个数据集。
这些数据集分为以下几类:
- 资产类
- 数据类型
- 地区
- 出版者
让我们更深入地看看这些类别。下表显示了“资产类别”下数据集的分布情况:
| 资产类别 | 免费 | 已付 |
| 股票 | 7 | 114 |
| 货币 | 3 | 16 |
| 利率&固定收益 | 5 | 8 |
| 选项 | 1 | 9 |
| 指标 | 8 | 11 |
| 共同基金&ETF | 1 | 27 |
| 房地产 | 3 | 2 |
| 风险投资&私募股权 | 0 | 1 |
| 经济&社会 | 15 | 4 |
| 能量 | 9 | 4 |
| 农业 | 7 | 7 |
| 金属 | 4 | 8 |
| 期货 | 5 | 13 |
| 其他 | 4 | 14 |
| 总计 | 72 | 238 |
下表显示了“数据类型”下数据集的分布
| 数据类型 | 免费 | 已付 |
| 价格&成交量 | 15 | 87 |
| 估计值 | 1 | 15 |
| 基础知识 | 6 | 37 |
| 公司行动 | 0 | 8 |
| 感悟 | 1 | 7 |
| 衍生指标 | 0 | 16 |
| 国家统计数据 | 15 | 4 |
| 技术分析 | 0 | 3 |
| 其他 | 5 | 16 |
| 总计 | 43 | 193 |
下表显示了“区域”下的数据集分布
| 地区 | 免费 | 已付 |
| 美国 | 24 | 116 |
| 中国 | 8 | 29 |
| 欧洲 | 13 | 45 |
| 非洲 | 8 | 23 |
| 北美 | 24 | 103 |
| 拉美 | 10 | 22 |
| 亚洲 | 12 | 44 |
| 大洋洲 | 9 | 23 |
| 中东 | 1 | 5 |
| 全局 | 11 | 45 |
| 印度 | 8 | 19 |
| 总计 | 128 | 第 474 章 |
关于每个数据集的更多细节,你可以去这里。
ESG 数据
这部分包含量化数据的数据集,如公司对环境、健康和社会的影响。它提供了与 GHG 排放、自然灾害洞察、生物多样性报告、性别平等指标、ESG 风险指标等相关的数据集。本部分共有 9 个数据集。
本节中的数据集分为以下几类:
- 影响区域
- 环境
- 社会的
- 公司治理
- 可持续发展目标
关于每个数据集的更多细节,你可以去这里。
替代数据
本节包含使用各种原始数据集创建的备选数据集。举几个例子:
- 公司的支出和支付,
- 跟踪公司的航空旅行,可以洞察 M&A 的交易和扩张计划,
- 作物产量预报的每日数据,
- 在卫星图像上使用人工智能来生成金属供应的实时全球指数等等。
本节中的数据集基于以下内容进行分类:
- 资产类别
- 商品
- 货币
- 股权
- 固定收入
- 房地产
- 数据来源
- 商业废气
- 消费者活动
- 初级研究
- 卫星和传感器
- 情感与互联网
- 其他人
- 行业/部门
- 汽车
- 企业对企业
- 建筑
- 活力
- 金融
- 物流
- 零售
- 安全性
- 技术
- 投资风格
- 基本的
- 数量的
- 技术的
- 其他人
这里有一个目录,详细列出了提供的所有备选数据集:备选数据目录。
然而,替代数据集仅适用于机构客户。如果您希望注册为机构客户以访问数据,您可以点击这里。
如何使用 Quandl API 访问纳斯达克数据链的数据?
即使 Quandl 只是 Nasdaq data link 的数据提供者之一,您仍然可以使用 Quandl API(应用程序编程接口)调用来获取 Nasdaq Data Link 提供的所有数据集。我们先来了解一下“API 调用”这个术语。
什么是 API 调用?
API 定义了两个系统之间的通信规则。打个比方,你不能去印刷厂为自己打印银行的支票簿。你必须遵循一个程序。
你去银行网站,填好表格,附上你的文件并提交。然后系统在后台处理,当你的账户准备好了,账户明细和支票簿就交给你了。
这正是 API 的工作方式。银行是我们要与之沟通的系统,我们没有接触系统内部的权限;我们只能通过 API 层,即我们填写表格和提交文档的银行网站进行对话。这被称为端点。
在获取数据时,您还需要一个 API 密匙让系统记录您的身份,就像您需要银行账号来进行任何交易一样。
API 调用向系统提供输入,以访问我们需要的数据。每个系统都有不同的 API,就像每个银行的网站都有不同的网址。
例如:
- Quandl API 的端点是https://www.quandl.com/api/v3/
- 新闻 API 的端点是https://newsapi.org/v2/everything
一个 API 调用的例子:https://newsapi.org/v2/everything?q=tesla&from = 2021-07-26&sort by = published at&API KEY = API _ KEY
在上面的例子中,
- 终点-https://newsapi.org/v2/everything
- 输入-特斯拉,开始日期,即 2021-07-26,
- 按“已发布”排序,
- API_KEY -创建帐户时生成的 API 密钥
要搜索 API 端点,你可以去 Programmable Web ,这是最大的可用 API 目录之一。另外,一个 API 的详细描述可以在这里找到。
现在您已经理解了 API 调用的工作原理,让我们看看如何使用 python 从 Quandl API 访问数据。
如何获得免费的 Quandl API 密钥?
使用 Quandl API 获取数据的第一步是通过在 Nasdaq Data Link 上创建一个帐户来生成一个免费的 API 密匙。成功创建帐户后,您可以在帐户设置部分找到您的 API 密钥。
以下是“帐户设置”部分的外观:

Generating a free API key by creating an account on Nasdaq Data Link
如何用 Python 安装 Quandl 包?
使用以下代码在 Python 中安装 Quandl 包:
## Install the quandl library
!pip install quandl
如何在 Python 中使用 Quandl API 访问各种类型的数据集?
要使用 Python 中的 Quandl API 访问各种类型的数据集,请使用以下代码:
## Importing library
import quandl
历史股价数据
# Configuring API key
# We use the get() function to fetch the historical stock price data for Tesla
quandl.ApiConfig.api_key = (YOUR-API-KEY-HERE)
tsla = quandl.get('WIKI/TSLA', start_date = "2010-06-29", end_date = "2018-03-27")
数据帧作为输出返回,并存储在变量“tsla”中。你可以用任何股票代号代替“TSLA”来获取任何其他股票的数据。
下面是输出的样子:

Output for TSLA stock
让我们绘制一个时间序列图,看看价格是如何随时间变化的。
## Plotting the close price of Tesla
fig = tsla['Close'].plot(grid=True, figsize=(15,8))
fig.set_xlabel("")
fig.set_ylabel("Price", size=18)
下面是输出的样子:

graph for the close price of Tesla
我们可以将数据按周、月、季等分类。,使用折叠参数。
Tsla_monthly = quandl.get('WIKI/TSLA', start_date = "2010-01-01", end_date = "2021-08-01", collapse = “monthly”)
来自伦敦金银市场协会的数据
伦敦金银市场协会是黄金和白银市场的国际贸易协会。这是一个免费数据集。
下面是我们访问数据集的方法:
## Getting the silver data from LBMA
quandl.get('LBMA/SILVER', start_date='2011-09-06', end_date='2021-09-08')
下面是输出的样子:

Data output for Silver markets from London Bullion Market Association
美国核心基本面数据-高级订阅数据集样本
以下是如何获得特斯拉的数据(例如)
## Getting fundamental data for Tesla
quandl.get_table('SHARADAR/DAILY', ticker='TSLA')
下面是输出的样子:

Fundamental data for Tesla stock
通过 Python 中的 Quandl API 访问任何数据集的步骤
这些步骤将指导您通过 Python 中的 Quandl API 访问任何数据集。
第一步——点击进入纳斯达克数据链目录。
第 2 步——选择任何你感兴趣的数据集,并阅读描述。
第 3 步——转到“用法”部分,选择 python。
步骤 4 -您将看到使用 Python 中的 Quandl API 下载数据的命令。
完成后,您就可以随意使用数据集了。
纳斯达克数据链接免费订阅与纳斯达克数据链接高级订阅
Quandl 提供了大量的免费数据集。然而,它也有付费订阅的数据集。
以下是详细情况:
- 纳斯达克数据链接提供了 250 多个数据集,其中 40 个可以免费访问。
- 大多数优质数据集也提供免费样本。
免费套餐用户每 10 秒钟最多可拨打 300 个电话,每 10 分钟最多可拨打 2,000 个电话,每天最多可拨打 50,000 个电话。
- 拥有高级套餐的用户每 10 分钟最多可拨打 5,000 次电话,每天最多可拨打 720,000 次电话。
- 其他免费和付费订阅功能包括完整的 API 访问、多种格式的下载、导出和可视化选项等。
建议读数
参考书目
结论
本文向您介绍了一个新推出的平台( Nasdaq Data Link ),该平台提供对现成的传统和替代数据集的访问,并演示了使用 python 中的 Quandl API 从各种发布者(在 Nasdaq Data Link 上)获取数据集的过程。
我们研究了由 Nasdaq Data Link 提供的各种类型的数据集及其基于订阅的可访问性。
获取干净的数据对于构建和回溯测试交易策略至关重要,纳斯达克数据链接 Quandl API 将在这一过程中为您提供帮助。如果你想了解更多关于建立交易策略的知识,请查看 Quantra 上的量化交易策略和模型课程。
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
交易中自然语言处理的逐步指南
原文:https://blog.quantinsti.com/natural-language-processing-trading/
自然语言处理(NLP)在交易中被广泛使用。它主要用于通过 Twitter 订阅源、报纸文章、RSS 订阅源和新闻稿来衡量市场的情绪。在这篇博客中,我们将从交易者的角度讲述解决 NLP 问题所需的基本结构。
交易和 NLP
任何交易过某种金融工具的人都知道,市场会不断地考虑各种来源的消息。当一个人试图在非农就业数据等重大消息发布期间交易市场时,可以直接观察到有影响的消息与市场运动之间的因果关系。
新闻和 NLP
在社交媒体成为主要信息来源之前,交易者通常依赖广播或电视公告来获取最新信息。
但是自从 Twitter 成为影响市场的消息来源(感谢政治领导人),交易员们发现很难手动跟踪来自不同 Twitter 账号的所有信息。为了规避这个问题,交易者可以使用 NLP 软件包在短时间内阅读多个新闻源,并快速做出决定。
如果你是一名交易者,那么你绝对应该学习如何在交易中使用 NLP,超越其他交易者。现在我将一步一步地列出如何在交易中使用 NLP 的问题,并详细讨论每一个问题。
在交易中使用 NLP 的步骤
以下是使用 NLP 进行交易需要遵循的步骤。
获取数据
为了建立一个交易的 NLP 模型,你需要有一个可靠的数据来源。有多个供应商可以实现这一目的。例如,Twitter 和 Webhose 免费提供,而其他如 News API、路透社和彭博将向你收费。让我们将数据分为两种类型,并尝试以不同的方式处理它们。

结构化数据是以预定或一致的格式发布的数据。语言也很一致。
比如美联储纪要或某公司财报的新闻稿,可以认为是结构化数据。在这里,文本的长度通常非常大。
相反,非结构化数据是一种语言或格式都不一致的数据。例如,twitter feed、博客和文章可以算作其中的一部分。这些文本通常有篇幅限制。
数据预处理

这两个数据集有不同的相关问题。像 Twitter feeds 这样的非结构化数据由许多非文本数据组成,比如标签和提及。在测量文本的情感之前,这些需要被去除。
对于结构化数据来说,文本的大小很容易云其本质。要解决这个问题,您需要将文本分解成单独的句子,或者应用 tf-idf 等技术来估计单词的重要性。
将文本转换成情感评分

将文本数据转换成数值分数是一项具有挑战性的任务。对于非结构化文本,您可以使用预先存在的软件包,如 VADER,来估计新闻的情绪。如果文本是一篇博客或一篇文章,那么你可以试着把它分解给 VADER 来理解它。
对于结构化文本,您没有任何预先存在的库可以帮助您将文本转换为正或负的分数。所以,你必须创建一个你自己的图书馆。
在构建这样一个相关结构化数据的库时,应注意考虑来自类似来源的文本以及市场对此文本数据的相应反应。
例如,如果美联储发布声明称“通胀预期被牢牢锚定”,并将其改为“通胀预期稳定”,那么像 VADER 这样的库将无法区分,但市场会做出明显反应。
生成交易模型
一旦你有了文本的情绪分数,然后把这个和某种技术指标结合起来,过滤噪音,生成买卖信号。
要产生这些信号,你既可以根据自己的经验手动完成,也可以使用决策树类型的模型。
回测模型
一旦模型准备就绪,您需要对过去的数据进行回溯测试,以检查您的模型的性能是否在风险限制范围内。在回测时,请确保您没有使用用于训练决策树模型的相同数据。
如果模型符合您的风险管理标准,那么您可以在实时交易中部署该模型。
结论
总之,你可以说量化市场情绪的任务需要细致的研究和真正的资源。这就是为什么我们在 Quantra 创建了一个 T2 课程来帮助你在交互式经纪人的 TWS 上部署一个基于 Twitter 的情绪模型。
如果你希望在现代金融方法方面发展你的职业生涯,一定要参加这个关于金融情绪分析的课程。它涵盖了交易的各个方面,投资决策&应用使用新闻分析,情绪分析和替代数据。
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.
大师班:交易中的自然语言处理
原文:https://blog.quantinsti.com/natural-language-processing-webinar-14-january-2020/
https://www.youtube.com/embed/LBGr1lm3Jqs?rel=0
【2020 年 1 月 14 日星期二
美国东部时间上午 8:00 | IST 时间下午 6:30 |新加坡时间晚上 9:00
会议大纲
- 自然语言处理在金融市场中是如何应用的?
- 在 Quantra 学习门户网站上计算每日情绪得分
- 比较不同的单词嵌入方法及其优缺点
- Quantra 学习门户如何提供独特的学习体验?
谁应该参加?
- 技术专业人士,他们希望利用自己的技术技能明智地投资于金融市场
- 全权委托/手工交易者(例如专业交易者,兼职交易者),他们希望提高技能并获得更好的回报
- 希望在研究工作中出类拔萃的学生和其他爱好者
扬声器简介

terry benza wel
Benzschawel Scientific,LLC 的创始人和负责人
Terry Benzschawel 是 Benzschawel Scientific,LLC 的创始人和负责人。在此之前,特里曾在花旗集团的机构客户业务部门工作,担任董事总经理,领导量化信贷交易部门。在花旗的固定收益战略部门,Terry 曾担任信贷策略师,专注于所有信贷市场的客户导向解决方案。
在此之前,他曾在大通曼哈顿银行和花旗银行工作,构建预测公司破产和检测信用卡交易中的信用欺诈的算法。他已经写了两本关于信用建模的书。

伊山沙阿
AVP,内容&在 quanti STI研究
伊山·沙阿是 AVP,领导 quanti STI 在 Quantra 的内容&研究团队。在此之前,他曾在巴克莱银行的全球市场团队&与美国银行 Merill Lynch 共事。他在金融市场拥有丰富的经验,在不同的资产类别中担任不同的角色。
常见问题(FAQ)
自然语言处理在金融市场中是如何使用的?
- 自然语言处理侧重于人类语言和计算机之间的交互。它使机器能够更接近人类对语言文本的理解水平。人类很容易理解文本并解释其含义。但是在大量数据上做同样的事情是不可行的。
- 在金融和交易中,每天都会产生大量的数据,人类很难找到有用的信息并做出交易决策。这些数据以新闻、预定的经济发布、就业数据、利率、通货膨胀和 GDP 数据的形式出现。所有这些数据都会影响市场。为了处理如此大量的数据并获得重要的信息,使用了自然语言处理技术。
什么是情绪得分?
- 情绪得分是分配给一段内容/文本的量化值,用于做出交易决策。例如,推文“$AAPL 是我迄今为止最好的投资”的正面情绪得分为 0.6369,表明苹果股票的看涨趋势。另一方面,推文“AAPL 不是我迄今为止最好的投资”的计算得分为-0.5216,这是一个负分,表明股票下跌。
如何准备这个环节?
参与证明
- 如果您参加完整的网上研讨会,您将获得一份参与证书。
演讲T5】
您可以点击此处查看本次网络研讨会的 powerpoint 演示文稿:
https://www.slideshare.net/slideshow/embed_code/key/fBppWVfF9nPIj4
Masterclass: Natural Language Processing in Trading with Terry Benzschawel & Ishan Shah from QuantInsti
在 Slideshare 上查看我们所有的 50 多个之前的网络研讨会 powerpoint 演示文稿。
从造船和海洋工程到算法交易:Kishore 的旅程
基肖尔坚信要追随自己的激情并为之努力。这反映在他的个人资料中,他引用了“将激情和技能编织在一起”。
他拥有印度顶尖学府之一 IIT 马德拉斯大学的工程学位。然而,他追求自己对金融的兴趣,并且正在成为未来的算法交易员。他在许多金融课程中获得了 EPAT 认证、CFA 一级和内部审计师认证。
我们联系了基肖尔,以下是我们的讨论情况。
嗨,Kishore,给我们介绍一下你自己
嗨!我的名字是基肖尔·森希尔内森·阿达什,我来自印度。我已经完成了 IIT 马德拉斯大学的造船和海洋工程本科毕业。我还完成了金融硕士学位。

除了我的 CFA 学习,我正在寻找研究生课程和实习机会,特别是在量化交易结构和风险部门。
要在某方面出类拔萃,你必须既有激情又努力工作。我想在事业上出类拔萃,不想平庸。我的父母给了我做自己想做的事情的独立性,这给了我很大的信心。
我喜欢打板球和乒乓球。除此之外,去公路旅行是我最喜欢的事情。我的父母都是医生,我的妹妹正在完成她的学业。
IIT 马德拉斯大学金融工程硕士,目前正在攻读 CFA 二级证书。你的教育之旅是怎样的?
12 年级后,我进入了 into 马德拉斯大学。我学习成绩很好,在课外活动中也很活跃。大学二年级时,我在一家电子商务初创公司的市场研究团队实习。在我的第三年,我在 Kotak Mahindra 银行实习,负责公司财务。我开始参加 NSE、CFA 等不同的认证考试,探索和了解不同的职业选择。
在此期间,我发现金融和市场非常有趣,并开始深入探索。工程学毕业后,我选择了追随自己的热情,而不是校园实习。我被新加坡 ESSEC 商学院选中攻读金融硕士学位。
当我开始攻读硕士学位时,我对学习市场非常感兴趣。在这里,我们有一门关于交易和数字平台的课程,让我对算法交易产生了兴趣。随着课程的深入,我明白了一个人如何通过选择自动交易在这个竞争激烈的市场中获得优势。对我来说,抛开所有的情感和贪婪,让阿尔戈斯人交易你,这才更有意义。
我有丰富的金融知识,但编程经验很少。为了学习算法交易,我浏览了很多著名的课程、网站和课程表。但他们中的大多数人只谈论算法交易的理论方面,但我在寻找一种更实际的方法。那时我发现了 EPAT。
全面的学习和富有挑战性的课程是 EPAT 最大的优势。
EPAT 在你的生活中扮演了什么角色?
我发现 EPAT 非常迷人。一个完整的包,从市场微观结构开始,到机器学习技术。我觉得它是交易和编程的完美结合。
我很好奇如何开始一个交易台。EPAT 有一个完整的模块,这是你在其他任何课程中都学不到的。
我的硕士给了我广泛的金融理论知识,EPAT 通过提供完美的编程体验称赞了我的技能。作为一名 23 岁的学生,我现在没有太多的资本来开办自己的交易室。但是这绝对是一个很好的基础,给了我一个很好的开始,向着我的目标前进。在我的晚年,我渴望建立自己的 algo 交易平台。
如果你对交易和编码一无所知,但有兴趣以最好的方式学习算法交易,那么 EPAT 将指导你从最基础的开始成为一名真正的算法交易者。你需要你的热情和动力去学习。除此之外,EPAT 什么都有。
EPAT 很有挑战性,你必须付出百分之百的努力,我有过很棒的经历。如果有人想学习算法交易,我肯定会推荐 EPAT。
你想给有抱负的算法交易者什么信息?
从手动交易转换到自动交易有很多好处,也有很少的坏处(初始成本)。对我来说,一切都是为了努力跟上时代,尽快适应。
如果你已经决定交易是你的茶,并想在交易中建立一个职业生涯,那么你应该考虑未来,并把你最好的赌注。算法交易具备在不久的将来完全主导交易市场的所有要素。
谢谢你联系我们,基肖尔。非常感谢您与我们的读者分享您的个人旅程。我们确信这将激励和有益于他们和他们在算法交易中的职业生涯。我们祝你未来一切顺利。
在学习算法交易的过程中,你需要正确的知识和必要的技能。算法交易(EPAT)高管课程(T1),帮助你实现你的学习目标。EPAT 是一门综合性课程,涵盖了广泛的主题。
免责声明:为了帮助那些考虑从事算法和量化交易的人,这个案例研究是根据一个学生或 QuantInsti 的 EPAT 项目的校友的个人经历整理的。案例研究仅用于说明目的,并不意味着用于投资目的。EPAT 项目完成后所取得的成果对所有人来说可能并不一致。
Python 中的神经网络:介绍、结构和交易策略
你大概在想,像神经网络教程这样的技术话题是怎么托管在一个算法交易网站上的。神经网络研究的开始是为了绘制人脑地图,理解人类如何做决定,但算法试图从交易方面完全消除人类的情绪。我们有时未能意识到的是,人脑很可能是这个世界上最复杂的机器,而且众所周知,它能在创纪录的时间内非常有效地得出结论。
想想看,如果我们能够利用我们大脑的工作方式,并将其应用于机器学习领域(神经网络毕竟是机器学习的子集),我们可能会在处理能力和计算资源方面实现巨大的飞跃。
在我们深入研究神经网络交易的本质之前,我们应该了解主要部分,即神经元的工作原理。因此,在神经网络教程中,我们将涵盖以下主题
请记住,神经网络教程的最终目标是理解神经网络中涉及的概念,以及如何应用它们来预测实时市场中的股票价格。让我们从理解什么是神经元开始。
一个神经元的结构

神经元有三个组成部分,树突、轴突和神经元的主体。树突是信号的接收器,轴突是信号的发送器。单独来说,一个神经元没有多大用处,但当它与其他神经元相连时,它会进行几项复杂的计算,并帮助操作我们星球上最复杂的机器——人体。

感知器:计算机神经元
感知器即计算机神经元也是以类似的方式构建的,如图所示。
用黄色圆圈标记的是神经元的输入,经过一些计算后,神经元发出输出信号。
输入层类似于神经元的树突,输出信号是轴突。每个输入信号被分配一个权重 wi。这个权重乘以输入值,神经元存储所有输入变量的加权和。这些权重是在神经网络学习的训练阶段通过称为梯度下降和反向传播的概念计算出来的,我们将在后面讨论这些主题。
然后将激活函数应用于加权和,这产生神经元的输出信号。
输入信号由其他神经元产生,即其他神经元的输出,并且网络被构建成以这种方式进行预测/计算。
这是神经网络的基本思想。在本神经网络教程中,我们将更详细地研究这些概念。
了解一个神经网络
我们将通过一个例子来理解神经网络的工作原理。输入层由帮助我们得出输出值或进行预测的参数组成。我们的大脑本质上有五个基本的输入参数,即我们的触觉、听觉、视觉、嗅觉和味觉。
我们大脑中的神经元从这些基本输入参数中创建了更复杂的参数,如情绪和感觉。以及我们的情绪和感觉,让我们行动或做出决定,这基本上是我们大脑神经网络的输出。因此,在这种情况下,在做出决定之前有两层计算。
第一层将五种感觉作为输入,并产生情绪和感觉,这是下一层计算的输入,输出是一个决定或一个行动。
因此,在这个极其简单的人脑工作模型中,我们有一个输入层、两个隐藏层和一个输出层。当然,从我们的经验来看,我们都知道大脑比这要复杂得多,但本质上这就是计算在我们大脑中是如何进行的。
神经网络在交易中的应用实例
为了理解神经网络在交易中的工作,让我们考虑一个简单的股票价格预测示例,其中 OHLCV(开盘-盘高-盘低-收盘-成交量)值是输入参数,有一个隐藏层,输出由股票价格预测组成。

在神经网络教程中的示例中,有五个输入参数,如图所示。
隐藏层由 3 个神经元组成,输出层的结果是对股票价格的预测。
隐藏层中的 3 个神经元对于 5 个输入参数中的每一个将具有不同的权重,并且可能具有不同的激活函数,这将根据输入的各种组合来激活输入参数。
例如,第一个神经元可能会关注成交量以及收盘价和开盘价之间的差异,可能会忽略最高价和最低价。在这种情况下,高价格和低价格的权重将为零。
基于模型已经训练自身达到的权重,激活函数将被应用于神经元中的加权和,这将产生该特定神经元的输出值。
类似地,其他两个神经元将基于它们各自的激活函数和权重产生输出值。最后,股价的输出值或预测值将是每个神经元的三个输出值之和。这就是神经网络预测股票价格的方式。
现在,您已经了解了神经网络的工作原理,我们将进入本神经网络教程的核心问题,即学习人工神经网络如何训练自己来预测股票价格的运动。
训练神经网络
为了简化神经网络教程中的内容,我们可以说有两种方法来编写执行特定任务的程序。
- 给定程序的一些输入,定义程序计算结果所需的所有规则。
- 开发一个框架,代码将在此框架上学习执行特定的任务,方法是通过调整它计算的结果,使其尽可能接近观察到的实际结果,在数据集上训练自己。
第二个过程叫做训练模型,这是我们将要关注的。让我们看看我们的神经网络将如何训练自己来预测股票价格。
神经网络将获得数据集,该数据集包括作为输入和输出的 OHLCV 数据,我们还将向模型提供第二天的收盘价,这是我们希望我们的模型学习预测的值。输出的实际值将由“y”表示,预测值将由 y^表示。
模型的训练包括为神经网络中存在的所有不同神经元调整变量的权重。这是通过最小化“成本函数”来实现的。顾名思义,成本函数是使用神经网络进行预测的成本。它衡量预测值 y^与实际值或观察值 y 之间的差距
实践中使用了许多成本函数,最常用的一种是将训练数据集的实际值和预测值之间的平方差之和的一半计算出来。

神经网络自我训练的方式是首先为给定的一组神经元权重计算训练数据集的成本函数。然后,它返回并调整权重,接着基于新的权重计算训练数据集的成本函数。将误差发送回网络以调整权重的过程称为反向传播。
这被重复几次,直到成本函数被最小化。接下来,我们将更详细地了解如何调整权重和最小化成本函数。
调整权重以最小化成本函数。一种方法是通过蛮力。假设我们取 1000 个权重值,并评估这些值的成本函数。当我们绘制成本函数的图表时,我们将得到如下所示的图表。
权重的最佳值将是对应于该图的最小值的成本函数。

这种方法对于涉及需要优化的单个权重的神经网络可能是成功的。然而,随着要调整的权重数量和隐藏层数量的增加,所需的计算数量将急剧增加。
即使在世界上最快的超级计算机上,训练这样一个模型所需的时间也将非常长。为此,开发一种更好、更快的方法来计算神经网络的权重是非常必要的。这个过程叫做梯度下降。我们将在神经网络教程的下一部分研究这个概念。
渐变下降
梯度下降包括分析成本函数曲线的斜率。基于斜率,我们调整权重,以逐步最小化成本函数,而不是计算所有可能组合的值。
梯度下降的可视化如下图所示。第一个图是权重的单个值,因此是二维的。可以看出,红球以之字形移动,以达到成本函数的最小值。
在第二张图中,我们必须调整两个权重,以最小化成本函数。因此,我们可以把它想象成一个轮廓,如图所示,我们正朝着最陡斜率的方向移动,以便在最短的持续时间内达到最小值。使用这种方法,我们不必进行许多计算,因此,计算不会花费很长时间,这使得模型的训练成为一项可行的任务。


梯度下降可以以三种可能的方式完成,
- 批量梯度下降
- 随机梯度下降
- 小批量梯度下降
在批量梯度下降中,通过对训练数据集中的所有单个成本函数求和来计算成本函数,然后计算斜率并调整权重。
在随机梯度下降中,在训练数据集中的每个数据输入之后,进行成本函数的斜率和权重的调整。如果成本函数的曲线不是严格凸的,这对于避免陷入局部最小值是非常有用的。每次运行随机梯度下降时,达到全局最小值的过程都会不同。如果批量梯度下降停止在局部最小值,可能会导致陷入次优结果。
第三种是小批量梯度下降法,它是批量法和随机法的结合。这里,我们通过将多个数据条目放在一个批处理中来创建不同的批处理。这实质上导致在训练数据集中的更大批量的数据条目上实现随机梯度下降。
虽然我们可以深入研究梯度下降,但我们担心这将超出神经网络教程的范围。因此,让我们向前看,了解反向传播如何根据已经产生的误差来调整权重。
反向传播
反向传播是一种高级算法,它使我们能够同时更新神经网络中的所有权重。这大大降低了调整权重过程的复杂性。如果我们不使用这种算法,我们将不得不通过计算特定权重对预测误差的影响来单独调整每个权重。让我们看看用随机梯度下降训练神经网络的步骤:
- 将权重初始化为非常接近 0(但不是 0)的小数字
- 正向传播 -通过使用我们训练数据集中的第一个数据条目,从左到右激活神经元,直到我们达到预测的结果 y
- 测量将产生的误差
- 反向传播-产生的误差将从右向左反向传播,权重将根据学习率进行调整
- 在整个训练数据集上重复前面的三个步骤,正向传播、误差计算和反向传播
- 这将标志着第一个时期的结束,后续时期将以先前时期的权重值开始,当成本函数收敛在某个可接受的限度内时,我们可以停止该过程
我们在这个神经网络教程中已经讲了很多,这将引导我们在实践中应用这些概念。因此,我们现在将学习如何开发我们自己的人工神经网络来预测股票价格的运动。
你将理解如何使用我们将从头构建的神经网络的预测来编码策略。您还将学习如何用 Python 编写人工神经网络,利用强大的库来构建一个健壮的交易模型,使用神经网络的力量。
编码策略
导入库
我们将从导入几个库开始,其他的将在程序的不同阶段使用时导入。现在,我们将导入库,这些库将帮助我们导入和准备数据集,以便对模型进行训练和测试。
import numpy as np
import pandas as pd
import talib
Numpy 是科学计算的基础包,我们将使用这个库来计算我们的数据集。使用别名 np 导入该库。
Pandas 将帮助我们使用强大的 dataframe 对象,该对象将在 Python 中构建人工神经网络的整个代码中使用。
塔利布是一个技术分析库,将用于计算 RSI 和 Williams %R。这些将用作训练我们的人工神经网络的特征。我们可以使用这个库添加更多的特性。
将随机种子设置为固定数量
import random
random.seed(42)
Random 将用于将种子初始化为一个固定的数字,这样我们每次运行代码时都以相同的种子开始。
导入数据集
dataset = pd.read_csv('RELIANCE.NS.csv')
dataset = dataset.dropna()
dataset = dataset[['Open', 'High', 'Low', 'Close']]
然后,我们导入数据集,该数据集存储在。名为“RELIANCE”的 csv 文件。NS.csv。这是使用 pandas 库完成的,数据存储在名为 dataset 的数据帧中。然后,我们使用 dropna()函数删除数据集中缺失的值。csv 文件包含 1996 年 1 月 1 日至 2018 年 1 月 15 日期间在 NSE 上交易的 Reliance 股票的每日 OHLC 数据。
我们仅从该数据集中选择 OHLC 数据,该数据集中还包含日期、调整后收盘和成交量数据。我们将仅使用 OHLC 值构建输入要素。
准备数据集
dataset['H-L'] = dataset['High'] - dataset['Low']
dataset['O-C'] = dataset['Close'] - dataset['Open']
dataset['3day MA'] = dataset['Close'].shift(1).rolling(window = 3).mean()
dataset['10day MA'] = dataset['Close'].shift(1).rolling(window = 10).mean()
dataset['30day MA'] = dataset['Close'].shift(1).rolling(window = 30).mean()
dataset['Std_dev']= dataset['Close'].rolling(5).std()
dataset['RSI'] = talib.RSI(dataset['Close'].values, timeperiod = 9)
dataset['Williams %R'] = talib.WILLR(dataset['High'].values, dataset['Low'].values, dataset['Close'].values, 7)
然后,我们准备各种输入特征,人工神经网络学习将使用这些特征进行预测。我们定义了以下输入特征:
- 高价减去低价
- 收盘减去开盘价
- 三天移动平均线
- 十天移动平均线
- 30 天移动平均线
- 5 天期间的标准偏差
- 相对强度指数
- 威廉姆斯%R
dataset[’ Price _ Rise ‘]= NP . where(dataset[’ Close ']。shift(-1)>数据集[‘Close’],1,0)
然后,我们将输出值定义为价格上涨,这是一个二进制变量,当明天的收盘价大于今天的收盘价时,存储 1。
dataset = dataset.dropna()
接下来,我们使用 dropna()函数删除所有存储 NaN 值的行。
X = dataset.iloc[:, 4:-1]
y = dataset.iloc[:, -1]
然后,我们创建两个数据帧来存储输入和输出变量。数据帧“X”存储输入要素,这些列从数据集的第五列(或索引 4)开始,一直到倒数第二列。最后一列将存储在 dataframe y 中,这是我们要预测的值,即价格上涨。
分割数据集
split = int(len(dataset)*0.8)
X_train, X_test, y_train, y_test = X[:split], X[split:], y[:split], y[split:]
在这部分代码中,我们将分割输入和输出变量,以创建测试和训练数据集。这是通过创建一个名为 split 的变量来实现的,该变量被定义为数据集长度的 0.8 倍的整数值。
然后,我们将 X 和 y 变量分成四个独立的数据帧:Xtrain、Xtest、ytrain 和 ytest。这是任何机器学习算法的基本部分,模型使用训练数据来得出模型的权重。测试数据集用于查看模型如何处理将输入模型的新数据。测试数据集还有输出的实际值,这有助于我们理解模型的效率。我们将在代码的后面查看混淆矩阵,它本质上是模型所做预测的准确性的度量。
特征缩放
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
数据预处理的另一个重要步骤是标准化数据集。此过程会使所有输入要素的平均值等于零,并将它们的方差转换为 1。这确保了在训练模型时不会因为所有输入要素的不同比例而产生偏差。如果不这样做,神经网络可能会混淆,并对那些平均值比其他特征高的特征给予较高的权重。
我们通过从 sklearn.preprocessing 库中导入 StandardScaler 方法来实现这个步骤。我们用 StandardScaler()函数实例化变量 sc。之后,我们使用 fittransform 函数在 Xtrain 和 Xtest 数据集上实现这些更改。ytrain 和 y_test 集合包含二进制值,因此它们不需要标准化。既然数据集已经准备好了,我们可以继续使用 Keras 库构建人工神经网络。
构建人工神经网络
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
现在,我们将导入用于构建人工神经网络的函数。我们从 keras.models 库中导入顺序方法。这将用于顺序构建学习的神经网络的层。我们导入的下一个方法是 keras.layers 库中的 Dense 函数。
这种方法将被用来建立我们的人工神经网络层。
classifier = Sequential()
我们将 Sequential()函数实例化到变量分类器中。然后,这个变量将用于构建 python 中人工神经网络学习的层。
classifier.add(Dense(units = 128, kernel_initializer = 'uniform', activation = 'relu', input_dim = X.shape[1]))
为了将层添加到我们的分类器中,我们使用 add()函数。add 函数的参数是 Dense()函数,它又有以下参数:
- 单位:这定义了特定层中节点或神经元的数量。我们已经将这个值设置为 128,这意味着在我们的隐藏层中将有 128 个神经元。
- Kernel_initializer:这定义了隐藏层中不同神经元权重的初始值。我们将其定义为“均匀”,这意味着权重将使用均匀分布的值进行初始化。
- 激活:这是特定隐藏层中神经元的激活函数。这里我们将该函数定义为校正线性单位函数或“relu”。
- Input_dim:它定义了隐藏层的输入数量,我们已经将这个值定义为等于输入特征数据帧的列数。在随后的层中将不需要该参数,因为模型将知道前一层产生了多少输出。
classifier.add(Dense(units = 128, kernel_initializer = 'uniform', activation = 'relu'))
然后我们添加第二层,有 128 个神经元,有一个统一的内核初始化器和“relu”作为它的激活函数。我们只是在这个神经网络中建立了两个隐藏层。
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
我们构建的下一层将是输出层,我们需要一个输出。因此,传递的单位是 1,激活函数被选择为 Sigmoid 函数,因为我们希望预测是市场向上移动的概率。
classifier.compile(optimizer = 'adam', loss = 'mean_squared_error', metrics = ['accuracy'])
最后,我们通过传递以下参数来编译分类器:
- 优化器:优化器被选择为“adam”,这是随机梯度下降的扩展。
- 损耗:这定义了在训练期间要优化的损耗。我们将这种损失定义为均方误差。
- 度量:这定义了在测试和训练阶段由模型评估的度量列表。我们选择准确性作为我们的评估标准。
classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)
现在,我们需要使我们创建的神经网络适合我们的训练数据集。这是通过在 fit()函数中传递 Xtrain、ytrain、批处理大小和历元数来实现的。批次大小是指在反向传播误差并对权重进行修改之前,模型用来计算误差的数据点的数量。历元数表示将对训练数据集执行模型训练的次数。
这样,我们用 Python 编写的人工神经网络就编译好了,可以进行预测了。
预测股票的走势
y_pred = classifier.predict(X_test)
y_pred = (y_pred > 0.5)
既然已经编译了神经网络,我们可以使用 predict()方法进行预测。我们将 Xtest 作为参数传递,并将结果存储在名为 ypred 的变量中。然后,我们通过存储条件 ypred > 5,将 ypred 转换为存储二进制值。现在,变量 y_pred 根据预测值是大于还是小于 0.5 来存储 True 或 False。
dataset['y_pred'] = np.NaN
dataset.iloc[(len(dataset) - len(y_pred)):,-1:] = y_pred
trade_dataset = dataset.dropna()
接下来,我们在 dataframe 数据集中创建一个列标题为“ypred”的新列,并将 NaN 值存储在该列中。然后,我们将 ypred 的值存储到这个新列中,从测试数据集的行开始。这是通过使用 iloc 方法对数据帧进行切片来实现的,如上面的代码所示。然后,我们从数据集中删除所有 NaN 值,并将它们存储在名为 trade_dataset 的新数据帧中。
计算策略返回
trade_dataset['Tomorrows Returns'] = 0.
trade_dataset['Tomorrows Returns'] = np.log(trade_dataset['Close']/trade_dataset['Close'].shift(1))
trade_dataset['Tomorrows Returns'] = trade_dataset['Tomorrows Returns'].shift(-1)
现在我们有了股票运动的预测值。我们可以计算这个策略的收益。当 y 的预测值为真时,我们将持有多头头寸,当预测信号为假时,我们将持有空头头寸。
我们首先计算如果在今天结束时做多,并在第二天结束时平仓,该策略将获得的回报。我们首先在 trade_dataset 中创建一个名为“Tomorrows Returns”的新列,并在其中存储一个值 0。我们使用十进制符号来表示浮点值将存储在这个新列中。接下来,我们在其中存储今天的对数回报,即今天收盘价除以昨天收盘价的对数。接下来,我们将这些值向上移动一个元素,以便根据今天的价格存储明天的回报。
trade_dataset['Strategy Returns'] = 0.
trade_dataset['Strategy Returns'] = np.where(trade_dataset['y_pred'] == True, trade_dataset['Tomorrows Returns'], - trade_dataset['Tomorrows Returns'])
接下来,我们将计算策略回报。我们在标题“StrategyReturns”下创建一个新列,并用值 0 初始化它。以指示存储浮点值。通过使用 np.where()函数,如果“ypred”列中的值存储为 True(长位置),则我们将存储“Tomorrows Returns”列中的值,否则我们将存储“Tomorrows Returns”列中的值的负值(短位置);“策略回报”一栏。
trade_dataset['Cumulative Market Returns'] = np.cumsum(trade_dataset['Tomorrows Returns'])
trade_dataset['Cumulative Strategy Returns'] = np.cumsum(trade_dataset['Strategy Returns'])
我们现在计算市场和策略的累积回报。这些值是使用 cumsum()函数计算的。我们将在最后一步中使用累计和来绘制市场和策略回报的图表。
绘制收益图
import matplotlib.pyplot as plt
plt.figure(figsize=(10,5))
plt.plot(trade_dataset['Cumulative Market Returns'], color='r', label='Market Returns')
plt.plot(trade_dataset['Cumulative Strategy Returns'], color='g', label='Strategy Returns')
plt.legend()
plt.show()
现在,我们将绘制市场回报和我们的策略回报,以直观显示我们的策略在市场中的表现。为此,我们将导入 matplotlib.pyplot。然后,我们使用 plot 函数,使用存储在 dataframe trade_dataset 中的累积值绘制市场回报和策略回报的图表。然后,我们分别使用 legend()和 show()函数创建图例并显示绘图。
下面显示的图是代码的输出。绿线代表使用该策略产生的回报,红线代表市场回报。

结论
因此,当我们到达神经网络教程的末尾时,我们相信现在你可以用 Python 构建你自己的人工神经网络,并开始使用你的机器的能力和智能进行交易。除了神经网络,还有很多其他的机器学习模型可以用于交易。当你有超过 100,000 个数据点来训练模型时,人工神经网络或任何其他深度学习模型将是最有效的。
这个模型是根据每日价格开发的,目的是让您了解如何构建模型。建议使用分钟或分笔成交点数据来训练模型,这将为您提供足够的数据来进行有效的训练。
你可以在 Quantra 上注册神经网络课程,在这里你可以使用先进的神经网络技术和最新的研究模型,如 LSTM & RNN,来预测市场和寻找交易机会。Keras,使用相关的 python 库。
金融情感分析的新范式
原文:https://blog.quantinsti.com/new-paradigms-sentiment-analysis-applied-finance/
关于会议
本次会议是由联通和印度管理学院加尔各答。情感分析应用机器学习,对新闻发布中表达的情感进行快速评估。本次会议讨论并解释了如何整合多种信息来源来构建市场情绪,例如:
- 新闻专线
- 宏观经济公告
- 社会化媒体
- 微博/推特
- 在线(搜索)信息,如谷歌趋势
小组会议 2——金融情感分析的新范式
日期
2016 年 3 月 11 日
时间
美国东部时间 12:30-13:00
拉吉布·兰詹·博拉

Rajib Ranjan Borah 是 irage capital Advisory Private Limited 和 quantin STI Quantitative Learning Private Limited 的联合创始人和董事。在 iRage,Rajib 为东南亚交易所设计高频交易策略;在 QuantInsti,他与交易所和其他机构合作设计教育项目,并管理一个 100 小时的算法交易在线教育项目。在加入 iRage 之前,Rajib 与领先的 HFT 公司 Optiver 合作,为所有主要的美国和欧洲交易所做出了巨大贡献。
此前,作为一名战略顾问,Rajib 协助一个财团启动了一个全国性的商品衍生品交易所。他在纽约的彭博公司实习,在比利时的首诺国际 EMEA 战略总部实习。作为国家奥林匹克决赛选手,Rajib 曾两次代表印度参加世界拼图锦标赛。
应用于金融的行为模型和情绪分析 2015,第五届伦敦年会
联通研讨会有限公司于 2015 年 7 月 15 日至 16 日举办了第五届“行为模型与情绪分析在金融中的应用”年会。会议重点讨论了情绪分析在交易、资金管理和风险控制模型中的应用。该领域的专家介绍了他们的研究成果、案例研究和技术概述。特别是算法交易的话题。当年会议的特点是纳入了社交媒体数据(推特、博客、谷歌趋势、在线搜索);它们的可信度如何,它们如何影响市场情绪,多种资产类别的情绪分析。

更多活动的照片可以在我们的 脸书页面上看到。
T4】
769

被折叠的 条评论
为什么被折叠?



