发现一个问题,想请教一下老师和看到帖子的大佬如何解决。
遇到的问题是:目前使用后复权进行历史回测,设置了后复权以及映射真实价格。但我的开仓手数是使用 整体可用资金/保证金*比例的方式来实现的,因为后复权的价格和实际价格完全不一致,这样就会造成计算出来的可开仓手数和实际可开仓手数完全对不上的问题。
比如我使用的橡胶RU888,一小时后复权进行历史回测,以下是弹出的错误信息
使用的开仓手数是 整体可用资金/保证金*比例的方式,这里选用的比例是30%,也就是说永远都是用整体资金的30%来进行开仓。
这时我的账户余额有6.7个亿,按照后复权价格计算出来的可开仓手数是23万多手,使用30%的比例等于应该使用7万多手进行开仓,但问题就出现在这里,后复权的橡胶价格只有3500多点,因此计算出来的每手保证金只需要2800多块钱,而实际橡胶在这个时候的价格是1万多点,开7万手单子实际需要7亿多,导致了资金不足无法开仓。
问题的根源就在于计算开仓手数时使用的是后复权的价格,而交易是实际映射到真实交易上了,因此设置的30%资金开仓等等都是错乱的。
想问一下是否能调用后复权的价格??或者怎么样解决这个问题???请各位大佬帮助! 谢谢!
计算手数的代码如下:
ZHYE = Portfolio_CurrentCapital() + Portfolio_UsedMargin();
MDJZ = ContractUnit()*BigPointValue();
SZ = MDJZ*C*MarginRatio();
KC = ZHYE/SZ;
LOTS = IntPart(ZHYE/SZ*BILI);
Commentary("每点价值==" + Text( MDJZ ));
Commentary("保证金率==" + Text( MarginRatio() ));
Commentary("账户余额==" + Text( ZHYE ));
Commentary("账户余额*BILI==" + Text( ZHYE*BILI ));
Commentary("已使用保证金==" + Text( Portfolio_UsedMargin() ));
Commentary("每手保证金==" + Text( SZ ));
Commentary("可开仓手数==" + Text( KC ));
Commentary("手数==" + Text( LOTS ));
Commentary("当前价格==" + Text( C ));
如果是映射后复权就会出现这个问题,不映射后复权历史回测就是虚假的,请问如何解决??