MQLで全ポジション/待機注文を決済/削除する際の注意点

MetaTrader用言語のMQLで全ポジションの決済や全待機注文を削除するコーディングでは、下記赤字部分に注意が必要です。つまり全注文をループで回す時にインデクッスを増やすのではなく、減らすやり方でないといけません。

理由は注文を決済/削除するとインデクッスが更新されるからです。例えば「0, 1, 2」と並んでいた注文で「1」が決済されるとインデクッス「2」だったものが「1」に更新されます。このようにループを回している最中にインデクッスが更新されてしまうので(どんどんインデクッスが減っていく)、インデクッスを減らすやり方でループを回さないと処理されない注文が発生してしまうのです。

コードだけ見ていると気づきにくいポイントなので要注意です。

NG
for(int i=0; i<OrdersTotal(); i++)
{
 //注文毎の処理
}
 
OK
for(int i=OrdersTotal()-1; i>=0; i–)
{
 //注文毎の処理
}