错误、漏洞、问题 - 页 1887

 
Vladimir Karputov:

在我看来,你并没有检查我给你看的代码。这么说吧:你先检查,然后再问问题。

我不需要验证它,我可以看到它返回了它应该返回的东西。

我说的是函数的第一次使用

 
Alexandr Bryzgalov:

我不需要验证它,我可以看到它返回我需要的东西

我说的是使用函数的第一个变体


好吧,那么。让我们从尾部开始。

1.PositionGetInteger。

该函数返回先前使用该函数选择的未平仓头寸的请求属性...

也就是说,在使用PositionGetInteger 之前,必须先选定位置。


2.我们使用PositionGetTicket来选择位置。

返回值。

的职位票。在执行不成功的情况下,它返回0。


你在哪里检查(在循环之后)PositionGetTicket是否有返回?没有检查,顺便说一下,那里返回的是 "零"--也就是说,PositionGetTicket被触发了,出现了错误--这相当于选择了一个不存在的位置。然后,在没有检查PositionGetTicket的结果的情况下,你试图从不存在的位置获得其属性。而在那里,在不存在的位置的属性中,要么是垃圾,要么只是空结构的数据。


总结一下:如果不检查PositionGetTicket是否返回 "零",你就不能再往前走了。

 
Vladimir Karputov:


好吧,那么。让我们从尾部开始。

1.PositionGetInteger。

该函数返回先前使用该函数选择的未平仓头寸的请求属性...

也就是说,在使用PositionGetInteger 之前,必须先选择位置。


2.我们使用PositionGetTicket来选择位置。

返回值。

的职位票。在执行不成功的情况下,它返回0。


你在哪里检查(在循环之后)PositionGetTicket是否有返回?没有检查,顺便说一下,那里返回的是 "零"--也就是说,PositionGetTicket被触发了,出现了错误--这相当于选择了一个不存在的位置。然后,在没有检查PositionGetTicket的结果的情况下,你试图从不存在的位置获得其属性。而在那里,在不存在的位置的属性中,要么是垃圾,要么只是空结构的数据。


总结一下:如果不检查PositionGetTicket是否返回 "零",你就不能再往前走了。

谢谢你,非常详细,很有帮助。
 
Vladimir Karputov:


好吧,让我们这样走。让我们从尾部开始。

1.PositionGetInteger。

该函数返回先前使用该函数选择的未平仓头寸的请求属性...

也就是说,在使用PositionGetInteger 之前,必须先选择位置。


2.我们通过使用PositionGetTicket来选择位置。

返回值。

的职位票。在执行不成功的情况下,它返回0。


你在哪里检查(在循环之后)PositionGetTicket是否有返回?没有检查,顺便说一下,那里返回的是 "零"--也就是说,PositionGetTicket被触发了,出现了错误--这相当于选择了一个不存在的位置。然后,在没有检查PositionGetTicket的结果的情况下,你试图从不存在的位置获得其属性。而在那里,在不存在的位置的属性中,要么是垃圾,要么只是空结构的数据。


总结一下:如果不检查PositionGetTicket是否返回 "0",你就不能再进一步。

不需要解释你自己 )

这不是问题所在。

正确解读:一个函数在不同情况下返回相同的值可以吗?

该函数可以这样做吗?
 
Vladimir Karputov:

总结一下:如果不检查PositionGetTicket是否返回 "0",就不能继续前进。

你可以

关于交易、自动交易系统和策略测试的论坛

虫子,虫子,问题

fxsaber, 2017.05.12 11:19

做一个检查(PositionGetInteger(POSITION_TICKET) > 0)是符合逻辑的。
 
Alexandr Bryzgalov:

该函数在不同情况下返回相同的值?

该函数这样做对吗?
不幸的是,是的。

关于交易、自动交易系统和策略测试的论坛

虫子,虫子,问题

fxsaber, 2017.05.12 11:29

是的,但任何其他价值也会产生误导。
 
Alexandr Bryzgalov:

1.你不需要解释你自己)。

这不是重点

2.正确理解:一个函数在不同情况下返回相同的值可以吗?

一个函数可以这样做吗?


1.你是一个粗鲁的人,在你的代码中也犯了一个错误,但不想承认它。

2.该功能的运行绝对正确。因 为它(PositionGetInteger(POSITION_TYPE))只能返回2个值,即POSITION_TYPE_BUY或POSITION_TYPE_SELL但是,在没有选择位置的情况下(而且你没有选择它--你没有检查到底选择了什么),就从(PositionGetInteger(POSITION_TYPE))中要求什么,是不计 后果的。


一句话:当你的代码写得有逻辑错误时--你根本无权向系统函数要求什么。

 
Vladimir Karputov:

一句话:当你的代码写得有逻辑错误时--你根本无权向系统功能要求什么。

一个很好的例子是当问题从未被回答。
 
Vladimir Karputov:


1.你是一个粗鲁的人,在代码中犯了一个错误,但不愿承认。

2.该功能的运行绝对正确。因 为它(PositionGetInteger(POSITION_TYPE))只能返回两个值,即POSITION_TYPE_BUY或POSITION_TYPE_SELL但是,在没有选择位置的情况下(而且你没有选择它--你没有检查到底选择了什么),就从(PositionGetInteger(POSITION_TYPE))中要求什么,是不计 后果的。


一句话:当你的代码写得有逻辑错误时,你根本没有权利向系统函数要求什么。

对不起,有人看不出问题,这不是我的错。

承认代码中存在故意的错误这一事实。

而且我知道如何修复它。

但问题是不同的。

 

如果输入参数不正确,为什么PositionGetInteger(POSITION_TYPE)函数 会返回一个购买值(等于0),而不是一个错误值(等于0)?