質問編集履歴
3
条件を満たす続けるとき、アラートが鳴りやまなくなっていたので補足情報に記載したサイトを参考に、ローソク足1本に対し1アラートが鳴るようにしました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -54,7 +54,7 @@
|
|
54
54
|
|
55
55
|
double arrEntUp[], arrEntDown[];
|
56
56
|
|
57
|
-
int maxlimit = 1000;
|
57
|
+
int maxlimit = 10000;
|
58
58
|
|
59
59
|
datetime lastAlertTime;
|
60
60
|
|
@@ -88,9 +88,9 @@
|
|
88
88
|
|
89
89
|
|
90
90
|
|
91
|
-
SetIndexArrow(0, 233);
|
91
|
+
SetIndexArrow(0, 233);//上矢印
|
92
|
-
|
92
|
+
|
93
|
-
SetIndexArrow(1, 234);
|
93
|
+
SetIndexArrow(1, 234);//下矢印
|
94
94
|
|
95
95
|
|
96
96
|
|
@@ -136,7 +136,7 @@
|
|
136
136
|
|
137
137
|
|
138
138
|
|
139
|
-
for(int i=maxlimit; i>=
|
139
|
+
for(int i=maxlimit-1; i>=0; i--){
|
140
140
|
|
141
141
|
dForceNow = iForce(NULL,0,13,MODE_SMA,PRICE_CLOSE,i);
|
142
142
|
|
@@ -194,9 +194,11 @@
|
|
194
194
|
|
195
195
|
arrEntUp[i] = Low[i];
|
196
196
|
|
197
|
+
|
198
|
+
|
197
199
|
if(lastAlertTime != Time[0]){
|
198
200
|
|
199
|
-
Alert("エントリー
|
201
|
+
Alert(Symbol()+"/n"+"ハイエントリー");
|
200
202
|
|
201
203
|
lastAlertTime = Time[0];
|
202
204
|
|
@@ -208,9 +210,11 @@
|
|
208
210
|
|
209
211
|
arrEntDown[i] = High[i];
|
210
212
|
|
213
|
+
|
214
|
+
|
211
215
|
if(lastAlertTime != Time[0]){
|
212
216
|
|
213
|
-
Alert("エントリー
|
217
|
+
Alert(Symbol()+"\n"+"ローエントリー");
|
214
218
|
|
215
219
|
lastAlertTime = Time[0];
|
216
220
|
|
@@ -249,3 +253,7 @@
|
|
249
253
|
|
250
254
|
|
251
255
|
mt4はFXCM社、PCのOSはWindows11です。
|
256
|
+
|
257
|
+
参考にしたサイト
|
258
|
+
|
259
|
+
https://blog.codinal-systems.com/alert-per-bar/
|
2
エントリー条件を増やしたためソースコードを少し変更しました。実現したいことをより具体的に記述しまし。
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
MQL4を用いて、エントリーポイントとなる条件を満たすとシグナル(矢印)とアラートが鳴るというインジケータを作っています。現状は、特にエラーはなく、シグナルもアラートも実現できていますが、そのどちらもタイミングが、そのローソク足が完成したタイミングで表示されてしまいます。そうではなく、条件を満たしたタイミングで、シグナルを表示し、アラートが鳴るようにしたいです。
|
5
|
+
MQL4を用いて、エントリーポイントとなる条件を満たすとシグナル(矢印)とアラートが鳴るというインジケータを作っています。現状は、特にエラーはなく、シグナルもアラートも実現できていますが、そのどちらもタイミングが、そのローソク足が完成したタイミングで表示されてしまいます。そうではなく、条件を満たしたタイミングで、シグナルを表示し、アラートが鳴るようにしたいです。具体的には、シグナルは条件を満たしている間ずっと表示、アラートはローソク足一つに対し1回だけ発生というようにしたいです。
|
6
6
|
|
7
7
|
どこをどのように変更すれば実現できますか。
|
8
8
|
|
1
エントリー条件を増やしたためソースコードを少し変更しました。大きくは変わっていません。
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,10 +2,12 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
MQL4を用いて、エントリーポイントとなる条件を満たすとシグナル(矢印)とアラートが鳴るというインジケータを作っています。現状は、特にエラーはなく、シグナルもアラートも実現できていますが、そのどちらもタイミングが、そのローソク足が完成したタイミングで表示されてしまいます。そうではなく、条件を満たしたタイミングで、シグナルを表示し、アラートが鳴るようにしたいです。
|
5
|
+
MQL4を用いて、エントリーポイントとなる条件を満たすとシグナル(矢印)とアラートが鳴るというインジケータを作っています。現状は、特にエラーはなく、シグナルもアラートも実現できていますが、そのどちらもタイミングが、そのローソク足が完成したタイミングで表示されてしまいます。そうではなく、条件を満たしたタイミングで、シグナルを表示し、アラートが鳴るようにしたいです。(ちなみにローソク足一つに対しアラートは1回だけ)
|
6
6
|
|
7
7
|
どこをどのように変更すれば実現できますか。
|
8
8
|
|
9
|
+
よろしくお願いします。
|
10
|
+
|
9
11
|
|
10
12
|
|
11
13
|
### 該当のソースコード
|
@@ -56,6 +58,8 @@
|
|
56
58
|
|
57
59
|
datetime lastAlertTime;
|
58
60
|
|
61
|
+
double MathAbs;
|
62
|
+
|
59
63
|
|
60
64
|
|
61
65
|
//+------------------------------------------------------------------+
|
@@ -126,7 +130,9 @@
|
|
126
130
|
|
127
131
|
//---
|
128
132
|
|
129
|
-
double dForceNow,dMFINow,dMANow1,dMANow2,dOpen,dLow,dHigh,dClose1,dClose2;
|
133
|
+
double dForceNow,dMFINow,dMANow1,dMANow2,dOpen1,dOpen2,dLow1,dLow2,dHigh,dClose1,dClose2;
|
134
|
+
|
135
|
+
|
130
136
|
|
131
137
|
|
132
138
|
|
@@ -140,27 +146,51 @@
|
|
140
146
|
|
141
147
|
dMANow2 = iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,i+1);//1本前のma
|
142
148
|
|
143
|
-
dOpen = iOpen(NULL,0,i);
|
149
|
+
dOpen1 = iOpen(NULL,0,i);
|
150
|
+
|
144
|
-
|
151
|
+
dOpen2 = iOpen(NULL,0,i+1);
|
152
|
+
|
145
|
-
dLow = iLow(NULL,0,i);
|
153
|
+
dLow1 = iLow(NULL,0,i);
|
154
|
+
|
146
|
-
|
155
|
+
dLow2 = iLow(NULL,0,i+1);
|
156
|
+
|
147
|
-
dHigh = iHigh(NULL,0,i);
|
157
|
+
dHigh = iHigh(NULL,0,i+1);
|
148
|
-
|
158
|
+
|
149
|
-
dClose1 = iClose(NULL,0,i);//今の終値
|
159
|
+
dClose1 = iClose(NULL,0,i);//今の終値(現在のレート)
|
150
160
|
|
151
161
|
dClose2 = iClose(NULL,0,i+1);//1本前の終値
|
152
162
|
|
163
|
+
double gapOfNow = MathAbs(dClose1 - dMANow1);//現在レートとmaの差
|
164
|
+
|
165
|
+
double gapOfStart = MathAbs(dOpen1 - dMANow1);//始値とmaの差
|
166
|
+
|
153
167
|
|
154
168
|
|
169
|
+
if(Digits==2 || Digits==3){
|
170
|
+
|
171
|
+
gapOfNow *= 100;
|
172
|
+
|
173
|
+
gapOfStart *= 100;
|
174
|
+
|
175
|
+
}else if(Digits==4 || Digits ==5){
|
176
|
+
|
177
|
+
gapOfNow *= 10000;
|
178
|
+
|
179
|
+
gapOfStart *= 10000;
|
180
|
+
|
181
|
+
}
|
182
|
+
|
183
|
+
double gapOfGap = MathAbs(gapOfNow - gapOfStart);
|
184
|
+
|
155
185
|
|
156
186
|
|
157
187
|
arrEntUp[i] = EMPTY_VALUE;
|
158
188
|
|
159
189
|
arrEntDown[i] = EMPTY_VALUE;
|
160
190
|
|
161
|
-
|
191
|
+
// 陽線 / forceが0以上 / MFIが50以上 / 差の差が3pips以下 / 1本前の足の終値がma以下 / 1本前の足の始値ma以下(1本前が陰線だった場合)/実体がmaまたぐ
|
162
|
-
|
192
|
+
|
163
|
-
if(dForceNow > 0 && dMFINow > 50 &&
|
193
|
+
if(dOpen1 < dClose1 && dForceNow >= 0 && dMFINow > 50 && gapOfGap <= 3 && dMANow2 > dClose2 && dMANow2 > dOpen2 && dOpen1 < dMANow1 && dMANow1 < dHigh){
|
164
194
|
|
165
195
|
arrEntUp[i] = Low[i];
|
166
196
|
|
@@ -172,9 +202,9 @@
|
|
172
202
|
|
173
203
|
}
|
174
204
|
|
175
|
-
|
205
|
+
// 陰線 / forceが0以下 / MFIが50以下 / 差の差が3pips以下 / 1本前の足の終値がma以上 / 1本前の足の始値がma以上(1本前が陽線だった場合)/実体がmaまたぐ
|
176
|
-
|
206
|
+
|
177
|
-
}else if(dForceNow < 0 && dMFINow < 50 &&
|
207
|
+
}else if(dOpen1 > dClose1 && dForceNow <= 0 && dMFINow < 50 && gapOfGap <= 3 && dMANow2 < dClose2 && dMANow2 < dOpen2 && dLow1 < dMANow1 && dMANow1 < dOpen1){
|
178
208
|
|
179
209
|
arrEntDown[i] = High[i];
|
180
210
|
|