什么是量化投资?

通过将数学理论巧妙融合到投资的实战之中,是利用计算机技术并且采用一定的数学模型去实践投资理念,实现投资策略的过程。

价值投资趋势投资技术分析是引领过去一个世纪的投资方法,随着计算机技术的发展,已有的投资方法和计算机技术相融合,产生了量化投资。

量化投资的优

量化投资的优势在于纪律性、系统性、及时性、准确性和分散化。

  1. 纪律性:严格执行投资策略,不是投资者情绪的变化而随意更改。这样可以克服人性的弱点,如贪婪、恐惧、侥幸心理,也可以克服认知偏差。

  2. 系统性:量化投资的系统性特征包括多层次的量化模型、多角度的观察及海量数据的观察等。多层次模型包括大类资产配置模型、行业选择模型、精选个股模型等。多角度观察主要包括对宏观周期、市场结构、估值、成长、盈利质量、市场情绪等多个角度分析。此外,海量数据的处理能力能够更好地在广大的资本市场捕捉到更多的投资机会,拓展更大的投资机会。

  3. 及时性:及时快速地跟踪市场变化,不断发现能够提供超额收益的新的统计模型,寻找新的交易机会。

  4. 准确性:准确客观评价交易机会,克服主观情绪偏差,从而盈利。

  5. 分散化:在控制风险的条件下,量化投资可以充当分散化投资的工具。表现为两个方面:一是量化投资不断地从历史中挖掘有望在未来重复的历史规律并且加以利用,这些历史规律都是 较大概率取胜的策略;二是依靠筛选出股票组合来取胜,而不是一只或几只股票取胜,从投资组合的理念来看也是捕捉大概率获胜的股票,而不是押宝到单个股票。

子版块

  • 1
  • 1
  • 1
  • 1
  • 9
  • 5
  • 4
  • 1
  • 1
  • 1







  • 0_1558330551804_TIM截图20190520133517.png

    点击进入课程地址 适用人群

    面向对数字货币程序化感兴趣的初学者,需要有一定的实盘交易和简单的计算机基础。

    课程概述
    数字货币交易市场由于其特殊性越来越受到量化交易者的关注,实际上程序化交易已经是数字货币的主流,对冲做市等策略无时无刻不在活跃着市场。而编程基础薄弱的初学者想要进入这一领域,面对众多的交易所和多变的API,困难重重。发明者(FMZ)量化平台(原BotV)是目前最大的数字货币量化社区和平台,4年多来帮助成千上万的初学者走向了量化交易之路。
    本课程由发明者量化平台官方提供,将涵盖以下内容:
    1.数字货币量化交易简介(已更新)
    2.JavaScript快速入门(已更新)
    3.发明者量化交易平台使用指南(已更新)
    4.发明者量化交易平台编程指南(已更新)
    5.量化交易策略范例详解(已更新)

    据说后面会更新python 的相关入门教程。课程很便宜,适合对量化不懂想有个概念的群体学习。

    如果要说自己拥有一套盈利的量化策略,还是要走很长的学习路。各位加油!

    讨论群:482548322

    阅读更多
  • 大多数自动加密货币交易算法,尤其是三角套利和跨市场套利等高频交易算法,对网络延迟很敏感,因为它们被许多人同时使用,降低延迟可以为您带来显着的竞争优势。本文为您提供了一系列策略。 在交易所附近使用电脑

    您无法使交易机器人的延迟低于网络延迟。因此,最好将您的交易机器人放在交易所的服务器附近,即所谓的主机托管服务器。

    对于仅使用一个API服务器的交换,您可以使用该ping命令检查往返时间(RTT),但如果交换使用Cloudflare,则这可能不起作用。最可靠的方法是简单地测试API请求的响应时间,以查看连接速度如下所示。

    import requests import time start = time.time() total_times = 10 for i in range(total_times): requests.get('https://api.coinut.com').json() end = time.time() print (end-start) / total_times

    有些交换机在世界各地的不同地方使用多个API服务器,那么机器人与API服务器之间的连接是延迟的一部分,而另一个延迟源可能来自交换机的API服务器与其核心服务器之间的连接处理订单匹配。对于这种情况,在机器人和API服务器之间测试RTT是不够的,您需要测试实际的订单执行时间以确定放置机器人的最佳位置。

    使用WebSocket而不是REST API

    许多交易所都提供。WebSocket的延迟要小得多,因为它在不同的请求之间共享相同的TCP连接,而在HTTP / 1.0上使用REST API需要为每个请求建立TCP连接。

    使用WebSocket的另一个原因是服务器可以主动将数据推送到交易机器人,这使得它非常有效地用于流更新,例如订单簿更新,余额变化或从交换机到机器人的最近交易。使用HTTP将要求交易机器人每次想要从服务器获得更新时发出请求。

    使用HTTP / 1.1

    如果必须使用REST而不是WebSocket,请使用HTTP / 1.1。它使得在不同请求中使用相同的TCP连接。

    如果您使用的是Python,可以使用requests以下两个示例中显示的包轻松实现切换到HTTP / 1.1 。

    第一个是使用HTTP / 1.0,其中每个请求构建一个新的TCP连接。

    import requests for i in range(10): r = requests.get('https://api.coinut.com').json() print r

    第二个是使用HTTP / 1.1,并且在多个请求之间共享相同的TCP连接。

    import requests s = requests.Session() for i in range(10): r = s.get('https://api.coinut.com').json() print r

    从下面的结果可以看出,第二个运行速度要快得多。

    使用更快的编程语言

    Python或nodejs便于编写交易算法。但是,它们是脚本语言,因此比计算密集型任务的Golang,Java或C / C ++等编译语言慢得多。如果您正在使用需要大量数值计算的复杂定价模型(例如蒙特卡罗模拟),您可以依靠使用C / C ++编写的库来编写脚本语言(如numpypython),或使用C / C ++编写计算密集型部分作为一个库,然后插入你的python / nodejs代码,或完全从python / nodejs切换到编译语言。

    使用python / nodejs的另一个缺点是利用多核CPU是不方便的,因为这两种语言的解释器只是单线程的。如果您的任务需要多线程,请避免在开始时使用脚本语言。

    阅读更多
  • 0_1543908730389_download-1.png

    有时,市场可能效率低下,如果我们将BTC转换为LTC,然后将LTC转换为USDT,最后买回BTC,我们可以获得比我们原来更多的BTC,即三角套利得基本逻辑(当然其他币种不限定,要根据观察找出不同时期得套利空间)

    三角套利是一种通过不承担风险或风险很小而获利的简单方法。为了检测三角套利机会,我们需要简单地计算三次转换的最终速率。

    在上面的例子中,我们简单地乘以BTC / LTC,LTC / USDT和USDT / BTC的转换率(这是BTC / USDT的倒数)。如果最终结果大于1,则意味着转换后我们将获得更多BTC。 对于油条平台coinut,您可以使用以下示例代码来检测此类机会。该策略还考虑了交易佣金费用。由于不同帐户的级别会有不同的费用(https://help.coinut.com/hc/en-us/articles/360001416133-Fee-schedule),你可以改变CRYPTO_FEE并FIAT_FEE根据您的帐户级别。此策略目前可行。

    点击注册平台
    点击注册平台
    点击注册平台

    import requests import sets from collections import defaultdict FIATS = ['USD', 'SGD', 'MYR', 'CAD'] # change the following fees based on your own account level. CRYPTO_FEE = 0.00095 FIAT_FEE = 0.0018 def get_fee(c1, c2): if c1 in FIATS or c2 in FIATS: return FIAT_FEE else: return CRYPTO_FEE s = requests.Session() # use HTTP/1.1 to share the same connection across requests to minimise latency insts = s.post('https://api.coinut.com/', '{"request": "inst_list", "sec_type": "SPOT", "nonce": 1234}').json()['SPOT'] while True: r = s.get('https://api.coinut.com/spot').json() curs = sets.Set() rates = defaultdict(dict) for a in r: inst = insts[a['asset']][0] base = inst['base'] quote = inst['quote'] curs.add(base) curs.add(quote) rates[base][quote] = float(a['highest_buy']) rates[quote][base] = 1.0/float(a['lowest_sell']) print "--------------------------- Triangular arbitrage opportunities -----------------------------------" for c1 in curs: for c2 in curs: if c1 == c2: continue for mid in curs: if c1 in rates and mid in rates and c2 in rates and mid in rates[c1] and c2 in rates[mid] and c1 in rates[c2]: pair1_rate = rates[c1][mid] * (1-get_fee(c1, mid)) pair2_rate = rates[mid][c2] * (1-get_fee(mid, c2)) pair3_rate = rates[c2][c1] * (1-get_fee(c2, c1)) total_rate = pair1_rate * pair2_rate * pair3_rate if total_rate > 1: print "%4s %4s %4s %15.8f %15.8f %15.8f %15.8f" % (c1, mid, c2, rates[c1][mid], rates[mid][c2], rates[c2][c1], total_rate) 运行上面的代码,我们确实找到了一些有效套利!代码仅限于COINUT平台

    0_1543908854934_image.png

    0_1543909003478_TIM截图20181204153618.jpg
    api :https://github.com/coinut/api/wiki

    阅读更多
  • 这篇文章将向你介绍量化交易系统的一些基本概念。本文主要面向两类读者,第一类是正在努力寻找一份量化交易员工作的求职者,第二类是期望尝试开启自己量化交易事业的个人投资者。

    首先你是否具有良好的数学基础和统计学基础,如果你自觉是个数学渣,奉劝还是别研究了。

    量化交易是数量金融学一个极其艰深复杂的领域。若要通过面试或构造你自己的交易策略,就需要你投入时间学习一些必备知识。

    量化交易系统包括四个主要部分:

    策略识别:搜索策略、挖掘优势、确定交易频率。

    回溯测试:获取数据、分析策略性能、剔除偏差。

    交割系统:连接经纪商、使交易自动化、使交易成本最小化。

    风险管理:最优资本配置、最优赌注或凯利准则、交易心理学。

    我们首先来谈谈如何识别一个交易策略。

    策略识别

    所有量化交易流程都肇始于一个初期研究。这个研究流程包括搜索一个策略、检验它是否适合你可能正在运作的策略组合、获取任何测试策略时所需数据、努力优化策略使其收益更高且(或)风险更低。如果你是一个“散户”交易员,一定要清楚自己的资金是否充足,以及交易成本对策略的影响。

    通过各种公开数据搜索可盈利的策略实际上十分简单,并没有大家想的那么难。研究学者会定期发表理论交易结果(虽然大多为交易成本总额)。一些数量金融学主题博文也会详细讨论策略。交易期刊还会简报一下基金管理公司使用的一些策略。

    你可能会问,个人与公司怎么可能愿谈他们的可盈利策略,特别是当他们知道,如果其他人“复制相同的策略”,长期而言它终将失效。

    原因就在于,他们通常不会透露具体的参数以及他们所使用的调参方法,而这些优化技能才是把一个表现平庸的策略调成一个回报丰厚的策略所需的关键技术。实际上,若要创建你自己的、独一无二的策略,一个最好的法子就是寻找相似的方法,尔后执行你自己的优化程序。

    你所看到的很多策略都可归入均值回归交易策略、趋势跟随或动量交易策略两类。

    均值回归策略试图利用这么一个事实:“价格序列”(如两个关联资产的价差)存在一个长期均值,价格对均值的短期偏离终将回归。

    动量交易策略则试图“搭上市场趋势的顺风车”,利用投资心理和大基金结构信息在一个方向积聚动量,跟随趋势直至回归。

    定量交易还有一个重要方面,即交易策略的频率。低频交易(Low Frequency Trading, LFT)通常指持有资产超过一个交易日的策略。相应地,高频交易(High Frequency Trading, HFT)通常指持有资产一个交易日的策略。

    超高频交易(Ultra-High Frequency Trading, UHFT)指持有资产的时常达秒级与毫秒级的策略。虽然散户可以进行HFT与UHFT交易,但也只是在你掌握了交易“技术栈”与订单簿动力学的详细知识后才有可能。本篇入门文章,我们不会对这些问题做任何深入探讨。

    策略或策略集合一旦确定,现在就需要在历史数据上测试其盈利能力,这就进入了回溯测试的工作范围。

    回溯测试

    回溯测试的目标是提供证据,佐以证明通过以上流程所确定的策略,无论是应用于历史(训练)数据还是测试数据均可盈利。它可以反映该策略未来在“真实世界”中的预期表现。

    由于种种原因,回溯测试不能保证一定成功。这或许就是量化交易最为微妙之处,由于它包含了大量的偏差,我们必须尽尽力仔细审查并剔除它们。

    我们将讨论几种常见类型的偏差,包括先窥偏差、幸存者偏差与优化偏差(亦称“数据窥视偏差”)。回溯测试中其他几个重要方面,包括历史数据的可用性与清洁度、真实交易成本及可靠回测平台上的决定。我们会在后续“交割系统”一节深入讨论交易成本。

    策略一旦确定,我们就需要获取历史数据,并藉此展开测试,如有可能还可改进策略。现在卖数据的很多,所有资产类型的数据都有。通常,数据的质量、深度、时间间隔不同,其价格也不同。

    刚入门的量化交易员(至少零售等级)最初使用雅虎金融板块(Yahoo Finance)的免费数据就行。对于数据供应商,这里不再赘言。我想重点谈一谈处理历史数据时,时常遇到的问题。

    对于历史数据,人们主要关心的问题,包括数据精度或清洁度、幸存者偏差、应对如分发红利、拆分股票等公司行为的调整。

    精度与数据整体质量有关,无论数据是否包含错误。有时错误容易识别,比如使用一个窄带滤波器,就可以找出时间序列数据中的“窄带”并更正它们。其他时候,错误又很难甄别,经常需要根据多个数据供应商提供的数据进行对比检查。

    幸存者偏差通常是免费数据集或廉价数据集的一个”特征“。对于一个带有幸存者偏差的数据集,它不包含已经不再交易的资产数据。不再交易的证券,则表示已经退市或破产公司的股票。如果数据集中含有此类偏差,策略在此数据集上的测试表现可能比在”真实世界“里表现的更好,毕竟历史”赢家“已经被预先筛选出来,作为训练数据使用。

    公司行为即公司开展的常引发原始价格阶梯形变化的”逻辑“活动,它不应该计入价格收益。公司分发红利和拆分股票行为是引发调整的两个常见行为,二者无论发生哪一种,都需要进行一个”回调“的流程。我们一定要留心,不要把股票拆分和真实收益调整混为一谈。许多交易员在处理公司行为时都碰过壁!

    为了开展回溯测试,我们必须使用一个软件平台。你可以选择一个专门的回测软件如MultiCharts,一个数值平台如Excel或MATLAB,或者一个用Python或C++完全自主实现的平台。对于MultiCharts(或类似平台),个人是比较推荐,对于编程的要求比较低。

    在做系统回测时,一定要量化表示系统性能。定量策略的“业界标准”度量为最大资金回挫与夏普比率。最大资金回挫表示一段时间(通常一年)内账户资金曲线从波峰至波谷的最大跌幅,常使用百分比表示。

    由于大量的统计因素,LFT策略比HFT策略的资金回挫更高。历史回测会显示过去的最大资金回挫,它能够较为贴切地反映策略的未来资金回挫情况。第二个度量指标是夏普比率,它被启发式地定义为“超额收益均值与超额收益标准差的比值”。

    这里,超额收益表示策略收益超出某个预定基准,如标普500或三月期短期国债(收益)的额度。注意人们通常不使用年化收益指标,因为它忽略了策略波动性的影响,而夏普比率却考虑到了这一点。

    风险管理

    量化交易迷宫的最后一块是风险管理程序。风险包含我们之前谈论的所有偏差。它包括技术风险,比如所有在交易所的服务器突然发生硬盘故障。它还包括经纪风险,如经纪商破产(此说并非危言耸听,最近引发恐慌的明富环球就是一个例子)。

    总而言之,它覆盖了几乎所有可能干扰到交易实现的因素,而其来源各不相同。目前已经有成套的书籍介绍量化交易策略的风险管理,本人也就不再对所有可能的风险来源做详细说明。

    风险管理还包括投资组合理论的一个分支,即所谓的“最优资本配置”,涉及到如何将资本分配给一组策略、如何将资本分配给策略内不同交易的方法。这是一个复杂的领域,依赖于一些高级数学知识。

    最优资本配置与投资策略杠杆通过一个名为凯利准则的业界标准建立联系。本文是一篇入门文章,我在此不详谈其计算。凯利准则对策略收益的统计性质做过一些假设,但是它们在金融市场中并不一定成立,交易员因此在实现时通常会有所保留。

    风险管理的另外一个关键成分涉及到交易员自身心理因素的处理。尽管大家都承认,算法交易若无人为干涉,不太容易出现问题。交易员在交易时,稍不留神仍然可能会掺入许多认知偏差。

    一个常见的偏差是厌恶规避,当人发现损失已成定局,其所带来的痛苦,可能会麻痹人的行为,不能做到及时抛盘止损。类似地,由于太过忧心已经到手的收益可能赔掉,人们可能也会过早抛盘收利。

    另外一个常见的偏差是所谓的近期偏好偏差:交易员太看重近期事件而非长远地看问题。此外,当然不能落下“恐惧与贪婪”这对经典的情绪偏差。这两种偏差常导致杠杆不足或杠杆过度,造成爆仓(账户资产净值近乎为零或更糟)或盈利缩水的局面。

    总结

    由此观之,量化交易是数量金融学中一个虽趣味十足但极其复杂的领域。文中三言两句带过的问题,已经有大量的相关书籍和论文出版。

    因此,在你申请量化基金交易职位前,务必要进行大量的基础调研,至少应当具有统计学和计量经济学的广泛背景,以及使用MultiCharts、MATLAB、Python或者R程序语言实现的丰富经验。如果应对的是更加复杂的高频端策略,你的技能组合可能还要包含Linux内核修改、C/C++、汇编编程和网络延迟优化。

    阅读更多