问题一:想法混乱
在投资前没有想清楚许多简单又基础的问题。比如:为什么买卖?买什么标的?什么时候买入、卖出?出现风险怎么办?
问题二:行为失控
人本是浮躁的,没有人能保证投资理念在实际投资时会不会变形。所以,许多看似清醒的投资者也败在了情绪带来的冲动交易中。
问题三:无法归因
即使赚到钱的投资者,也有相当一部分人是迷迷糊糊的。他们搞不清楚自己为啥就突然赚到钱了,无法归因。
就算有些人刻意思考了这些问题,也无法准确有逻辑地找出其中的关键。
投资亏损的原因
根本原因:决策指标模糊不清。这会导致:
1)标的选取模糊;
2)择时飘忽不定;
3)风控意识薄弱。
而量化投资的优势在于能根据多个指标,由计算机代替人工来严格精准地从标的、择时、风控等角度控制投资决策。
量化投资的能力基础
要驾驭量化投资,需要具备的能力包括:
1)金融基础:是我们主观投资判断的基础;
2)Python 基础语法:是编写、执行量化策略的工具;
3)构建、优化、验证量化策略的能力。
而数学建模则是后续所有课程的基础。
数学建模
数学建模的概念
数学建模是指对特定的客观对象建立数学模型的过程,是现实的现象通过心智活动构造出能抓住其重要且有用的特征的表示,常常是形象化的或符号的表示,是构造刻画客观事物原型的数学模型并用以分析、研究和解决实际问题的一种科学方法。
看起来很复杂,其实根本就一句话:用数学的方法解决现实的问题。
数学建模的步骤
简单来讲,数学建模是将与问题相关的变量、因素找出来,再用数学方法建立对应关系,最后检验模型效果,并解决现实问题的过程。
严谨地说,专业的数学建模一般分为以下流程:
专业的数学建模可以单独作为一门学科,而不只是一个知识点来展开学习。
根据量化投资的特点,可以对专业数学建模的流程做简化,方便快速上手。简化后的数学建模一共可以分为三大步骤,四小板块,参考下图:
第一步:构建模型
构建模型分为两个板块,模型准备以及模型建立。
在模型准备阶段:我们需要了解策略的实际背景,及背后的实际意义,并拆解为相关指标。
假设,把构建数学模型比作制造一个机器,那模型准备就相当于准备所需的材料(准备相关指标)。
在模型建立阶段:我们需要在模型准备的基础上,用数学的方法来构建各指标之间的关系,建立相应数学结构。
还是制造机器的例子。这一步,相当于我们把所准备的材料组装成机器(构建指标关系)。
第二步:模型检验
在这一步,我们需要利用已有数据资料,及现实情境检验模型效果。如果模型效果不符合预期,就回到第一步继续优化模型,直至符合预期。
此时,模型检验就相当于试运行机器,看看是否能得到我们想要的结果,需不需要对它进行修复优化。
第三步:模型应用
这一步很简单,就是将模型投入实际使用。相当于我们正式使用机器,并广泛应用它。
综合来看,数学建模一共包括三步:
1)构建模型:先做模型准备、再做模型建立,完成模型雏形;
2)模型检验:检验模型效果,并优化到符合预期要求;
3)模型应用:将模型投入现实中应用。
数学建模构建量化策略
以学过的单均线策略为例,看看数学建模是怎么构建量化策略。
第一步:构建模型中的模型准备。 先复习一下单均线策略:通过均线简单判断股票价格趋势,来买入、卖出的一种策略。
根据策略描述,对不同交易日来说,我们可以判断这里涉及的指标只有:15 日均价。
接着是模型建立。在这里,我们需要用数学的方法来构建各指标之间的关系,并与决策行为相结合。
根据单均线策略的主观理念,它的结果可以表达为:
1)前天的15日均价 > 昨天的15日均价 且 昨天的15日均价 < 当日的15日均价时,买入;
2)前天的15日均价 < 昨天的15日均价 且 昨天的15日均价 > 当日的15日均价时,卖出。
第二步:模型检验。在 ForTrader 中,我们是用回测及模拟盘来验证策略模型效果的。根据回测及模拟盘的结果,我们再对策略进行优化修正,直至策略表现良好。
第三步:模型应用。对应到 ForTrader 中,这步就是应用策略来做实盘投资,帮助你获利。在量化策略实际应用后,我们也可以跟进实际投资结果,来继续调试并优化它,以达到更好的投资效益。
以上,我们就在量化投资中应用了一次数学建模。
案例拆解:一阳穿三线
网络上有这么一种说法:当一只股票的 K 线图出现了“一阳穿三线”的现象,那它就是要上涨了,投资者要立即买入持有待涨。
模型准备:策略背景描述
一阳穿三线通常指:当标的(一只股票)的股价经过长期下跌和充分整理之后,突然一根放量阳线向上同时突破 5 天均价线、10 天均价线、30 天均价线的情况。
所谓放量,就是当日成交量急剧放大,且大于过去一段时间的成交量均值。
通常,“一阳穿三线”要求实体部分的顶端高于所有均线,下影线底端低于所有均线。
简单总结一下,“一阳穿三线”策略就是:当标的存在一根放量阳线向上同时突破 5 天、10 天、30 天均线时,立即买入并持有待涨。
方法小灶:金字塔原理
金字塔原理是指从抽象简单的内容,逐级向下按某种逻辑关系拆解具象内容的一种思维方式。
在生活中,金字塔原理能帮助我们有效地分析问题,表达观点,帮助我们把那些“复杂的话”说清楚。
在量化投资中,它将帮助我们把主观投资策略,以量“话”的形式,精准表达为指标及指标关系。
简化版使用原则:
1)主观先行:从主观的策略描述出发;
2)以上统下:从主观的策略描述出发,逐层向下对指标进行拆分;
3)不重不漏:每一层拆解的内容不要有重复,也不要有遗漏。
模型准备:指标拆解
这一步的工作是把视觉上的阳线、均线等表达为准确的指标。
一阳穿三线中,涉及对象包括:一条放量阳线、三条均线。
而一条放量阳线可从阳线、放量两个角度对指标做拆分。
而三条均线分别是5 日均价线、10 日均价线、30 日均价线。
继续往下拆解,阳线涉及的指标包括当日开盘价、当日收盘价、当日最高价、当日最低价,放量涉及的指标包括:成交量。
根据均价线的计算逻辑,这些均价线背后涉及的指标分别为:近 5 日均价、近 10 日均价、近 30 日均价。
最终,“一阳穿三线”指标拆解结果如下所示:
构建模型:模型建立
这一步,我们要用数学的方法来构建各指标间的关系,并将它与决策行为相联系。
为了方便写策略代码,推荐按 ForTrader 的策略编写框架的顺序(标的、择时、风控),作为金字塔第二层的三个板块:
标的需要满足的条件一共有三个。
条件一:标的能生成阳线。
根据阳线的定义,能生成阳线就代表着:当日收盘价
大于当日开盘价
。
用数学语言表达就是:当日收盘价 > 当日开盘价
。
条件二:标的阳线是放量的。
综合来看,当日成交量
大于2 倍过去 15 日的成交量均值
,就算满足了条件。
用数学语言表达就是:当日成交量 > 过去 15 日成交量均值 x 2
。
条件三:标的阳线要穿过三条均线。
当阳线“穿”过三条均线(5 天、10 天、30 天均价线)时:
1)近 5 日均价
小于当日收盘价
、并大于当日最低价
;
2)近 10 日均价
小于当日收盘价
、并大于当日最低价
;
3)近 30 日均价
小于当日收盘价
、并大于当日最低价
。
所以,条件三用数学关系表达出来就是:
1)当日最低价 < 近 5 日均价 < 当日收盘价
;
2)当日最低价 < 近 10 日均价 <当日收盘价
;
3)当日最低价 < 近 30 日均价 <当日收盘价
。
在择时部分,
0
此外,风控部分,“一阳穿三线”无对应描述,所以也暂无内容。所以最终整理出来的数学关系如下:
ForTrader语法小灶
获取标的数据
获取标的数据,我们一般要先从 context 对象中调用 data,然后再调用 data 对象中的数据来实现。
这过程就像从一个大箱子(context 对象)中,拿出一个小箱子(data 对象)中的物件(数据)。
以收盘价为例,调用 data 对象中的 close,我们就能获取标的收盘价数据。它会以浮点数的形式被返回。 语法如下:
其中 data.close[]
代表在 data 中获取收盘价数据。
而中括号里的索引值-n,代表获取前 n 天的数据。 比如说:
1)获取今天的 k 线收盘价,则写成 data.close[0];
2)获取前 1 天的收盘价,则写为 data.close[-1];
3)获取前 2 天的收盘价,则写为 data.close[-2]。
类似的语法有很多,要用的时候可以查看下表:
而标的代码
,我们可以通过调用data 对象
中的_name
来获得。
context.log('标的代码是' + context.data._name)
计算均值数据
在前面的课程中,我们曾用过 SMA() 类来计算均价线,语法如下:
SMA(数据=data.close, period)
它包含两个参数:
1)参数 1:代表用于计算的标的数据,默认为收盘价;
2)参数 2:代表计算的周期。
案例小结
在数学建模时,我们首先需要对策略的背景描述做充分了解,拆解出所有相关的指标。
然后,我们再根据 ForTrader 的策略编写框架的顺序(标的、择时、风控),对各指标间的数学关系分析拆解,完成模型的构建。
将模型用代码表达出来后。我们用 ForTrader 中的1回测、模拟盘对其进行检验优化。
直到策略代码表现良好,再投入实盘投资。
思维导图