=========================================== QFF |version| documentation! =========================================== .. image:: https://img.shields.io/pypi/v/qff :target: https://pypi.python.org/pypi/qff :alt: PyPI Version .. image:: https://img.shields.io/pypi/dm/qff?label=pypi%20downloads :target: https://pypi.python.org/pypi/qff :alt: PyPI - Downloads .. image:: https://img.shields.io/docker/v/haijiangxu/qff :target: https://hub.docker.com/r/haijiangxu/qff :alt: Docker Image Version (latest by date) .. image:: https://readthedocs.org/projects/qff/badge/?version=latest :target: https://qff.readthedocs.io/en/latest/?badge=latest :alt: Documentation Status QFF是基于Python语言开发的一个量化金融框架库,提供数据获取-数据存储-策略编写-策略分析-策略回测-模拟交易等一站式解决方案。 .. note:: 请访问 `Github`_ 网站获取QFF源代码,如果有任何问题请访问 `Github Issues`_ 查询或提交,或加入QQ群 775477625 参与讨论。 .. _Github: https://github.com/haijiangxu/qff .. _Github Issues: https://github.com/haijiangxu/qff/issues 背景 =========================== 在金融最为发达的美国,量化交易已大行其道,占据了70%以上的股市成交量。其中最为著名的量化私募 :code:`大奖章基金`, 平均年收益率高达35%,远超同时代的股神巴菲特。 国内量化投资目前阶段相当于海外几年前的状态。2010年4月16日,中国第一个股指期货沪深300股指期货挂牌上市,量化人有了对冲工具之后, 量化对冲策略得以实现,2010年也被视为是中国量化元年。近几年,国内量化私募快速发展,根据中基协数据统计,2022年7月国内百亿量化 私募已达34家,数量创下历史新高,可以说量化交易逐渐成为发展的趋势。 什么是量化 ============================ 简单来说,量化就是利用计算机技术,并采用一定的数学模型、现代统计学原理或者人工智能等方法,去实现投资理念,进行证券投资的过程。 传统的股票投资和量化投资就类似中医和西医,中医讲究经验积累和定性分析,一位优秀的股票投资者来说,需花费大量的时间及试错的成本, 才能积累丰富的投资经验,成功建立稳定的交易系统。西医就不同了,依托于医学仪器,对病人进行化验、拍片,得出结论对症下药。量化投资 就像西医一样,对投资策略模型先用整个市场进行一次全面的扫描和检验,再根据检验结果反复优化,并指导我们做出正确的投资决策。 量化的价值 ============================ | **1. 可以利用大量历史数据检验策略,效率提升百倍。** 当我们想验证交易策略的时候,一个基本的想法是想知道它在历史上表现如何,这往往需要大量的历史数据与计算量,量化交易做一次回测可能几分钟就可以得到结果了,相比于传统人工做法效率的提升是成百倍的。 | **2. 更科学更客观的衡量交易策略的效果。** 比如一个关于某技术指标的策略,人工的进行了10个交易日的验证,效果都不错,但这就能说明这指标不错吗?不,10次太少了,你需要更多的验证,比如1000个交易日,人工验证不可行,量化交易则又快又准。而且量化交易还可以利用数学与统计学自动给出客观的结果,比如年化收益率、最大回撤率、夏普比率等。 | **3. 全市场实时捕捉交易机会。** 当你知道一个盈利条件,当股价一旦满足这条件,你就可以操作盈利。问题是,市场几千个股票,股价时时刻刻都在变动,你能盯住几个,你会错失多少个机会。但量化交易可以利用计算机全市场实时盯盘,可以不错过任何交易机会,加倍你的盈利能力。 | **4. 更多的盈利机会。** 量化交易可以利用计算机对海量数据分析得到常人难以发现的盈利机会,而且有些机会只有量化交易才能利用。比如你发现一种交易方法,其特点是盈亏的额度相等,但盈利的概率是55%,亏损概率45%。首先这种小差距的概率规律,非量化交易不能发现,其次,要利用这个规律盈利需要大量次数的交易才能稳定盈利,这也非量化交易不可。 | **5. 有助于抵御情绪对投资的影响。** 情绪是投资的一大天敌,量化可以很大程度剔除冲动或优柔寡断情绪的干扰,客观理性的通过数据进行分析,指导你果断的进行交易。 量化的步骤 ============================ | **1. 从一个灵感开始** 灵感就是指那些你想验证的可能会盈利的方法,比如净利润增长率可能是良好的指标、一旦跨过20日均线后股价会继续涨等等。 灵感获取的方式可以是阅读、听人说、自己悟等等。 这里我们以一个简单的情况为例进行讲解。比如你的灵感是这样的: .. code-block:: 如果股价显著低于近几日的平均价,则买入 如果股价显著高于近几日的平均价,则卖出 现在,你想知道这样操作究竟会不会赚钱? | **2. 把灵感细化成明确的可执行的交易策略** 一般灵感都很模糊,需要将其细化成明确的可执行的策略,目的是为了能得到确定的结果,以及为后续程序化准备。需要明确什么条件下买卖,买卖什么品种,买卖多少量等,从而形成一个明确的交易策略,让不同人根据你的描述在相同情形下都能做出相同的操作。 继续以之前那个关于平均价的灵感为例。 显然它是不够明确的。比如多低叫显著低于?多高叫显著高于?近几日究竟是几日?买入卖出是买卖多少?我们把它细化: .. code-block:: 每个交易日监测是除st股外的国内A股的所有股票的股价 如果股价低于近20日平均价10%,则用全部可用资金买入该股票 如果股价高于近20日平均价10%,则卖出全部所持有的该股票 现在我们基本已经把之前的灵感细化成明确的可执行的交易策略。当然,可能还有些地方不够明确,也可能有些细节还不确定要改动,这些可以随时想到随时再改,不必一次做到完美。 | **3. 把策略转成程序** 就是把明确后的策略通过编程转成程序,好让计算机能根据历史数据模拟执行该策略,以及能根据实际行情进行反应并模拟交易或真实交易。 简言之,就是把刚刚的策略翻译成计算机可识别的代码语言, 写成类似这样的代码(下面的代码并不完全符合,只是展示下大概的样子): .. code-block:: python3 :linenos: def initialize(): g.security = ['002043.XSHE','002582.XSHE'] def handle_data(): for i in g.security: data = get_current_data(i) last_price = data.close average_price = data.mavg(20, 'close') cash = context.portfolio.cash if last_price > average_price: order_value(i, cash) elif last_price < average_price: order_target(i, 0) 这样一来,就把刚才细化好策略转成了代码程序,计算机就能运行了。这个过程你可以理解成用计算机能听懂的语言(代码),把你的策略告诉给计算机了。 | **4. 检验策略效果** 现在计算机理解了你的策略,你现在可以借助计算机的力量来验证你的策略了。基本的检验策略方法有回测和模拟交易两种方法。 | **4.1 回测** 回测是让计算机能根据一段时间的历史数据模拟执行该策略,根据结果评价并改进策略。继续之前的那个均价的策略例子的话就是这样的: 设定初始的虚拟资产比如500000元、一个时期比如20060101到20160101,把这一时期的各种数据如估计股价行情等发给计算机,计算机会利用这些数据模仿真实的市场,执行你刚才告诉它的策略程序。最后计算机会给你一份报告,根据这个报告你就会知道,在20060101的500000元,按照你的策略交易到20160101,会怎样?一般包括盈亏情况,下单情况,持仓变化,以及一些统计指标等,从而你能据此评估交易策略的好坏。 如果结果不好,则需要分析原因并改进。如果结果不错,则可以考虑用模拟交易进一步验证。 | **4.2 模拟交易** 模拟交易是让计算机能根据实际行情模拟执行该策略一段时间,根据结果评价并改进策略。与回测不同,回测是用历史数据模拟,模拟交易使用实际的实时行情来模拟执行策略的。举例就是这样: 设定初始的虚拟资产比如500000元,选择开始执行模拟交易的时间点,比如明天。那么从明天开始,股市开始交易,真实的行情数据就会实时地发送到计算机,计算机会利用真实的数据模仿真实的市场,执行你的策略程序。同时,你会得到一份实时更新的报告。这报告类似于回测得到的报告,不同的是会根据实际行情变化更新。同样你能据此评估交易策略的好坏。 可见,回测是用历史数据模拟执行策略,模拟交易是用未来的实际行情模拟执行策略。如果策略在回测与模拟交易的表现都非常好,你可以考虑进行完全真实的真金白银的实盘交易。 | **5. 进行实盘交易并不断维护修正** 实盘交易就是让计算机能自动根据实际行情,用真金白银自动执行策略,进行下单交易。注意,这时不再是用虚拟资产模拟交易,亏损和盈利都是真钱。实盘交易一般也会给出一份类似模拟交易的会不断更新的报告,从而不断要观察策略的实盘表现并及时调整与改进策略,使之持续平稳盈利。 做量化交易需要什么 ============================ * **要有证券市场各种数据。** 要有能方便使用的各种投资相关的数据。这要考虑到各种数据的收集、存储、清洗、更新,以及数据取用时的便捷、速度、稳定。 * **要有一套量化交易的系统。** 要有能编写策略、执行策略、评测策略的系统。这要考虑到系统对各种策略编写的支持、系统进行回测与模拟的高仿真、系统执行策略的高速、系统评测策略的科学可靠全方面。 * **要能基本掌握Python编程。** Python语言简单易懂,适合非计算机专业人员学习,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。Python提供非常完善的基础代码库,许多功能不必从零编写,直接使用现成的即可。 .. note:: QFF框架提供了一整套用于量化交易所需要的数据和系统,使您量化交易的成本极大降低。 以下是Python语言的学习资源: 1. `python官方教程中文版`_ 2. `廖雪峰的Python新手教程`_ 3. `【视频】Python入门 | 慕课网`_ 4. `菜鸟教程`_ .. _python官方教程中文版: http://www.pythondoc.com/ .. _廖雪峰的Python新手教程: https://www.liaoxuefeng.com/wiki/1016959663602400 .. _【视频】Python入门 | 慕课网: https://www.imooc.com/learn/177 .. _菜鸟教程: http://www.runoob.com/python/python-tutorial.html .. toctree:: :maxdepth: 2 :glob: :hidden: :caption: 基础 intro/introduction intro/installation intro/qffdocker intro/getstarted .. toctree:: :maxdepth: 2 :glob: :hidden: :caption: 用户指南 guide/writing guide/running guide/evaluation guide/trader guide/example guide/datadict .. toctree:: :maxdepth: 2 :glob: :hidden: :caption: API api/frame_api api/data_api .. toctree:: :maxdepth: 2 :glob: :hidden: :caption: 开发 tasklist CHANGELOG