设为首页收藏本站

 找回密码
 注册
查看: 2227|回复: 6

疑难杂症:不合逻辑自动平仓问题--找到一种情况的原因 [复制链接]

Rank: 1

精华
0
UID
225220
积分
21
帖子
12
主题
1
阅读权限
10
注册时间
2015-12-16
最后登录
2018-3-21
发表于 2018-3-19 10:44:38 |显示全部楼层
本帖最后由 keyneshayek 于 2018-3-20 09:55 编辑

本人才疏学浅,感谢前辈帮助!

环境:旗舰版v5466,模拟账户。

问题:公式在开仓后立即平仓,平仓不合公式逻辑。使用几个品种测试公式,有的品种出现问题,有的没有出现,没有发现什么规律。

通过在公式中添加多条Fileappend语句,经过仔细检查后,发现平仓指令由止损语句块发出。比如,多头止损条件为:止损价不为InvalidNumeric && 现价<止损价 && 没有发送过平仓单。
Else If( (Value(GetTBProfileString(SectionName,Data0.Symbol+"_S1LongStopLossPrice"))<>InvalidNumeric) && (Data0.Q_Last<Value(GetTBProfileString(SectionName,Data0.Symbol+"_S1LongStopLossPrice"))) && (Value(GetTBProfileString(SectionName,Data0.Symbol+"_HasSendSell"))==0) );

在上述条件语句{}中第一句加入Fileappend,结果见下图:
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 1

精华
0
UID
225220
积分
21
帖子
12
主题
1
阅读权限
10
注册时间
2015-12-16
最后登录
2018-3-21
发表于 2018-3-20 09:28:06 |显示全部楼层
顶一下

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
发表于 2018-3-20 09:44:42 |显示全部楼层
写一个简单的测试代码 。。
只有这一个开仓条件、指令,以及这一个平仓条件与指令。。
并同时分别使用fileappend输出日志后,再观察一下是同样的表现 吗?

使用道具 举报

Rank: 1

精华
0
UID
225220
积分
21
帖子
12
主题
1
阅读权限
10
注册时间
2015-12-16
最后登录
2018-3-21
发表于 2018-3-20 09:51:38 |显示全部楼层
目前通过测试,发现自动平仓有一种情况的原因。
比如公式A_SendOrder空头开仓,然后查询委托单状态,当状态为Enum_Filled时,通过A_SellAvgPrice()查询成交价为1280.5,最后计算1280.5加上10等于1290.5形成止损价。如果以后Data0.Q_Last>1290.5,则止损。
TB出现的问题是,A_SellAvgPrice()得到了错误的返回值。比如返回值为0,则止损价就变成0+10=10,而Data0.Q_Last得到的现价>10,进而止损。于是就会产生一开仓就立即平仓的问题。如果返回值连续出错,就会不停止损。A函数返回值错误这种情况论坛里有讨论。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
发表于 2018-3-20 10:15:10 |显示全部楼层
keyneshayek 发表于 2018-3-20 09:51
目前通过测试,发现自动平仓有一种情况的原因。
比如公式A_SendOrder空头开仓,然后查询委托单状态,当状态 ...

开仓后,你不要等一等成交回报返回本地后再去查询成交价的吗??
一发单就查询本次开仓的成交价,这个不太合理吧?
你现在文字说的是a_sellavgprice取值错误。但是前面按你日志里显示的说法是软件对465<=464这个判断有偏差啊。。。所以才让你用简单代码来测试逻辑的啊。

使用道具 举报

Rank: 1

精华
0
UID
225220
积分
21
帖子
12
主题
1
阅读权限
10
注册时间
2015-12-16
最后登录
2018-3-21
发表于 2018-3-20 10:23:09 |显示全部楼层
本帖最后由 keyneshayek 于 2018-3-20 10:24 编辑
小米 发表于 2018-3-20 10:15
开仓后,你不要等一等成交回报返回本地后再去查询成交价的吗??
一发单就查询本次开仓的成交价,这个不 ...


感谢版主老师秒回!
1 公式里有专门语句进行判断,等到最新回报返回后再去查询成交价。以前没有判断,逻辑上会出问题。这个细节我没写出来。
2 A_SellAvgPrice()错误返回值是目前我发现平仓的一种原因。正文里说的问题465<=464原因没找到,还是抓耳挠腮啊!我按你的思路试一下再反馈。
谢谢!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
发表于 2018-3-20 10:29:13 |显示全部楼层
keyneshayek 发表于 2018-3-20 10:23
感谢版主老师秒回!
1 公式里有专门语句进行判断,等到最新回报返回后再去查询成交价。以前没有判断,逻 ...

a_sellavgprice的价格,我建议你拿输出值对帐户当时的实际信息对比看看,是否没有统计当前这一笔的委托成交?
公式过于复杂,代码过多后,有时表面上以为的与实际委托的可能并非同一个条件或是同一个值。让你用简单的代码测试就是想排除这个可能性。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-3-29 16:49

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部