以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 策略编写求助区 (http://222.73.7.161/bbs/list.asp?boardid=11) ---- 仓位计算 (http://222.73.7.161/bbs/dispbbs.asp?boardid=11&id=8792) |
-- 作者:tonybig -- 发布时间:2011/11/3 22:12:07 -- 仓位计算 小弟求一个组合仓位资金管理计算方式,
固定资产为50万, 按照40%仓位平均划分给不同品种(例如:1手铜需要5万,那么对应的必须开两手胶,5手pta),
当总资产盈利达到足够再次平均加仓的时候的仓位计算公式(总体仓位仍然保持40%);
下面我想了个思路,但不知道可行否,希望老师能够指点修正一,或者还有什么其它好的算法。
总资产*40% / (A品种价格*合约手数*保证金+b品种价格*合约手数*保证金)=平均开仓手数(取整数);
当上面平均开仓手数大于1小于二的时候,再使用下列具体公式计算不同品种的开仓数,小于3大于2,再进行下一次的仓位计算 总资产*40% / 品种数量 / A品种价格*合约手数*保证金 =实际品种开仓数量(); |
-- 作者:tonybig -- 发布时间:2011/11/4 8:52:44 -- 我自己编了出来,但是那位大哥能把它做个循环, 当资金足够分配=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); |
-- 作者:fly -- 发布时间:2011/11/4 10:32:22 -- 资金足够分配: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手好了.
弄个循环,不是增加运算量吗? |
-- 作者:tonybig -- 发布时间:2011/11/4 13:26:06 -- 谢谢fly大哥回答,我的意思是当账户资金盈利足够平均再开一手的情况下才加仓, 但我写不出这么复杂的意思, 还请 fly大哥把你说的这个做成 代码 吧 , 我用来参考学习一下 谢谢 [此贴子已经被作者于2011-11-4 13:30:20编辑过]
|
-- 作者:fly -- 发布时间:2011/11/4 15:31:20 -- //图表程序化.
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); |