加密货币的定量数据分析[网络研讨会]
原文:https://blog.quantinsti.com/quantitative-data-analysis-cryptocurrencies-24-february-2022/
https://www.youtube.com/embed/rD7HkJS3yd8?rel=0
完整演示
//www.slideshare.net/slideshow/embed_code/key/nb2FEpp8DvqwhQ
Quantitative Data Analysis of Cryptocurrencies from QuantInsti
Jupyter 笔记本 Python 代码
关于会议
最近有很多关于加密的讨论。如果聊天让你好奇,继续读下去。
在本次网络研讨会中,演讲者将,
- 探索什么是加密货币,
- 接触这些天的顶级加密货币,
- 如何以及在哪里获取加密货币的数据,以及
- 在那里你可以交易加密货币
她还将分析历史加密数据,并着眼于不同类型的加密交易策略。
扬声器
Udisha Alok(quantin STI 的量化研究员)
Udisha 是 QuantInsti 的一名量化研究员。在此之前,她曾在领先的科技公司担任软件开发员。她对编码和金融市场充满热情。她感兴趣的专业领域是在回溯测试和现场交易中使用机器学习技术。
她写过区块链、比特币、以太坊、Ripple 的文章。正如你可能会告诉,她不能得到足够的加密货币!
本次活动于:
2022 年 2 月 24 日星期四
东部时间上午 8:30 | IST 时间晚上 7:00 |新加坡时间晚上 9:30
成为定量开发人员的简单指南
定量分析师是定量交易领域另一个有趣的角色。算法交易者和量化开发者之间有很大的不同。算法交易员是在分析市场后执行交易策略的人,而量化分析师是所有算法编程的幕后推手。让我们了解更多关于定量开发人员的信息,正如本文所涵盖的:
谁是 Quant 开发人员?
quant 开发人员是最终在编程语言的帮助下开发策略的程序员。她/他负责为量化交易行业提供金融解决方案。因此,定量开发人员需要对应用数学、统计模型、算法和科学计算有透彻的了解。
量化开发人员通常在投资银行、对冲基金、经纪公司或金融证券公司工作。
接下来,让我们来看看 quant 开发人员的类型。
定量开发人员的类型
在金融领域,主要有两种类型的 quant 开发人员:
- 前台开发人员
- 中层开发人员
- 后台开发人员
前台开发人员
Quant 开发人员与定量分析师一起工作,帮助实施和优化金融模型。这意味着从 Python 等编程语言中获取原型代码,然后用 C++或 Java 等另一种编程语言重写它。前台定量开发人员直接与客户联系,提供定制的软件和分析工具。
中层开发人员
这些是量化开发人员,他们在银行扮演着中间办公室的角色。在投资银行,这意味着在大规模系统上工作。他们参与交易基础设施的编码,帮助定量分析师或交易员运行或执行他们的模型。
后台开发人员
这些开发人员在后台执行诸如模型验证和风险管理等任务。对于这个职位,你需要具备理论知识/技能、分析能力和解决问题的深度。模型验证有助于在后端解决问题,从而进一步避免任何技术问题。
接下来,我们将了解什么资格有助于成为 quant 开发人员。
成为 Quant 开发人员的教育资格
正如我们在定量开发人员的定义中所讨论的,定量开发人员需要精通金融、计算机科学、应用数学、统计模型、算法和科学计算。
一个有抱负的 quant 开发人员必须学习一门编码语言,尤其是最常用的语言,比如 Python ,C++,C#,R 和 Java。
此外,工具的知识是成为一个定量分析师所必需的,因为这些工具有助于回溯测试和最终确定交易策略。本文下面讨论了一些通用工具/平台。
此外,定量金融学是另一门提供分析金融市场和证券所需知识的学科。这种分析基本上是利用数学模型和庞大的数据集来完成的,因此,这一领域的专家被称为定量分析师。
然而,如果一个定量开发人员掌握了关于金融市场和证券定价的知识,能够理解为分析师编写什么样的代码,他/她会在工作中做得更好。
例如,如果定量分析师提出牛市或熊市策略,定量分析师必须了解市场的复杂性以及证券的预测/定价实践。
因此,定量分析师不需要有自己的策略。他们只需要理解并采用策略来完美地自动化它们。
此外,对于大多数金融模型所面临的风险管理来说,掌握风险分析知识也同样重要。
因此,掌握使用定量模型的知识非常重要,这有助于分析师分析过去的数据、当前的数据以及未来的预期数据。
现在让我们找出定量开发人员的工作描述。
作为定量开发人员所需的技能/工作描述
作为一名定量开发人员,如果你全心全意地投入编程,你所承担的角色不仅具有挑战性,而且令人兴奋。
此外,为了成为一名定量开发人员,您必须知道如何从磨练基本技能到掌握高级技能。
下面,我把所有这些技巧都提到如下:
- 软件开发
- 通讯技能
- 理论/技术技能
- 编程技能
- 机器学习和深度学习
软件开发
软件开发技能是最重要的技能之一,因为它对于开发人员来说是极其重要的技能,因为它可以帮助您理解开发角色的核心。此外,自动化需要很好的软件开发知识,这种技能在金融领域也很受欢迎。随着你的工作经历的发展,掌握软件开发技能增加了对工作核心的理解。
沟通技巧
对于一个定量开发人员来说,保持良好的沟通技巧/软技巧是非常重要的,这样才能与分析师和其他人进行良好的沟通,从而进行良好的编程。知道如何使用软技能对任何定量开发人员都是有利的,因为它提高了效率,并使任何定量开发人员成功。
理论/技术技能
作为一名量化开发人员,你需要为投资银行或金融服务机构的几个功能开发和维护量化模型。这些功能是定价、风险管理以及分析。为了发展这样的技能和创建这些模型,你需要在统计和数学领域有很强的知识。这些用于定量开发的模型包括:
- 整合模型
- 期权定价模型
- 预测模型
- 贴现现金流模型
- 合并模型
整合模型
该模型有助于将多个业务单位整合到一个模型中
期权定价模型
这个模型是基于交易中的 Black-Scholes 和二叉树等理论
预测模型
这个模型有助于预测股票的模式,并在投资股票市场方面做出正确的决策
贴现现金流模型
这个模型对于计算市场中的净现值和未来值非常重要
合并模型
也称为并购模型,它是用主要的合并公司来计算的
编程技巧
下一步是让自己熟悉高效的算法和编程语言知识,如 C/C++、Python、Java 和 MATLAB。这将使你成为金融行业的 bea quant 开发者。
编程技能对 quant 开发人员来说是最重要的,如果你拥有所有其他技能,但不是编程大师,那么你可以在在线学习计划的帮助下随时提高技能。
机器学习和深度学习
有了机器学习和深度学习知识,你将能够实现逻辑回归模型、神经网络、LSTM 以及金融行业的其他 ML 技术。此外,机器学习技术正在进步,并使其在金融领域的每一步都很方便。随着时间的推移,技术和知识的进步有助于定量开发人员在专业水平上发挥作用。
给你一个例子,对于 iRageCapital 的定量开发人员职位,工作职责如下:
- 开发人员将与我们的定量研究/分析师团队合作,并将协助项目,以改善股票选择,投资组合的建设或实施
- 此人的主要目标将是围绕开发内部研究平台
所需技能:
- 强大的编码和数据管理能力
- 理想的候选人应该具备基本的会计和金融知识
- 候选人应该有很强的 Python (NumPy,Pandas,Matplotlib,Zipline)/Django/JavaScript 等编码技能。
- SQL 能力和对关系数据库的理解以及财务/会计的中级知识
- 可学性、团队精神和灵活性是我们寻找的重要特征
此外,以下是量化开发人员用来开发金融模型和交易策略的工具:
现在,我们来看看定量开发人员的工资/报酬。
工资/报酬
量化开发人员的财务回报/ 薪水是巨大的,这是因为开发人员的工作涉及从了解市场到编码的一切。
下面,我们列出了不同国家定量开发人员的平均工资/薪酬:
|
国家 |
平均基本工资/年 |
美元 |
|
美国 |
$1,24,000 |
$1,24,000 |
|
印度 |
11.14 万卢比 |
$15105.32 |
|
英国 |
£90,898 |
$118495.09 |
|
加拿大 |
大约 9 万美元 |
$68310.90 |
|
新加坡 |
16 万新元 |
$50248.92 |
|
香港 |
1000,000 港元 |
$129024.80 |
来源:玻璃门
你可以阅读更多关于 quant 的平均工资。
尽管上述工资只是每个国家的 quant 开发人员作为新人的平均基本工资的代表。然而,一个专业的定量开发人员除了奖金之外,一年可以赚大约 25 万美元。加上奖金,一个成功的定量开发人员的年薪甚至可以达到 50 万美元。
现在,让我们看看作为一个有抱负的 quant 开发者,你可以采取什么步骤。
成为定量开发人员的步骤
现在,您已经了解了该角色所需的技能以及定量开发人员的工资/报酬,现在您可以看到成为定量开发人员的步骤。在这个子主题中,您将了解如何将技能与行业要求对应起来。这些重要步骤是:
- 识别和发展技能差距
- 入围职业机会
- 准备面试
- 专业发展
确定和发展技能差距
首先,作为一个有抱负的 quant 开发人员,你需要找出技能的差距,或者在你的道路上缺失的技能。正如你在上面的章节中读到的,你需要一些技术、编程和软件相关的技能以及沟通技巧。最好是找出哪些技能需要挑选和覆盖,以避免任何障碍。
例如,如果你是金融市场出身,从来没有从事过任何技术工作,那么你必须选择那些能为你提供专业知识的课程。
因为建立这些技能是非常重要的,所以你必须注册一门你需要的专业课程。
您可以受益于在线提供的课程,如金融市场中的机器学习和深度学习、使用 Python 的自动交易和期权交易中的量化方法。
入围职业机会
其次,你必须列出可供选择的职业机会,这样你就能找到一个你认为合适的。入围后,你可以开始申请你喜欢的公司的定量开发员职位。以下是雇佣定量开发人员的顶级公司列表:
准备面试
当你渴望成为一名量化开发者时,准备面试是下一步要做的事情。强烈建议您从现有的 quant 开发人员那里获取知识,或者参加 quant 面试问题准备等课程,从而获得专业帮助。如果你准备好一些棘手的面试问题来应对量化面试,效果会好得多。
职业发展
最后但并非最不重要的是职业发展,这意味着即使你有了一份可以依赖的工作,也要时刻保持自我更新。跟上新的机遇,找到在职业上提升自己的方法,这将有助于你提升自己的能力。此外,你将能够为你工作的公司做出杰出的贡献。
结论
定量开发人员的角色分布在多个学科的应用中,如数学、统计模型、算法和科学计算。由于定量开发人员需要为分析师编码并自动执行策略,因此开发人员也必须具备证券和金融市场的所有知识。你还必须具备在银行或对冲基金面试量化开发人员的良好技能。
探索我们关于 Python for trading 的课程,以便利用 Python 编码让你的烛台模式读起来更方便。计算机语言可以帮助你编码,以便对你的烛台模式进行回溯测试,用于数据分析和生成交易信号。
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。T3】
数量金融学导论
在你寻求获得量化金融知识的过程中,如果你想知道从哪里开始,它有什么帮助,那么你必须通读这篇全面的文章。本文分子主题,帮助你详细了解量化金融:
什么是量化金融
简单来说,量化金融提供分析金融市场和证券所需的知识。这种分析基本上是通过使用数学模型和庞大的数据集来完成的,因此,这一领域的专家被称为定量分析师或 quants 。现在,这里有必要提一下,定量分析师使用数学模型是为了:
- 衍生证券定价
- 风险管理。
此外,定量分析师专门设计、开发和实现解决复杂金融问题的算法。现在让我们向前看,并找出为什么定量金融是重要的。
量化金融有多重要?
量化金融是你学习成为量化分析师所需的一切的核心。虽然对于有抱负的量化分析师来说,学习量化金融很重要,但事实上,很多精通交易知识的人来自各种背景。
据观察,2017-2018 年,报名参加量化金融学习课程的参与者中有 60%没有金融背景。
因此,如果你有金融背景,这很好,但如果没有,你可以轻松报名参加学位课程或证书课程。
成为量化分析师后,对量化金融的深入研究可以在一些广泛的领域帮助你:
- 投资组合管理
- 货币市场
投资组合管理
看到投资组合管理的各种优势,将你的投资组合分散到股票、债券、衍生品和大宗商品中是至关重要的。作为一名基金经理,你需要研究不同资产类别在一个群体中的表现以及它们之间的关系。因此,有了定量金融的良好知识,你可以研究各种资产类别的价格运动模式。通过这项研究,你可以分析资产价格的变动并增加收益。
货币市场
在货币市场上有很多关于债券收益率和货币走势的投机活动。因此,定量金融的恰当使用导致对各种风险的估计和对冲。此外,它还能帮助你找出你应该在市场上以特定价格买入的资产数量。
由于这两个类别可以让你获得经济上有回报的工作,我们在本文后面提到了一些其他有回报和有趣的工作,你可以从事定量分析师的工作。
现在,让我们看看什么样的资格能让你更接近成为量化分析师的目标。
成为量化分析师需要什么资格?
当你渴望成为量化分析师或定量分析师时,你需要选择合适的资格,这就是为什么我们在这里为你列出了一些学位和证书课程:
学位课程
有一些学位课程可供你选择,让你成为量化分析师的愿望变成现实。你可以根据你的兴趣和背景从列表中选择一个你认为合适的学位课程。看看为你入围的学位课程:
由于金融工程硕士课程为你提供了从评估统计数据到经济计量模型的深入知识,这是一门在现实世界中帮助你的工程课程。当你获得定量分析的专业知识时,你就可以自信地完成这篇文章。在学习本课程的过程中,您将在以下重要主题的背景下获得全面的金融知识:
- 统计数字
- 数学
- 计算机科学
总之,在这样一个快节奏的世界里,这门课程将使你具备在需要特殊工作的专业环境中取得成功的正确知识。
这个学位让你深入了解定量金融的方法论。因为它是面向金融数学的,你将具备所有你需要的知识,以便在以后进入定量分析领域。本课程旨在使你作为一名定量分析师熟练掌握金融数学的实际应用。还有,学完这门课,你将能够根据定量分析**做出逻辑结论。**您可以在本课程中学习的一些科目(必修和选修)包括:
- 布莱克和斯科尔斯理论
- 随机分析
- 最优投资组合选择
- 派生物
- 马尔可夫过程
- 金融风险分析
- 国际融资
- 时间序列分析预测及其他。
由于上面的一些科目是必修的,所以还有一些是选修的,这样你就可以更容易地选择那些你认为对你以后的生活很有必要的科目。这个选择也取决于你之前是否已经学过这些科目。
在这个学位课程中,你将学习所有关于数据科学的知识,基本上可以帮助你将统计学、数据分析和机器学习联系起来。一旦你掌握了所有这些领域和相关的概念,你就可以将所学学科的复杂性用于实际应用。随着广泛的知识,从各个领域,如数学,统计学,计算机科学和信息科学,这个学位课程为您提供了一个重要的技术组合。这是一门非常有用的学科,其数据知识来自:
- 几个来源
- 规模
- 类型和
- 结构。
随着技术的进步,上述领域被用于数据科学,为其提供适当的方法。
这门学位课程旨在为学习者提供全面的数学背景知识。这些知识为你提供了解决金融数学问题所需的技能。它围绕着金融行业的需求和应对这些需求的技能。由于这是一门专门为让你掌握数学概念和计算金融知识而设计的课程,它将帮助你实现 apt 工具。有了这个学位课程,你可以从事定量分析师的工作,并在这方面出类拔萃。这个学位课程中的各种概念包括偏微分方程,概率和统计,金融市场和 Python。
正如本课程的标题所言,它为学习者提供了经济学和计量经济学的综合知识。本课程涵盖了经济学的高级知识,旨在为您提供以下方面的深刻见解:
- 应用微观经济学
- 宏观经济学
- 计量经济学和
- 战略决策
当你渴望成为定量分析的专家时,应用经济学将在给你额外的专业知识方面发挥巨大的作用。对于那些已经获得经济学领域的基础知识并渴望在这个领域继续前进的人来说,这是最好的学位课程。如果你希望获得数学、统计学和计量经济学方面的高级知识,那么这门课程将有助于你在特定领域变得熟练。
来到金融硕士,这个学位课程为你提供了获得金融专业知识所需的所有知识。具体来说,对于定量分析师档案,金融学位将为你提供数学,计量经济学和编程工具的组合。这些知识帮助一个有抱负的分析师成为一名专业的量化分析师。
完成该领域的学位课程后,您将能够:
- 将金融相关理论应用于真实的金融市场
- 将数学应用于金融问题,如预测股票价格
- 运用经济计量理论分析投资决策
因此,通过选择这一学位课程,你将获得在现实金融世界中重要工具的实际应用的知识。这将有助于培养你在金融市场取得巨大成功的技能。
好了。我们已经看到了所有著名的学位课程,现在是时候进一步探索一些证书课程了。
证书课程
有一些量化金融方面的证书课程可以帮助你提升你的职业和技能。无论你是在寻找帮助你开始职业生涯的东西,还是在职业生涯中期提升专业技能,证书课程都能满足你的需求。在这里,你会发现一些有用的证书课程,我们已经入围:
这个证书课程是专门为了让你更熟练的金融风险管理。与管理金融风险所需的工具和技术的知识,这个证书课程将会给你一个非常重要的技能,需要在金融世界的功能。它将把重点放在金融机构风险管理实践的创建和实施上。通过本课程,你将获得数学和算法领域的必要知识,从而能够分析市场风险。而且,随着 apt 技术的学习,你将有足够的技能来构建和管理风险管理策略。通过本课程,您将学会:
- 掌握风险和回报之间关系的诀窍
- 理解激励对风险管理的影响
- 管理在度量和管理风险时出现的基本挑战
- 构建和实施测量和管理金融风险的工具和技术。
如果你想从“风险管理”的角度提升自己作为量化分析师的技能,那么本课程将帮助你在努力中向前迈进一步。
因为作为一个量化分析师,你需要在数学和统计知识上领先一步,所以这个课程可以帮助你做到这一点。本课程帮助您熟练掌握算法和投资理念。该量化金融证书旨在提高您在以下方面的技能:
- 数学和统计学
- 金融市场中的定量分析
- 投资相关算法和技术
总而言之,这个证书课程旨在提高你在量化金融及其在金融市场中的功能的技能。
正如证书课程的名称所示,它旨在为您提供量化金融领域所需工具的全面知识。通过本课程,您将深入了解:
- 量化金融
- 金融市场
- 投资行业
因为你将获得数学、统计学、R 编程和经济学基础的技能和专业知识,这个课程将帮助你在现实世界的金融环境中发挥你的最佳水平。因此,要想成为一名专业人士,并准备好作为一名定量分析师面对金融世界,这个课程应该能很好地服务于你的目的。
正如我们在上面的学位课程中提到的数据科学硕士,这个证书课程只是提升你在数据科学领域的技能。该课程涉及数学、统计学、计算机科学和信息科学等领域,旨在帮助您熟练掌握:
- 研究和分析市场趋势
- 做出建模决策
- 测试新模型
- 维护和修改分析模型
有了这个证书课程,你将学会上述技能和更多。
好吧!因此,我们已经提到了所有的学位课程和证书课程,你可以选择,同时渴望成为一名定量分析师或在你的指定方面更有技能,让我们继续看更多。未来,我们将会看到在量化金融领域,以及一旦你成为一名专业的“定量分析师”,你可以从事的所有工作。
量化金融领域的工作
因为你作为一个定量分析师的范围很广,这里我们简单地提到了可以考虑的工作概况。此外,新闻报道表明,随着技术的进步,需要能够利用技术分析金融市场的定量分析师。
如果你还记得,我们在开始时讨论过,定量分析师利用数据来分析市场,然后设计算法模型来解决复杂的金融问题。因此,有了所有的数据和技术来分析它,并围绕它建立算法模型,作为一名定量分析师或定量分析师,你一定会为自己开辟一条非凡的道路。
据《经济时报》报道,到 2022 年,印度的数据消费量预计将增长 72.6%,达到 1096587.93 亿 MB。随着如此大规模的数据生成,公司将需要能够发现模式和趋势、建立模型、预测、预报和解释这些数据结果的专业人员。
事不宜迟,让我们看看定量分析师或量化分析师的所有职业选择:
风险管理
作为风险管理的专业人员,定量分析师或定量分析师构建模型或技术,以便更好地分析金融市场的风险。无论是与投资相关的风险还是与交易头寸相关的风险,量化分析师都有足够的技能来分析风险,但与风险分析师不同。此外,定量分析师构建了各种风险管理工具,用于在特定情况下实施每种工具。
前台 quant
前台定量分析师是参与销售和交易等操作的定量分析师。在这种情况下,工作职责包括处理销售和交易,并为交易者确定有利可图的机会。为了增加利润,量化分析师需要在交易策略中运用量化方法。
算法交易
算法交易是将交易策略转换成计算机代码的过程,计算机代码以自动、快速和准确的方式买卖股票。Quants 主要负责开发交易的复杂算法。
图书馆定量分析
在这样的职位描述中,定量分析师需要分析和验证已经存在的模型。我们需要这些模型来提供相关信息,而这种职位描述中的定量分析师会确保这些模型能够提供相关信息。
此外,要了解量化分析师的薪水,请点击此处阅读。你一定已经看到,作为一个定量分析师或定量分析师,有一个广泛的范围,正确的学位或证书课程和合适的工作简介可以帮助你建立一个伟大的职业生涯。
结论
在这篇文章中,我们涵盖了从学位课程到证书课程和工作简介的量化金融的所有内容。这篇文章旨在帮助你理解什么是量化金融,以及你进入这个领域后所能获得的机会。作为一名定量分析师,在选择合适的职业时,你面前有很多选择。由于有各种职业道路可供选择,作为定量分析师的专业人士有足够的机会。
免责声明:本文中提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。
量化投资分析师如何学习量化投资组合管理
*“对于一个量化投资分析师来说,思考和头脑风暴来制作一个模型比编写模型本身更重要”——*esu abom Dijemeni
在偶然发现了许多学习量化金融的渠道后,Esuabom 来到了 Quantra。以提高他的技能并对领域有更清晰的了解。
这是 Esuabom,分享他的旅程和经历。
大家好,我是 Esuabom Dijemeni,目前在英国。我在法国巴黎银行做量化投资分析师。
我之前是做医疗科技的,现在转行做 fintech 了。我不是那种上过商学院、拥有商学学位的典型定量分析师,由于这一点,提高技能和不断学习变得更加重要。
我是一个热衷于学习的人,并且有这个习惯去参加与我相关的在线课程。我一直在学习量化金融领域跨平台的多门课程,以不断学习和提高我的技能,这将给我带来额外的优势。
我想要一门纯粹从数量角度学习概念的课程。我给了 Quantra 一个机会看看这对我是否有价值。我选择了量化投资组合管理课程,因为我发现它最适合我,而且到目前为止我一直很喜欢它。
我从这门课中最大的收获是对概念的解释,从某种意义上说,这是看待这件事的另一种方式。我喜欢这样的课程,它能让你以稍微不同的方式看待事物。我从这门课中学到的是制作模型背后的思维和技巧。额外提供的 PDF 文档是额外的奖励,我确保我阅读了它们,因为它们再次允许我从不同的角度探索我已经熟悉的概念。
对于一个量化投资分析师来说,思考和头脑风暴做一个模型比编码模型本身更重要。这段代码确实帮助我理解了模型背后的技术。
我注意到其他平台更侧重于实现,但 Quantra 更侧重于解释,这正是我所寻找的。例如,现代投资组合理论无法像 Quantra 那样在任何其他平台上得到解释。其他人展示如何编码模型,而 Quantra 实际上花时间解释它。
聪明的量化分析师能够通过数据和回溯测试结果来影响投资决策。我觉得 Quantra 课程一定会帮助用户成为聪明的 quantr。
你的话让我们受宠若惊,伊苏邦。谢谢你。很高兴去过那里,为你提供合适的学习资源和指导,能够指导你的学习。我们祝你未来一切顺利。
量化投资组合管理推荐给那些希望量化构建投资组合,产生回报,有效管理风险的人。在本课程中,您将学习不同的投资组合管理技术,如因素投资、风险平价和凯利投资组合,以及现代投资组合理论。对于那些有志开始,现在注册!
免责声明:为了帮助正在考虑从事算法和量化交易的个人,这个成功的故事是根据 Quantra 的一个学生的个人经历整理的。成功案例仅用于说明目的,不用于投资目的。完成 Quantra 课程后获得的结果可能不会因人而异。T3】
Prodipta Ghosh 的量化投资组合管理策略
原文:https://blog.quantinsti.com/quantitative-portfolio-webinar-23-july-2019/
https://www.youtube.com/embed/u5UUjHZQCFk?rel=0
23 日星期二路【2019 年 7 月
美国东部时间上午 10:00 | IST 时间晚上 7:30 |新加坡时间晚上 10:00
- 应该投资哪里?
- 要冒多大的风险?
- 如何降低投资组合波动性?
每个交易者每天都会遇到一些不可避免的问题,量化投资组合管理不仅简化了这些问题的解决方案,还允许你在不同的策略中优化配置资本。QuantInsti 为您带来了对 Prodipta Ghosh 的独家采访,他将分享他的见解和一些交易技巧。
面试大纲
- 购买股票和创建投资组合的区别?
- 一个人应该如何做投资决策?
- 如何优化投资组合以获得更好的回报?
- 如何识别和最小化风险?
还有更多…
演讲者简介
Prodipta 领导 QuantInsti 的 Fin-tech 产品和平台开发。
他是一名经验丰富的量化分析师&在加入 QuantInsti 之前,他在银行业工作了十多年——在伦敦孟买的德意志银行担任过各种交易和结构部门的职务,并在渣打银行担任公司银行家。在此之前,普罗迪塔在印度国防研发组织(DRDO)担任科学家。
他毕业于 Jadavpur 大学,获得机械工程学士学位,并拥有 IIM 勒克瑙大学的管理学研究生学位。
//www.slideshare.net/slideshow/embed_code/key/dCzQ3N4MGZUpCB
Quantitative Portfolio Management Strategies by Prodipta Ghosh from QuantInsti
有关我们所有网络研讨会的完整列表,请查看 此链接
对于我们所有的 powerpoint 幻灯片,请访问我们的幻灯片共享页面 这里 。
量化交易——建立入门思路和思路流程
原文:https://blog.quantinsti.com/quantitative-trading-building-entry-ideas/
扎克·奥克斯
我最喜欢的作者之一凯文·戴维(Kevin Davey)宣扬了一个他称之为“策略工厂”的想法——虽然这个过程的所有部分对盈利策略的制定都至关重要,但如果没有原始投入(或新的交易想法),你将会极大地限制你的产出。那么,即使在你似乎已经测试并优化了你认为可行的每一个入口组合之后,你如何保持想法的流动呢?让我们看看。
在本文中,我们将介绍:
自动交易的一个关键部分是想法的产生,通过保持事情简单,你可以通过改善输入来大大提高输出。做到这一点的一个简单方法是让战略的一些可变方面保持不变——比如使用固定的退出方案——并在开始时只关注新的进入。
通过优化战略发展的过程,你可以创造一个新鲜的,独特的信号不断输出,可以结合起来,大大提高你的表现。
那么,我们如何保持想法流动?对我来说,我设定了每周必须测试的新想法的门槛——为了保持信号的持续流入。这些并不总是最初的伟大想法,但有时它们会激发伟大的想法或对现有事物的改进。我试着每周创造 5 个有机进入信号。
让我对条目多讲一点——最初,我有一个通用的退出包(TrailStop,Fixed Stop,Boolean Target ),我称之为信号退出;基本上只是出场逻辑的延伸。
用一个例子来解释更容易,如果我在 5 日均线穿过 20 日均线时做多,也许我的做多信号出口是在 5 日均线有负斜率时,或者当它们都是负斜率时,或者当 5 日均线低于 20 日均线时,如果只是做多。
结合我的一般退出包——百分比止损、固定止损和布尔利润目标——我基本上可以复制粘贴到我的退出包中,调整进场逻辑,我就可以开始测试策略了。
我这样做有几个原因:
- 效率——它能让我保持思路畅通。有时我会添加一个新的退出信号的想法,并把它作为那周我的 5 个独特想法之一。但大多数时候,我坚持使用我的通用退出包。
- 一致性——通过保留标准的退出包,我能够以一种快速(多图表性能报告)的方式比较进入信号的有效性。
出口被处理了,所以我可以专注于入口——我的想法流现在只依赖于入口信号。那么,在我测试了所有合理的技术、基本面和这些信号的组合之后,我在哪里产生这些进场的想法呢?
我是一个技术人员,所以我承认我对价格行为有偏好,但对我来说,我总是喜欢看图表来寻找新的进场想法。我让自己沉浸在一个符号中,然后改变时间框架,或者在同一张图表上配对几个时间框架,也许添加一两个指标,看看它是否给我展示了什么新的东西。
- 一旦我得到一些看起来可能是可重复模式的东西,
- 我在图表上寻找一些心理条目。
- 我试图找到例子来证明我的信号是错误的,也就是说进场信号表现很差。
- 然后,我会看看是否有一个不同的区间,一个额外的指标,或者一些 OHLC 模式可以把这个坏的条目从组合中去掉。
- 我寻找过滤器,使我发现的模式更加可靠。
记住,要想有一个有效的策略*,你不想过多地限制你的交易*;你需要一个坚实的条目数量,这不仅是为了增加更大超额收益的可能性,也是为了增加你的样本量和统计显著性。
如果你一个月有一笔交易,你很容易连续 5 笔交易亏损 6 个月。如果你大约每小时有一笔交易,如果你还在 6 个月的亏损中交易,那么你比我更勇敢。
当我在图表中看不到任何新的东西时,我该去哪里呢?我有几个最喜欢的信号想法,如果你给他们一个机会,我保证你会大大提高你的想法流。
- 我浏览流行的图表标记,新的指标想法,寻找我没有像其他人那样经常交易的符号,浏览我在宏观层面上注意到的普遍情绪或偏见。也许每隔一个图表是一个比特币到 50k 的图表,也许我不同意,可以利用这一点。
- 股票和商品的技术分析:(杂志,或者网站——Traders.com)这是我绝对喜欢的一个。你不仅会得到新鲜的图表和观点,而且它们总是有一个新的指标(或对旧指标的新看法)。
他们有不同的市场和符号,这总是有助于开发一个新的想法。大多数问题实际上都有一个策略,可以转换到你熟悉的任何平台上。
从这里开始,看看它是否能给你一些不同的想法。 - **书籍:**我从真的旧的交易书籍中找到很多新的想法;我特别喜欢拉里·威廉姆斯或比尔·威廉姆斯的作品。他们在这里有一些永恒的模式,虽然从技术的角度来看这不是一个新鲜的视角,但他们经常提供不同的视角。这些旧书中有许多是完整的瑰宝,新书也非常有用(Bean、Chan、Davey、Prado、Pruitt 是我最喜欢的作者)。
- 归档:当我在开发一个新策略时,如果它不完全符合我的预期,但仍然有利可图,我会将它归档。我将它和它的性能指标一起保存在一个大数据库中,以便以后我可以带着新的东西回来。
如果我在寻找一个新的想法,我有时会从那些看起来不太可行的策略开始,看看我是否错过了什么。老实说,我已经能够改进我存档的大多数策略,只要稍后带着新的见解回来。改进后,并不是所有的都符合我的要求,但是很多都符合!没有什么比挽救一个几乎被扔进垃圾桶的改良回收项目更好的了。
我还鼓励你回顾一下你现有的“强大”策略列表,看看你是否能改进那些已经符合你的规格的策略。
重要的不是你在哪里发现新想法,而是你持续不断地产生新想法。这些资源激励我寻找新的进入方式,但是你的可能完全不同!
我还想澄清一点,这不是一部印第安纳·琼斯电影,我们也不是在这里寻找圣杯——我们的目标是产生超额回报的新策略,以及与现有阿尔法模型的 负相关 。
如果你把足够多的这些信号结合起来,它很有可能成为一个革命性系统的组成部分。不过有一点是肯定的,如果不尝试新的(或循环的)想法,你的阿尔法技能将永远不会增长。把自己放在那里;创造一些新的大胆的东西,你永远不知道——它可能是你的** 圣杯系统中的一个成分。**
结论
虽然新的想法是你持续发展的原材料,但有许多方法可以提高底线,例如,增加新的、稳健的交易策略。我发现即使是最好的策略也往往非常简单。
虽然没有人知道 RenTec 的信号是什么样的,但我想至少它们都是以非常简单的方式开始的。它们都必须从某个地方开始,我鼓励你也这样做,牢记这些目标。
编辑注:QuantInsti 尊重作者的选择和偏好,但我们绝不认可、支持或建议本文中的任何品牌。这些观点完全是作者的观点。我们更喜欢并提倡使用 Python 进行量化交易。T3】
免责声明:本文提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害负责。所有信息均按原样提供。
用深度强化学习进化量化交易
你是否一直希望与时俱进,提升自己的交易水平,培养在市场中有效交易的信心?
你想在你的交易中实现像机器学习或深度强化学习这样的现代技术方法吗?
你不确定你是否能做到,或者不知道如何去做?
Mattia 也是,直到他找到了让这一切成为可能的方法。以下是他如何使之成为可能的。
嗨!我是 Mattia Mosolo,来自意大利。我一直在寻找优秀的交易方式。
但是,我并不总是一个交易者。几年前,我对金融市场产生了兴趣,学习了技术和基本面分析。我认为机器学习(ML)是实施定量策略的最佳解决方案,因此在过去的八个月里我一直在认真地研究它。
我是在探索 Youtube 和互联网上其他相关渠道的免费资源时接触到深度强化学习的。然而,我想用结构化的方法更深入地研究定量金融。就在那时,我偶然发现了 Quantra 提供的‘交易中的深度强化学习’课程,并报了名。
起初,我很惊讶地看到视频很短!我几乎觉得内容不好。但是当我学习这门课程时,我意识到这是一种非常有效的学习方式!这些简短(但清晰)且切中要点的视频之后,紧接着是一系列测验来检查你的学习情况。
教学大纲中的 Jupyter 笔记本帮助我实际应用这些主题。因为我现在可以终身学习该课程,所以重温它有助于我更好地理解管理数据和数据标准化的概念。
我在不同的数据集上做了课程中提供的顶点工程,发现它非常有用。我采用欧元-美元数据,并减少样本数据大小,以减少训练时间。
我更改了学习率、ε率、最小ε率和相关参数,这样就不用花几个小时来训练数据。我下载了欧元-美元外汇对,因为这是一个有效的市场。结果我完成了项目,却没有看到解决方案。
Quantra 社区也让这个课程变得容易理解,因为它帮助我在一天之内澄清了所有的问题和疑虑。这让我的学习更加顺利。
总而言之,我对深度强化学习课程的体验非常好。现在我对强化学习的正确结构有了理解。我也必须对我的交易做更多的改进。
接下来,我期待着学习神经网络,同时尝试使用深度强化学习建立一个定量模型。
课程结束时,我意识到这是正确的学习方法。我对自己的决定很满意。感谢你的精彩课程,Quantra。
谢谢你的美言,马蒂亚。我们很高兴看到你在课程中惊人的学习和成长。我们很高兴您在 Quantra 获得了很好的学习体验,并从我们的课程中受益匪浅。
你的交易之旅从一个强烈的兴趣开始,发展到这种程度,真是不可思议。我们祝愿你在未来的努力中一切顺利。
像 Mattia 一样,如果你也希望学习定量分析回报和风险,并应用强化学习来创建、回溯测试、纸上交易和现场交易一个使用两个深度学习神经网络和重放记忆的策略,请务必查看我们的交易课程中的深度强化学习。
免责声明:为了帮助正在考虑从事算法和量化交易的个人,这个成功的故事是根据 Quantra 的一个学生的个人经历整理的。成功案例仅用于说明目的,不用于投资目的。完成 Quantra 课程后获得的结果可能不会因人而异。T3】
在 R 中使用 Quantstrat 软件包的量化交易策略:一步一步指南
原文:https://blog.quantinsti.com/quantitative-trading-strategy-using-r/
任何基本交易策略的四步流程
- 假设形成
- 测试
- 改善
- 生产
我们的假设被表述为“市场是均值回归的”。均值回归(Mean reversion)是一种理论,认为价格最终会回到平均值。第二步是测试假设,我们根据假设制定策略,并计算指标、信号和绩效指标。测试阶段可以分为三个步骤,获取数据、编写策略和分析输出。在这个例子中,我们考虑漂亮的蜜蜂。它是由高盛管理的一只 T2 交易所交易基金。NSE 具有巨大的仪器体积,因此我们考虑这一点。下图显示了相同的开盘价-最高价-最低价-收盘价。
我们设定了一个阈值来比较价格的波动。如果价格上升/下降,我们更新阈值列。收盘价与高波段和低波段进行比较。当穿过上带时,这是卖出的信号。同样,当穿越较低波段时,是买入信号。
编码段可以概括如下,
- 添加指标
- 添加信号
- 添加规则
下图给出了该策略输出的俯视图。
因此,我们的假设,市场是均值回复是支持的。因为这是回溯测试,所以我们有空间改进交易参数,提高我们的平均回报和实现的利润。这可以通过设置不同的阈值水平、更严格的进场规则、止损等来实现。人们可以选择更多的数据进行回溯测试,使用贝叶斯方法设置阈值,将波动性考虑在内。
一旦你对回溯测试结果支持的交易策略有信心,你就可以进入实时交易了。生产环境本身是一个很大的话题,超出了本文的范围。简单来说,这需要在一个交易平台上编写策略。
如前所述,我们将使用 quantstrat 包构建模型。Quantstrat 提供了一个通用的基础架构,用于对基于信号的量化策略进行建模和回溯测试。它是一个高层次的抽象层(建立在 xts、FinancialInstrument、记事本等之上。)允许您用很少几行代码来构建和测试策略。
quant strat 的主要特点是,
- 支持包括指标、信号和规则的策略
- 允许将策略应用于多资产投资组合
- 支持市价、限价、止损和止损追踪订单类型
- 支持订单规模和参数优化
在这篇文章中,我们建立了一个包括指标、信号和规则的策略。
对于一般的基于信号的模型,以下是应该考虑的对象,
- 工具-包含市场数据
- 指标-来自市场数据的量化值
- 信号——市场数据和指标相互作用的结果
- 规则——利用市场数据、指标和信号生成订单。
事不宜迟,让我们讨论编码部分。我们更喜欢使用 R studio 进行编码,并坚持让你使用相同的。在对策略进行编程之前,您需要安装某些软件包。
下面一组命令安装必要的软件包。
install.packages("quantstrat", repos="http://R-Forge.R-project.org")
install.packages("blotter", repos="http://R-Forge.R-project.org")
install.packages("FinancialInstrument", repos="http://R-Forge.R-project.org")
安装完软件包后,您可以导入它们以备将来使用。
require(quantstrat)
从 csv 文件中读取数据并将其转换为 xts 对象。
ym_xts
我们用股票、货币、初始权益和策略类型初始化投资组合。
stock.str='NSEI' # stock we trying it on
currency('INR')
stock(stock.str,currency='INR',multiplier=1)
initEq=1000
initDate = index(NSEI[1])#should always be before/start of data
#Declare mandatory names to be used
portfolio.st='MeanRev'
account.st='MeanRev'
initPortf(portfolio.st,symbols=stock.str, initDate=initDate)
initAcct(account.st,portfolios='MeanRev', initDate=initDate)
initOrders(portfolio=portfolio.st,initDate=initDate)
如果你想在同一边交易不止一次,增加仓位限制。
addPosLimit(portfolio.st, stock.str, initDate, 1, 1 )
创建策略对象。
stratMR
我们建立一个函数来计算我们想要交易的阈值。如果价格变动超过阈值 1,我们将阈值更新为新价格。交易的新波段是阈值+/-阈值 2。输出是一个 xts 对象,尽管我们使用了重分类函数来确保。
THTFunc<-function(CompTh=NSEI,Thresh=6, Thresh2=3){
numRow(tht+Thresh)){ tht<-xa[i]}
if(xa[i]<(tht-Thresh)){ tht<-xa[i]}
xb[i]
添加指标、信号和交易规则。
stratMR
运行策略,看看订单簿。
out<-try(applyStrategy(strategy=stratMR , portfolios='MeanRev') )
# look at the order book
getOrderBook('MeanRev')
end_t<-Sys.time()
更新投资组合并查看交易统计数据
updatePortf('MeanRev', stock.str)
chart.Posn(Portfolio='MeanRev',Symbol=stock.str)
tradeStats('MeanRev', stock.str)
View(t(tradeStats('MeanRev')))
.Th2 = c(.3,.4)
.Th1 = c(.5,.6)
require(foreach)
require(doParallel)
registerDoParallel(cores=2)
stratMR<-add.distribution(stratMR,paramset.label='THTFunc',component.type= 'indicator',component.label = 'THTT',
variable = list(Thresh = .Th1),label = 'THTT1')
stratMR<-add.distribution(stratMR,paramset.label='THTFunc',component.type= 'indicator',component.label = 'THTT',
variable = list(Thresh2 = .Th2),label = 'THTT2')
results<-apply.paramset(stratMR, paramset.label='THTFunc', portfolio.st=portfolio.st, account.st=account.st, nsamples=4, verbose=TRUE)
stats
这是完整的代码
require(quantstrat)
ym_xts (tht+Thresh)){ tht<-xa[i]}
if(xa[i]<(tht-Thresh)){ tht<-xa[i]}
xb[i]
下一步
一旦你熟悉了这些基础知识,你可以看看如何在 R 中开始使用 quantimod 包。或者如果你擅长 C++,看看用 C++ 编码的策略的例子。
如果你是一名散户交易者或专业技术人员,想要建立自己的自动化交易平台,今天就开始学习算法交易吧!从基本概念开始,如自动交易架构、市场微观结构、策略回溯测试系统和订单管理系统。
免责声明:股票市场的所有投资和交易都有风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。
使用情绪分析的量化交易
原文:https://blog.quantinsti.com/quantitative-trading-using-sentiment-analysis-webinar/
https://www.youtube.com/embed/JAk20F2IWJ4?rel=0
日期和时间
2016 年 6 月 28 日星期二
格林威治时间下午 04:00 |美国东部时间下午 12:00 | IST 时间下午 09:30
关于情感分析
情感分析。也称为观点挖掘,是对一段文本中表达的观点进行计算识别和分类的过程,尤其是为了确定作者对特定主题、产品等的态度。是正的、负的或中性的。分析发现,社交媒体、股票市场、法律、政策制定、社会学甚至客户服务都有显著的突出之处。
会话内容
- 情感分析如何工作
- 使用情绪分析设计交易策略
- 盈利能力的历史分析-案例研究
- 使用情感分析的陷阱以及如何避免它们
建议阅读
发言人简介
Rajib Ranjan Borah,伊拉克资本咨询公司联合创始人
Rajib 为亚洲交易所设计高频交易策略,并与其他交易所和机构合作设计教育项目。他曾应邀在各种会议上发言,如 2015 年 7 月在伦敦举行的**“UChicago Quant 交易大会”和“第五届年会:行为模型&情绪分析应用于金融”,**关于美洲、欧洲和亚洲的情绪分析和高频交易。
他拥有印度管理学院(Indian Institute of Management Calcutta)的研究生管理学位、印度国家理工学院(National Institute of Technology Surathkal)的计算机工程学士学位,以及在纽约彭博公司(股票期权衍生品研究)和首诺国际(Solutia)的 EMEA 战略总部的实习经历。
Python 中的量化价值投资策略
原文:https://blog.quantinsti.com/quantitative-value-investing-strategy-python/
由伊山沙阿
价值投资的起源可以追溯到本杰明·格拉哈姆所著的《证券分析》和《聪明的投资者》( T2 ),在书中,他提倡对基本面指标进行详细分析,以购买股价低于其内在价值的股票。沃伦·巴菲特,本杰明·格拉哈姆最著名的学生之一,向我们所有人展示了价值投资产生更高回报的力量。
投资价值股与成长股
根据 Brandes 的一项研究,价值投资在很长一段时间内大大超过了市场和成长型股票。
他们使用简单的估值指标,如市盈率、市净率和市盈率来识别价值股和成长股。【1】
使用的一种方法是按市净率对所有股票进行分类,然后将前 10%的股票归类为成长股,后 10%的股票归类为价值股。他们观察到,在连续 5 年的时间里,价值股的表现要比成长股好得多。
价值在更多的时期和更长的时间里跑赢了增长(魅力)【2】
然而,我认为价值投资者进行的许多分析——阅读财务报表和评估相对估值——可以通过自动化流程更快、更有效地完成,而且可以覆盖更广泛的证券类别。量化价值投资策略是一种识别最稳健的长期价值型股票的努力。
接近
量化价值投资策略方法可以用以下方式定义:
- 识别全套股票
- 筛选价值和质量
- 坚定投资
从小盘股到大盘股定义了一个完整的股票列表,低流动性和交易限制的股票被排除在外。然后基于各种量化基本面参数进行筛选,形成最便宜的优质股票组合。让我们看看如何在 Python 中实现这一点。
注意:为了演示这个练习,我定义了一个潜在股票的小列表。你也可以使用整个标准普尔 500 列表。
导入库
第一步是导入必要的库,即 pandas,yahoo_fin。
量子力学、金融和现在的算法交易|古斯塔沃的故事
原文:https://blog.quantinsti.com/quantum-mechanics-finance-epat-success-story-gustavo-correa/
51 岁的 EPATian Gustavo Corrêa 来自南非约翰内斯堡。他有超过 25 年的丰富工作经验,他喜欢称之为他的人生经历。
Gustavo 已经获得了量子力学硕士和金融工程硕士学位,并获得了多项认证以提高技能。
从他在巴西度过的童年到他目前在南非作为算法交易者的生活,Gustavo 分享了他不可思议的算法交易之旅。
嗨,古斯塔沃,给我们介绍一下你自己吧!
你好。我的名字是古斯塔沃·科雷亚。我出生在南美洲的巴西,并在那里长大。我现在住在南非,因为我母亲是南非人,我于 1998 年搬到这里。
我在巴西学习物理,然后攻读量子力学硕士学位,只是因为我热爱科学和数学的客观一面。后来,这对我走上算法交易的道路有很大的影响。
教学是我的爱好之一,我一直在教书。分享知识和再次体验知识的能力,学习的快乐,总是非常独特的。当你教某人时,你加入了那个人的学习和发现之旅,以及有了更深理解的喜悦。
我记得我在巴西上大学的第一年,老师们是如何罢工的。我们不能浪费时间,所以班里的每个人都聚在一起,在我们之间分配科目,然后准备课程互相教授。我已经准备了微积分、物理甚至经典力学的课程。
在获得量子力学硕士学位后,我开始在巴西教授计算机动画,当我搬到南非时,我开办了一所计算机动画学校。
我是天主教徒,目前,我还在我的儿童学校教授宗教教育。对我来说,这是一条完全不同但令人兴奋的道路,因为它涉及形而上学、哲学和神学,谈论道德和成为一个更好的人的整个想法。
物理、金融和现在的算法交易,你是怎么做到的?
我第一次遇到全权委托交易,你可以自己设计和实施策略,而不用电脑。你有足够的工具用于交易。你必须了解市场动向,这完全取决于你的专业知识和识别机会的注意力。
生活只是通过发现自主交易把我带到了一个新的方向,然后很明显,我自己试图通过书籍、视频和任何我能找到的材料来学习。
然后我发现了算法交易,你可以实际创建一个程序,不仅可以执行你的策略,还可以根据你可以遵循的合理的统计原则,事先制定策略。这对我来说太不可思议了,因为我一直热爱编程和数学,现在我正跳入一个涵盖两者的领域。
意识到你可以用电脑进行交易,制定策略,实施和管理策略,打开了一条全新的途径,因为你可以用电脑处理更多的数据。
Algo 交易是编程的结合,是数学和统计的联盟,很适合我的物理背景。成功驾驭市场并不困难。
它引起了我的兴趣,因为它是数学、统计学、编程和数据分析。我喜欢数字。但我从未想过或计划从事金融行业。
我觉得算法交易需要一个人投入时间和精力。我联系了 EPAT 大学以前的校友雅克·儒贝尔,他也来自南非。通过他,我了解了算法交易(EPAT)的高管项目。很快,我就能识别出两种途径的优势:理论上的和实践上的。
金融工程硕士学位将提供强大的理论背景。
另一方面,EPAT 教你实现交易愿景所需的理论和实践,它提供了令人难以置信的实践经验。你可以接触到行业人士,分享他们的经验。
因此,我决定在获得金融硕士学位后,参加 EPAT 认证项目。
作为一个理科出身的人,你觉得学习算法交易有挑战性吗?
我认为在你想学习的任何领域,你都可以深入其中,无论你来自哪里,它都仍然具有挑战性。
我想说,我的金融工程背景在算法交易的一般概念方面给了我很大帮助。也涉及到一些编程,但是有这个基础指导我学习编码。由此,我能够建造 EPAT 提供的积木。
EPAT 的主题非常广泛,它为你提供了几种选择。你可以稍后深入到一个特定的领域,比如 HFT 或机器学习。
我可以说,我发现 EPAT 课程非常有趣和具有挑战性。
EPAT 和这些年的自学相比有多大的不同?
在线学习的最大风险是它最终会变成一个人的事情。你把材料放在网上,你去看,检查,阅读,完成任务,然而这对于一些学习科目来说可能并不理想。对一些人来说,这可能行得通,对另一些人来说,这可能行不通。
但在 EPAT,我们有现场讲座,你可以实时参与讲座,你甚至可以提出问题,并直接从该领域最优秀的教师那里获得答案。
这就像一个经典的例子,你坐在一个正在授课的老师面前。这些现场讲座对课程的惊人质量至关重要。我确实有讲座的录音以防错过,但参加现场讲座总是最好的选择。
EPAT 的 LMS(在线学习平台)也很棒,因为你可以访问课程材料、笔记、讲座等等。
因此,尽管它是一个在线学习平台,但它的互动方式让人感觉不像是单向关系,而是一种共生关系。
你最喜欢 EPAT 的哪个特色?
教员和支持经理都很有帮助。我不断收到来自安置团队的电子邮件,这是 EPAT 的一个精彩而强大的特色。但是有些事情我想指出来。
首先,我要指出的是,EPAT 是一所来自印度的学校,因此这些人可能会有负面偏见,说你宁愿去美国、英国或德国学习。但这完全忽略了一点:在这个时代,伟大的东西可以来自世界任何地方,EPAT 肯定是其中之一。
其次,师资力量一流。讲师来自世界各地,这是它成为真正世界级课程的原因。
所以,不要被“印度能带来什么好处”的想法所欺骗。!。看看我,我是一个巴西人,从印度,一路从南非,学习世界级的算法交易课程。
你对想学习算法交易的学生有什么话要说?
我想说有两个因素——一个是你完全可以控制的,另一个是你几乎无法控制的。
在参加 EPAT 课程的时候,如果你全身心地投入其中,并且努力学习,这本身就是一个成功的故事。你会学到的。你会知道一切的。
在 EPAT 之后,你将拥有成为算法交易者所需的所有工具、技能和知识。这是我可以向你保证的结果,你可以完全控制,因为这取决于你自己。一切都在那里,如何充分利用就看你自己了。
但是,当需要制定策略并运用你所学的算法交易时,会有挑战,因为现在你是在和现实世界打交道,而你对现实世界几乎没有控制权!
完成 EPAT 课程后,你肯定会更有能力获得成功,但成功需要时间和耐心。再说一遍,这完全取决于你的奉献精神:诚实地对待你所学到的东西,并将其应用于实践。
这真的很鼓舞人心,谢谢你和我们分享你不可思议的旅程,古斯塔沃。正如你所说,这些都是生活经历,我们希望我们的读者能与你的故事联系起来。我们祝愿你在未来的事业中一切顺利。
如果你也想用终生的技能来武装自己,这将永远帮助你提升你的交易策略。这门 algo 交易课程的主题包括统计学和计量经济学、金融计算和技术以及机器学习,确保你精通在交易领域取得成功所需的每一项技能。现在就来看看 EPAT 吧!
免责声明:为了帮助那些正在考虑从事算法和量化交易的人,这个成功的故事是根据 QuantInsti EPAT 项目的学生或校友的个人经历整理的。成功案例仅用于说明目的,不用于投资目的。EPAT 方案完成后取得的成果对所有人来说可能不尽相同。T3】
关于算法交易的最常见问题
原文:https://blog.quantinsti.com/questions-algorithmic-trading/
关于算法交易已经说了很多,也写了很多。尽管网上有介绍 T2 的视频和指南,但只有像 T4、EPAT、T6 这样真正旨在把人变成专业人士的课程很少。
这篇文章列出了一些与算法交易最相关的问题。这些是很多人在 AMA 的算法交易会议上提出的,这个会议提供了一个开放的平台,让他们的问题得到行业巨头的解答。你也可以看看这篇关于的文章,关于 Algo 交易你不知道的 7 件事。
但是,与人类的智力相比,所有这些都要小得多,人类的智力会产生无数的问题,这是因为人类的天性非常好奇和探索。为什么不应该呢?提问是我们的天性。人们经常面临与算法交易相关的问题,并努力寻找正确的答案和解决方案。在我们讨论算法交易的常见问题之前,这里有一些问题可以让我们对它有一个清晰的了解:
今天 Algo 交易是怎么回事?
- 75%的全球交易是通过算法执行的。
- 印度交易所 35-40%的交易额通过算法交易【1】
- 与众多机构投资者、个人投资者、交易者等一起实现跳跃式增长。
为什么选择算法交易?
交易最常用的算法有哪些?
在印度,使用应用编程接口(API) 的算法是最常用的。在这里,投资者选择策略,然后他编程并由经纪人执行。【2】
什么影响算法交易?
但这并没有停止。这就是你应该知道的算法交易。以下是我们在算法交易的中遇到的一些最常见的问题。问题的范围从基础到一些真正有趣和专业的问题。
看着这些问题,你可能会有似曾相识的感觉,并想…“我以前没想过这个问题吗?”如果没有,你可能会想“为什么我以前没有想到这一点?”
**所以,现在开始:
算法交易常见问题
Q1。 What is delay?
**回复:**延迟是你在发出一个订单的时候,你损失了多少时间。基本上,它是订单到达交易目的地或交易所所用的时间,或者是处理市场数据、订单路由等所用的时间。
潜伏期帮助你确定合适的基础设施将建立你自己的办公桌。这也有助于你确定你是应该选择基于势头的策略还是做市策略。一旦您知道您的策略可以适应什么样的延迟,所有这些问题都变得容易回答了。
我们把所有不同的交易策略模式的所有概念和潜伏期混在了一起。
定义之外:频率交易有哪些类型?
LFT (低频交易)——如果你的交易策略可以适应半秒或一秒的延迟,而性能不会太差,我们可以称之为低频交易
MFT (中频交易)——如果你的策略不能适应那么多,但仍能适应几十毫秒的延迟,那么你就在谈论中频交易策略
HFT (高频交易)——如果你的策略承受不起哪怕 1 微秒的不利,那就意味着我们正在进入高频交易的游戏
Q2。 Is it true that HFT/ algorithm traders usually beat manual day traders? Therefore, if the regular trading decreases below a certain threshold, which market will HFT/ algorithm lose interest in? If yes, what is the threshold?
**回复:**说高频交易 (HFT)普遍击败手动日内交易者并不绝对真实,这都要看我们这里说的是什么样的日内交易者。如果你说的是从套利机会或市场低效中获利的日内交易者,那么是的,机器可以更快地做这些事情。
举例来说,如果你是一个优秀的手工交易者,你可以在一秒钟内发送一个订单,如果你真的很优秀,那么可能在一秒钟内发送 2 个订单,如果你是“超人”,那么可能在一秒钟内发送 3-4 个订单,但不能超过这个时间。而另一方面,机器通常受到交易所设定的节流率的限制。
一台机器可以在一秒钟内发送成千上万的订单,所以这里没有匹配,但如果我们谈论的是那些分析数据并以手动方式执行订单的交易员,但他们进行了更多的研究,做了大量的功课,那么没有,这无关紧要。
关于门槛问题的第二部分,我们所看到的是,高频交易量参与越大,参与者的数量就越多,例如,如果你看看发达市场的交易所,如纽约证券交易所(NYSE) 你将能够看到,在一些交易所中,几乎 80-85%的交易量是通过算法发生的,大多数 HFT 公司专注于这些市场。在任何门槛的情况下,所有的 HFT 公司都将消失。发展中市场的情况也是如此,在印度也是如此,主要交易所中近 45-50%的交易量发生在算法上,尤其是在衍生品方面。
所以算法的使用并没有减少。如果算法太多,HFTs 将会失控,这是不正确的。竞争将会升温,一些高频交易将会倒闭,一些将会继续存在,但仅此而已。
Q3。 What if the market over-trades algo? Will it backfire?
**回复:**这又是上一个问题的延伸。市场会不会适得其反?不尽然!
当你说算法时,它本质上意味着你已经自动化了执行,算法并不总是意味着高频交易。因此,如果你是一个散户,你使用任何一家经纪商提供的 API 进行交易,你并不是真正在高频基础上交易,因此你不是 HFT,但你肯定是 algo,它只是带来了更高的效率。
如果有太多的算法,你试图交易市场中的低效率,那么这可能是一个挑战,因为找到这些效率可能真的很难,但除此之外,它不会适得其反。另一点需要补充的是,即使对于效率低下的企业,瞄准它们也变成了一场技术和基础设施的游戏。所以这些因素给了你一定的优势。
例如,您可以拥有的网络类型、系统类型、不断变得更加昂贵的硬件。
因此,如果你专注于吃掉市场的低效率,而不是市场中的 HFT,就很难发现低效率,因为它在那里的那一刻,就消失了,有人会把它拿走。
Q4。 Can I quantify the technical indicators? How about patterns and waves?
**回复:**是的,你可以量化的技术指标,这很简单,因为这是一套数学公式,无论是否量化,都可以看出来。但是你绝对可以量化和自动化它们。
是的,你也可以量化模式和波形。相对容易得多的模式;如果你能想到什么,那么机器就有能力去做,因为就像我们的大脑一样,机器也是基于逻辑工作的。详细说明一下,当你编写逻辑代码时,有些算法可能会更复杂,而有些算法可能很容易编写。
举个例子,如果你在画一条趋势线,那就相当简单了,你在找两个点,y=mx+c 就是你的趋势线公式,如果你知道截距,你就可以画一条线,或者如果你知道这两个点,你就可以计算截距并画一条线。这部分并不难,你可以计算出局部最大值和局部最小值,然后你就可以画线了。如果你在看一些有很大主观空间的东西,那就更难了。
同样,在波浪方面,如果你试图编写一个艾略特波浪代码,并且非常明确地定义了波浪规则,那么这并不困难,但是如果你为主观性留了很多空间,那么,在这种情况下,这将变得非常困难。事实上,有一些工具可以用来编码这些波的模式,我们也已经开始研究这样的东西,在不久的将来你应该可以看到。
Q5。 I am a LARP businessman in Western Australia; Now that there is ready-made software, do I need to learn algo?
**回复:**这完全取决于什么对你有效。如果现成的软件已经在为你工作了,并且你对它的性能感到满意,那么你只需要继续发展和试验,因为同样的东西不会一直工作。
Q6。 Does automation help overcome emotional defects in transactions?
**回复:**肯定!事实上,这是自动化你的战略的好处之一。
控制情绪,给你可伸缩性,给你带宽,当执行由机器执行时,你可以用它来制定策略,这些都是任何规模的自动化带来的主要好处。
除非你一直在干扰你的端口,否则什么也帮不了你,但假设你不这么做,那么自动化可以帮上忙。
Q7。 Is HFT suitable for retail investors? Is the algorithm for retail investors?
**回复:**是针对散户的算法交易?可能是的,如果你有正确的技能。
但散户投资者肯定不会选择 HFT,因为 HFT 更像是一场科技游戏。如果有人说你现在是散户,你可以去 HFT,不要被误导。如果这个人不知道 HFT 到底是什么意思,或者他不知道散户是什么意思。
在你开始交易 HFT 策略之前,你需要花费合理的资金。这并不意味着你不能做 algo,algo 你可以。
但如果你计划利用零售平台进行现金期货套利、日历价差或一些基本的看跌期权套利,那么你可能不会看到太多的成功。
Q8。 Can C++ language be used for algorithm trading? Is Java important in algorithm trading?
**回复:**在大多数 HFT 公司,如果你在高频率和低延迟方面 C++ 是首选语言,因为它是最快的,你关心每一微秒。如果你不担心这一点,那么你可以使用任何其他语言,这没关系,它不会增加那么多你应该担心的延迟。所以是的,可以用 C++语言。
能是唯一能用的吗?如果你在做 HFT,那么最有可能是,否则不是。
另一件需要知道的重要事情是,这些编程语言不仅仅是编码算法或策略,它还有助于进行大量的研究和分析,所以这是 R 和 Python 中更受欢迎的东西。即使在 HFT 测试中,你也会看到很多分析师使用 R 和 Python 进行回溯测试,评估交易策略。当它投入生产时,算法是用 C++为 HFT 编码的。但是对于中频和低频,任何语言都可以。
Q9。 I trade a system with a hit rate of 45%, and the average profit/average loss =1.75. Trading is 2-3 times a month, but sometimes there will be 2 losses or even 7 consecutive losses. This particular difficulty prevents me from increasing the trading volume, even if the capital is positive. Can you come up with a solution?
**回复:**这只是这里有限的信息,但我怀疑或猜测的是后验测试参数或输出参数中有问题,那里可能有一些优化的空间。
在量化交易策略中,你会看到交易比率以及不同的比率,其中包括每个交易者都会看到的一个基本情况,那就是亏损。因此,样本内和样本外交易有一个基本但不太流行的概念,那就是,你不要优化对你可用的整个数据集的回溯测试,你要对样本内和样本外数据进行回溯测试。在样本内数据中,您可以进行所有想要进行的优化,然后在未经优化的样本外数据上运行策略,并检查性能如何,或者在您的情况下,下降情况如何。如果提取太多,那么你需要在你的策略中增加一点波动性,这对于一个风险来说太高了,如果它显示的结果在样本外数据中造成了巨大的损失。因此,这是可以帮助你的东西,你可能会在扩大你的战略中获得一些信心。
Q10。 How do we know if a market/trading place is saturated in HFT/ algorithm trading? For example, As an HFT company, I am considering entering a new market. How important is the existing HFT ratio in this market to me?
**回复:**正如我们之前讨论的,HFT 比率只是告诉你可以预期的竞争程度。如果你的策略是简单的普通套利策略,那么 HFT 比率表明进入这个市场可能不是一个好主意。如果你的策略不是简单的普通套利策略,而是更聪明,使用更多的数据分析结果,使用更多的统计数据进行一些像样的预测,那么,在这种情况下,它可能就没那么重要了。
高 HFT 绝对意味着,如果你想冒险进入普通的套利策略,甚至在一定程度上进入做市策略,你需要有一个技术非常强大的基础设施。
Q11。 What is the exact meaning of total bid quantity and total asking price quantity? Who are those who will buy but haven’t bought and sold yet, and vice versa, and their numbers will be counted. Who has bought but not yet sold, and vice versa, these figures will be counted.
**回复:**总买价数量和总卖价数量仅仅是人们可以购买和出售的东西,它并没有给你多少交易的指示。它只是告诉你市场的情况,好吧,有这么多的人在那里买这么多数量的东西,他们在那里买,在那里卖。
Q12。 In India, after HFT traders entered the T2 T1 market, did the traditional trading volume decrease?
**回复:**肯定的,是的。
在印度,曾经有一些大型自营交易公司雇佣 500-1000 名交易员,这些人不停地进进出出。批发商是这里的俗称。
这些交易者不会过多地分析屏幕,但会建仓,并试图在几秒或几分钟内退出。此外,在进行大量的套利策略之前,所有这些东西都非常流行,但在 algos 中,所有这些东西都非常容易被机器取代,所以这就是所发生的事情。这些类型的公司不得不收缩,但是他们中的大多数已经改变了他们的策略和商业模式,更多的转向的面向的方面。这就是我们在印度看到的变化。
Q13。 I am a software professional from the background of data science. How soon can I make a simple algorithm?
**回复:**我认为从算法交易的角度来看,这是一个相当强大的背景。我假设你已经很好地掌握了统计学和编程,现在你需要选择量化交易。因此,如果你对统计数字有很好的理解,这应该相对容易,但仍取决于你在金融市场方面的出发点。我不能回答需要多少个月,但是你已经得到了 3 个月中的 2 个,所以优先权在你这边。
Q14。 Is the basic index data manually entered into the program?
回复:如果你谈论的是市盈率或典型的基本面,如增长和宏观经济数据(如 GDP),你可以手动输入,也可以使用数据软件输入。有些公司确实会向你提供数据(机器可读的经济数据),所以你可以输入这些数据,当数据发布时,算法会读取你的数据,你可以根据结果对你的策略进行预编码,并相应地发送订单。因此,所有这些都是可能的,在零售领域并不常见,但现在有一些工具也可以用于零售。有些工具还可以直接读取或抓取新闻或网络上的数据。
Q15。 What are the advantages and disadvantages of HFT from India for non-Indian market?
****回复:这将更多地落在娱乐方面,而不是其他方面。毫无疑问,作为一名印度人,你不能把钱拿出去交易外汇交易所上市的保证金产品。除非你有 RBI 的批准,我不认为你可以这样做。但是,如果有一家公司(全球公司)将其交易外包给你,那么你可能可以,但我不确定。我可以肯定的一点是,你不能寄钱,你可以寄钱投资,但你不能寄钱交易保证金。
Q16。 After HFT enters the market, will the trading place worry about losing the retail trading volume?
****回复:绝对不会!
我不知道这方面的任何经验证据,因为散户一般不做套利。散户确实建仓;他们购买股票,进行商品交易。大多数情况下,他们通常采取方向性押注,但如果市场上没有高频交易,那么散户投资者支付的买卖价差将相对较高。
如果有高频交易,那么市场将会更有效率,这意味着它们支付的买卖差价将会小得多。事实上,Aite Group(HFT 领域的领先分析机构)在大约 2 年前的一项研究中提到,仅仅因为高频和算法交易带来的更好的买卖价格,一个普通的美国散户交易者就可以节省将近 250 美元。
在 HFT 的存在下,市场的流动性要高得多,因为 HFT 拥有技术和基础设施,可以降低缩小市场的风险因素。万一发生一些剧烈的事情,比如经济中的重大变化,特别是股票结果,管理决策,诸如此类的事情,高频交易者可以更快地做出反应。他们有信心,因为他们有能力在 99.99%的时间里创造更窄的市场,如果你增加减速带,或者剥夺高频交易者的信心或舒适,情况就不是这样了。所以,这就是为什么当你有 HFT 时,你会看到更紧张的市场,否则买卖价差会更高。
Q17。 Flash novels depict HFT as immoral. Do you agree with this view? Should a system with higher computing power give you the right to fight Xiao Qiao?
****回复:如果你发现有人在做违法或不符合规则或法规的事情,那么这显然是不正确的,也是不应该发生的,这与金融市场、电子商务、高频交易或基金管理等领域无关。
“ Little Joe ”通常会说很多关于支付的过渡成本,因为那里有很多高频交易。高频交易夺走了套利机会,因为它们提高了市场效率。就我个人的观点而言,散户交易者不会因为 HFT 的所作所为而受到伤害,HFT 相对于中频交易公司、经纪人或零售商的优势是微乎其微的。
散户通过基于网络的浏览器发送订单,这意味着他们已经有几毫秒的延迟,所以你作为散户不会受到影响。如果一家 HFT 公司在做任何事情,获得非法访问是另一回事,但即使在这种情况下,我也怀疑散户是否会受到伤害,因为首当其冲的将是遵守规则的其他 HFT 公司,非法访问将让他们有几微秒的优势,这对其他 HFT 公司来说是一件大事,但对散户来说不是。
即使在主机托管设施的情况下,我也有几毫秒的优势,这并没有什么不道德的,如果你把我放在离市场 100-200 英里的地方,那么我肯定会损失一些时间,但我会相应地将我的报价设置得更宽。
Q18。 How many hours does a quantitative analyst spend on coding every day?
回复:这取决于你是什么样的量化分析师**,但通常是一天中的大部分时间。它将是 R 和 Python 的混合;它可以是 C++或者其他语言。世界上有大量的语言。一些平台有多种语言,而他们中的一些也会创建一个基于 VB 脚本的模型。语言可能有所不同,但编码的数量可能相当可观。**
Q19。 What are the different types of algorithms that can be used for automatic transactions?
****回复:有很多;同样,您必须根据低频、中频和高频来滤除它们。
在高频率的情况下,重点将更多地放在套利和做市以及一些定向策略上,这将需要大量更快的计算。
在中低频端,你可以从自动化的角度自动化任何策略。使用因子模型,你甚至可以自动化你的基本面投资来分析和实现算法。不知道你会从中受益多少,但从分析的角度来看,你会受益匪浅,因为你可以浏览许多年度报告和许多股票的许多基本面数据,这是你无法手动完成的,但从执行的角度来看,这并没有多大帮助。关键是你可以自动化各种策略。
比较流行的有基于动量的策略**,统计套利,基于希腊的期权策略,分散和基于情绪的策略。有一个关于自动交易的流行策略的完整列表,是的,我们也涵盖了很多网络交流。**
Q20。 How does Algo trading help retail investors?
回复:从接收者的角度来看,如果你是手动操作,而有人在做 algo,那么你的收益就是买卖价格和流动市场。如果你想用算法进行自己的交易,这种情况下,它会给你更多的规模和股票数量,你可以在这些股票上运行每种策略。因此,你可以手动操作 5 到 10 只股票或 5 到 10 只策略,而不是去监控它们。此外,情感力量和分析方面可以用算法创造很多奇迹,即使你没有用算法做执行部分。
Q21。 I’m an NRI, trading in India through PIS platform. How do I do algorithmic trading?
****回复:如果你是一个 NRI 你可以做算法交易,这应该不成问题,你需要与能够满足 NRIs 的合适的经纪人联系,我认为大多数经纪人都能够做到这一点。如果你不是印度人,而你想在印度做生意,那么你可以以 FPI 类别 3 的身份来。
自动化是允许的,但有一些限制性股票你不能投资,但那是很小的一部分。
下一步
我们很确定,你也会有一些问题要问我们,我们很乐意帮助你解决这些问题。如果你在算法交易生涯中需要任何进一步的指导**,请随时 联系我们 。如果你是一个交易者、程序员、学生或者其他想从事算法交易的人,那么我们有算法交易的执行课程( EPAT )给你。**
QuantInsti 帮助人们获得适用于各种交易工具和平台的技能。EPAT 就是这么做的。其全面的课程包括培训模块,如统计学和计量经济学,金融计算和技术,算法和量化交易,并装备你成为一名成功的交易者。点击 了解更多 。
免责声明:本文中提供的所有数据和信息仅供参考。QuantInsti 对本文中任何信息的准确性、完整性、现时性、适用性或有效性不做任何陈述,也不对这些信息中的任何错误、遗漏或延迟或因其显示或使用而导致的任何损失、伤害或损害承担任何责任。所有信息均按原样提供。**
最佳实践:用正确的方式写作!
原文:https://blog.quantinsti.com/r-best-practices-r-you-writing-the-r-way/
任何程序员在日常工作中都不可避免地要编写大量代码。然而,并不是所有的程序员都养成了写清晰代码的习惯,这些代码很容易被其他人理解。原因之一可能是程序员缺乏对编写程序时遵循的最佳实践的认识。对于程序员新手来说尤其如此。在这篇文章中,我们列出了一些 R 编程的最佳实践,它们将提高代码的可读性、一致性和可重复性。请继续阅读!
在 R 中写作的最佳实践
1)描述你的代码——当你开始编码时,在第一行描述 R 代码做什么。对于随后的代码块,遵循描述代码块的相同方法。这使得其他人很容易理解和使用代码。
举例:
# This code captures the 52-week high effect in stocks
# Code developed by Milind Paradkar
2)加载包–在第一行描述完你的代码后,使用库函数列出并加载执行你的代码所需的所有相关包。
举例:
library(quantmod); library(zoo); library(xts);
library(PerformanceAnalytics); library(timeSeries); library(lubridate);
使用更新的包–在编写代码时,确保你使用的是最新更新的 R 包。要检查任何 R 包的版本,可以使用 packageVersion 函数。
举例:
packageVersion("TTR")
[1] ‘0.23.1’
**4)将所有源文件组织在同一个目录中—**将您的代码中使用/来源的所有必要文件存储在同一个目录中。您可以使用各自的相对路径来访问它们。
举例:
# Reading file using relative path
df = read.csv(file = "NIFTY.csv", header = TRUE)
# Reading file using full path
df = read.csv(file = "C:/Users/Documents/NIFTY.csv", header = TRUE)
**5)使用一致的数据结构类型—**R 编程语言允许不同的数据结构,如向量、因子、数据帧、矩阵和列表。对特定类型的数据结构使用类似的命名。这将使识别代码中使用的相似数据结构变得容易,并容易发现问题。
**示例:**您可以通过添加来命名代码中使用的所有不同的数据帧。df 作为后缀。
aapl.df = as.data.frame(read.csv(file = "AAPL.csv", header = TRUE))
amzn.df = as.data.frame(read.csv(file = "AMZN.csv", header = TRUE))
csco.df = as.data.frame(read.csv(file = "CSCO.csv", header = TRUE))
缩进你的代码–缩进让你的代码更容易阅读,尤其是当有多个嵌套语句时,比如 For-loop 和 if 语句。
举例:
# Computing the Profit & Loss (PL) and the Equity
dt$PL = numeric(nrow(dt))
for (i in 1:nrow(dt)){
if (dt$Signal[i] == 1) {dt$PL[i+1] = dt$Close[i+1] - dt$Close[i]}
if (dt$Signal[i] == -1){dt$PL[i+1] = dt$Close[i] - dt$Close[i+1]}
}
**7)删除临时对象–**对于运行在数千行代码中的长代码来说,在临时对象在代码中发挥作用后删除它们是一个好的做法。这可以确保 R 不会变成内存问题。
**8)为代码计时–**您可以使用 system.time 功能为代码计时。您还可以使用相同的函数来找出不同代码块所用的时间。该函数返回计算表达式或代码块所花费的时间(秒)。计时代码将有助于找出任何瓶颈,并通过对脚本进行必要的修改来帮助加速您的代码。
为了找出不同块所用的时间,我们在 system.time 函数的调用中将它们用花括号括起来。
该函数返回的两个重要指标包括:I)用户时间——代码向 CPU 收取的时间;ii)运行时间——执行整个代码所用的时间
例如:
# Generating random numbers
system.time({
mean_1 = rnorm(1e+06, mean = 0, sd = 0.8)
})
user system elapsed
0.40 0.00 0.45
**9)使用矢量化—**矢量化可以加快代码的执行速度,尤其是在处理大型数据集时。可以使用 ifelse 语句或 with 函数之类的语句进行矢量化。
**举例:**考虑一下俏皮的 1 年期价格系列。让我们使用两种方法(使用 for-loop 和 with 函数)找到每天的缺口,并使用 system.time 函数对它们计时。请注意执行 for 循环所用的时间,以及执行 with 函数和 lagpad 函数所用的时间。
library(quantmod)
# Using FOR Loop
system.time({
df = read.csv("NIFTY.csv")
df = df[,c(1,3:6)]
df$GapOpen = double(nrow(df))
for ( i in 2:nrow(df)) {
df$GapOpen[i] = round(Delt(df$CLOSE[i-1],df$OPEN[i])*100,2)
}
print(head(df))
})
# Using with function + lagpad, instead of FOR Loop
system.time({
df = read.csv("NIFTY.csv")
df = dt[,c(1,3:6)]
lagpad = function(x, k) {
c(rep(NA, k), x)[1 : length(x)]
}
df$PrevClose = lagpad(df$CLOSE, 1)
df$GapOpen_ = with(df, round(Delt(df$PrevClose,df$OPEN)*100,2))
print(head(df))
})
10)折叠代码–折叠代码是 R 程序员可以折叠代码行或代码段的一种方式。这允许在需要时隐藏代码块,并使浏览冗长的代码变得更容易。代码折叠可以通过两种方式完成:I)代码的自动折叠 ii)用户定义的代码折叠
自动折叠代码: RStudio 自动提供折叠代码的灵活性。当程序员编写函数或条件块时,RStudio 会自动创建可折叠的代码。
**用户自定义代码折叠:**用户也可以通过使用编辑- >折叠- >折叠或简单地选择一组代码并按下 Alt+L 键来折叠任意一组代码。
**用户定义的折叠也可以通过代码段来完成:**要插入一个新的代码段,可以使用代码- >插入段命令。或者,任何包含至少四个尾随破折号(-)、等号(=)或井号(#)的注释行将自动创建一个代码段。
**11)严格审查和测试你的代码—**一旦你的代码准备好了,确保你在不同的输入参数上严格测试它。确保 for-loop、if 语句、ifelse 语句等语句中使用的逻辑是正确的。让你的同事审查你的代码以确保工作的高质量是一个好主意。
12)不要保存你的工作空间**–**当你想退出时,它会检查你是否想保存你的工作空间。建议不要保存工作区,并在一个干净的工作区中开始下一个 R 会话。来自先前 R 会话的对象可能导致难以调试的错误。
这些是用 R 编写的一些最佳实践,你可以遵循它们来使你的代码易于阅读、调试并确保一致性。
下一步
“高位做空”是项目工作中制定的策略之一。这篇文章简要解释了这个策略和编码部分。
免责声明:股票市场的所有投资和交易都涉及风险。在金融市场进行交易的任何决定,包括股票或期权或其他金融工具的交易,都是个人决定,只能在彻底研究后做出,包括个人风险和财务评估以及在您认为必要的范围内寻求专业帮助。本文提到的交易策略或相关信息仅供参考。T3】
I B- I brokers R 包的体系结构解释
原文:https://blog.quantinsti.com/r-implementation-in-interactive-brokers-api/
在上一篇关于使用 IBrokers 包的文章中,我们向读者介绍了 IBrokers 包的一些基本功能,这些功能用于通过 R 检索市场数据、查看账户信息以及执行/修改订单。这篇文章将介绍 IBrokers 包的结构,该包将使 R 用户能够构建他们的定制交易策略,并通过交互式经纪人交易工作站(TWS)执行这些策略。
交互式经纪人 API 架构概述
在我们解释 IBrokers 包的底层结构之前,让我们先来概述一下交互式代理 API 架构。Interactive Brokers 提供了可以在 Windows、Linux 和 MacOS 上运行的 API 程序。API 与 IB TWS 建立连接。反过来,TWS 连接到 IB 数据中心,因此,所有通信都通过 TWS 路由。
IBrokers R 包使用户能够用 R 编写他的策略,并通过 IB TWS 帮助它执行。下面是流程结构图。T2】
从 TWS 获取数据
为了从 IB TWS 中检索数据,IBrokers R 包包括五个重要的函数。
- reqContractDetails:检索详细的产品信息。
- reqMktData:检索实时市场数据。
- reqMktDepth:检索实时订单簿数据。
- reqRealTimeBars:检索实时 OHLC 数据。
- reqHistoricalData:检索历史数据。
除了这些功能之外,还有帮助功能,使用户能够容易地创建上述数据功能。这些助手功能包括:
- twsContract:创建一个通用协定对象。
- tws quality/tws STK:用于创建权益合同对象的包装程序
- twsOption/twsOPT:用于创建选项协定对象的包装。
- twsFuture/twsFUT:创建期货合同对象的包装程序。
- twsFuture/twsFOP:创建期货期权合约对象的包装程序。
- twsCurrency/twsCASH:用于创建货币合约对象的包装程序。
举例:
tws = twsConnect()
reqMktData(tws, twsSTK("AAPL"))
实时数据模型结构
当使用数据函数访问市场数据流时,TWS API 接收到的数据流遵循特定的路径,该路径能够将这些数据流存储到相关的消息类型中。下面显示的是 reqMktData 函数的参数列表。
**示例:**reqMktData 函数的参数
T2】
来源:R -马尔科姆·谢灵顿的算法交易
实时数据模型
在下面的小节中,我们将看到这个数据模型是如何工作的,以及如何定制实时数据函数(例如 reqMktData)的参数来创建 r 中用户定义的自动交易程序。
使用回调参数
像 reqMktData、reqMktDepth 和 reqRealTimeBars 这样的数据函数都有一个特殊的回调参数。默认情况下,该参数从 IBrokers 包中调用 twsCALLBACK 函数。
twsCALLBACK 函数的一般逻辑是从 TWS 接收每个传入消息的标头。然后将它与 eWrapper 对象一起传递给 processMsg 函数。eWrapper 对象可以维护状态数据(价格),并具有管理来自 TWS 的所有传入消息类型的函数。一旦 processMsg 调用返回,就会出现另一个无限循环。
在下面显示的传入消息示例中,我们用绿色圈出了一条消息(1 6 1 4 140.76 1 0)。第一个数字(即 1)是报头,其余数字(即 6 1 4 140.76 1 0)构成了消息的正文。
来自函数 reqMktData 调用的传入消息
根据消息类型,收到的每条消息都将调用适当命名的 eWrapper 回调。默认情况下,如果没有指定,代码将调用默认方法,通过 cat 将结果打印到屏幕上。
默认方法示例:
T2】
结果:
设置 CALLBACK = NULL 会将原始消息级数据发送到 cat,cat 又会使用该函数的 file 参数将数据返回到标准输出,或者通过打开的连接、文件或管道进行重定向。
回调参数设置为空的示例:
T2】
结果:
回调,通过回调和事件包装器,被设计为允许实时数据流的 R 级处理。回调有助于定制输出(即输入的结果),该输出可用于根据用户定义的标准在 R 中创建自动交易程序。
tw callback 函数的内部代码
回调函数(即 twsCALLBACK 函数)内部是一个循环,它获取传入的消息类型,并在每个新消息时调用 processMsg 函数。
twcallback 函数的内部代码片段
ProcessMsg 函数
processMsg 函数内部是一系列 if-else 语句,这些语句根据已知的传入消息类型进行分支。processMsg 函数的内部代码结构片段如下所示。
processMsg 函数的内部代码片段
eWrapper 关闭
使用 eWrapper 函数在 twsCALLBACK 中创建 eWrapper 闭包
eWrapper 函数创建一个 eWrapper 闭包,以允许自定义的传入消息管理。eWrapper 闭包包含一个函数列表,用于管理所有传入的消息类型。每个消息在 eWrapper 中都有一个对应的函数,用于处理每个传入消息类型的特定细节。
eWrapper 闭包中包含的函数列表
数据环境是。数据,用访问器方法获取。数据,赋值。这些方法可以从闭包对象 eWrapper g e t 中调用。数据, e W r a p p e r get 中调用。数据,eWrapper get中调用。数据,eWrapperassign。数据等。通过创建一个 eWrapper 实例,并以函数调用的方式调用它,可以修改嵌入在对象中的任何或所有特定方法。
总结****I brokers 包的内部结构
我们已经在上面看到了 IBrokers 包的内部结构是如何工作的。总结整个机制,可以描述如下:
向 TWS 请求数据->tw callback->processMsg->eWrapper
实时数据模型
我们将使用 Jeff Ryan 发布的 snapShotTest 代码示例。下面的代码修改了 twsCALLBACK 函数。这个修改后的回调用作 reqMktData 函数的参数。当我们使用 reqMktData 函数时,使用修改后的回调的输出比普通输出更便于阅读。【T2
snapShotTest 代码中的另一个变化是将来自 IB API 的任何错误消息记录到一个单独的文件中。(在默认方法下,eWrapper 将此类错误消息打印到控制台)。为此,我们使用 eWrapper 创建了一个不同的包装器(debug=NULL)。一旦我们构建了它,我们就可以将它的 errorMessage()函数分配给我们应该使用的 eWrapper。
然后,我们应用一个简单的交易逻辑,如果最后的买入价高于预先设定的阈值,就会产生买入信号。人们可以类似地调整 twsCALLBACK 的逻辑,根据自己的交易策略需求创建自定义回调。
【IB 交易员工作站(TWS)
T2】
结论
最后,这篇文章详细概述了 IBrokers 包的架构,它是交互式代理 API 的 R 实现。Interactive Brokers 与 QuantInsti 合作主办了一场名为“在 Interactive Brokers 上使用 R 进行交易”的网络研讨会,该研讨会于 2017 年 3 月 2 日举行,由 QuantInsti 总监 Anil Yadav 主持。您可以点击上面提供的链接来了解更多关于 IBrokers 包的信息。点击下面的下载按钮,获取网上研讨会中使用的相关 R 文件。
声明:
本软件不以任何方式隶属于 Interactive Brokers 或其任何附属机构,也没有得到其认可或批准。它没有任何保证,除非用户能够阅读并理解源代码,否则不应该在实际交易中使用。IBrokers 是 TWS API 的纯 R 实现。
下一步
如果你想学习算法交易的各个方面,那就去看看算法交易(EPAT)中的 T2 高管课程。该课程涵盖了统计学&计量经济学、金融计算&技术和算法&定量交易等培训模块。EPAT 让你具备成为成功交易者所需的技能。现在报名!
r .每周简报第一卷
我们从 R 每周公告开始,它将包含一些有趣的用 R 写代码和解决 bug 问题的方式和方法。我们还将为初学者介绍 R 函数和快捷键。我们知道用 R 编写代码的方法不止一种,公告中列出的解决方案可能不是您唯一的参考点。尽管如此,我们相信列出的解决方案将对我们的许多读者有所帮助。希望你喜欢我们的每周简报。享受阅读它们吧!
快捷键
- 将光标移动到 R 源代码编辑器- Ctrl+1
- 将光标移动到 R 控制台- Ctrl+2
- 要清除 R 控制台- Ctrl+L
解题思路
创建用户输入功能
为了在 R 中创建用户输入功能,我们可以使用 readline 函数。这给了我们在代码运行时为我们选择的变量设置输入值的灵活性。
例如:假设我们已经编写了一个回溯测试策略。我们希望有选择回溯测试周期的灵活性。为此,我们可以创建一个用户输入“n”,表示以年为单位的回溯测试期,并在代码的开头添加如下所示的行。
当代码运行时,它将提示用户输入“n”的值。输入值后,R 代码将在设定的时间内执行,并产生所需的输出。
n = readline(prompt = "Enter the backtest period in years: ")
每 x 秒刷新一次代码
为了每 x 秒刷新一次代码,我们可以使用 while 循环和 Sys.sleep 函数。“while 循环”一直执行封闭的命令块,直到条件保持满足。我们将代码放在 while 语句中,并保持条件为真。通过保持条件为真,它将继续循环。在代码的最后,我们添加了 Sys.sleep 函数,并以秒为单位指定延迟时间。这样,代码将每隔“x”秒刷新一次。
**例子:**在这个例子中,我们将 x 值初始化为零。代码每 1 秒刷新一次,它会一直打印 x 的值,你可以按键盘上的 escape 键终止代码。
x = 0
while (TRUE) {
x = x + 1 print(x)
Sys.sleep(1)
}
顺序运行多个 R 脚本
要运行多个 R 脚本,可以有一个包含要运行的脚本名称的主脚本。运行主脚本将导致其他 R 脚本的执行。假设主脚本的名称是“NSE 股票”。r”。在这个脚本中,我们将提到我们希望在源函数中运行的脚本的名称。在本例中,我们希望运行“顶级收益者”。r”和“最大输家”。r”脚本。这些将是“NSE 股票”的一部分。r "如下所示,我们运行主脚本来运行这两个脚本。
source("Top gainers.R")
source("Top losers.R")
将 R 脚本名包含在“source”函数中会导致 R 接受来自指定文件的输入。从该文件中读取并解析输入,直到到达文件的末尾,然后在所选的环境中按顺序计算解析后的表达式。或者,也可以将 R 脚本名放在一个向量中,并使用 sapply 函数。
举例:
filenames = c("Top gainers.R", "Top losers.R")
sapply(filenames, source)
将美国格式的日期转换为标准日期格式
美国的日期格式是 mm/dd/yyyy 类型,而 ISO 8601 的标准格式是 yyyy-mm-dd。要将日期从美国格式转换为标准日期格式,我们将使用 as。日期函数和格式函数。下面的示例说明了该方法。
举例:
# date in American format dt = "07/24/2016" # If we call the as.Date function on the date, it will
# throw up an error, as the default format assumed by the as.Date function is yyyy-mmm-dd.
as.Date(dt)
char tote(x)中的错误:字符串不是标准的明确格式
# Correct way of formatting the date
as.Date(dt, format = "%m/%d/%Y")
[1] “2016-07-24”
如何从文件夹中删除所有现有文件
要从特定文件夹中删除所有文件,可以使用取消链接功能。指定文件夹的路径作为函数的参数。带有星号的正斜杠被添加到路径的末尾。下面给出了语法。
unlink(" path/*)
举例:
unlink("C:/Users/Documents/NSE Stocks/*")
这将删除“NSE 股票”文件夹中的所有文件。
功能去神秘化
write.csv 函数
如果您想在 csv 文件中保存数据帧或矩阵,R 提供了 write.csv 函数。write.csv 函数的语法如下所示:
write.csv(x,file="filename ",row.names=FALSE)
如果我们指定 row.names=TRUE,该函数将为每一行添加一个取自数据的 row.names 属性的标签。如果您的数据没有行名,那么函数只使用行号。默认情况下,写入列标题行。如果不需要列标题,请设置 col.names=FALSE。
举例:
# Create a data frame
Ticker = c("PNB","CANBK","KTKBANK","IOB")
Percent_Change = c(2.30,-0.25,0.50,1.24)
df = data.frame(Ticker,Percent_Change)
write.csv(df, file="Banking Stocks.csv", row.names=FALSE)
这将把“df”数据帧中包含的数据写入“Banking Stocks.csv”文件。文件保存在 R 工作目录中。
修复功能
fix 函数显示作为参数提供的函数的底层代码。
举例:
fix(sd)
标准差函数的底层代码如下所示。当我们使用“sd”作为参数执行 fix 函数时,就会显示这个消息。
function (x, na.rm = FALSE)
sqrt(var(if (is.vector(x) || is.factor(x)) x else as.double(x), na.rm = na.rm))
download.file 功能
download.file 函数帮助从网站下载文件。这可以是网页、csv 文件、R 文件等。该函数的语法如下所示:
download.file( url , destfile )
其中,url -要下载的文件的统一资源定位符(URL)destfile-保存下载文件的位置,即带有文件名的路径
**示例:**在本例中,该函数将从“url”参数中给定的路径下载文件,并以“betawacc.xls”的名称将其保存在 D 驱动器的“Skills”文件夹中。
url = "http://www.exinfm.com/excel%20files/betawacc.xls"
destfile = "D:/Skills/wacc.xls"
download.file(url, destfile)
下一步
我们希望你喜欢这个公告。在接下来的每周公告中,我们将为读者列出更多有趣的方式和方法以及 R 函数。
r 每周简报第二卷
本周的 R 公告将涵盖函数调用、数据帧排序、创建时序对象,以及 is.na、na.omit、paste、help、rep 和 seq 函数等函数。希望你喜欢这个 R 周刊。享受阅读!
快捷键
- 显示文件- Ctrl+5
- 显示绘图- Ctrl+6
- 要显示包- Ctrl+7
解题思路
在 R 脚本中调用函数
如果您想从另一个脚本调用您的 R 脚本中的自定义函数,可以使用“exists”函数和“source”函数。请参见下面的示例:
举例:
if(exists("daily_price_data", mode="function")) source("Stock price data.R")
在这种情况下,表达式将检查“股票价格数据”中是否存在名为“每日价格数据”的函数。r”脚本,如果是这样,它将在当前脚本中加载该函数。然后,通过提供相关参数,我们可以在脚本中多次使用该函数。
将日期从 Google finance 转换为时间序列对象
当我们从 Google finance 下载股票价格数据时,“DATE”列显示 yymmdd 格式的日期。这种格式在 r 中不被视为时间序列对象,要将 Google Finance 中的日期转换为时间序列对象,可以使用 lubridate 包中的 ymd 函数。ymd 函数接受年、月、日形式的日期。对于其他格式的日期,lubridate 包具有类似 ydm、mdy、myd、dmy 和 dym 的函数,这些函数可用于将其转换为时间序列对象。
举例:
library(lubridate)
dt = ymd(20160523)
print(dt)
[1] “2016-05-23”
按升序或降序对数据帧进行排序
dplyr 包中的排列函数可用于对数据框进行排序。第一个参数是 data.frame,下一个参数是排序所依据的变量,可以是升序,也可以是降序。
在下面的例子中,我们创建了一个两列数据框,由股票符号及其各自的价格变化百分比组成。然后,我们首先按升序对百分比变化列进行排序,然后再按降序对百分比变化列进行排序。
举例:
library(dplyr)
# Create a dataframe
Ticker = c("UNITECH", "RCOM", "VEDL", "CANBK")
Percent_Change = c(2.3, -0.25, 0.5, 1.24)
df = data.frame(Ticker, Percent_Change)
print(df)
股票价格百分比变化 1 尤尼泰 2.30 2 RCOM 0.25 3 韦德 1.50 4 加拿大元 1.24
# Sort in an ascending order
df_descending = arrange(df, Percent_Change)
print(df_descending)
1 RCOM -0.25 德国马克-0.50 德国马克-1.24 德国马克-2.30 德国马克
# Sort in a descending order
df_descending = arrange(df, desc(Percent_Change))
print(df_descending)
股票价格百分比变化 1 欧元兑换 1 美元 2.30 加元 1.24 美元 3 欧元兑换 1.50 美元 4 RCOM 0.25 美元
功能去神秘化
粘贴功能
粘贴是 R 中一个非常有用的函数,用于连接提供给它的参数。若要包含或删除参数之间的空格,请使用“sep”参数。
示例 1: 使用粘贴将一串单词和一个函数组合起来
x = c(20:45)
paste("Mean of x is", mean(x), sep = " ")
[1]“x 的平均值是 32.5”
示例 2: 使用目录路径、符号和文件扩展名作为粘贴函数的参数来创建文件名。
dirPath = "C:/Users/MyFolder/"
symbol = "INFY"
filename = paste(dirPath, symbol, ".csv", sep = "")
print(filename)
[1] "C:/Users/MyFolder/INFY.csv "
is.na 和 na.omit 函数
is.na 函数检查给定数据集中是否有 na 值,而 na.omit 函数将从给定数据集中删除所有 NA 值。
**示例:**考虑一个数据框架,该数据框架包括对应于每个日期的股票的开盘价和收盘价。
date = c(20160501, 20160502, 20160503, 20160504)
open = c(234, NA, 236.85, 237.45)
close = c(236, 237, NA, 238)
df = data.frame(date, open, close)
print(df)
日期开盘收盘 1 20160501 234.00 236 2 20160502 北美 237 3 20160503 236.85 北美 4 20160504 237.45 238
让我们使用 is.na 函数检查数据帧是否有 NA 值。
is.na(df)
日期打开关闭假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
从结果可以看出,它有两个 NA 值。现在让我们使用 na.omit 函数,并查看结果。
na.omit(df)
日期开盘收盘 1 2016 05 01 234.00 236 4 2016 05 04 237.45 238
从结果中可以看出,具有 NA 值的行被省略,并且结果数据帧现在仅包括非 NA 值。
这些函数可用于检查我们希望对其应用一些计算的大型数据集中的任何 NA 值。NA 值的存在会导致计算给出不需要的结果,因此这种 NA 值需要被移除或者被相关值代替。
重复和序列功能
rep 函数将参数重复指定的次数,而 sequence 函数用于形成所需的数字序列。请注意,在序列函数中,我们使用逗号,而不是冒号。
例 1:
rep("Strategy", times = 3)
[1]“策略”“策略”“策略”
rep(1:3, 2)
[1] 1 2 3 1 2 3
例 2:
seq(1, 5)
[1] 1 2 3 4 5
seq(1, 5, 0.5)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
帮助和示例功能
help 函数提供关于主题排序的信息,而 example 函数提供关于给定主题的示例。
帮助(汇总)示例(汇总)
要访问与特定包中的特定函数相关联的 R 帮助文件,请将函数名作为 help 函数的第一个参数,同时包含第二个参数中提到的包名。
举例:
help(barplot, package="graphics")
或者,也可以键入一个问号,后跟函数名(例如?柱状图)并执行命令以了解关于该函数的更多信息。
下一步
我们希望你喜欢这个公告。在下一期每周简报中,我们将为读者列出更多有趣的方式方法加上 R 函数。
更新
我们注意到一些用户在从雅虎和谷歌金融平台下载市场数据时面临挑战。如果你正在寻找市场数据的替代来源,你可以使用 Quandl 来获得同样的信息。
r 每周简报第九卷
本周的 R 公告将涵盖如何使用 R 列出文件、提取文件名和创建文件夹的主题。希望你喜欢这个 R 每周公告。享受阅读!
快捷键
- 运行当前块- Ctrl+Alt+C
- 运行下一个块- Ctrl+Alt+N
- 运行当前函数定义- Ctrl+Alt+F
解决问题的想法
如何列出带有特定扩展名的文件
要列出具有特定扩展名的文件,可以使用 list.files 函数中的 pattern 参数。例如,要列出 csv 文件,请使用以下语法。
举例:
files = list.files(pattern = "\\.csv$")
这将列出当前工作目录中的所有 csv 文件。要列出任何其他文件夹中的文件,您需要提供文件夹路径。
list.files(path = "C:/Users/MyFolder", pattern = "\\.csv$")
末尾的$表示这是字符串的结尾。添加中。确保只匹配带有扩展名的文件。战斗支援车
使用 gsub 函数提取文件名
当我们从 google finance 下载股票数据时,文件名与股票数据符号相对应。如果我们想从文件名中提取股票数据符号,我们可以使用 gsub 函数。该函数搜索模式参数的匹配项,并用替换参数中给出的替换值替换所有匹配项。该函数的语法如下所示:
gsub(pattern, replacement, x)
在哪里,
pattern -是一个字符串,包含要在给定的字符向量中匹配的正则表达式。替换-匹配模式的替换。x -是寻找匹配的字符向量。
在下面给出的示例中,我们提取了存储在“Reading MFs”文件夹中的文件的文件名。我们已经在 R 工作目录中下载了两家公司的股票价格数据,即 MRF 公司和佩吉得公司
举例:
folderpath = paste(getwd(), "/Reading MFs", sep = "")
temp = list.files(folderpath, pattern = "*.csv")
print(temp)
[1] “MRF.csv” "PAGEIND.csv "
gsub("*.csv$", "", temp)
[1]" paging in "的 MRF
使用 R 创建一个文件夹
在“dir.create”函数的帮助下,可以通过 R 创建一个文件夹。该函数使用路径的最后一个元素中指定的名称创建一个文件夹。尾部路径分隔符被丢弃。
语法如下所示:
dir.create(path, showWarnings = FALSE, recursive = FALSE)
举例:
dir.create("D:/RCodes", showWarnings = FALSE, recursive = FALSE)
这将在 D 驱动器中创建一个名为“RCodes”的文件夹。
功能去神秘化
选择功能
select 函数来自 dplyr 包,可用于选择您需要的数据框的某些列。考虑示例中给出的数据帧“df”。
举例:
library(dplyr)
Ticker = c("INFY", "TCS", "HCL", "TECHM")
OpenPrice = c(2012, 2300, 900, 520)
ClosePrice = c(2021, 2294, 910, 524)
df = data.frame(Ticker, OpenPrice, ClosePrice)
print(df)
# Suppose we wanted to select the first 2 columns only. We can use the names of the columns in the
# second argument to select them from the main data frame.
subset_df = select(df, Ticker:OpenPrice)
print(subset_df)
# Suppose we want to omit the OpenPrice column using the select function. We can do so by using
# the negative sign along with the column name as the second argument to the function.
subset_df = select(df, -OpenPrice)
print(subset_df)
# We can also use the 'starts_with' and the 'ends_with' arguments for selecting columns from the
# data frame. The example below will select all the columns which end with the word 'Price'.
subset_df = select(df, ends_with("Price"))
print(subset_df)
滤波函数
过滤器函数来自 dplyr 包,用于从数据框中提取行的子集。这个函数类似于 r 中的 subset 函数。
举例:
library(dplyr)
Ticker = c("INFY", "TCS", "HCL", "TECHM")
OpenPrice = c(2012, 2300, 900, 520)
ClosePrice = c(2021, 2294, 910, 524)
df = data.frame(Ticker, OpenPrice, ClosePrice)
print(df)
# Suppose we want to select stocks with closing prices above 750, we can do so using the filter
# function in the following manner:
subset_df = filter(df, ClosePrice > 750)
print(subset_df)
# One can also use a combination of conditions as the second argument in filtering a data set.
subset_df = filter(df, ClosePrice > 750 & OpenPrice < 2000)
print(subset_df)
排列功能
arrange 函数是 dplyr 包的一部分,用于根据其中一列对数据框的行进行重新排序。通过使用特殊的 desc()运算符,可以按降序或升序排列列。
举例:
library(dplyr)
Ticker = c("INFY", "TCS", "HCL", "TECHM")
OpenPrice = c(2012, 2300, 900, 520)
ClosePrice = c(2021, 2294, 910, 524)
df = data.frame(Ticker, OpenPrice, ClosePrice)
print(df)
# Arrange in descending order
subset_df = arrange(df, desc(OpenPrice))
print(subset_df)
# Arrange in ascending order.
subset_df = arrange(df, -desc(OpenPrice))
print(subset_df)
下一步
我们希望你喜欢这个公告。在接下来的每周公告中,我们将为读者列出更多有趣的方式和方法以及 R 函数。
更新
我们注意到一些用户在从雅虎和谷歌金融平台下载市场数据时面临挑战。如果你正在寻找市场数据的替代来源,你可以使用 Quandl 来获得同样的信息。
r 每周简报第六卷
本周的 R 公告将涵盖诸如如何解析 R 中的毫秒、如何格式化日期以及提取日期和时间的特定部分的方法等主题。希望你喜欢这个 R 周刊。享受阅读!
快捷键
- 缩进-在行首点击 Tab 键
- 升级- Shift+Tab
- 转到特定行- Shift+Alt+G
解决问题的想法
如何在 R 中解析毫秒
当 R 从文本或电子表格文件中读取日期时,它通常会将它们存储为字符向量或因子。要将它们转换成日期,我们需要解析这些字符串。可以使用 strptime 函数完成解析,该函数返回 POSIXlt 日期。
要解析日期,必须告诉 strptime 字符串的哪些位对应于日期的哪些位。日期格式是使用字符串指定的,其组成部分用百分号后跟一个字母来指定。请参见下面的示例。这些组件与其他固定字符(如时间中的冒号或日期中的破折号和斜线)组合在一起,形成一个完整的规范。
举例:
strptime("25/06/2016 09:50:24", "%d/%m/%Y %H:%M:%S")
[1]“2016-06-25 09:50:24 IST”
如果一个字符串与格式字符串中的格式不匹配,则它取值 NA。例如,指定破折号而不是斜线会导致解析失败:
举例:
strptime("25-06-2016 09:50:24", "%d/%m/%Y %H:%M:%S")
[1]纳
为了解析 R 中的毫秒数,我们使用以下格式字符串:
举例:
strptime("25-06-2016 09:50:24.975", "%d-%m-%Y %H:%M:%OS")
[1]“2016-06-25 09:50:24.975 IST”op = options(digits . secs = 3)options(op)
options 函数允许用户设置和检查各种全局选项,这些选项会影响 R 计算和显示结果的方式。options 函数的参数“digits.secs”控制以秒为单位格式化时间值时要打印的最大位数。有效值为 0 到 6,默认值为 0。
如何设置日期格式
我们可以使用 strftime ("string format time ")函数按照我们的要求格式化日期。这个函数对 POSIXct 和 POSIXlt 日期类都有效,它将日期变量转换为字符串。
举例:
now_time = Sys.time()
# Let us first check the class of the the now_time variable by calling the
# class function.
class(now_time)
[1]" posi xct " " POSIX "
可以看出,它是一个“POSIXct”变量。为了正确格式化日期,我们需要使用正确的命名约定。例如,%B 表示月份的全名,%p 表示 AM/PM 时间指示器,依此类推。有关约定的完整列表,请查看函数的帮助页面。所需的格式约定放在引号中,并构成函数的第二个参数。strftime 函数用法的示例如下所示。
strftime(now_time, "%I:%M%p %A, %d %B %Y")
[1]“2017 年 4 月 29 日星期六上午 9:16”
提取日期和时间的特定部分
r 有两个标准的日期时间类,POSIXct 和 POSIXlt。POSIXct 类将日期存储为自 1970 年开始以来的秒数,而 POSIXlt 将日期存储为一个列表,其中包含秒、分钟、小时、一个月中的某一天等。可以使用列表索引来访问 POSIXlt 日期的各个部分。这些组件可以使用“松开”功能查看。
**示例:**在这个示例中,我们使用 Sys.time 函数,它给出当前的日期和时间。我们使用 as 将它转换成 POSIXlt 类。POSIXlt 函数。现在我们可以提取所需的组件。
time_now = as.POSIXlt(Sys.time())
print(time_now)
[1]“2017-04-29 09:16:06 IST”
unclass(time_now)
6.642435 美元
最低[1] 16 美元
$小时[1] 9
$mday [1] 29
$mon [1] 3
第[1]年 117 美元
$wday [1] 6
118 美元
$isdst [1] 0
$zone [1] "IST "
19800 美元
attr(," tzo ")[1]“是”“是”
# To extract minutes
time_now$min
[1] 16
# To extract day of the month
time_now$mday
[1] 29
功能去神秘化
%within%和%m+%函数
%它返回逻辑真或假作为输出。函数需要使用 interval 函数创建的日期时间间隔。我们使用 ymd 函数将非日期时间对象转换成日期时间对象。
举例:
library(lubridate)
dates = interval("2016-03-03", "2016-06-03")
d = ymd("2016-04-21")
d %within% dates
[1]正确
**%m+%函数:**该函数用于给定的日期时间对象加上或减去月份。
例子:
# To add a month to a date-time objects
library(lubridate)
d = ymd("2016-04-21")
d %m+% months(1)
[1] “2016-05-21”
# To create a sequence of months from a given date-time object
library(lubridate)
d = ymd("2016-04-21")
d %m+% months(1:3)
[1] “2016-05-21” “2016-06-21” “2016-07-21”
# To subtract a year from a given date-time object
d = ymd("2016-04-21")
d %m+% years(-1)
[1] “2015-04-21”
to.period 函数
to.period 函数是 xts 包的一部分。它将 OHLC 或单变量对象转换为低于给定数据对象的指定周期。
例如,函数可以将每日系列转换为每月系列,将每月系列转换为每年系列,将一分钟系列转换为每小时系列。
举例:
library(quantmod)
data = getSymbols("AAPL", src = "yahoo", from = "2016-01-01", to = "2016-01-15",
auto.assign = FALSE)
nrow(data)
[1] 10
# Convert the above daily data series to weekly data.
to.period(data, period = "weeks")
有效的周期字符串包括:“秒”、“分”、“小时”、“天”、“周”、“月”、“季度”和“年”。
要将每日数据转换为每月数据,语法如下:
df = to.period(data,period = ‘months’)
结果将包含给定期间的开盘价和收盘价,以及新期间的最大值和最小值,分别反映在新高和新低中。如果某个时间段的体积可用,也将计算新的体积。
period.max 和 period.min 函数
period.max 和 period.min 函数是 xts 包的一部分。period.max 用于在给定要计算的部分的任意索引的情况下,计算每个周期的最大值。period.min 函数以类似的方式计算最小值。
语法如下所示:
period.max(x, index)
period.min(x, index)
其中,x -表示单变量数据对象索引-表示端点的数值向量
举例:
library(xts)
# compute the period maximum
period.max(c(1, 1, 4, 2, 2, 6, 7, 8, -1, 20), c(0, 3, 5, 8, 10))
3 5 8 10 4 2 8 20
# compute the period minimum
period.min(c(1, 1, 4, 2, 2, 6, 7, 8, -1, 20), c(0, 3, 5, 8, 10))
3 5 8 10 1 2 6 -1
下一步
我们希望你喜欢这个公告。在下一期每周简报中,我们将为读者列出更多有趣的方式方法加上 R 函数。
更新
我们注意到一些用户在从雅虎和谷歌金融平台下载市场数据时面临挑战。如果你正在寻找市场数据的替代来源,你可以使用 Quandl 来获得同样的信息。
r 每周简报第七卷
本周的 R bulletin 将涉及如何创建日期序列、如何给日期和时间变量添加数字以及如何将美国格式的日期转换为标准格式等主题。希望你喜欢这个 R 周刊。享受阅读!
快捷键
- 运行当前行/选择- Ctrl+Enter
- 将光标移动到行首- Home 键
- 将光标移动到行尾键的末尾
解决问题的想法
使用序列创建日期序列。日期功能
序列。日期函数可用于生成日期序列。该函数使用类“Date”处理日期。对于 POSIX 类的日期,可以使用 seq。POSIXt 函数同样适用。序列的语法。日期函数给定为:
序列。日期(从,到,到)
其中,“从”是开始日期。“到”是结束日期。这可以是一个可选参数。“by”是序列的增量。“length.out”采用整数值;这是一个可选参数,并指示序列的期望长度
例子:
# by month
seq(as.Date("2016/1/1"), by = "month", length.out = 12)
[1] “2016-01-01” “2016-02-01” “2016-03-01” “2016-04-01” “2016-05-01” [6] “2016-06-01” “2016-07-01” “2016-08-01” “2016-09-01” “2016-10-01” [11] “2016-11-01” “2016-12-01”
# by quarters.
seq(as.Date("2000/1/1"), as.Date("2003/1/1"), by = "quarter")
[1] “2000-01-01” “2000-04-01” “2000-07-01” “2000-10-01” “2001-01-01” [6] “2001-04-01” “2001-07-01” “2001-10-01” “2002-01-01” “2002-04-01” [11] “2002-07-01” “2002-10-01” “2003-01-01”
# If we specify a value in the 'by' argument, it will create a sequence of
# dates which are apart from that given value.
seq(as.Date("2000/1/1"), as.Date("2003/1/1"), by = "2 quarter")
[1] “2000-01-01” “2000-07-01” “2001-01-01” “2001-07-01” “2002-01-01” [6] “2002-07-01” “2003-01-01”
向日期和时间变量添加数字
R 中有三个日期和时间类:POSIXct、POSIXlt 和 date。当我们向 POSIXct 或 POSIXlt 类日期添加一个数字时,它会将给定数字的单位作为秒,因此它会将日期移动这些秒。
举例:
now_time = Sys.time()
print(now_time)
[1]“2017-05-06 21:01:19 IST”
# Let us add a value of 1 to the now_time date variable.
x = now_time + 1
print(x)
[1]“2017-05-06 21:01:20 IST”
从输出中可以看出,日期移动了 1 秒。如果我们想给“now time”变量加 1 天,我们必须给“now time”变量加 86400,因为 1 天相当于 86400 秒。这将使它提前一天。
now_time = Sys.time()
y = now_time + 86400
print(y)
[1]“2017-05-07 21:01:20 IST”
但是,如果日期存储为 date 类,则添加值 1 会将其向前移动 1 天。因此,以 date 类的形式向 Date 变量添加一个数字将使它移动那么多天。
now_time = as.Date(Sys.time())
print(now_time)
[1] “2017-05-06”
x = now_time + 1
print(x)
[1] “2017-05-07”
将美国日期格式转换为标准格式
美国的日期格式是 mm/dd/yyyy 类型,而 ISO 8601 的标准格式是 yyyy-mm-dd。为了将美国日期格式转换为标准格式,我们将使用 as。日期函数和格式函数。下面的示例说明了该方法。
举例:
# date in American format
dt = "07/24/2016"
# If we call the as.Date function on the date, it will throw up an error, as
# the default format assumed by the as.Date function is yyyy-mmm-dd.
as.Date(dt)
char tote(x)中的错误:字符串不是标准的明确格式
# Correct way of formatting the date
as.Date(dt, format = "%m/%d/%Y")
[1] “2016-07-24”
功能去神秘化
相同函数
恒等函数测试 R 中的两个对象是否完全相等。要比较的对象作为参数包含在函数中,函数返回逻辑真/假作为输出。
例子:
y1 = c(1:12)
y2 = c(1:12)
identical(y1, y2)
[1]正确
days = c("Mon", "Tues", "Wed", "Thurs", "Fri", "Sat", "Sun")
months = c("Jan", "Feb", "Mar", "April", "May", "June", "July")
identical(days, months)
[1]错误
全等函数
all.equal 函数用于检查数字是否相等。如果要比较的值不相同,all.equal 函数将返回差异报告。该函数的语法如下所示:
all.equal(目标,当前)
其中,目标是一个 R 对象。当前是其他 R 对象,与目标进行比较。
举例:
all.equal(3, 2)
[1]“平均相对差异:0.3333333”
# Using is.TRUE will return a logical value instead of the differences
# report.
isTRUE(all.equal(3, 2))
[1]错误
任何和所有功能
“any”函数用于检查给定的一组逻辑向量中是否有任何真值。“all”函数是另一个有用的函数,如果输入逻辑向量中的所有值都为真,则该函数返回真。
例 1:
sample = c(FALSE, FALSE, FALSE)
any(sample)
[1]错误
all(sample)
[1]错误
例 2:
sample = c(TRUE, FALSE, FALSE)
any(sample)
[1]正确
all(sample)
[1]错误
下一步
我们希望你喜欢这个公告。在接下来的每周公告中,我们将为读者列出更多有趣的方式和方法以及 R 函数。