「SELECT_BY_TICKET」の謎

OrderSelect()関数を使って、SELECT_BY_TICKETでポジションを選択するときには、ちょっと注意が必要で、SELECT_BY_POSのときと同じ要領でプログラムを組むと怪我をします。

 

具体的に分かりやすいように実験をしてみました。

まずは、上のように、外部パラメーターへチケット番号を入力できるようにしておきます。

スタート関数には、上のように、プールの場所を指定するための、OrderSelect()関数の三つ目のパラメーターについて、


①何も指定しない

②トレーディングプールを指定する

③ヒストリープールを指定する


という3種類のプログラムを用意し、それぞれコメントアウトします。


そうしたら、ショートポジションを一つ発注します。

上の画像のように、発注したショートポジションのチケット番号を外部パラメーターへ入力します。




すると、

なんと、3種類のプログラムのいずれの場合であっても、発注されたショートポジションが選択されています。


そこで、次に、そのショートポジションを決済してみました。



すると、

やはり、いずれの場合も、決済されたショートポジションを選択しています。


つまり、SELECT_BY_TICKETでポジションを選択するときは、OrderSelect()関数の3つ目のパラメーターはことごとく無視され、チケット番号で指定されたポジションが常に選択される、ということです。


みなさんの周りにもいませんか?


他人の話をまったく聞かずに自分勝手に行動する人…(笑)