質問編集履歴

3

文法の修正

2020/09/03 08:57

投稿

nisei2
nisei2

スコア19

test CHANGED
File without changes
test CHANGED
@@ -1,30 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 1、高値・安値・終値が前日の足より高ければ始値で買い
4
-
5
-
6
-
7
- 2、高値・安値・終値が前日の足より低ければ始値で売り
8
-
9
-
10
-
11
- 3、ポジションは1つ以上もたない
12
-
13
-
14
-
15
- 4、損切は前日の足の買いなら安値、売りなら高値
16
-
17
-
18
-
19
- 5、利確はエントリー位置から損切幅と同じだけ離れたところ(リスクリワード1:1)
20
-
21
-
22
-
23
- というEAを作りたい。
24
-
25
- このようなEAためあとどようなプログラムを書いたらいいでしょうか?
3
+ 買いポジション持ってい売り条件がみされた決済した
26
-
27
-
28
4
 
29
5
  ### 発生している問題・エラーメッセージ
30
6
 
@@ -32,11 +8,7 @@
32
8
 
33
9
  ```
34
10
 
35
- パイルエラーすべてくなたのでMT4でバックテストしみたのすがうまく動かない。
11
+ 買いポジショ、売りポジション持っいる時の判別方法わからいため思っている処理がない。
36
-
37
-
38
-
39
- エラーとしてOrderSend error 130とでる。
40
12
 
41
13
  ```
42
14
 
@@ -78,10 +50,12 @@
78
50
 
79
51
 
80
52
 
81
-
82
-
83
53
  extern int maxspread = 20;//スプレッド
84
54
 
55
+ extern int closeperiod = 20;//有効期限
56
+
57
+ extern double rot =0.1;//ロット
58
+
85
59
 
86
60
 
87
61
  void OnTick()
@@ -90,7 +64,7 @@
90
64
 
91
65
 
92
66
 
93
- //前日足の4本値
67
+ //前日足の本値
94
68
 
95
69
  double H1 = iHigh(NULL,0,1);
96
70
 
@@ -100,89 +74,137 @@
100
74
 
101
75
  double C1 = iClose(NULL,0,1);
102
76
 
103
-
104
-
105
- //前々日足の四本値
106
-
107
- double H2 = iHigh(NULL,0,2);
108
-
109
- double L2 = iLow(NULL,0,2);
110
-
111
- double O2 = iOpen(NULL,0,2);
112
-
113
- double C2 = iClose(NULL,0,2);
114
-
115
-
116
-
117
- //上昇トレンド
118
-
119
- double kiriage = H1>H2 && L1>L2 && H2<C1;
120
-
121
-
122
-
123
- //下降トレンド
124
-
125
- double kirisage = H1<H2 && L1<L2 && L2>C1;
126
-
127
-
128
-
129
- //買い場合の利確
130
-
131
- double rikakuB = H1-L1;
132
-
133
-
134
-
135
- //売りの場合の利確
136
-
137
- double rikakuS = L1-H1;
138
-
139
-
140
-
141
- int slipp = 10;
142
-
143
-
144
-
145
-
146
-
147
-
148
-
149
- //陽線と陰線
150
-
151
- //double yousen1 = iOpen(Symbol(),0,1) < iOpen(Symbol(),0,1);
152
-
153
- //double yousen2 = iOpen(Symbol(),0,2) < iOpen(Symbol(),0,2);
154
-
155
- //double insen1 = iOpen(Symbol(),0,1) > iOpen(Symbol(),0,1);
156
-
157
- //double insen2 = iOpen(Symbol(),0,2) > iOpen(Symbol(),0,2);
158
-
159
- if(OrdersTotal() == 0)//ポジション制限
160
-
161
- {
77
+
78
+
79
+ //足の四本値
80
+
81
+ double WH1 = iHigh(NULL,PERIOD_W1,1);
82
+
83
+ double WL1 = iLow(NULL,PERIOD_W1,1);
84
+
85
+ double WO1 = iOpen(NULL,PERIOD_W1,1);
86
+
87
+ double WC1 = iClose(NULL,PERIOD_W1,1);
88
+
89
+
90
+
91
+ //前週足の四本値
92
+
93
+ double WH2 = iHigh(NULL,PERIOD_W1,2);
94
+
95
+ double WL2 = iLow(NULL,PERIOD_W1,2);
96
+
97
+ double WO2 = iOpen(NULL,PERIOD_W1,2);
98
+
99
+ double WC2 = iClose(NULL,PERIOD_W1,2);
100
+
101
+
102
+
103
+ //月足四本値
104
+
105
+ double MNH1 = iHigh(NULL,PERIOD_MN1,1);
106
+
107
+ double MNL1 = iLow(NULL,PERIOD_MN1,1);
108
+
109
+ double MNO1 = iOpen(NULL,PERIOD_MN1,1);
110
+
111
+ double MNC1 = iClose(NULL,PERIOD_MN1,1);
112
+
113
+
114
+
115
+ //前月足の四本値
116
+
117
+ double MNH2 = iHigh(NULL,PERIOD_MN1,2);
118
+
119
+ double MNL2 = iLow(NULL,PERIOD_MN1,2);
120
+
121
+ double MNO2 = iOpen(NULL,PERIOD_MN1,2);
122
+
123
+ double MNC2 = iClose(NULL,PERIOD_MN1,2);
124
+
125
+
126
+
127
+ int highestprice = iHighest(NULL,PERIOD_D1,MODE_HIGH,20,1);//最高値
128
+
129
+ int cheapestprice = iLowest(NULL,PERIOD_D1,MODE_LOW,20,1);//最安値
130
+
131
+
132
+
133
+ //最高値の4本値
134
+
135
+ double highestH = iHigh(NULL,0,highestprice);
136
+
137
+ double highestL = iLow(NULL,0,highestprice);
138
+
139
+ double highestO = iOpen(NULL,0,highestprice);
140
+
141
+ double highestC = iClose(NULL,0,highestprice);
142
+
143
+
144
+
145
+ //最安値の4本値
146
+
147
+ double cheapestH = iHigh(NULL,0,cheapestprice);
148
+
149
+ double cheapestL = iLow(NULL,0,cheapestprice);
150
+
151
+ double cheapestO = iOpen(NULL,0,cheapestprice);
152
+
153
+ double cheapestC = iClose(NULL,0,cheapestprice);
154
+
155
+
156
+
157
+ if(OrdersTotal() == 0)//ポジション制限
158
+
159
+ {
160
+
161
+ if(cheapestH < C1 && MarketInfo(NULL,MODE_SPREAD) < maxspread)//買いの条件とスプレッド制限
162
+
163
+ {
164
+
165
+ int Ticket = OrderSend(Symbol(),OP_BUYLIMIT,rot,cheapestH,10,cheapestL,0,NULL,1212,closeperiod,Magenta);//購入の処理
166
+
167
+ }
162
168
 
163
169
 
164
170
 
165
- if(kiriage && MarketInfo(NULL,MODE_SPREAD) < maxspread)//買いの条件とスプレッド制限
171
+ if(highestL > C1 && MarketInfo(NULL,MODE_SPREAD) < maxspread)//売りの条件とスプレッド制限
166
-
172
+
167
- {
173
+ {
168
-
174
+
169
- int Ticket = OrderSend(NULL,OP_BUY,0.01,Ask,slipp,L1,Ask+rikakuB*Point,NULL,0,0,Red);//購入の処理
175
+ int Ticket = OrderSend(Symbol(),OP_SELLLIMIT,rot,highestL,10,highestH,0,NULL,1111,closeperiod,Magenta);
176
+
177
+ }
178
+
179
+ }
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+ if(highestL > C1)//買いポジションの決済
188
+
189
+ {
190
+
191
+ bool Close = OrderClose(1111,rot,Bid,10,Magenta);
170
192
 
171
193
  }
172
194
 
173
195
 
174
196
 
175
- if(kirisage && MarketInfo(NULL,MODE_SPREAD) < maxspread)//売りの条件とスプレッド制限
197
+ if(highestL > C1)//売りポジション決済
176
-
198
+
177
- {
199
+ {
178
-
200
+
179
- int Ticket = OrderSend(NULL,OP_SELL,0.01,Bid,slipp,H1,Bid+rikakuS*Point,NULL,0,0,Yellow);//売却の処理
201
+ bool Close = OrderClose(1212,rot,Ask,10,Magenta);
180
-
202
+
181
- }
203
+ }
182
-
204
+
183
- }
205
+ }
184
-
185
- }
206
+
207
+
186
208
 
187
209
  ```
188
210
 
@@ -194,6 +216,8 @@
194
216
 
195
217
 
196
218
 
219
+
220
+
197
221
  ### 補足情報(FW/ツールのバージョンなど)
198
222
 
199
223
 

2

文法の修正

2020/09/03 08:57

投稿

nisei2
nisei2

スコア19

test CHANGED
File without changes
test CHANGED
@@ -166,7 +166,7 @@
166
166
 
167
167
  {
168
168
 
169
- int Ticket = OrderSend(NULL,OP_BUY,0.01,slipp,L1,1,Ask+rikakuB*Point,NULL,1,Red);//購入の処理
169
+ int Ticket = OrderSend(NULL,OP_BUY,0.01,Ask,slipp,L1,Ask+rikakuB*Point,NULL,0,0,Red);//購入の処理
170
170
 
171
171
  }
172
172
 
@@ -176,7 +176,7 @@
176
176
 
177
177
  {
178
178
 
179
- int Ticket = OrderSend(NULL,OP_SELL,0.01,slipp,Bid,10,H1,Bid+rikakuS*Point,NULL,1,Yellow);//売却の処理
179
+ int Ticket = OrderSend(NULL,OP_SELL,0.01,Bid,slipp,H1,Bid+rikakuS*Point,NULL,0,0,Yellow);//売却の処理
180
180
 
181
181
  }
182
182
 
@@ -184,8 +184,6 @@
184
184
 
185
185
  }
186
186
 
187
-
188
-
189
187
  ```
190
188
 
191
189
 

1

文法の修正

2020/08/31 09:26

投稿

nisei2
nisei2

スコア19

test CHANGED
File without changes
test CHANGED
@@ -78,6 +78,12 @@
78
78
 
79
79
 
80
80
 
81
+
82
+
83
+ extern int maxspread = 20;//スプレッド
84
+
85
+
86
+
81
87
  void OnTick()
82
88
 
83
89
  {
@@ -132,7 +138,11 @@
132
138
 
133
139
 
134
140
 
135
- int mn = 10;
141
+ int slipp = 10;
142
+
143
+
144
+
145
+
136
146
 
137
147
 
138
148
 
@@ -146,27 +156,27 @@
146
156
 
147
157
  //double insen2 = iOpen(Symbol(),0,2) > iOpen(Symbol(),0,2);
148
158
 
149
- if(OrdersTotal() == 0)
159
+ if(OrdersTotal() == 0)//ポジション制限
150
160
 
151
161
  {
152
162
 
153
163
 
154
164
 
155
- if(kiriage)//買いの条件とポジション制限
165
+ if(kiriage && MarketInfo(NULL,MODE_SPREAD) < maxspread)//買いの条件とスプレッド制限
156
166
 
157
167
  {
158
168
 
159
- int Ticket = OrderSend(NULL,OP_BUY,0.01,Ask,Ask-100*Point,1,Ask+rikakuB*Point,NULL,mn,1,Red);//購入の処理
169
+ int Ticket = OrderSend(NULL,OP_BUY,0.01,slipp,L1,1,Ask+rikakuB*Point,NULL,1,Red);//購入の処理
160
170
 
161
171
  }
162
172
 
163
173
 
164
174
 
165
- if(kirisage)//売りの条件とポジション制限
175
+ if(kirisage && MarketInfo(NULL,MODE_SPREAD) < maxspread)//売りの条件とスプレッド制限
166
176
 
167
177
  {
168
178
 
169
- int Ticket = OrderSend(NULL,OP_SELL,0.01,Bid,10,Bid̟+100*Point,Bid+rikakuS*Point,NULL,mn,1,Yellow);//売却の処理
179
+ int Ticket = OrderSend(NULL,OP_SELL,0.01,slipp,Bid,10,H1,Bid+rikakuS*Point,NULL,1,Yellow);//売却の処理
170
180
 
171
181
  }
172
182
 
@@ -184,14 +194,6 @@
184
194
 
185
195
 
186
196
 
187
- 損切の記述がおかしい所まではわかったので変更してみた。
188
-
189
- 前→買いの場合L1、売りの場合H1
190
-
191
- 現→買いの場合Ask-100*Point、Bid̟+100*Point
192
-
193
- とりあえずなんとか動かないかとこのように変更。
194
-
195
197
 
196
198
 
197
199
  ### 補足情報(FW/ツールのバージョンなど)