ブログトップ > スポンサー広告 > [Code] 現在保有している注文を配列に格納する

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ブログトップ > MT4Code > [Code] 現在保有している注文を配列に格納する

[Code] 現在保有している注文を配列に格納する

現在保有している注文が次のよう場合を考えます。

[1]待機注文の状態
CurrentOrdersArray[ ][5]資料1

[2]ポジションを持った状態
CurrentOrdersArray[ ][5]資料2

上の図を表にしてみます。

[1]待機注文の状態
CurrentOrdersArray[ ][5]資料3

[2]ポジションを持った状態
CurrentOrdersArray[ ][5]資料4

上の表を2次元配列として表してみます。横は5項目、縦は注文数に応じるので任意の数になります。
CurrentOrdersArray[ ][5]資料6

-----------------------------------------------

//プログラムの先頭に次の記述をします。

//取得する注文内容の項目名を数字で定義します。全部で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]


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

▽注文一覧のインデックスが上位のもの(注文番号:8015456)から順に配列へ格納する場合
CurrentOrdersArray[ ][5]資料8

▽ポジションを持ってORDERTYPEが2→0に変更された
CurrentOrdersArray[ ][5]資料9
スポンサーサイト

コメント

コメントの投稿
  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL: http://atslab.blog135.fc2.com/tb.php/49-340d4195

profile

atslab

Author:atslab
ATSLABへようこそ!FXトレードに関する情報を発信しています。
著者はプログラマー、FXトレーダーです。情報環境学という大学の研究機関で研究員を経て独立。FXは裁量トレード、システムトレード、コンピュータによる自動売買をそれぞれ併用して取り引きしています。これまで取引ツールをいくつもプログラミングしてきました。その中から取引に有効なツールを提供していきたいと考えています。

entry
comment
trackback
archive
category
form
rss
link
qrcode
QR
copyright
Author by atslab

Designed by マンゴスチンw

ATSLAB(FX初心者が読んで面白い!外国為替の自動売買システム研究所)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。