フォルツァ執行上の問題点 - ページ 59

 
Aleksey Lebedev:
あらかじめPositionSelectを行わずにPositionGetで。
PositionSelectは毎ティック、ブロック3の最後の情報出力の前に呼び出されますが、これも動作します。だから、これは明らかに理由になっていない。
 
ALIV:

マイケル、またディレイを使った「シート」を作ろうよ、つまらなくなっちゃうよ。:))))

オープニングには、いつ行くのですか?:)))))))

特に目新しいものはありません :)

 
Yury Kirillov:
PositionSelectは毎ティックごとに呼び出され、ブロック3の最後の情報出力の前にも呼び出されますから、これも動作します。だから、その理由は明らかにこのケースにはない。

時々、私は間違っているが、これは明らかにこの中で)

PositionSelect が呼び出さ れた時点の位置データの値。

OrderSend 以降は値が更新されない。

PositionSelect(...)==falseの場合、PositionGetの意味がない。


したがって、OrderSendの後、すぐに位置データを取得することはできません...非同期は悪です。

 
Aleksey Lebedev:

時々、私は間違っているが、これは明らかにこの中で)

PositionSelect が呼び出さ れた時点の位置データの値。

OrderSend 以降は値が更新されない。

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()))

がコンパイルできない...位置選択(_Symbol)

 
Aleksey Lebedev:

がコンパイルできない...位置選択(_Symbol)

コンパイルができず、古いプログラムのインスタンスが実行された......。
 
Aleksey Lebedev:

がコンパイルできない...位置選択(_Symbol)

記号を修正しました。

結論から言うと、あなたの言うとおりでした。これでブロック3は動作しませんが、これはポジションが選択されていないことを意味します。対談ありがとうございました:-)

スプーンは見つかったが、残滓は残っている。ポジションがなくなると、どうしてポジションのボリュームが 1になるのですか?

というのは、ドキュメントにそぐわない。

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

では、PositionSelect()の結果がFalseのときに 呼び出しても、位置情報は更新されないのでしょうか?残念!

 
Yury Kirillov:

では、PositionSelect()の結果がFalseのときに 呼び出しても、位置情報は更新されないのでしょうか?残念!

しかし、原理的には(PositionSelect() == false) - 位置がないので、PositionGet で問い合わせる必要はない) 論理的である。
 
位置の欠落が検出された場合でも、バッファ内のゴミを一掃する方が論理的だと思われます。念のため...
 
Михаил:
もう10ヶ月になるんですね...。
リトル...それくらいなら待てる...。
理由: