果仁用户在使用果仁策略自动交易时,有时候会出现明明策略没有发出任何调仓信号,但是实盘管家却进行了某只股票交易100股的情况。本帖将具体说明该现象的出现原因以及解决办法。
出现该现象的原因:
首先我们需要知道的是果仁的整个回测系统(策略)都是基于净值计算的,而不是基于某个起始资金量计算的,这意味着在回测中是不会考虑到最小买入单位的。
举个例子来说,比如策略要求股票A的持仓比例为50%,当前A的价格为3.6元,假设我为策略分配的总资金是10000元,那么按照理论来说我需要买入股票A共计5000元,对应5000/3.6=1388.88股,但是A股是存在着100股的最小买入单位的,所以在实操的时候我们买入的是1400股而不是1388.88股。
上述例子就说明了一个问题,即我们实际配置比例与理论配置比例之间是会存在一个配置比例差的,而资金量越小的话这个配置比例差就越容易放大,上例中的配置比例差为abs(1400*3.6/10000-50%)=50.4%-50%=0.4%
我们继续丰富一下这个例子,让他看起来更加贴近真实情况,我们的策略要求按各50%的比例配置股票A与股票B ,A的价格为3.6元,B的价格为17元,则初期建仓情况如下表:
股票名 |
当前价格 |
策略要求配置比例 |
策略理论分配资金量 |
实盘管家实际配置股票股数 |
实盘管家实际配置资金金额 |
实盘管家配置资金比例 |
实际配置比例与理论配置比例差值 |
A |
3.6 |
0.5 |
5000 |
1400 |
5040 |
0.504 |
0.004 |
B |
17 |
0.5 |
5000 |
200 |
3400 |
0.34 |
-0.16 |
|
|
|
|
未用资金: |
1560 |
0.156 |
|
需要强调的是实盘管家当前对股票的配置顺序是自上而下的,也就是说会优先将排序靠前的股票“凑近”目标配置比例(以四舍五入的方式进行凑近)进行配置。以上表为例,资金将会优先配置A而不是B,这也解释了为什么明明B配置300股更加接近理论配置比例(300*17/10000-50%=51%-50%=0.01),但为什么最终只给B配置了200股的原因。原因是剩余资金不够给B配300股。
假设到了下一个调仓日,股票A的价格变成了3元,股票B的价格变成了23元,那么此时我的整个账户变化情况将如下:
股票名 |
当前价格 |
策略要求配置比例 |
策略理论分配资金量 |
实盘管家实际配置股票股数(调仓前) |
实盘管家实际配置资金金额(调仓前) |
实盘管家配置资金比例(调仓前) |
实际配置比例与理论配置比例差值 |
股票名 |
A |
3 |
0.381165919 |
4166.666667 |
1400 |
4200 |
0.405405405 |
0.024239 |
A |
B |
23 |
0.618834081 |
6764.705882 |
200 |
4600 |
0.444015444 |
-0.17482 |
B |
|
|
|
|
未用资金: |
1560 |
|
|
|
|
|
|
|
资产总计: |
10360 |
|
|
|
此时股票A的实际配置比例与理论配置比例差值从上一期的0.004来到了0.024239(真实账户相对于策略要求超配了2.4239%的股票A),股票B的配置比例差值从-0.16来到了-0.17482(真实账户相对于策略要求低配了17.482%的股票B)
这时候策略会发出指令要求卖出100股A,因为卖出100股后A的配置比例差值将会来到-0.00472,该值的绝对值小于原先的0.024239。对于股票B,实盘管家依旧不会发出增持指令,因为可用资金不足以买入100股。调仓后的账户整体情况如下表:
股票名 |
当前价格 |
策略要求配置比例 |
计划调仓增减股数 |
实盘管家实际配置股票股数(调仓后) |
实盘管家实际配置资金金额(调仓后) |
实盘管家配置资金比例(调仓后) |
实际配置比例与理论配置比例差值 |
A |
3 |
0.381165919 |
-100 |
1300 |
3900 |
0.376447876 |
-0.00472 |
B |
23 |
0.618834081 |
0 |
200 |
4600 |
0.444015444 |
-0.17482 |
|
|
|
|
未用资金: |
1860 |
|
|
|
|
|
|
资产总计: |
10360 |
|
|
总结:当实际配置比例高于理论配置比例的时候,由于配置股票的价格下跌,会导致配置缺口被放大,这时候可能会触发卖出100股的情况。例如股票A
当实际配置比例低于理论配置比例的时候,由于配置股票的价格上涨,会导致配置缺口被放大,这时候可能会触发买入100股的情况。例如股票B(如果资金够的话,会进行买入)
表格案例放于附件中,感兴趣的用户可以下载并进行逻辑验证
如何避免该问题
在实盘管家的“策略交易”栏目中,我们有提供一个最小买卖金额的设置,通过该设置能过滤掉所有总金额小于所设置的最小金额的订单,默认值是1000元。
用户可以适当提高该最小买卖金额来过滤碎单,避免频繁出现买卖100股的情况。比如平均每股持仓如果在5万左右的话,可以考虑设置在5000左右,但也别设置太高,以免实盘管家将所有调仓指令都过滤了