金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 3049|回复: 9

后台多策略组合

[复制链接]

227

主题

881

帖子

881

积分

等级: 免费版

注册:
2022-4-2
曾用名:
发表于 2023-6-27 12:18 | 显示全部楼层 |阅读模式
请问老师,多策略组合代码直接这样写可以吗

代码直接这样写不行吗
ah:stkindiex('','策略A.cc',0,21,3,10000);  //引用3分钟周期上的策略a的仓位。
bh:stkindiex('','策略B.cc',0,3,0,5000);  //引用15分钟周期上的策略b的仓位。
ch:stkindiex('','策略Ccc',0,2,0,15000);  //引用15分钟周期上的策略b的仓位。
zh:='';
strategy_hold:ah+bh+ch;                               //理论持仓

ac_buy_hold:=tbuyholdingex(zh,'',2);                                 //多头总仓
ac_sell_hold:=tsellholdingex(zh,'',2);                                //空头总仓


tot_account_hold:ac_buy_hold-ac_sell_hold;

//理论持仓与实际持仓的判断
if strategy_hold-tot_account_hold>0 and tot_account_hold>=0 then
   tbuy(1,strategy_hold-tot_account_hold,mkt,0,0,zh);   
      
if strategy_hold-tot_account_hold>0 and tot_account_hold<0 then  begin
   tsellshort(strategy_hold<0,strategy_hold-tot_account_hold,mkt,0,0,zh);
   if strategy_hold>=0 then begin
      tsellshort(1,tot_account_hold,mkt,0,0,zh);
      tbuy(strategy_hold>0,strategy_hold,mkt,0,0,zh);
      end
   end
      
if strategy_hold-tot_account_hold<0 and tot_account_hold<=0 then
   tbuyshort(1,abs(strategy_hold-tot_account_hold),mkt,0,0,zh);
      
if strategy_hold-tot_account_hold<0 and tot_account_hold>0 then begin      
   tsell(strategy_hold>0,abs(strategy_hold-tot_account_hold),mkt,0,0,zh);      
   if strategy_hold<=0 then begin
     tsell(1,tot_account_hold,mkt,0,0,zh);
     tbuyshort(strategy_hold<0,abs(strategy_hold),mkt,0,0,zh);
     end
   end     
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2023-6-27 13:10 | 显示全部楼层
可以这样写,之前的那个日志看错了,你别的策略是交易到其他账户的,那就没有关系。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

227

主题

881

帖子

881

积分

等级: 免费版

注册:
2022-4-2
曾用名:
 楼主| 发表于 2023-6-27 14:28 | 显示全部楼层
技术010 发表于 2023-6-27 13:10
可以这样写,之前的那个日志看错了,你别的策略是交易到其他账户的,那就没有关系。

还是之前那种写法的问题导致的来回交易,获取账户持仓直接这样就可以了ac_buy_hold:=tbuyholdingex(zh,'',2);                                 //多头总仓
ac_sell_hold:=tsellholdingex(zh,'',2);                                //空头总仓


tot_account_hold:ac_buy_hold-ac_sell_hold;
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2023-6-27 14:41 | 显示全部楼层
之所以会触发开仓或平仓,那就是获取的理论持仓和获取的账户持仓不一致才会触发了下单,如果频繁的开平仓,那只能通过debugfile输出该品种的理论持仓和实际持仓分别是多少,来跟踪问题,否则是跟踪不到这种为什么频繁的开平仓的原因的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

227

主题

881

帖子

881

积分

等级: 免费版

注册:
2022-4-2
曾用名:
 楼主| 发表于 2023-6-27 15:03 | 显示全部楼层
技术010 发表于 2023-6-27 14:41
之所以会触发开仓或平仓,那就是获取的理论持仓和获取的账户持仓不一致才会触发了下单,如果频繁的开平仓, ...

不对上面的还是有问题,应该是
ah:stkindiex('','策略A.cc',0,21,3,10000);  //引用3分钟周期上的策略a的仓位。
bh:stkindiex('','策略B.cc',0,3,0,5000);  //引用15分钟周期上的策略b的仓位。
ch:stkindiex('','策略Ccc',0,2,0,15000);  //引用15分钟周期上的策略b的仓位。
zh:='';
strategy_hold:ah+bh+ch;                               //理论持仓

多单总持仓:=tbuyholdingex(zh,'',2);                                 //多头总仓
空单总持仓:=tsellholdingex(zh,'',2);                                //空头近今仓
多单未成交委托:=tisremainex(1,zh,stklabel);  
空单未成交委托:=tisremainex(3,zh,stklabel);

tot_account_hold:多单总持仓-空单总持仓+多单未成交委托-空单未成交委托;

//理论持仓与实际持仓的判断
if strategy_hold-tot_account_hold>0 and tot_account_hold>=0 then
   tbuy(1,strategy_hold-tot_account_hold,mkt,0,0,zh);   
      
if strategy_hold-tot_account_hold>0 and tot_account_hold<0 then  begin
   tsellshort(strategy_hold<0,strategy_hold-tot_account_hold,mkt,0,0,zh);
   if strategy_hold>=0 then begin
      tsellshort(1,tot_account_hold,mkt,0,0,zh);
      tbuy(strategy_hold>0,strategy_hold,mkt,0,0,zh);
      end
   end
      
if strategy_hold-tot_account_hold<0 and tot_account_hold<=0 then
   tbuyshort(1,abs(strategy_hold-tot_account_hold),mkt,0,0,zh);
      
if strategy_hold-tot_account_hold<0 and tot_account_hold>0 then begin      
   tsell(strategy_hold>0,abs(strategy_hold-tot_account_hold),mkt,0,0,zh);      
   if strategy_hold<=0 then begin
     tsell(1,tot_account_hold,mkt,0,0,zh);
     tbuyshort(strategy_hold<0,abs(strategy_hold),mkt,0,0,zh);
     end
   end         
回复

使用道具 举报

227

主题

881

帖子

881

积分

等级: 免费版

注册:
2022-4-2
曾用名:
 楼主| 发表于 2023-6-27 15:24 | 显示全部楼层
技术010 发表于 2023-6-27 14:41
之所以会触发开仓或平仓,那就是获取的理论持仓和获取的账户持仓不一致才会触发了下单,如果频繁的开平仓, ...

账户总持仓的计算应该是这样吧

多单总持仓:=tbuyholdingex(zh,'',2);                                 //多头总仓
空单总持仓:=tsellholdingex(zh,'',2);                                //空头近今仓
多单未成交委托:=tisremainex(1,zh,stklabel);  
空单未成交委托:=tisremainex(3,zh,stklabel);

tot_account_hold:多单总持仓-空单总持仓+多单未成交委托-空单未成交委托;
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2023-6-27 15:24 | 显示全部楼层
是的,在计算账户实际持仓,是要加上开多和开空的未成交单的啊,否则会造成重复的开仓,然后成交后又平仓的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

227

主题

881

帖子

881

积分

等级: 免费版

注册:
2022-4-2
曾用名:
 楼主| 发表于 2023-6-27 15:28 | 显示全部楼层
技术010 发表于 2023-6-27 15:24
是的,在计算账户实际持仓,是要加上开多和开空的未成交单的啊,否则会造成重复的开仓,然后成交后又平仓的 ...

帮忙检查下,前面的后台多策略代码还可能出现啥问题。今天的来回开平仓损失几万。。。
回复

使用道具 举报

227

主题

881

帖子

881

积分

等级: 免费版

注册:
2022-4-2
曾用名:
 楼主| 发表于 2023-6-27 15:36 | 显示全部楼层
技术010 发表于 2023-6-27 14:41
之所以会触发开仓或平仓,那就是获取的理论持仓和获取的账户持仓不一致才会触发了下单,如果频繁的开平仓, ...

这里debug需要怎么写到那个多策略模板里实时跟踪,现在写已经晚了吧
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2023-6-27 15:59 | 显示全部楼层
本帖最后由 技术010 于 2023-6-27 16:01 编辑

debugilfe调试代码如下,可以加到策略的最后,输出各个变量信息,记录到D盘的调试日志文件中,便于事后查找原因。
if islastbar then
DEBUGFILE('D:\调试日志.TXT',STKLABEL&' 理论持仓='&NUMTOSTR(strategy_hold,0)&' 实际持仓='&NUMTOSTR(tot_account_hold,0)&' 多单总持仓='&NUMTOSTR(多单总持仓,0)&' 空单总持仓='&NUMTOSTR(空单总持仓,0)&' 多单未成交委托='&NUMTOSTR(多单未成交委托,0)&' 空单未成交委托='&NUMTOSTR(空单未成交委托,0),1);

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-8-24 06:41 , Processed in 0.183274 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表