質問編集履歴
3
条件を満たす続けるとき、アラートが鳴りやまなくなっていたので補足情報に記載したサイトを参考に、ローソク足1本に対し1アラートが鳴るようにしました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
#property indicator_width2 2
|
27
27
|
|
28
28
|
double arrEntUp[], arrEntDown[];
|
29
|
-
int maxlimit =
|
29
|
+
int maxlimit = 10000;
|
30
30
|
datetime lastAlertTime;
|
31
31
|
double MathAbs;
|
32
32
|
|
@@ -43,8 +43,8 @@
|
|
43
43
|
SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID);
|
44
44
|
SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID);
|
45
45
|
|
46
|
-
SetIndexArrow(0, 233);
|
46
|
+
SetIndexArrow(0, 233);//上矢印
|
47
|
-
SetIndexArrow(1, 234);
|
47
|
+
SetIndexArrow(1, 234);//下矢印
|
48
48
|
|
49
49
|
//---
|
50
50
|
return(INIT_SUCCEEDED);
|
@@ -67,7 +67,7 @@
|
|
67
67
|
double dForceNow,dMFINow,dMANow1,dMANow2,dOpen1,dOpen2,dLow1,dLow2,dHigh,dClose1,dClose2;
|
68
68
|
|
69
69
|
|
70
|
-
for(int i=maxlimit; i>=
|
70
|
+
for(int i=maxlimit-1; i>=0; i--){
|
71
71
|
dForceNow = iForce(NULL,0,13,MODE_SMA,PRICE_CLOSE,i);
|
72
72
|
dMFINow = iMFI(NULL,0,14,i);
|
73
73
|
dMANow1 = iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,i);//今のma
|
@@ -96,15 +96,17 @@
|
|
96
96
|
// 陽線 / forceが0以上 / MFIが50以上 / 差の差が3pips以下 / 1本前の足の終値がma以下 / 1本前の足の始値ma以下(1本前が陰線だった場合)/実体がmaまたぐ
|
97
97
|
if(dOpen1 < dClose1 && dForceNow >= 0 && dMFINow > 50 && gapOfGap <= 3 && dMANow2 > dClose2 && dMANow2 > dOpen2 && dOpen1 < dMANow1 && dMANow1 < dHigh){
|
98
98
|
arrEntUp[i] = Low[i];
|
99
|
+
|
99
100
|
if(lastAlertTime != Time[0]){
|
100
|
-
Alert("エントリー
|
101
|
+
Alert(Symbol()+"/n"+"ハイエントリー");
|
101
102
|
lastAlertTime = Time[0];
|
102
103
|
}
|
103
104
|
// 陰線 / forceが0以下 / MFIが50以下 / 差の差が3pips以下 / 1本前の足の終値がma以上 / 1本前の足の始値がma以上(1本前が陽線だった場合)/実体がmaまたぐ
|
104
105
|
}else if(dOpen1 > dClose1 && dForceNow <= 0 && dMFINow < 50 && gapOfGap <= 3 && dMANow2 < dClose2 && dMANow2 < dOpen2 && dLow1 < dMANow1 && dMANow1 < dOpen1){
|
105
106
|
arrEntDown[i] = High[i];
|
107
|
+
|
106
108
|
if(lastAlertTime != Time[0]){
|
107
|
-
Alert("エントリー
|
109
|
+
Alert(Symbol()+"\n"+"ローエントリー");
|
108
110
|
lastAlertTime = Time[0];
|
109
111
|
}
|
110
112
|
}
|
@@ -123,4 +125,6 @@
|
|
123
125
|
|
124
126
|
### 補足情報(FW/ツールのバージョンなど)
|
125
127
|
|
126
|
-
mt4はFXCM社、PCのOSはWindows11です。
|
128
|
+
mt4はFXCM社、PCのOSはWindows11です。
|
129
|
+
参考にしたサイト
|
130
|
+
https://blog.codinal-systems.com/alert-per-bar/
|
2
エントリー条件を増やしたためソースコードを少し変更しました。実現したいことをより具体的に記述しまし。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
MQL4を用いて、エントリーポイントとなる条件を満たすとシグナル(矢印)とアラートが鳴るというインジケータを作っています。現状は、特にエラーはなく、シグナルもアラートも実現できていますが、そのどちらもタイミングが、そのローソク足が完成したタイミングで表示されてしまいます。そうではなく、条件を満たしたタイミングで、シグナルを表示し、アラートが鳴るようにしたいです。
|
3
|
+
MQL4を用いて、エントリーポイントとなる条件を満たすとシグナル(矢印)とアラートが鳴るというインジケータを作っています。現状は、特にエラーはなく、シグナルもアラートも実現できていますが、そのどちらもタイミングが、そのローソク足が完成したタイミングで表示されてしまいます。そうではなく、条件を満たしたタイミングで、シグナルを表示し、アラートが鳴るようにしたいです。具体的には、シグナルは条件を満たしている間ずっと表示、アラートはローソク足一つに対し1回だけ発生というようにしたいです。
|
4
4
|
どこをどのように変更すれば実現できますか。
|
5
5
|
よろしくお願いします。
|
6
6
|
|
1
エントリー条件を増やしたためソースコードを少し変更しました。大きくは変わっていません。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
MQL4を用いて、エントリーポイントとなる条件を満たすとシグナル(矢印)とアラートが鳴るというインジケータを作っています。現状は、特にエラーはなく、シグナルもアラートも実現できていますが、そのどちらもタイミングが、そのローソク足が完成したタイミングで表示されてしまいます。そうではなく、条件を満たしたタイミングで、シグナルを表示し、アラートが鳴るようにしたいです。
|
3
|
+
MQL4を用いて、エントリーポイントとなる条件を満たすとシグナル(矢印)とアラートが鳴るというインジケータを作っています。現状は、特にエラーはなく、シグナルもアラートも実現できていますが、そのどちらもタイミングが、そのローソク足が完成したタイミングで表示されてしまいます。そうではなく、条件を満たしたタイミングで、シグナルを表示し、アラートが鳴るようにしたいです。(ちなみにローソク足一つに対しアラートは1回だけ)
|
4
4
|
どこをどのように変更すれば実現できますか。
|
5
|
+
よろしくお願いします。
|
5
6
|
|
6
7
|
### 該当のソースコード
|
7
8
|
|
@@ -27,6 +28,7 @@
|
|
27
28
|
double arrEntUp[], arrEntDown[];
|
28
29
|
int maxlimit = 1000;
|
29
30
|
datetime lastAlertTime;
|
31
|
+
double MathAbs;
|
30
32
|
|
31
33
|
//+------------------------------------------------------------------+
|
32
34
|
//| Custom indicator initialization function |
|
@@ -62,31 +64,44 @@
|
|
62
64
|
const int &spread[])
|
63
65
|
{
|
64
66
|
//---
|
65
|
-
double dForceNow,dMFINow,dMANow1,dMANow2,
|
67
|
+
double dForceNow,dMFINow,dMANow1,dMANow2,dOpen1,dOpen2,dLow1,dLow2,dHigh,dClose1,dClose2;
|
66
68
|
|
69
|
+
|
67
70
|
for(int i=maxlimit; i>=1; i--){
|
68
71
|
dForceNow = iForce(NULL,0,13,MODE_SMA,PRICE_CLOSE,i);
|
69
72
|
dMFINow = iMFI(NULL,0,14,i);
|
70
73
|
dMANow1 = iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,i);//今のma
|
71
74
|
dMANow2 = iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,i+1);//1本前のma
|
72
|
-
|
75
|
+
dOpen1 = iOpen(NULL,0,i);
|
76
|
+
dOpen2 = iOpen(NULL,0,i+1);
|
73
|
-
|
77
|
+
dLow1 = iLow(NULL,0,i);
|
78
|
+
dLow2 = iLow(NULL,0,i+1);
|
74
|
-
dHigh = iHigh(NULL,0,i);
|
79
|
+
dHigh = iHigh(NULL,0,i+1);
|
75
|
-
dClose1 = iClose(NULL,0,i);//今の終値
|
80
|
+
dClose1 = iClose(NULL,0,i);//今の終値(現在のレート)
|
76
81
|
dClose2 = iClose(NULL,0,i+1);//1本前の終値
|
82
|
+
double gapOfNow = MathAbs(dClose1 - dMANow1);//現在レートとmaの差
|
83
|
+
double gapOfStart = MathAbs(dOpen1 - dMANow1);//始値とmaの差
|
77
84
|
|
85
|
+
if(Digits==2 || Digits==3){
|
86
|
+
gapOfNow *= 100;
|
87
|
+
gapOfStart *= 100;
|
88
|
+
}else if(Digits==4 || Digits ==5){
|
89
|
+
gapOfNow *= 10000;
|
90
|
+
gapOfStart *= 10000;
|
91
|
+
}
|
92
|
+
double gapOfGap = MathAbs(gapOfNow - gapOfStart);
|
78
93
|
|
79
94
|
arrEntUp[i] = EMPTY_VALUE;
|
80
95
|
arrEntDown[i] = EMPTY_VALUE;
|
81
|
-
|
96
|
+
// 陽線 / forceが0以上 / MFIが50以上 / 差の差が3pips以下 / 1本前の足の終値がma以下 / 1本前の足の始値ma以下(1本前が陰線だった場合)/実体がmaまたぐ
|
82
|
-
if(dForceNow > 0 && dMFINow > 50 &&
|
97
|
+
if(dOpen1 < dClose1 && dForceNow >= 0 && dMFINow > 50 && gapOfGap <= 3 && dMANow2 > dClose2 && dMANow2 > dOpen2 && dOpen1 < dMANow1 && dMANow1 < dHigh){
|
83
98
|
arrEntUp[i] = Low[i];
|
84
99
|
if(lastAlertTime != Time[0]){
|
85
100
|
Alert("エントリーアラート");
|
86
101
|
lastAlertTime = Time[0];
|
87
102
|
}
|
88
|
-
|
103
|
+
// 陰線 / forceが0以下 / MFIが50以下 / 差の差が3pips以下 / 1本前の足の終値がma以上 / 1本前の足の始値がma以上(1本前が陽線だった場合)/実体がmaまたぐ
|
89
|
-
}else if(dForceNow < 0 && dMFINow < 50 &&
|
104
|
+
}else if(dOpen1 > dClose1 && dForceNow <= 0 && dMFINow < 50 && gapOfGap <= 3 && dMANow2 < dClose2 && dMANow2 < dOpen2 && dLow1 < dMANow1 && dMANow1 < dOpen1){
|
90
105
|
arrEntDown[i] = High[i];
|
91
106
|
if(lastAlertTime != Time[0]){
|
92
107
|
Alert("エントリーアラート");
|