| ブログトップ |
現在のページ ≫ 次のページ
今度は
ORDERTYPE以外の注文内容が変更された状態について考えます。
■注文を持った状態 → 注文を持った状態(ORDERTYPE以外の注文内容が変更)
上の例では、STOPLOSSの値が1つ前の状態とで異なります。
1つ前の状態の同じチケットで、ORDERTYPE以外の注文内容が変更された場合について、具体的にプログラムしてみます。
[1]注文を持った状態:PreviousOrdersArray[1][5]
[2]注文を持った状態:CurrentOrdersArray[1][5]
-----------------------------------------------
int start()
{
int counted_bars=IndicatorCounted();
//----
static int lastCheckTime = 0;
//Print("lastCheckTime: ", lastCheckTime);
if(TimeCurrent()-lastCheckTime < CheckTimeInterval) return(0);
lastCheckTime = TimeCurrent();
double PreviousOrdersArray[1][5] = { 8015456, OP_BUY, 1.31785, 1.31085, 1.32785 };
double CurrentOrdersArray[1][5] = { 8015456, OP_BUY, 1.31785, 1.31700, 1.32785 };
int dim1_size_Previous = ArrayRange(PreviousOrdersArray,0);
Print("dim1_size_Previous: ", dim1_size_Previous);
for(int i= 0;i
Print(PreviousOrdersArray[i][TICKET]," ",PreviousOrdersArray[i][ORDERTYPE]," ",PreviousOrdersArray[i][OPENPRICE]," ",PreviousOrdersArray[i][STOPLOSS]," ",PreviousOrdersArray[i][TAKEPROFIT]," ","\n");
}
int dim1_size_Current = ArrayRange(CurrentOrdersArray,0);
Print("dim1_size_Current: ", dim1_size_Current);
for(int j= 0;j Print(CurrentOrdersArray[j][TICKET]," ",CurrentOrdersArray[j][ORDERTYPE]," ",CurrentOrdersArray[j][OPENPRICE]," ",CurrentOrdersArray[j][STOPLOSS]," ",CurrentOrdersArray[j][TAKEPROFIT]," ","\n");
}
int Modified_Num;
int Modified = 0;
int FixProfit_Num;
int FixProfit = 0;
for(i= 0;i<dim1_size_Current;i++){//*2
for(j = 0;j<dim1_size_Previous;j++){//*3
if(CurrentOrdersArray[i][TICKET] == PreviousOrdersArray[j][TICKET]){//*4
if(CurrentOrdersArray[i][OPENPRICE] != PreviousOrdersArray[j][OPENPRICE] ||
CurrentOrdersArray[i][STOPLOSS] != PreviousOrdersArray[j][STOPLOSS] ||
CurrentOrdersArray[i][TAKEPROFIT] != PreviousOrdersArray[j][TAKEPROFIT]){//*5
Modified_Num = i;
Modified++;
//if(Modified > 0) Print("Modified: ",CurrentOrdersArray[i][TICKET]);
if((CurrentOrdersArray[i][ORDERTYPE] == OP_BUY &&
CurrentOrdersArray[i][STOPLOSS] > CurrentOrdersArray[i][OPENPRICE] &&
PreviousOrdersArray[j][STOPLOSS] <= CurrentOrdersArray[i][OPENPRICE] )||
(CurrentOrdersArray[i][ORDERTYPE] == OP_SELL &&
CurrentOrdersArray[i][STOPLOSS] < CurrentOrdersArray[i][OPENPRICE] &&
PreviousOrdersArray[j][STOPLOSS] >= CurrentOrdersArray[i][OPENPRICE] )){//*6
FixProfit_Num = i;
FixProfit++;
}//*6
}//*5
break;
}//*4
}//*3
}//*2
if(Modified > 0) Print("CurrentOrdersArray[Modified_Num][TICKET]: ", CurrentOrdersArray[Modified_Num][TICKET]);
else Print("Nothing: Modified");
if(FixProfit > 0) Print("CurrentOrdersArray[FixProfit_Num][TICKET]: ", CurrentOrdersArray[FixProfit_Num][TICKET]);
else Print("Nothing: FixProfit");
//----
return(0);
}
スポンサーサイト
01月05日(木)17時44分|MT4Code
|コメント0
|トラックバック 0
|Λ
| ブログトップ |
現在のページ ≫ 次のページ
今度は
指値逆指値のキャンセルがあった状態について考えます。
1つ前の状態が指値逆指値の注文を持っていた場合については次の2つのパターンが考えられます。
(1)指値逆指値の注文を持った状態 → 注文のない状態
(2)指値逆指値の注文を持った状態 → 指値逆指値の注文を持った状態(状態の変化なし)
指値逆指値のキャンセルがあった場合は(1)です。これを言葉で説明すると
(1)
1つ前の状態で指値逆指値の注文を持ち、現在の状態ではその同じチケットは存在しない場合
具体的にプログラムしてみます。
[1]指値逆指値の注文を持った状態:PreviousOrdersArray[1][5]
[2]注文のない状態:CurrentOrdersArray[1][5]
-----------------------------------------------
int start()
{
//----
static int lastCheckTime = 0;
//Print("lastCheckTime: ", lastCheckTime);
if(TimeCurrent()-lastCheckTime < CheckTimeInterval) return(0);
lastCheckTime = TimeCurrent();
double PreviousOrdersArray[1][5] = { 8015456, OP_BUYLIMIT, 1.31785, 1.31085, 1.32785};
double CurrentOrdersArray[1][5] = {};
int dim1_size_Previous = ArrayRange(PreviousOrdersArray,0);
Print("dim1_size_Previous: ", dim1_size_Previous);
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");
}
int dim1_size_Current = ArrayRange(CurrentOrdersArray,0);
Print("dim1_size_Current: ", dim1_size_Current);
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");
}
int exist_PreviousTICKET = 0;
int same_CurrentTICKET = 0;
int PO_Closed_Num;
int PO_Closed = 0;
for(i= 0;i<dim1_size_Previous;i++){
if(PreviousOrdersArray[i][ORDERTYPE] == OP_BUY || PreviousOrdersArray[i][ORDERTYPE] == OP_SELL) continue;
exist_PreviousTICKET = 1;
PO_Closed_Num = i;
for(j = 0;j<dim1_size_Current;j++){
if(PreviousOrdersArray[i][TICKET] == CurrentOrdersArray[j][TICKET]){
same_CurrentTICKET = 1;
break;
}
}
}
if(
exist_PreviousTICKET==1 && same_CurrentTICKET==0) PO_Closed++;
if(PO_Closed > 0) Print("PreviousOrdersArray[PO_Closed_Num][TICKET]: ", PreviousOrdersArray[PO_Closed_Num][TICKET]);
else Print("Nothing");
//----
return(0);
}
01月02日(月)19時51分|MT4Code
|コメント0
|トラックバック 0
|Λ
| ブログトップ |
現在のページ ≫ 次のページ
今度は
新規指値逆指値の注文があった状態について考えます。
現在の状態が指値逆指値の注文を持っていた場合については次の2つのパターンが考えられます。
(1)注文のない状態 → 指値逆指値の注文を持った状態
(2)指値逆指値の注文を持った状態 → 指値逆指値の注文を持った状態(状態の変化なし)
新規の指値逆指値の注文があった場合は(1)です。これを言葉で説明すると
(1)
現在指値逆指値の注文を持った状態で一つ前の状態には同じチケットが存在しない場合
具体的にプログラムしてみます。
[1]注文のない状態:PreviousOrdersArray[1][5]
[2]指値逆指値の注文を持った状態:CurrentOrdersArray[1][5]
-----------------------------------------------
int start()
{
//----
static int lastCheckTime = 0;
//Print("lastCheckTime: ", lastCheckTime);
if(TimeCurrent()-lastCheckTime < CheckTimeInterval) return(0);
lastCheckTime = TimeCurrent();
double PreviousOrdersArray[1][5] = {};
double CurrentOrdersArray[1][5] = { 8015456, OP_BUYLIMIT, 1.31785, 1.31085, 1.32785};
int dim1_size_Previous = ArrayRange(PreviousOrdersArray,0);
Print("dim1_size_Previous: ", dim1_size_Previous);
for(int i= 0;<dim1_size_Previous;i++){
Print(PreviousOrdersArray[i][TICKET]," ",PreviousOrdersArray[i][ORDERTYPE]," ",PreviousOrdersArray[i][OPENPRICE]," ",PreviousOrdersArray[i][STOPLOSS]," ",PreviousOrdersArray[i][TAKEPROFIT]," ","\n");
}
int dim1_size_Current = ArrayRange(CurrentOrdersArray,0);
Print("dim1_size_Current: ", dim1_size_Current);
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");
}
int exist_CurrentTICKET = 0;
int same_PreviousTICKET = 0;
int PO_Opend_Num;
int PO_Opend = 0;
for(i= 0;i<dim1_size_Current;i++){
if(CurrentOrdersArray[i][ORDERTYPE] == OP_BUY || CurrentOrdersArray[i][ORDERTYPE] == OP_SELL) continue;
exist_CurrentTICKET = 1;
PO_Opend_Num = i;
for(j = 0;j<dim1_size_Previous;j++){
if(CurrentOrdersArray[i][TICKET] == PreviousOrdersArray[j][TICKET]){
same_PreviousTICKET = 1;
break;
}
}
}
if(
exist_CurrentTICKET==1 && same_PreviousTICKET==0) PO_Opend++;
if(PO_Opend > 0) Print("CurrentOrdersArray[PO_Opend_Num][TICKET]: ", CurrentOrdersArray[PO_Opend_Num][TICKET]);
else Print("Nothing");
//----
return(0);
}
12月26日(月)14時58分|MT4Code
|コメント0
|トラックバック 0
|Λ
| ブログトップ |
現在のページ ≫ 次のページ
今度は
ポジションがクローズされた状態について考えます。
1つ前の状態がポジションを持っていた場合については次の2つのパターンが考えられます。
(1)ポジションを持った状態 → 注文のない状態
(2)ポジションを持った状態 → ポジションを持った状態(状態の変化なし)
ポジションがクローズされた状態は(1)です。これを言葉で説明すると
(1)
1つ前の状態でポジションを持っていたチケットが現在の状態にない場合
具体的にプログラムしてみます。
この表を配列で表します。
[1]ポジションを持った状態:PreviousOrdersArray[3][5]
[2]ポジションがクローズされた状態:CurrentOrdersArray[2][5]
-----------------------------------------------
static int lastCheckTime = 0;
//Print("lastCheckTime: ", lastCheckTime);
if(TimeCurrent()-lastCheckTime < CheckTimeInterval) return(0);
lastCheckTime = TimeCurrent();
double PreviousOrdersArray[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 };
double CurrentOrdersArray[2][5] = { 8015483, OP_BUYSTOP, 1.3246, 1.3156, 1.3346,
8015510, OP_SELLSTOP, 1.31438, 1.32338, 1.30438 };
int dim1_size_Previous = ArrayRange(PreviousOrdersArray,0);
Print("dim1_size_Previous: ", dim1_size_Previous);
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");
}
int dim1_size_Current = ArrayRange(CurrentOrdersArray,0);
Print("dim1_size_Current: ", dim1_size_Current);
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");
}
int exist_TICKET = 0;
int same_TICKET = 0;
int Closed_Num;
int Closed = 0;
for(i= 0;i<dim1_size_Previous;i++){
if(
PreviousOrdersArray[i][
ORDERTYPE] !=
OP_BUY &&
PreviousOrdersArray[i][
ORDERTYPE] !=
OP_SELL) continue;//
[1]のPreviousOrdersArrayからポジションを持った状態の「チケット」を探します。 exist_TICKET = 1;
Closed_Num = i;
for(j = 0;j<dim1_size_Current;j++){
if(PreviousOrdersArray[i][TICKET] == CurrentOrdersArray[j][TICKET]){
same_TICKET = 1;//
「チケット」が同じ場合は検出から除外します。 break;
}
}
}
if(exist_TICKET==1 && same_TICKET==0) Closed++;//
1つ前の状態がポジションを持っていて、現在はその同じ「チケット」が存在しない場合、ポジションがクローズされたとしてフラッグをたてる
if(Closed > 0) Print("PreviousOrdersArray[Closed_Num][TICKET]: ", PreviousOrdersArray[Closed_Num][TICKET]);
else Print("Nothing");
12月19日(月)21時25分|MT4Code
|コメント0
|トラックバック 0
|Λ
| ブログトップ |
現在のページ ≫ 次のページ
ポジションを持った状態について考えます。
現在ポジションを持った状態とその1つ前の状態は次の3つのパターンが考えられます。
(1)注文のない状態 → ポジションを持った状態
(2)待機注文の状態 → ポジションを持った状態
(3)ポジションを持った状態 → ポジションを持った状態(状態の変化なし)
それでは、
新規ポジションを持った状態というのは上の(1)と(2)です。これを言葉で説明すると
(1)現在ポジションを持った状態の一つ前の状態に
同じチケットと同じオーダータイプが存在しない場合。
(2)現在ポジションを持った状態の一つ前の状態と
同じチケットでもオーダータイプが異なる場合。
具体的にプログラムしてみます。
配列に格納したデータから新規ポジションを持った場合に検出する方法を考えます。新規ポジションを持った場合を次の表で表しました。この表は前回の説明で使った同じものです。
この表を配列で表します。
[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]配列に格納したデータをプリントアウト }
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");
12月19日(月)16時59分|MT4Code
|コメント0
|トラックバック 0
|Λ