金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 4262|回复: 18

我的后台代码bug~帮忙看下怎么修改~

[复制链接]

63

主题

196

帖子

206

积分

Rank: 4

等级: 专业版

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


[PEL] 复制代码
//AC1---------
tbuyshort(GETREGVAL('taoge',str1&'_kp',0)=1,abs(ch)*p01,lmt,xxs,0,ac1,'');
if TBUYHOLDINGEX( ac1,'' ,1 )>=abs(ch)*p01 then begin
tsell(GETREGVAL('taoge',str1&'_kp',0)=0,abs(ch)*p01,lmt,xxs,0,ac1,'');
end
if TBUYHOLDINGEX( ac1,'' ,1 )<abs(ch)*p01 then begin
tbuyshort(GETREGVAL('taoge',str1&'_kp',0)=0,abs(ch)*p01-TBUYHOLDINGEX( ac1,'' ,1 ),lmt,xxs,0,ac1,'');
tsell(GETREGVAL('taoge',str1&'_kp',0)=0,TBUYHOLDINGEX( ac1,'' ,1 ),lmt,xxs,0,ac1,'');
end
tbuyshort(GETREGVAL('taoge',str1&'_kp',0)=2,abs(ch)*p01,lmt,xxs,0,ac1,'');


代码同上~
奇怪的事~同样的代码不同的机器跑出不同的信号~
大多数机器是不可能以下两个条件同时成立的~
TBUYHOLDINGEX( ac1,'' ,1 )>=abs(ch)*p01
TBUYHOLDINGEX( ac1,'' ,1 )<abs(ch)*p01

只有极个别机器上才出现这种情况~
我大概二十几台云主机~相同的代码~就出现一个~

我想问
1 什么原因造成的?
2 怎么修改这段代码?

本帖子中包含更多资源

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

x
回复

使用道具 举报

63

主题

196

帖子

206

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-6-8 11:33 | 显示全部楼层
tbuyshort(GETREGVAL('taoge',str1&'_kp',0)=1,abs(ch)*p01,lmt,xxs,0,ac1,'');
if TBUYHOLDINGEX( ac1,'' ,1 )>=abs(ch)*p01 then begin
tsell(GETREGVAL('taoge',str1&'_kp',0)=0,abs(ch)*p01,lmt,xxs,0,ac1,'');
end
if TBUYHOLDINGEX( ac1,'' ,1 )<abs(ch)*p01 then begin
tbuyshort(GETREGVAL('taoge',str1&'_kp',0)=0,abs(ch)*p01-TBUYHOLDINGEX( ac1,'' ,1 ),lmt,xxs,0,ac1,'');
tsell(GETREGVAL('taoge',str1&'_kp',0)=0,TBUYHOLDINGEX( ac1,'' ,1 ),lmt,xxs,0,ac1,'');

end
tbuyshort(GETREGVAL('taoge',str1&'_kp',0)=2,abs(ch)*p01,lmt,xxs,0,ac1,'');


就是同时触发了上面3段指令
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-6-8 13:41 | 显示全部楼层
看不太出啥问题,这种你要么加下调试输出的看下呢

DEBUGFILE('D:\TEST.TXT','当前持仓为%.2f',TBUYHOLDINGEX( ac1,'' ,1 ));
  DEBUGFILE('D:\TEST.TXT','当前数值为%.2f',abs(ch)*p01);
  DEBUGFILE('D:\TEST.TXT','当前条件1为为%.2f',TBUYHOLDINGEX( ac1,'' ,1 )>=abs(ch)*p01);
    DEBUGFILE('D:\TEST.TXT','当前条件2为为%.2f',TBUYHOLDINGEX( ac1,'' ,1 )<abs(ch)*p01);
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

63

主题

196

帖子

206

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-6-8 15:13 | 显示全部楼层
资深技术02 发表于 2021-6-8 13:41
看不太出啥问题,这种你要么加下调试输出的看下呢

DEBUGFILE('D:\TEST.TXT','当前持仓为%.2f',TBUYHOLD ...

这种bug出现几率很低~~而且是相同代码在不同机器上以极小概率出现~
不是那么容易调试的~
这样调试我会改一遍代码好麻烦~
有无办法规避?
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-6-8 15:17 | 显示全部楼层
是不是中间仓位有变化了,两个代码中间假设差了10ms,然后这10ms中间正好仓位变动了

规避得办法一定是知道原因和方向,然而目前没有办法知道原因得情况下不可能规避得了得

代码这块很多时候只能说时取调试,有些问题想象很难定位得
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

63

主题

196

帖子

206

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-6-8 15:20 | 显示全部楼层
if TBUYHOLDINGEX( ac1,'' ,1 )>=abs(ch)*p01  then
tsell(GETREGVAL('taoge',str1&'_kp',0)=0,abs(ch)*p01,lmt,xxs,0,ac1,'');
else begin
tbuyshort(GETREGVAL('taoge',str1&'_kp',0)=0,abs(ch)*p01-TBUYHOLDINGEX( ac1,'' ,1 ),lmt,xxs,0,ac1,'');
tsell(GETREGVAL('taoge',str1&'_kp',0)=0,TBUYHOLDINGEX( ac1,'' ,1 ),lmt,xxs,0,ac1,'');
end


改成这样应该就没事了吧?

哪怕
TBUYHOLDINGEX( ac1,'' ,1 )>=abs(ch)*p01
TBUYHOLDINGEX( ac1,'' ,1 )<abs(ch)*p01
同时成立也不会触发3个指令了吧?
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-6-8 15:26 | 显示全部楼层
是不是用了高频刷新了,if else对单次程序执行时可以避免这个问题,但多次执行得话也会下得
比如第一次执行前面得,第二次执行间隔1ms执行事后第二个条件满足。

如果单次执行得程序,不可能发生你上面问题得。
我觉得你改成if else然后还是最好配合调试看,代码编写中找问题一定是调试调试得,否者问题时无法得到解决得
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

63

主题

196

帖子

206

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-6-10 09:13 | 显示全部楼层
资深技术02 发表于 2021-6-8 15:26
是不是用了高频刷新了,if else对单次程序执行时可以避免这个问题,但多次执行得话也会下得
比如第一次执 ...

是用了高频刷新~0.5s刷新一次啊~


if else对单次程序执行时可以避免这个问题,但多次执行得话也会下得
咋多次执行也会下...
还有其他更好的办法规避吗??
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-6-10 09:16 | 显示全部楼层
就是你两次执行间隔之间,持仓是不是变了导致后面一个代码是满足条件所以下了。

这个没有办法避免,如果你的条件是这样写,同一时刻条件不可能同时满足,但是不同时刻条件可能是先后满足
如果还不理解电话我把
021-20339087
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

63

主题

196

帖子

206

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-6-10 09:23 | 显示全部楼层
同一时刻条件不可能同时满足,但是不同时刻条件可能是先后满足
明白了!

改成下面这样可能就没事了
//AC1---------
tbuyshort(GETREGVAL('taoge',str1&'_kp',0)=1,abs(ch)*p01,lmt,xxs,0,ac1,'');
if TBUYHOLDINGEX( ac1,'' ,1 )<abs(ch)*p01 then begin
tbuyshort(GETREGVAL('taoge',str1&'_kp',0)=0,abs(ch)*p01-TBUYHOLDINGEX( ac1,'' ,1 ),lmt,xxs,0,ac1,'');
tsell(GETREGVAL('taoge',str1&'_kp',0)=0,TBUYHOLDINGEX( ac1,'' ,1 ),lmt,xxs,0,ac1,'');
end
if TBUYHOLDINGEX( ac1,'' ,1 )>=abs(ch)*p01 then begin
tsell(GETREGVAL('taoge',str1&'_kp',0)=0,abs(ch)*p01,lmt,xxs,0,ac1,'');
end
tbuyshort(GETREGVAL('taoge',str1&'_kp',0)=2,abs(ch)*p01,lmt,xxs,0,ac1,'');
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 02:49 , Processed in 0.276067 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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