手把手教会你构建自己的交易系统(三)

?下面我继续谈交易系统的构建。前几次,我用的是SPY的5分钟分时数据,主要是希望大家熟悉Excel及其公式。从现在开始起,我将采用a股数据。

安装好通达信的朋友,请进入通达信。如附件1.jpg所示,选择600028中国石化。主图指标选择5日、30日和250日均线。副图指标选择macd(12,26,9)和ATR(14)。将其导出为Excel格式。见附件2.jpg所示。然后将表格数据进行整理,去掉我们不需要的行列,将spreadsheet也就是日线数据表名字改为daily。如附件3所示。

很多人喜欢使用指标,甚至自己定制的指标。下面我就简单地讲述在Excel中如何构建一个指标。

之所以Excel可以作为一个开发平台,是因为Excel提供了非常灵活和简单的编程平台:Visual Basic for Application,或者简称VBA。VBA是以BASIC语言为基础的编程语言,所以非常容易上手。对于所有Excel用户来说,如果他们渴望成为高级用户,VBA编程是必须的。

打开附件中的600028.xls,按ALT F11,进入VBA编程环境。双击工程模块Functions,大家会看到如下公式:

Function TrueRange(ByVal high As Double, ByVal low As Double, ByVal previousclose As Double) As Double

Dim returnValue As Double

diffHighLow1 = Math.Abs(high - low)

diffHighLow2 = Math.Abs(high - previousclose)

diffHighLow3 = Math.Abs(previousclose - low)

If (diffHighLow1 > diffHighLow2) Then

????returnValue = diffHighLow1

Else

????returnValue = diffHighLow2

End If

If (diffHighLow3 > returnValue) Then

????returnValue = diffHighLow3

End If

TrueRange = returnValue

End Function

这是指标TrueRange的实现过程。如果有不懂的,先去了解TrueRange指标是如何计算的,然后再来看VBA是如何实现的。

好了,咱们再进入表格调用这个指标。在ATR.ATR列的右边单元格输入TrueRange。因为TrueRange指标需要今日的最高、最低价和昨日的收盘价,所以我们选中单元格O3,输入=truerange(C3,D3,E2),然后下拉使该列所有单元格都采用同样的公式和对应的引用参数。大家可以看到,我们这里用函数计算的结果O列和通达信的计算结果M列,在开始的计算中有小数点的区别。但是后面的数据都一样了。

这里采用的VBA编写函数的方法,是Excel最有魅力的一部分,也是VBA的中级使用。对VBA不熟的朋友,可以多多采用记录宏的方法,然后学习宏的编写。虽然从记录宏中学习VBA的方法,学到的不见得是效率最高的编程方法,但却是最简单的入门方法。

有人可能觉得每个指标都要写函数,过于麻烦。我的观点是,因为我们在写函数的时候,指标的细节必须重点关注,所以会帮助我们对指标的理解。如果将所有编写好的指标公式放在一起,作为自己的专用指标库函数,那么日积月累的工作会让自己后面的工作越来越简单。如果希望不编写函数而直接调用市面上现有的指标,我自己也有专门的解决方案。但那是VBA的高级用户的学习内容了。

请大家对这个系列的文章多给些反馈。是太容易了?还是太难了?拜托请不要只说谢谢分享!给些反馈就是对我的谢谢!谢谢大家的支持!

很多人对交易系统有神秘感,其实神秘感的来源主要是因为不懂什么是交易系统所以好奇导致。任何人都可以根据任何买进卖出信号构建自己的交易系统。但是,一个交易系统需要投资者投入大量的时间和精力。那如何判断一个交易系统的好坏呢?

今天我给大家讲讲交易系统最重要的评测指标。市场上评测交易系统的指标有很多,我个人最喜欢的是wealth-lab的系统构建平台。为了方便大家了解交易系统的本质,我将wealth-lab里面的交易系统中的评测指标全部做了翻译和解释。这些指标希望大家记住,甚至要背熟。为下一阶段的工作做准备。

Starting Capital?(初始资金)????系统测试开始时的全部资金

Ending Capital?(终止资金)??????系统测试结束时的全部资金,包括账户内的股票以收盘价计算的价值

Net Profit(净利润)?????????????全部的利润。这是净利润的总和,已经减除掉每笔交易的佣金和slippage。

Net Profit %(净利润%或者投资回报率)????净利润占初始资金的百分比

Profit per Bar(每根K线的利润)???

????????????????全部的净利润除以进出场所经历的K线根数。和中长线投资相比,每根K线的利润,对不同的交易系统之间的效率比较提供了公平的指标。

????????????????如果和中长线投资系统比较,我们通过每根K线利润就可以直接比较其交易系统的盈利效率。

Annualized Gain % (Annual Percentage Return, APR,年投资回报率)???

????????????????年投资回报率是复合年增长率

Exposure (%,暴露风险)????????简单地说,就是持仓所占全部账户资产的百分比,也有人翻译为投资比例。 我个人理解,所持仓位就是暴露在市场的风险。

Total Commission(佣金总额)????全部模拟交易的佣金总额。

Return _disibledevent="word-wrap: normal; word-break: normal; font-family: 宋体;">(现金回报)????系统测试期间,现金的全部利息回报。

Margin Interest Paid(所付融资利息)???

????????????????测试期间的全部融资利息支出

Dividends Received(所得分红)????测试期间的股票分红总额。

Number of Trades(交易数量)????买卖交易的总数加上目前的持仓;对于中长线投资,这等于买卖的股票支数。

Avg Profit (Loss)(平均利润/损失)

????????????????减去佣金和slippage后的每笔交易平均利润或亏损。

Avg Profit % (Loss %)(平均利润/损失率)

????????????????减去佣金和slippage后的每笔交易平均利润率或亏损率

Avg Bars Held(平均持仓时间)

????????????????每笔交易平均K线根数,对于日线来说,就是平均持仓天数。

Win/Loss Rate(盈利/亏损率)????交易中盈利交易和亏损交易所占全部交易百分比

Gross Profit/Loss(毛利润/亏损)

????????????????全部盈利交易带来的利润或者全部亏损交易带来的亏损,减去佣金和slippage。账户中当前仓位的账面利润和亏损不计入盈亏。

Max Consecutive(最大连续盈利/亏损次数)

????????????????连续盈利次数的最大值或者连续亏损次数的最大值。

Max Drawdown(最大系统回撤$)????以账户资产(资金和股票净值)计算,最大峰值到最低峰值之间的下降金额。

Max Drawdown Date(最大回撤日)????最大回撤结束的那一天。

Max Drawdown %(最大回撤$)????以账户资产(资金和股票净值)计算,最大峰值到最低峰值之间的下降%。

上面的内容中有一个slippage,不能简单翻译。有人翻译为滑价差,让我看得摸不着头脑。slippage,是指我们决定以当前价格市场价成交,可是实际成交价却不同于我们看到的市场价。这两者之间的价差会增交易成本,被称为slippage。因为找不到对应的词汇,所以专门在这里做个解释。

大家一定要记住这些名词的意思,这样到后面才不会困难。

(0)

相关推荐