今天给大家介绍如何通过EXCEL和一个简单的公式实现量化交易。我先说一下,采用EXCEL是为了带领大家以最低门槛体验量化交易的过程,后续咱们的公众号还会继续教大家一步一步用更专业的方式进入量化交易世界。
这里采用创业板ETF(159915)作为案例,数据从akshare获取。代码我贴到下面,不会用python的同学可以忽略,公众号回复“EXCEL”我会把带数据和公式的excel文件全都发给你。数据文件里包含了date(日期)、code(基金代码)、open(开盘价)、high(最高价)、low(最低价)、close(收盘价)、volume(成交量)、amount(成交额)和指标计算公式、策略净值等。
import akshare as aketf_data = ak.fund_etf_hist_em( symbol="159915", start_date="20111209", end_date="20250930", period="daily")etf_data.to_csv('159915_ETF.csv', index=False, encoding='utf-8')
这里用趋势交易策略作为例子。所谓“趋势交易”其实就是“追涨杀跌”,进一步说就是“涨多了就买,不涨了或者跌多了就卖”。平时可能听到这个词的时候,都是作为贬义词来对待,那么趋势交易是否真的有效呢?通过下面的案例,大家就可以看出来了。
用什么指标来判断过去的趋势呢?这里我们用一个最简单的收益率因子来评价过去的趋势或者说“动量”,公式如下:
上面计算的是当天的收盘价相比21天前涨跌幅度。这个策略可以总结为:
1. 如果收益率>0,买入;
2. 如果收益率≤0,卖出。
第一步就是计算因子的值,我们在EXCEL数据的"动量"这一列第22行写入公式:
这个公式就是计算当日收盘价相比21日前收盘价的涨/跌幅度,乘上100表示用百分比计数。
在“信号”这一列的第22行写上“FALSE”作为初始信号。在第23行写上表达式:
这个表达式意思是:如果当天收益率>0,那么结果为“TRUE”(买入或持有,等同于数值1),反之为“FALSE”(卖出或空仓,等同为数值0)。后面策略净值便是通过这个信号来计算的。
在“策略净值”这一列的第21行写入“1”作为初始值,表示净值从1开始。然后在第22行写入:
=K21+(F22-F21)/F21*K21*J21
这个公式表示前一日(K21)的净值+相比前一日的涨跌幅×前一日的信号(J21)。
这里的关键是乘上前一日的信号(J21):如果前一日显示买入或者持仓(信号为TRUE,值为1),那么计算当天收益时才会算上昨天的收益/亏损。否则信号为FALSE(值为0),那么今天的收益/亏损乘上0,就不会计入更新的净值。
这里用创业板作为基准。基准净值即每天的收盘价÷第一个交易日的收盘价,表示第一天买入1元后一直持有,那么后续每一天的价值是多少。这个比较简单,就不详细说明了。
在excel里面选中“date”、“策略净值”和“基准净值”,插入【XY散点图】中的【直线】类型,就可以看的下面的净值曲线啦~
从上面的尝试中,相信大家已经初步领略到量化交易的魅力了。通过一个简单的收益率公式来控制买卖操作,可以让收益相比直接买创业板增加了一倍多!是不是比盲目买卖,或者买入后一直拿着,要好很多呢?
其实量化交易就是通过一些计算的数据作为依据来判断是否买入或者卖出一只股票或者基金,相比人通过经验来做决策有很多优势,这包括:
1. 有数据作为参考,让买卖决策有个“标尺”;
2. 有历史回测结果作为依据,让你对决策更有信心;
3. 可以让电脑自动执行,避免情绪带来的干扰。
当然,上面只是简单的尝试,目的是为了带领大家领会一个量化交易的过程。实际上,因子有很多种,策略也有很多种,再加上他们的组合,可以衍生出无数的量化交易程序。但是实际使用,我们还需要考虑到有效性和风险控制等几个方面。本文就写到这里,后续我们还会更新更多有关量化交易的内容。
“人人都能做量化,投资不再靠感觉!”
我是码可思,致力于将量化交易降低到0门槛,让每一个普通人都可以使用量化技术!