等级: 超级版主
- 注册:
- 2021-5-18
- 曾用名:
|
本帖最后由 技术008 于 2022-8-2 09:53 编辑
我们从图表转入后台时候往往会发现后台没有持仓同步这个功能,那是因为后台本质上使用的是账户持仓而非理论持仓
那么如果我们还是想要实现这个功能怎么办呢,这边给出一个模板范例大致原理就是获取图表策略的理论持仓holding然后和账户持仓做匹配。
此外范例增加了有未成交单或者图表最新的持仓和上一根不一样(最新k有发生持仓变化),此时同步不会执行。
注意:所引用的策略最后要输出一个ho:holding;用来被调用,另外这里默认调用500根k计算得出持仓结果,如果要和图表上进行对应也需要控制图表k线数量在500
另外这里策略理论持仓是一个策略的,如果你有多个策略引用可以进行多个策略的stkindiex,然后把引用过来的持仓加起来得到一个总的理论持仓
//策略理论持仓
ho1:stkindiex(stklabel,'BOLL布林带交易系统.ho',0,1,0,500);
//上一根k线的理论持仓
before_ho1:stkindiex(stklabel,'BOLL布林带交易系统.ho',0,1,-1,500);
//账户多头持仓
tbuyho:tbuyholdingex('',STKLABEL,1);
//账户空头持仓
tsellho:tsellholdingex('',STKLABEL,1);
//是否有未成交单,返回1表示有未成交
is_order:TGLOBALSUBMITEX(0,'',stklabel,0);
//如果当前品种有挂单或者理论策略的当根k理论持仓有变化,就不执行
if is_order or (ho1<>before_ho1) then exit;
else
BEGIN
//多头部分
if ho1>=0 and tsellho>0 then tsellshort(1,tsellho,mkt);
//理论持仓大于0,补仓
if ho1>0 and ho1>tbuyho then
BEGIN
tbuy(1,ho1-tbuyho,mkt);
END
//理论持仓大于0,减仓
if ho1>0 and ho1<tbuyho then
BEGIN
tsell(1,tbuyho-ho1,mkt);
END
//空头部分
if ho1<=0 and tbuyho>0 then tsell(1,tbuyho,mkt);
//理论持仓小于0,补仓
if ho1<0 and abs(ho1)>tsellho then
BEGIN
tbuyshort(1,abs(ho1)-tsellho,mkt);
END
//理论持仓小于0,减仓
if ho1<0 and abs(ho1)<tsellho then
BEGIN
tsellshort(1,tsellho-abs(ho1),mkt);
END
END
|
|