金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
楼主: 106137

后台多策略以净持仓方式发开平指令

[复制链接]

2

主题

5442

帖子

5442

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2024-11-26 11:27 | 显示全部楼层
几个需要你自行调整的地方:

1.集合竞价时间的配置。这里不太好统一设置,你如果交易的品种有夜盘也有白盘,建议区分开。

2.集合竞价部分的报单价格。我暂时用对手价,但是这个也无法确保成交。无法涨跌停价,因为集合竞价时候这个数据读取不到。如果用对手价再加点也不行,那你只能再想办法了,比如用结算价自行根据幅度计算涨跌停价,不过这个幅度也比较麻烦。每个品种不一样。   最终肯定是要在集合竞价时候成交的,否则一旦不成交,后面会很麻烦。

3.请在simnow模拟上先测试下。这个模拟可以在集合竞价时候报单。

[PEL] 复制代码
ho1:stkindiex(stklabel,'策略1.ho',0,3,-1,500);
ho2:stkindiex(stklabel,'策略1.ho',0,2,-1,500);
ho3:stkindiex(stklabel,'策略1.ho',0,6,-1,500);
 
//上一根k线的理论持仓
ho:ho1+ho2+ho3;

ho4:stkindiex(stklabel,'策略1.ho',0,3,0,500);
ho5:stkindiex(stklabel,'策略1.ho',0,2,0,500);
ho6:stkindiex(stklabel,'策略1.ho',0,6,0,500);
 

//集合竞价时候,我们直接对比实际持仓和当前的理论持仓。因为这时候新的K线其实没有生成.这时候的理论持仓其实是前面已经
//确定的历史的理论持仓,可以直接操作的

//当前K线理论持仓
hc:ho4+ho5+ho6;
 
 
//账户多头持仓
tbuyho:tbuyholdingex('',stklabel,1);
//账户空头持仓
tsellho:tsellholdingex('',stklabel,1);
//是否有未成交单,返回1表示有未成交
is_order:tglobalsubmitex(0,'',stklabel,0);

//集合竞价时间 请根据品种自行配置。
isjh:currenttime>=92500 and currenttime<92900;

//集合竞价时候报单的加点
input:ds(3,1,100,1);
 
//如果当前品种有挂单就不执行
if is_order then exit;

//连续交易阶段,请根据实际时间调整这里的时间
if not(isjh) and currenttime>93000 then 
begin                 
        //直接对比前一个周期的理论持仓和当前实际持仓是否存在差异,有差异执行矫正
         
        //多头部分                       
        if ho>=0 and tsellho>0 then tsellshort(1,tsellho,mkt);
        //理论持仓大于0,补仓
        if ho>0 and ho>tbuyho then
        begin
                tbuy(1,ho-tbuyho,mkt);
        end
        //理论持仓大于0,减仓
        if ho>0 and ho<tbuyho then
        begin
                tsell(1,tbuyho-ho,mkt);
        end
 
        //空头部分
        if ho<=0 and tbuyho>0 then tsell(1,tbuyho,mkt);
        //理论持仓小于0,补仓
        if ho<0 and abs(ho)>tsellho then
        begin
                tbuyshort(1,abs(ho)-tsellho,mkt);
        end
        //理论持仓小于0,减仓
        if ho<0 and abs(ho)<tsellho then
        begin
                tsellshort(1,tsellho-abs(ho),mkt);
        end                       
end


//集合竞价期间
//注意报单价,如果不合理有可能不成交,目前是采用基于对手价超价报单(涨跌停价格取不到,只能用盘口对手价操作)
if isjh then 
begin 	
//多头部分    
                 
if hc>=0 and tsellho>0 then tsellshort(1,tsellho,lmt,DYNAINFO( 34)+ds*mindiff);
//理论持仓大于0,补仓
if hc>0 and hc>tbuyho then
begin
        tbuy(1,hc-tbuyho,lmt,dynainfo(34)+ds*mindiff);
end
//理论持仓大于0,减仓
if hc>0 and hc<tbuyho then
begin
        tsell(1,tbuyho-hc,lmt,dynainfo( 28)-ds*mindiff);
end

//空头部分
if hc<=0 and tbuyho>0 then tsell(1,tbuyho,lmt,dynainfo( 28)-ds*mindiff);
//理论持仓小于0,补仓
if hc<0 and abs(hc)>tsellho then
begin
        tbuyshort(1,abs(hc)-tsellho,lmt,dynainfo( 28)-ds*mindiff);
end
//理论持仓小于0,减仓
if hc<0 and abs(hc)<tsellho then
begin
        tsellshort(1,tsellho-abs(hc),lmt,dynainfo( 34)+ds*mindiff);
end                        

end 

回复

使用道具 举报

43

主题

294

帖子

294

积分

Rank: 4

等级: 专业版

注册:
2024-6-21
曾用名:
 楼主| 发表于 2024-11-29 09:24 | 显示全部楼层
资深技术05 发表于 2024-11-26 11:27
几个需要你自行调整的地方:

1.集合竞价时间的配置。这里不太好统一设置,你如果交易的品种有夜盘也有白 ...

老师好,看了上述代码,有如下问题:
一、//连续交易阶段,请根据实际时间调整这里的时间
if not(isjh) and currenttime>93000 then
begin
对于连续交易阶段,这里的currenttime>93000能不能不写只写if not(isjh)  then
begin
二、
1、//集合竞价时间 请根据品种自行配置。
isjh:currenttime>=92500 and currenttime<92900;
能否改成isjh:(currenttime>205500 and currenttime<205900) or (currenttime>085500 andcurrenttime<085900) or (currenttime>092500 and currenttime<092900);?涵盖白盘夜盘中金所品种所有品种的集合竞价时间,就不区分品种了。
2、我软件里设置的行情数据时区是金字塔时区(北京时间加4个小时),这里isjh:currenttime>=92500 and currenttime<92900;
写策略的时间是金字塔时间还是北京时间?
三、集合竞价时间,若用上一个的结算价加减涨跌停比例, if hc>=0 and tsellho>0 then tsellshort(1,tsellho,lmt, DYNAINFO(62)*1+0.1))可以不?交易所若调整涨跌停比例我再调整0.1.
四、连续交易阶段为什么写在竞价竞价阶段前面?

回复

使用道具 举报

43

主题

294

帖子

294

积分

Rank: 4

等级: 专业版

注册:
2024-6-21
曾用名:
 楼主| 发表于 2024-11-29 09:31 | 显示全部楼层
五、如果集合竞价不成交,是不是就一直有挂单?影响后续的连续交易阶段,怎么处理这个挂单?
回复

使用道具 举报

2

主题

5442

帖子

5442

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2024-11-29 10:10 | 显示全部楼层
1.不能。 你有的品种的集合竞价在其他品种上是连续交易的时间啊。那按照你这个写法,股指集合竞价时候 轮训到白银的时候,也判断成集合竞价了。

2.用北京时间。而且必须用currenttime 函数。其他时间函数依赖于成交的行情。

3.可以。但是你每个品种比例不一样。要算每个品种的涨跌停价格 其实也比较麻烦吧。如果品种不多可以这样做。

4.这个顺序其实无所谓。

5.如果你未成交了,集合竞价撮合阶段 甚至后面都没有成交。这整个逻辑直接卡死了。目前没有好的解决办法。都理论持仓了,其实就不应该有不成交了。  
回复

使用道具 举报

43

主题

294

帖子

294

积分

Rank: 4

等级: 专业版

注册:
2024-6-21
曾用名:
 楼主| 发表于 2024-11-29 10:39 | 显示全部楼层
资深技术05 发表于 2024-11-29 10:10
1.不能。 你有的品种的集合竞价在其他品种上是连续交易的时间啊。那按照你这个写法,股指集合竞价时候 轮训 ...

上面第5个,假如8点59分集合竞价未成交,能否写个撤单的指令并且执行,到了9点00分的时候检测账户,并用市价发单?
回复

使用道具 举报

43

主题

294

帖子

294

积分

Rank: 4

等级: 专业版

注册:
2024-6-21
曾用名:
 楼主| 发表于 2024-11-29 10:45 | 显示全部楼层
第3个,假如涨停板是10%,DYNAINFO(62)*(1+0.1)算出来后不用再加工了吧?比如四舍五入的问题,导致价格比涨停价正好多出一个价位,无效报价,导致成交不了
回复

使用道具 举报

2

主题

5442

帖子

5442

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2024-11-29 10:47 | 显示全部楼层
我尝试下,至少需要测试下才能知道是否可行。 其实逻辑上只要正式开盘时候无脑撤一次单就行。撤单后,正常的仓位调整逻辑本身自己就会触发信号执行了。

回复

使用道具 举报

2

主题

5442

帖子

5442

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2024-11-29 10:48 | 显示全部楼层

第3个,假如涨停板是10%,DYNAINFO(62)*(1+0.1)算出来后不用再加工了吧?比如四舍五入的问题,导致价格比涨停价正好多出一个价位,无效报价,导致成交不了” 最好是处理下。 或者你幅度稍微控制下,比涨停幅度稍微小点什么的应该也无大影响。
回复

使用道具 举报

43

主题

294

帖子

294

积分

Rank: 4

等级: 专业版

注册:
2024-6-21
曾用名:
 楼主| 发表于 2024-11-29 11:01 | 显示全部楼层
资深技术05 发表于 2024-11-29 10:48

第3个,假如涨停板是10%,DYNAINFO(62)*(1+0.1)算出来后不用再加工了吧?比如四舍五入的问题,导致价 ...

我也考虑到这个幅度问题了,。假如涨停板是10%,DYNAINFO(62)*(1+(0.1*0.99))应该就够了吧?
回复

使用道具 举报

43

主题

294

帖子

294

积分

Rank: 4

等级: 专业版

注册:
2024-6-21
曾用名:
 楼主| 发表于 2024-11-29 11:02 | 显示全部楼层
资深技术05 发表于 2024-11-29 10:47
我尝试下,至少需要测试下才能知道是否可行。 其实逻辑上只要正式开盘时候无脑撤一次单就行。撤单后,正常 ...

其实逻辑上只要正式开盘时候无脑撤一次单就行,这个方法挺好,如果测试能通过的话,帮忙写下这个的撤单代码吧
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 08:20 , Processed in 0.079721 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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