金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 3800|回复: 8

重复发单问题

[复制链接]

40

主题

110

帖子

120

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
发表于 2021-6-17 11:00 | 显示全部楼层 |阅读模式

IF TBUYHOLDINGex(AC,STKLABEL,1)=0 AND TREMAINQTY(1,AC,STKLABEL)=0 AND BCON1  THEN
    BEGIN
    TSELLSHORT(TSELLHOLDINGEX(AC,STKLABEL,1)>0,TSELLHOLDINGEX(AC,STKLABEL,1),LMT,CLOSE);
    TBUY(1 ,TN,LMT,CLOSE);
END


IF TBUYHOLDINGex(AC,STKLABEL,1)=0 AND TREMAINQTY(1,AC,STKLABEL)=0 AND BCON2  THEN
    BEGIN
    TSELLSHORT(TSELLHOLDINGEX(AC,STKLABEL,1)>0,TSELLHOLDINGEX(AC,STKLABEL,1),LMT,CLOSE);
    TBUY(1 ,TN,LMT,CLOSE);
END



问题如下:

1、基本情况:同时交易50个品种,1分钟周期,一个交易日大约有800次左右的交易;
2、现在大部分的交易都正常,但总是有几笔重复发单的交易,且是在同一时间同一价格发单的交易。详见委托记录和后台监控记录(重复发单的记录已在序号前用****标示出);
(1)BargainList文件。序号825、826的硅铁,880-883的橡胶,886-888的轧卷板。
(2)AccountExecList文件。序号193-194,139-141,132-134

在上述文件中可以看到,每笔交易都是一开一平对应的,就是上述异常中出现不对应,一平两开或直接两开。


3、在上面的代码中,当前价格是有可能同时既满足BCON1又满足BCON2的,但是发单前已用BUYHOLDINGex(AC,STKLABEL,1)=0 AND TREMAINQTY(1,AC,STKLABEL)=0做了限制,按道理BCON1触发后,BCON2就不会被触发;
4、由于是在同一时间和同一价格同时发单的,有没可能是BCON1自身被重复触发了?
5、请帮我检查UYHOLDINGex(AC,STKLABEL,1)=0 AND TREMAINQTY(1,AC,STKLABEL)=0这样用来限制开仓的写法有没问题?是不是这样检查持仓的方法不正确而导致开仓指令被重复触发的?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-6-17 11:12 | 显示全部楼层
未成交委托数量时需要单子下到柜台以后才会有反馈的,对于检测太短情况他无法判断的
TISPRVREMAIN(1 )用这个上一笔委托是否未成交来判断,如果上一个时未成交,这个函数返回1
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

40

主题

110

帖子

120

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-6-17 11:28 | 显示全部楼层
用TISPRVREMAIN(1 )可能不符合我的设计要求,因为对于上一个信号的未成交单,我要求是一直挂着不追撤单的。
如果在本次信号开仓前用TISPRVREMAIN(1 )判断,它因数上一个信号所挂着的委托单而返回1?

我的意思是TISPRVREMAIN(1 )是只判断本次信号的上一次委托呢?还是会把上一次信号所留下的未成交委托也进行判断?
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-6-17 11:30 | 显示全部楼层
你本次下单后不就是最新的上一次委托了吗
上一次信号委托就不存在了呀,你可以他把想象成一个x
x=1
x=2

第一次是1没错,但是你本次信号赋值2他,就只会是2,他是只有一个值的
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

40

主题

110

帖子

120

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-6-17 11:38 | 显示全部楼层
资深技术02 发表于 2021-6-17 11:30
你本次下单后不就是最新的上一次委托了吗
上一次信号委托就不存在了呀,你可以他把想象成一个x
x=1

谢谢您!我测试一下看看。
回复

使用道具 举报

40

主题

110

帖子

120

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-6-17 15:14 | 显示全部楼层
用了TISPRVREMAIN(1 )后,是没重复发单了,但是新问题又来了,变成不发单了

我再描述一下我的需求:

程序内有A、B、C、D等开多条件
A信号发单后没成交,不撤单不追单,等B信号出现后再把A信号未成交的委托撤掉。
但是B信号在开仓前又需要TISPRVREMAIN(1 )来做限制,以免B信号重复下单。

现在新的问题就是B信号这里用TISPRVREMAIN(1 )后,TISPRVREMAIN(1 )会因为A信号未成交单的存在而返回1,这样就造成B信号不成立。

请问怎么解决?谢谢!
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-6-17 15:47 | 显示全部楼层
if 开仓条件 and EXTGBDATA('a')=0 then
begin
        EXTGBDATASET('a' ,1 );
        tbuy();
END

if 重新初始0的条件 then
begin
        EXTGBDATASET('a' ,0);
END


要么你自己用这种全局变量去管理,首先a的变量是0,然后开仓触发一次后设置位1,这样就不会再执行程序。
接着管理好要重新把变量变成0的时刻,比如撤单后或者平仓后
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

40

主题

110

帖子

120

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-6-17 18:41 | 显示全部楼层
谢谢!我也有写用全局变量来解决此问题的版本,但又要面临由于软件崩溃而造成变量丢失的问题。所以才想用软件自带的后台函数来处理交易流程的。唉,看来也只能用全局变量了。
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-6-17 20:50 | 显示全部楼层
一方面你看下崩溃的重现情况多吗,可能是哪些情况下引起主要看程序是不是运行时候很卡导致
另外,可以考虑用写ini的方式记录,相比上面这种全局变量他好处就是直接写到硬盘文件的,崩溃后记录已经记录到了

具体你可以搜下函数列表里write开头一个写ini的,用法和全局变量其实类似
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 18:42 , Processed in 0.264755 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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