小弟求一个组合仓位资金管理计算方式,
固定资产为50万, 按照40%仓位平均划分给不同品种(例如:1手铜需要5万,那么对应的必须开两手胶,5手pta),
当总资产盈利达到足够再次平均加仓的时候的仓位计算公式(总体仓位仍然保持40%);
下面我想了个思路,但不知道可行否,希望老师能够指点修正一,或者还有什么其它好的算法。
总资产*40% / (A品种价格*合约手数*保证金+b品种价格*合约手数*保证金)=平均开仓手数(取整数);
当上面平均开仓手数大于1小于二的时候,再使用下列具体公式计算不同品种的开仓数,小于3大于2,再进行下一次的仓位计算
总资产*40% / 品种数量 / A品种价格*合约手数*保证金 =实际品种开仓数量();
我自己编了出来,但是那位大哥能把它做个循环, 当资金足够分配=1时,开始进行lots计算, 当资金足够分配=2,再进行lots分配, 以此循环到资金等于10,lots也跟着计算10次;
资金足够分配:intpart(asset*0.4/(dynainfo2(7,'cu00')*multiplier*0.18+dynainfo2(7,'ru00')*multiplier*0.18+dynainfo2(7,'ta00')*multiplier*0.18));
lots:intpart(asset*0.4/3/dynainfo2(7,'ru00')*multiplier*0.18);
问题2:另外我想加入对目前加载的品种做出判断,红字部分显示为当前合约价格?
intpart(asset*0.4/3/dynainfo2(7,'ru00')*multiplier*0.18);
资金足够分配:intpart(asset*0.4/(dynainfo2(7,'cu00')*multiplier*0.18+dynainfo2(7,'ru00')*multiplier*0.18+dynainfo2(7,'ta00')*multiplier*0.18));
lots:intpart(asset*0.4/3/dynainfo2(7,'ru00')*multiplier*0.18);
在资金同等的情况下,这两个值没啥可比性----不同合约的最新价是不一样的,除个3求平均,没啥意思.
楼主这等于是按照资金情况,决定是否加仓,及加仓多少.
先判断当前有多少持仓,图表上,HOLDING就直接是持仓,再
判断你的资金的40%够开多少手,
如果大于持仓,就加仓1手好了.
弄个循环,不是增加运算量吗?
谢谢fly大哥回答,我的意思是当账户资金盈利足够平均再开一手的情况下才加仓, 但我写不出这么复杂的意思, 还请 fly大哥把你说的这个做成 代码 吧 , 我用来参考学习一下 谢谢
//图表程序化.
num:=intpart(tasset*0.4/(dynainfo2(7,'cu00')*multiplier*0.18+dynainfo2(7,'ru00')*multiplier*0.18+dynainfo2(7,'ta00')*multiplier*0.18));
//判断是否加仓
if holding>0 and num>holding then buy(1,1,mkt);
if holding<0 and num>ABS(holding) then buyshort(1,1,mkt);