龙听期货论坛's Archiver

龙听 发表于 2019-6-1 10:47

顺势交易系统中资金管理模型的蒙地卡罗模拟法测试[古期心得]

[p=30, 2, left]有些人在开发出来一套系统之后,就会开始投入资金作实际的交易了。有关于资金管理的议题,大部分的人可能用固定资金模型(比如说三十万台币作一口台指期),或是用像我很久以前用的模型:每一口所需要的保证金加上系统的maximum drawdown来操作一口,比如说系统测试出来的maximum drawdown是15万台币,那加上台指期每口的保证金8万,就用15+8=23万台币来操作一口台指期商品。然后就认为这样的资金应该就足够可以作长久的操作了。

但是这样的资金管理方式其实还是有断头(破产)风险的。尤其是对于使用顺势系统的人而言,顺势系统的特性就是输小赢大,在市场没有出现趋势的时候,系统可能会被巴来巴去。这时候会出现很多笔小额的亏损,然后等到趋势发生的时候,再来狠狠的赢上一笔大金额的获利。

这时候有一个问题会产生:如果我们的资金在很多笔小额亏损的时候就全部输光光的话,怎么办?

[b]答案其实也很简单:就是断头(破产)而已。[/b]

如果准备的资金不够充足的话(<=这句话是重点),很可能在趋势还没发生的时候,我们就已经没钱可以继续赌下去了。更让人吐血的是,市场通常在我们断头破产以后就出现一个完美的大趋势。这时候我们就只能看着市场喷出的K线图在墙角哭泣而已。

[b]接下来可能会有人问:那我到底应该准备多少资金来作交易才足够? [/b]

这里跟各位报告一个方法,可以用蒙地卡罗模拟的方法来看每种资金管理的方式,对于我们的最终财产和破产风险(risk of ruin)的影响会是如何。

蒙地卡罗模拟法的作法是:采用交易系统所测试出来的每一笔输赢数据,经过随机数的挑选,去仿真未来实际交易时所可能会产生的资金曲线(equity curve)。然后搭配不同的资金管理模型,来看最终财产和破产风险的机率百分比。

这里就以我实际交易的e-mini S&P 500系统来作例子说明(系统在这篇文章有说明:

[url=http://tw.myblog.yahoo.com/Blue-Speculator/article?mid=397&prev=425&next=255&page=1&sc=1#yartcmt]http://tw.myblog.yahoo.com/Blue-Specula ... =1#yartcmt[/url]

这个系统过去11年的equity curve长的是像这样的,看起来应该还可以。在贴出文章以后也赌赢了一些钱,:

[attach]8824[/attach]

这个系统一些基本的测试数据和假设如下:[/p][p=30, 2, left]历史测试时间: 1997 – 2008年,约11 年的时间
Max drawdown(Intra-day) : 约USD $17,000
交易保证金:约USD$6,000(接下来我们假设交易过程中,如果资金输到比一口的保证金还要少而无法开仓的话,就断头破产出场,不再交易)
交易成本:滑价和佣金,每次来回设USD$30。
作1000次的仿真,看系统在未来一年的交易状况。[/p][p=30, 2, left]
[url=http://www.cxh99.com/2013/04/07/11954.shtml]http://www.cxh99.com/2013/04/07/11954.shtml[/url]

现在我们看几种资金管理的模型,来看不同的资金管理模拟出来的结果会是如何:[/p][p=30, 2, left]1. Fix contract(每次都只交易一口),用保证金三倍的初始资金来作交易。
2. Fix contract(每次都只交易一口),用保证金 + maximum drawdown的初始资金来开始交易。
3. Fix amount(每固定USD $10,000元交易一口合约)
4. Conservative Fixed(下面会详细说明公式)[/p][p=30, 2, left]

[b]1. Fix contract[/b][b](每次都只交易一口),用保证金三倍的初始资金来作交易。[/b]
保证金是USD$6000,所以三倍的金额就是USD$18,000。那我们用USD18,000来开始交易。最终财产的分配图长的会是像这样。
[attach]8825[/attach]

可以看得出来,如果我们只用USD18,000来作交易的话,经过一年的交易以后,我们仍然有7%的机率会被断头出场。而最终财产的中位数会是落在USD$26,500左右。
而发生Maximum Drawdown的中位数约略是30%,也就是大约一半的人会发生30%的Maximum drawdown。
[attach]8826[/attach]

[b]2. Fix contract[/b][b](每次都只交易一口),用保证金 + maximum drawdown的初始资金来开始交易。[/b]
保证金是USD$6000,Maximum drawdown是USD$17,000。那我们用6,000+17,000=USD23,000来开始交易。最终财产的分配图长的会是像这样。
[attach]8827[/attach]

可以看得出来,如果我们只用USD23,000来作交易的话,经过一年的交易以后,我们被断头出场的机率会由7%降到变成只有2.5%。而最终财产的中位数会是落在USD$30,000左右。
[attach]8828[/attach]

而发生Maximum Drawdown的中位数会由30%降为26%,也就是大约一半的人会发生26%的Maximum drawdown。

[b]3. Fix amount[/b][b](每固定USD $10,000元交易一口合约)[/b]
接下来我们提高准备的初始资金,然后采用不同的资金管理模型。假设我们准备USD$30,000来开始交易的话。然后采用fix amount的资金管理模型,也就是每USD10,000交易一口合约,如果我们初始资金是三万的话,就是交易三口合约。当资金增加到八万的时候,就交易八口合约。依此类推。

这样最终财产的分配图长的会是像这样。
[attach]8829[/attach]

可以看得出来,如果我们增加初始资金到USD$30,000来作交易的话,经过一年的交易以后,我们被断头出场的机率会增加到12%左右,因为现在等于是每一万元就交易一口,风险会变的比较大。而最终财产约略会是落在USD$42,000左右。
发生Maximum Drawdown的中位数,则会因为我们随着资金的增加,而增加我们交易的口数。会提高变成为65%,也就是大约一半的人会发生65%的Maximum drawdown。这种drawdown看来是有点难以让人接受。
[attach]8830[/attach]

[b]4.Conservative Fixed[/b]
这个模型有点类似fix amount模型,但是增加交易合约数量的速度比较慢一点。是属于比较保守一点的资金管理模型。
计算的方式是:[/p][p=30, 2, left]第一口合约所需资金 = 保证金 + Maximum Drawdown
第二口合约所需资金 = 第一口合约所需资金 + 保证金 + Maximum Drawdown*2
第三口合约所需资金 = 第二口合约所需资金 + 保证金 + Maximum Drawdown * 3
第四口合约以下就是依此类推。[/p][p=30, 2, left]

假设我们同样也是准备USD$30,000来开始交易的话。然后采用conservative fixed的资金管理模型。这样最终财产的分配图长的会是像这样。
[img]http://www.cxh99.com/UploadFiles/Article4/2013/4/201304070026387606.jpg[/img]

可以看得出来,如果我们采用这个资金管理的模型后,我们被断头出场的机率也会大幅减少,变成不到1%。而最终财产的中位数会是落在USD$38,000左右。
而且发生Maximum Drawdown的中位数,也会因为我们采用比较保守的资金管理模型,降低变为只有20%,也就是大约一半的人会发生20%的Maximum drawdown。这种drawdown看来就比较容易让人接受一点。
[attach]8831[/attach]

上面简单介绍几种资金管理的模型和蒙地卡罗的模拟方法。刚开始看的人可能会觉得很难,其实懂了原理以后就不会很困难。这个蒙地卡罗测试的软件是免费的,有兴趣人的可以来这里download:[/p][p=30, 2, left]http://www.tickquest.com/product/equitymonaco.html[/p][p=30, 2, left]
我个人是觉得很好用。而现在财务风险管理里面所谈的Value at Risk(VaR,风险值),也可以用这种蒙地卡罗模拟来做出来。VaR是风险管理当中的一个衡量值,有兴趣的人可以到这些地方看看:
[url=http://web.ydu.edu.tw/~kkau/risk/VaR.ppt#1]http://web.ydu.edu.tw/~kkau/risk/VaR.ppt#1[/url][/p][p=30, 2, left]
蒙地卡罗模拟的限制:
其实蒙地卡罗模拟法也是有他的限制和缺点的。因为蒙地卡罗仿真法是采用系统”过去的测试数据”来作”未来的模拟”。所以有一个很大的限制,就是如果这个系统是经过over-fitting的话,那么过去的历史资料就会很漂亮,而我们用这种很漂亮的历史数据去跑任何的模拟,也都是假的。所以先决条件就是系统不能有over-fitting的情形发生,要避免这种情形就要靠walk forward analysis,参数孤岛(参数高原)等方法来避免。这一点在部落格之前的文章有做过说明了。
而如果过去的历史数据没有包含到类似像世贸大楼911事件,或是520两颗子弹事件,则在未来的时间如果发生像这种重大事件的话,则需要靠情境分析(Scenario Analysis)和压力测试(Stress testing)来作分析了。[/p]

页: [1]