OrderSelect()関数を使って、SELECT_BY_TICKETでポジションを選択するときには、ちょっと注意が必要で、SELECT_BY_POSのときと同じ要領でプログラムを組むと怪我をします。
具体的に分かりやすいように実験をしてみました。
まずは、上のように、外部パラメーターへチケット番号を入力できるようにしておきます。
スタート関数には、上のように、プールの場所を指定するための、OrderSelect()関数の三つ目のパラメーターについて、
①何も指定しない
②トレーディングプールを指定する
③ヒストリープールを指定する
という3種類のプログラムを用意し、それぞれコメントアウトします。
そうしたら、ショートポジションを一つ発注します。
上の画像のように、発注したショートポジションのチケット番号を外部パラメーターへ入力します。
すると、
なんと、3種類のプログラムのいずれの場合であっても、発注されたショートポジションが選択されています。
そこで、次に、そのショートポジションを決済してみました。
すると、
やはり、いずれの場合も、決済されたショートポジションを選択しています。
つまり、SELECT_BY_TICKETでポジションを選択するときは、OrderSelect()関数の3つ目のパラメーターはことごとく無視され、チケット番号で指定されたポジションが常に選択される、ということです。
みなさんの周りにもいませんか?
他人の話をまったく聞かずに自分勝手に行動する人…(笑)
コメントをお書きください