質問編集履歴

3

条件を満たす続けるとき、アラートが鳴りやまなくなっていたので補足情報に記載したサイトを参考に、ローソク足1本に対し1アラートが鳴るようにしました。

2021/11/15 00:39

投稿

tera-ryo
tera-ryo

スコア4

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>=1; 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

エントリー条件を増やしたためソースコードを少し変更しました。実現したいことをより具体的に記述しまし。

2021/11/15 00:39

投稿

tera-ryo
tera-ryo

スコア4

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- MQL4を用いて、エントリーポイントとなる条件を満たすとシグナル(矢印)とアラートが鳴るというインジケータを作っています。現状は、特にエラーはなく、シグナルもアラートも実現できていますが、そのどちらもタイミングが、そのローソク足が完成したタイミングで表示されてしまいます。そうではなく、条件を満たしたタイミングで、シグナルを表示し、アラートが鳴るようにしたいです。(ちなみにローソク足一つに対しアラートは1回だけ)
5
+ MQL4を用いて、エントリーポイントとなる条件を満たすとシグナル(矢印)とアラートが鳴るというインジケータを作っています。現状は、特にエラーはなく、シグナルもアラートも実現できていますが、そのどちらもタイミングが、そのローソク足が完成したタイミングで表示されてしまいます。そうではなく、条件を満たしたタイミングで、シグナルを表示し、アラートが鳴るようにしたいです。具体的は、シグナルは条件を満たしている間ずっと表示、アラートはローソク足一つに対し1回だけ発生というようにしたいです。
6
6
 
7
7
  どこをどのように変更すれば実現できますか。
8
8
 

1

エントリー条件を増やしたためソースコードを少し変更しました。大きくは変わっていません。

2021/11/12 16:04

投稿

tera-ryo
tera-ryo

スコア4

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 && dOpen < dMANow1 && dMANow1 < dHigh && dMANow2 > dClose2){
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 && dLow < dMANow1 && dMANow1 < dOpen && dMANow2 < dClose2){
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