上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--月--日(--)--時--分|スポンサー広告
|コメント -
|トラックバック -
|Λ
現在保有している注文が次のよう場合を考えます。
[1]待機注文の状態
![CurrentOrdersArray[ ][5]資料1](http://blog-imgs-33.fc2.com/a/t/s/atslab/123.jpg)
[2]ポジションを持った状態
![CurrentOrdersArray[ ][5]資料2](http://blog-imgs-33.fc2.com/a/t/s/atslab/201112131637428fb.png)
上の図を表にしてみます。
[1]待機注文の状態
![CurrentOrdersArray[ ][5]資料3](http://blog-imgs-33.fc2.com/a/t/s/atslab/201112131656301ea.png)
[2]ポジションを持った状態
![CurrentOrdersArray[ ][5]資料4](http://blog-imgs-33.fc2.com/a/t/s/atslab/20111213165714073.png)
上の表を2次元配列として表してみます。横は5項目、縦は注文数に応じるので任意の数になります。
![CurrentOrdersArray[ ][5]資料6](http://blog-imgs-33.fc2.com/a/t/s/atslab/201112082344404d0.png)
-----------------------------------------------
//プログラムの先頭に次の記述をします。
//取得する注文内容の項目名を数字で定義します。全部で5項目あります。2次元の表における列の名前と考えることができます。
#define TICKET 0
#define ORDERTYPE 1
#define OPENPRICE 2
#define STOPLOSS 3
#define TAKEPROFIT 4
int CurrentOrdersArray[][5];//注文内容を格納する2次元配列。1次元は任意の数になるので要素数は定義できません。2次元の要素数は5になります。
int CurrentOrdersNum = 0;//注文内容のリストの番号を格納する変数。初期値は0。
int CheckTimeInterval = 5;//注文内容を確認するための時間の間隔。
-----------------------------------------------
static int lastCheckTime = 0;//静的変数として定義。
if(TimeCurrent()-lastCheckTime < CheckTimeInterval) return(0);
lastCheckTime = TimeCurrent();//lastCheckTimeは静的変数を宣言しているので、関数が終了した後も、変数の値、ここではTimeCurrent()の値を格納して失いません。
int orders = OrdersTotal();//注文内容のリストの数。この数が配列CurrentOrdersArrayの1次元の要素数です。
ArrayResize(CurrentOrdersArray,orders);//配列の1次元の要素数を設定。表の行数を設定したと考えることができます。
for(int i= 0;i<orders;i++) CurrentOrdersArray[i][0]=0;//表の1項目(TICKET)の要素をすべて0にします。
![CropperCapture[2]](http://blog-imgs-33.fc2.com/a/t/s/atslab/20111213152556929.png)
int dim1_size = ArrayRange(CurrentOrdersArray,0);//確認のため...1次元の要素数を取得。つまり表の行数を取得します。上の表では行数は4です。
Print("dim1_size(1): ", dim1_size);//確認のため...MT4のターミナルでリストアップされている注文の数と同じ数になるはずです。
CurrentOrdersNum = 0;
for(int cnt=orders-1; cnt>=0; cnt--){//注文一覧のインデックスが下位のものから順に配列へ格納する場合
//for(int cnt=0; cnt<=orders-1; cnt++){//注文一覧のインデックスが上位のものから順に配列へ格納する場合
OrderSelect(cnt,SELECT_BY_POS);
if(OrderSymbol() == Symbol() && (
OrderType() == OP_BUY || OrderType() == OP_SELL ||
OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT ||
OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP))
{
CurrentOrdersArray[CurrentOrdersNum][TICKET] = OrderTicket();
CurrentOrdersArray[CurrentOrdersNum][ORDERTYPE] = OrderType();
CurrentOrdersArray[CurrentOrdersNum][OPENPRICE] = OrderOpenPrice()/Point;
CurrentOrdersArray[CurrentOrdersNum][STOPLOSS] = OrderStopLoss()/Point;
CurrentOrdersArray[CurrentOrdersNum][TAKEPROFIT] = OrderTakeProfit()/Point;
CurrentOrdersNum++;
}
}//for
dim1_size = ArrayRange(CurrentOrdersArray,0);
Print("dim1_size(2): ", dim1_size);
for(i=0; i
{
Print("CurrentOrdersArray[", i, "][TICKET]: ", CurrentOrdersArray[i][TICKET], "\n");
Print("CurrentOrdersArray[", i, "][ORDERTYPE]: ", CurrentOrdersArray[i][ORDERTYPE], "\n");
Print("CurrentOrdersArray[", i, "][OPENPRICE]: ", CurrentOrdersArray[i][OPENPRICE], "\n");
Print("CurrentOrdersArray[", i, "][STOPLOSS]: ", CurrentOrdersArray[i][STOPLOSS], "\n");
Print("CurrentOrdersArray[", i, "][TAKEPROFIT]: ", CurrentOrdersArray[i][TAKEPROFIT], "\n");
}
▽注文一覧のインデックスが
下位のもの(注文番号:8015510)から順に配列へ格納する場合
![CurrentOrdersArray[ ][5]資料7](http://blog-imgs-33.fc2.com/a/t/s/atslab/678.jpg)
▽注文一覧のインデックスが
上位のもの(注文番号:8015456)から順に配列へ格納する場合
![CurrentOrdersArray[ ][5]資料8](http://blog-imgs-33.fc2.com/a/t/s/atslab/987.jpg)
▽ポジションを持ってORDERTYPEが2→0に変更された
スポンサーサイト
12月08日(木)22時51分|MT4Code
|コメント0
|トラックバック 0
|Λ
トラックバックURL: http://atslab.blog135.fc2.com/tb.php/49-340d4195