ブログトップ > スポンサー広告 > [Code] 配列を利用して新規ポジションを検出する

スポンサーサイト

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

ブログトップ > MT4Code > [Code] 配列を利用して新規ポジションを検出する

[Code] 配列を利用して新規ポジションを検出する

ポジションを持った状態について考えます。

現在ポジションを持った状態とその1つ前の状態は次の3つのパターンが考えられます。

(1)注文のない状態 → ポジションを持った状態
img2011122601.png

(2)待機注文の状態 → ポジションを持った状態
img2011122602.png

(3)ポジションを持った状態 → ポジションを持った状態(状態の変化なし)
img2011122603.png

それでは、新規ポジションを持った状態というのは上の(1)と(2)です。これを言葉で説明すると

(1)現在ポジションを持った状態の一つ前の状態に同じチケットと同じオーダータイプが存在しない場合。

(2)現在ポジションを持った状態の一つ前の状態と同じチケットでもオーダータイプが異なる場合。


具体的にプログラムしてみます。

配列に格納したデータから新規ポジションを持った場合に検出する方法を考えます。新規ポジションを持った場合を次の表で表しました。この表は前回の説明で使った同じものです。

img2011121901.png

この表を配列で表します。

[1]待機注文の状態:PreviousOrdersArray[4][5]
[2]ポジションを持った状態:CurrentOrdersArray[3][5]

この配列に上記のデータを格納します。

double PreviousOrdersArray[4][5] = { 8015456, OP_BUYLIMIT, 1.31785, 1.31085, 1.32785,
8015459, OP_SELLLIMIT, 1.32166, 1.32866, 1.31166,
8015483, OP_BUYSTOP, 1.3246, 1.3156, 1.3346,
8015510, OP_SELLSTOP, 1.31438, 1.32338, 1.30438 };

double CurrentOrdersArray[3][5] = { 8015456, OP_BUY, 1.31785, 1.31085, 1.32785,
8015483, OP_BUYSTOP, 1.3246, 1.3156, 1.3346,
8015510, OP_SELLSTOP, 1.31438, 132338, 1.30438 };

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

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

#define TICKET 0
#define ORDERTYPE 1
#define OPENPRICE 2
#define STOPLOSS 3
#define TAKEPROFIT 4

int CheckTimeInterval = 5;//注文内容を確認するための時間の間隔。

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

static int lastCheckTime = 0;
//Print("lastCheckTime: ", lastCheckTime);

if(TimeCurrent()-lastCheckTime < CheckTimeInterval) return(0);
lastCheckTime = TimeCurrent();

double PreviousOrdersArray[4][5] = { 8015456, OP_BUYLIMIT, 1.31785, 1.31085, 1.32785,
8015459, OP_SELLLIMIT, 1.32166, 1.32866, 1.31166,
8015483, OP_BUYSTOP, 1.3246, 1.3156, 1.3346,
8015510, OP_SELLSTOP, 1.31438, 1.32338, 1.30438 };

double CurrentOrdersArray[3][5] = { 8015456, OP_BUY, 1.31785, 1.31085, 1.32785,
8015483, OP_BUYSTOP, 1.3246, 1.3156, 1.3346,
8015510, OP_SELLSTOP, 1.31438, 132338, 1.30438 };

int dim1_size_Previous = ArrayRange(PreviousOrdersArray,0);
Print("dim1_size_Previous: ", dim1_size_Previous);//[1]待機注文の状態のオーダー数をプリントアウト

for(int i= 0;i<dim1_size_Previous;i++){
Print(PreviousOrdersArray[i][TICKET]," ",PreviousOrdersArray[i][ORDERTYPE]," ",PreviousOrdersArray[i][OPENPRICE]," ",PreviousOrdersArray[i][STOPLOSS]," ",PreviousOrdersArray[i][TAKEPROFIT]," ","\n");//[1]配列に格納したデータをプリントアウト
}

int dim1_size_Current = ArrayRange(CurrentOrdersArray,0);
Print("dim1_size_Current: ", dim1_size_Current);//[2]ポジションを持った状態のオーダー数

for(int j= 0;j<dim1_size_Current;j++){
Print(CurrentOrdersArray[j][TICKET]," ",CurrentOrdersArray[j][ORDERTYPE]," ",CurrentOrdersArray[j][OPENPRICE]," ",CurrentOrdersArray[j][STOPLOSS]," ",CurrentOrdersArray[j][TAKEPROFIT]," ","\n");//[2]配列に格納したデータをプリントアウト
}

img2011121902.png

int exist_TICKET = 0;
int same_TICKET_and_ORDERTYPE = 0;
int Opend_Num;//新規ポジションをもつオーダー番号
int Opend = 0;//新規ポジションを持った場合のフラッグ

for(i= 0;i<dim1_size_Current;i++){
if(CurrentOrdersArray[i][ORDERTYPE] != OP_BUY && CurrentOrdersArray[i][ORDERTYPE] != OP_SELL) continue;//[2]のCurrentOrdersArrayからポジションを持った状態の「チケット」を探します。
exist_TICKET = 1;
Opend_Num = i;
for(j = 0;j<dim1_size_Previous;j++){
if((CurrentOrdersArray[i][TICKET] == PreviousOrdersArray[j][TICKET]) && (CurrentOrdersArray[i][ORDERTYPE] != PreviousOrdersArray[j][ORDERTYPE])){//「チケット」が同じでも「オーダータイプ」が違う場合は新規ポジションとして検出します。
break;
}
else if((CurrentOrdersArray[i][TICKET] == PreviousOrdersArray[j][TICKET]) && (CurrentOrdersArray[i][ORDERTYPE] == PreviousOrdersArray[j][ORDERTYPE])){
same_TICKET_and_ORDERTYPE = 1;//「チケット」と「オーダータイプ」が同じ場合は検出から除外します。
break;
}
}
}

if(exist_TICKET==1 && same_TICKET_and_ORDERTYPE==0) Opend++;//現在ポジションを持っており、そのポジションは前の状態の「チケット」と「オーダータイプ」が同じでない場合は新規ポジションとしてフラッグをたてる
if(Opend > 0) Print("CurrentOrdersArray[Opend_Num][TICKET]: ", CurrentOrdersArray[Opend_Num][TICKET]);
else Print("Nothing");

img2011121903.png
スポンサーサイト

コメント

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

トラックバック

トラックバックURL: http://atslab.blog135.fc2.com/tb.php/50-5c19220a

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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。