 
等级: 超级版主
- 注册:
- 2021-5-18
- 曾用名:
|
本帖最后由 技术009 于 2025-5-28 10:02 编辑
后台本质上使用的是账户持仓而非理论持仓,因此本质上不存在所谓后台持仓同步的逻辑的。我们这里讨论的后台持仓同步是指:通过后台的操作来调整获取(跨指标调用图表持仓)到的图表理论持仓 和实际账号的偏差。这里给出一个模板范例,其原理是:获取图表策略的理论持仓holding然后和账户持仓做匹配。
此外范例增加了有未成交单不进行仓位矫正,以避免信号的反复。
注意:所引用的图表策略最后要输出一个ho:holding;用来作为被调用的变量,范例这里默认调用500根k计算得出的结果,建议根据实际情况做调整,如果有多个策略引用可以进行多个策略的stkindiex,然后把引用过来的持仓加起来得到一个总的理论持仓。
我们提供了2套思路上略有偏差的模版以应对不同的需求场景。
模板1: 比对理论持仓(前一个K的)和实际仓位,有差异直接进行仓位矫正
[PEL] 复制代码 //上一根K策略理论持仓
ho1:stkindiex(stklabel,'BOLL布林带交易系统.ho',0,1,-1,500);
//账户多头持仓
tbuyho:tbuyholdingex('',STKLABEL,1);
//账户空头持仓
tsellho:tsellholdingex('',STKLABEL,1);
//是否有未成交单,返回1表示有未成交
is_order:TGLOBALSUBMITEX(0,'',stklabel,0);
//如果当前品种有挂单就不执行
if is_order 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
模板2:仅当理论持仓发生变化时候进行操作,否则即便当前理论持仓和实际仓位有差异也不操作。这个思路主要是考虑到实际
运行中,客户的程序未能持续运行的情况:此时我们的理论信号实际是发生在较久远之前的位置,我们已经是错过了那个入场时机了,
此时如果死板直接进行仓位矫正并不合适。
[PEL] 复制代码
//调用1分钟周期前一周期 以及前前一周前的持仓
hd1:=stkindiex(stklabel,'boll布林带交易系统.ho',0,1,-1,500);
hd2:=stkindiex(stklabel,'boll布林带交易系统.ho',0,1,-2,500);
//调用15分钟周期前一周期 以及前前一周前的持仓
hd3:=stkindiex(stklabel,'boll布林带交易系统.ho',0,3,-1,500);
hd4:=stkindiex(stklabel,'boll布林带交易系统.ho',0,3,-2,500);
//上一根k线的理论持仓汇总
ho1:hd1+hd3;
//上上一根k线的理论持仓汇总
ho2:hd2+hd4;
//账户多头持仓
tbuyho:tbuyholdingex('',stklabel,1);
//账户空头持仓
tsellho:tsellholdingex('',stklabel,1);
//是否有未成交单,返回1表示有未成交
is_order:tglobalsubmitex(0,'',stklabel,0);
//如果当前品种有挂单就不执行
if is_order then exit;
//如何没有理论持仓变化就不执行
if (ho1=ho2) then exit;
//多头部分
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
|
|