識別する対象が違う
EAを自作する際にはマジックナンバーとチケット番号の2つの番号を使いこなさなければなりません。どちらも自作する上で必須の概念なので、確実に理解しておきましょう。
ここの理解を適当にしちゃうと、自作も改造もうまくいきません。
マジックナンバーはオーダー(注文)がどのEAによるものなのかを識別するための番号です。各オーダーに紐付けたラベルと理解すると分かりやすいかもしれません。パラメーターとして殆どのEAでマジックナンバーを設定できるようになっていますね。
※個人的には番号(数値)よりもラベル(文字列)の方が良かったんじゃないかと思います。実際、cAlgoではマジックナンバーに相当するものはラベルとなっています。
チケット番号はOrderSend()でオーダーを送信した時に自動的に付番される一意の番号です。オーダーを変更OrderModify()、削除OrderDelete()、決済OrderClose()する際にはこのチケット番号を使います。
マジックナンバーはEAを識別するため、チケット番号はオーダーを識別するための番号と覚えておきましょう。
ところで、MQL4では、特定のマジックナンバーのオーダーを取り出すという発想はなく、存在するオーダーの中で特定のマジックナンバーのオーダーを見つけ出すという発想になります。
プログラムで書くとこんな感じになります。
extern int MagicNumber = 12345; // 中略 // 全オーダー分ループ for(int i = 0; i < OrdersTotal(); i++){ // オーダーが見つからなかったらループ終了 if(OrderSelect(i, SELECT_BY_POS) == false){ break; } // 取得したオーダーの通貨ペアが挿入チャートの通貨ペアと異なる場合 // または // 取得したオーダーのマジックナンバーがEAパラメーターのMagicNumberと異なる場合 // は次のオーダーにスキップ if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber){ continue; } // 取得したオーダーのチケット番号 int ticket = OrderTicket(); //-------------------------------------------- // 取得したオーダーに対して何らかの処理を実施 //-------------------------------------------- }
トレーダーの思考回路とMQL4のロジック構造が一致しないので気持ち悪く感じるでしょう。慣れるしかありません。