堡垒。执法问题 - 页 59

 
Aleksey Lebedev:
在PositionGet中,没有事先进行PositionSelect。
PositionSelect在每个tick 和第3块中最后一个信息输出之前被调用,它也会工作。所以这显然不是原因。
 
ALIV:

迈克尔,让我们再来一张有延迟的 "床单",这越来越无聊了。:))))

你什么时候去参加开幕式?:)))))))

没有什么新的东西 :)

 
Yury Kirillov:
你错了,PositionSelect是在每个tick和第3块最后一个信息输出之前调用的,它也会工作。所以,原因显然不在本案中。

有时我也会弄错,但情况并非如此,显然在这)

PositionSelect被调用 时的位置数据值。

订单发送后,这些值不会被更新。

如果PositionSelect(...)==false,PositionGet就没有意义了。


因此:在OrderSend之后,位置数据不能立即被获取......异步是一种邪恶。

 
Aleksey Lebedev:

有时我也会弄错,但情况并非如此,显然在这)

PositionSelect被调用 时的位置数据值。

订单发送后,这些值不会被更新。

如果PositionSelect(...)==false,PositionGet就没有意义了。


因此:在OrderSend之后,位置数据不能立即被检索......异步性是一种邪恶。

我很乐意同意--我不以承认错误为耻。但是请看:在我们进入第3块之前,在处理程序OnTick()的最开始,你提到的PositionSelect()被调用,而没有OrderSend()被执行。在代码中,我有意在第1、2和3块的执行之间添加了一个1000点的延迟计数器--它是关于异步的,我认为在测试器中,这足以解决这个位置。此外,我还改变了第3块的条件。

   {if((gTicks>3000)&&(Step==2)&&(PositionSelect()))
   {
      Print("INFO>> *** VOLUME=",PositionGetDouble(POSITION_VOLUME),
                        " *** ID=",PositionGetInteger(POSITION_IDENTIFIER),
                        " *** TYPE=",EnumToString((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)),
                        " *** OrdersTotal()=",OrdersTotal());
      Step=3;
      return;
   }}//if((gTicks>3000)&&(Step==2))

结果没有改变:平仓指令被执行,但头寸大小仍然等于1。

2015.10.27 18:55:14.986 2015.10.26 10:00:02   INFO>> *** VOLUME=1.0 *** ID=2 *** TYPE=POSITION_TYPE_SELL *** OrdersTotal()=0

:-(

 
   {if((gTicks>3000)&&(Step==2)&&(PositionSelect()))

不应编译...PositionSelect(_Symbol)

 
Aleksey Lebedev:

不应编译...PositionSelect(_Symbol)

它没有编译 - 它运行了一个旧的程序实例...
 
Aleksey Lebedev:

不应编译...定位选择(_Symbol

纠正了_符号。

一句话:你是对的!现在第3块不起作用了,这意味着位置没有被选中。谢谢你的对话!:-)

勺子已被找到,但残留物仍在。如果没有更多的头寸,头寸的体积 怎么会等于1?

这不符合文件的规定。

Функция PositionSelect() копирует данные о позиции в программное окружение, и последующие вызовы PositionGetDouble(), PositionGetInteger() и PositionGetString() 
возвращают ранее скопированные данные. Это означает, что самой позиции может уже и не быть (или же она изменилась по объему, направлению и т.д.), 
а данные этой позиции можно еще получать. Для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelect() 
непосредственно перед обращением за ними.

那么,调用PositionSelect()的结果为false时,不会更新位置信息?太糟糕了!

 
Yury Kirillov:

那么,调用PositionSelect()的结果为false时,不会更新位置信息?太糟糕了!

是的,但原则上是符合逻辑的(PositionSelect() == false)--没有位置,也没有必要通过PositionGet来询问它)
 
在我看来,当检测到一个缺失的位置时,仍然清理缓冲区中的垃圾会更符合逻辑。以防万一...
 
Михаил:
现在已经有10个月了.....
Little....,可以等上那么久......