不想错过精彩课程?一键“订阅”,轻松学习!
大家好,欢迎来到金十交易学院《智能量化交易》课程。
摘要:上篇内容我们学习了可视化编程语言的简介和特点、“hello world”例子,以及在发明者量化交易工具中策略编写等方面,为大家讲解实现交易策略的前提部分。本篇我们继续接上篇,从常用的策略模块和技术指标开始,再到策略逻辑,一步一步帮助大家实现一个完整的日内交易策略。
一、策略模块
1、阶段涨幅
阶段涨幅就是计算当根K线收盘价与前N个周期收盘价的差值的百分比。比如:计算最近10根K线阶段涨幅是多少,用代码可以写成:
以上代码可以发现,计算机执行的方式是需要一个完整的逻辑循环,比如要计算最近10根K线阶段涨幅,如上图为甲醇品种的案例,则需要拆分为以下几个步骤:
A. 设置合约代码,计算机要明确你交易的是什么品种什么产品,比如上图案例为甲醇,那么设置合约代码为:“MA888”。
B. 设置完合约代码,就可以获取该合约的K线数据了。获取甲醇主力连续数据,计算机要明确获取数据的地方和具体数值。上图中为交易所中获取数据,并且这些数据赋予到策略的K线中。
C. 有了K线数据,就可以从这些K线数据中,获取任何一根K线的详细数据,要统计阶段涨幅,必须知道收盘价,所以计算机需要独立的调取收盘价,因此需要获取上根K线收盘价这一步骤。
D. 但因为K线每天都不一样,所以必须要让统计有自动性,要统计阶段涨幅,就必须先获取2根K线收盘价,比如:上根K线收盘价和前面第11根K线的收盘价。
E. 最后再根据这2根K线收盘价,计算出阶段涨幅比率。才能最终显示10日的阶段涨幅数据。
以下每一个策略都有这样的逻辑循环和条件属性规定的特征,看懂了这个逻辑,可视化编程也就会变得容易的多。可见计算机其实需要我们有拆分的思维。10日阶段涨幅这个策略我们一句话表达清楚,但是对计算机表达这句话的时候,就需要考虑各种条件。
2、放量上攻
放量上攻可以理解为价格上扬,成交量剧增。比如:如果当根K线的收盘价是前第10根K线的收盘价的1.5倍,即10天内涨了50%;成交量超过最近10根K线平均值的5倍。用代码可以写成:
3、跳空缺口
跳空缺口就是两条K线的最高低价出现不衔接的情况,由两条K线组成,跳空缺口是日后支撑和压力点的参考价位。当一个跳空缺口出现时,可以假设一个沿着原来跳空方向上的趋势的加速已经开始了。用代码可以这样写:
二、常用技术指标
1、EMA平均线
站在统计学的角度看,均线就是每天价格的算术平均,它是一条带有趋势性的价格轨迹。均线系统是大多分析者常用的技术工具,从技术角度看是影响技术分析者心理价位因素的,思维买卖的决策因素,是技术分析者的良好的参考工具,发明者量化工具支持多种不同类型的均线,如下图:
2、MACD指标
MACD指标是运用快速(短期)和慢速(长期)移动平均线及其聚合与分离的征兆,加以双重平滑运算。而根据移动平均线原理发展出来的MACD,一则去除了移动平均线频繁发出假信号的缺陷,二则保留了移动平均线的效果,因此,MACD指标具有均线趋势性、稳重性、安定性等特点,是用来研判买卖股票的时机,预测股票价格涨跌的技术分析指标 。其计算方法如下:
3、KDJ指标
KDJ指标综合了动量观念、强弱指标及移动平均线的优点,用来度量股价脱离价格正常范围的变异程度。考虑的不仅是收盘价,而且有近期的最高价和最低价,这避免了仅考虑收盘价而忽视真正波动幅度的弱点。其计算方法如下:
三、策略编写
沃伦 · 巴菲特的导师本杰明 · 格雷厄姆曾经在《聪明的投资者》一书中,曾经提到过一种股票债券动态平衡的交易模式。
这种交易模式非常简单:把手中 50% 的资金投资于股票基金,剩下 50% 投资于债券基金。即股票和债券两者各占一半。
根据固定间隔时间或市场变化进行一次资产再平衡,使股票资产和债券资产的比例恢复到初始的1:1。这就是整个策略的全部逻辑,包含了什么时候买卖,以及买卖多少。够简单吧!
在这个方法中,债券基金的波动率其实很小,远远低于股票波动率,所以债券在这里被当做『 参照锚 』,也就是说,用债券来衡量股票究竟是涨得太多了,还是涨得太少了。
如果,股票价格上涨,会使得股票的市值大于债券的市值,当两者市值比率超过设定的阈值时,则对总仓位进行重新调整,卖出股票,并且买入债券,使股债市值比例恢复至初始的1:1。
反之,股票价格下跌,会使得股票的市值小于债券的市值,当两者市值比率超过设定的阈值时,则对总仓位进行重新调整,买入股票,并且卖出债券,使股债市值比例恢复至初始的1:1。
就这样,在动态平衡股票和债券之间的比例,就够享受到股票成长的果实,并且减少了资产波动率。作为价值投资的先驱,格雷厄姆为我们提供了一个很好的思路。
四、策略逻辑
按照当前的BTC的价值,账户余额保留¥5000现金和0.1个 BTC,即现金和BTC市值的初始比例是1:1。
如果BTC的价格上涨至¥6000,即BTC市值大于账户余额,并且其之间的差超过设定的阈值,就卖掉(6000-5000)/6000/2个币。说明BTC升值了,把钱兑换回来。
如果BTC的价格下跌至¥4000,即BTC市值小于账户余额,并且其之间的差超过设定的阈值,就买入(5000-4000)/4000/2个币。说明BTC贬值了,把BTC买回来。
就这样,不管BTC是升值还是贬值,始终动态保持账户余额和BTC的市值相等。如果BTC贬值了就买一些,等再涨回来,就再卖一些,就好像天平一样。
l 买入条件:如果当前持仓市值减去当前可用余额小于负当前可用余额5%,就开仓买入。
l 卖出条件:如果当前持仓市值减去当前可用余额大于当前可用余额的5%,就平仓卖出。
前提必要条件:
l 当前行情
l 当前资产
l 币总市值
l 资产差
五、策略构建
l 可视化编写策略第1步
我们把交易策略的4个前提必要条件加以计算,并分别赋值给各自变量。以可视化编程,代码块是这样的。如下图:
需要注意的是,币总市值也就是当前持仓币数的总市值,其计算方法就是,当前持仓总币数乘以当前的最新价格。资产差也就是币总市值减去当前的可用余额。
l 可视化编写策略第2步
前提必要条件赋值完成后,就需要写交易逻辑了。这个也没有想象中那么复杂。无非就是把上述的策略逻辑,用代码块的形式表现出来。
即如果资产差小于负可用余额的5%就买入,如果资产差大于可用余额的5%就卖出。如下图:
整个策略似乎已经写完,但是要知道,程序是从上到下执行的,执行完之后就停止了。但是我们的交易策略并不是把交易条件执行一次就行,而是循环往复的重复执行。
也就是说,程序需要不断的检查策略条件是否已经达成,如果是就执行买卖,否则就一直检查下去。这个时候就需要用到另一个循环语句,如下图:
六、策略回测
可视化策略跟其他编程语言写的策略没什么本质区别,同样支持多种周期、做种精度的历史数据测试,当然也支持国内外商品期货和数字货币实盘交易。以下是该策略的回测信息:
至此,一个完整的交易策略才算完成。为了照顾伸手党,本篇策略已经分享到策略广场中,可以直接复制研究。
下节预告:从量化交易的专业性来说,无论是麦语言还是可视化语言,都只是进入量化交易世界的过渡语言。它们的语言特点,也就决定了在量化交易策略开发中的局限性,一些复杂的策略不太可能实现出来。所以下节我们将带你学习JavaScript,它是一门正式的高级编程语言,也是你进阶高级量化交易的必经之路。
课后习题:
1、试着用可视化语言实现布林带指标。
2、试着用本节的交易模块,完成一个交易策略。
最后给大家一个温馨小提示:在课程和直播页面,点击“订阅”按钮,就可以及时接收提醒,不错过课程和直播的精彩内容!
金十交易学院,8点准时更新