質問編集履歴
3
文法の修正
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
|
-
|
3
|
+
買いポジションを持っている時に売りの条件がみたされたら決済したい。
|
26
|
-
|
27
|
-
|
28
4
|
|
29
5
|
### 発生している問題・エラーメッセージ
|
30
6
|
|
@@ -32,11 +8,7 @@
|
|
32
8
|
|
33
9
|
```
|
34
10
|
|
35
|
-
|
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
|
-
//前日足の
|
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 H
|
108
|
-
|
109
|
-
double L
|
110
|
-
|
111
|
-
double O
|
112
|
-
|
113
|
-
double C
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
//
|
118
|
-
|
119
|
-
double
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
double
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
//
|
130
|
-
|
131
|
-
double
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
double
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
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(
|
171
|
+
if(highestL > C1 && MarketInfo(NULL,MODE_SPREAD) < maxspread)//売りの条件とスプレッド制限
|
166
|
-
|
172
|
+
|
167
|
-
{
|
173
|
+
{
|
168
|
-
|
174
|
+
|
169
|
-
|
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(
|
197
|
+
if(highestL > C1)//売りポジションの決済
|
176
|
-
|
198
|
+
|
177
|
-
{
|
199
|
+
{
|
178
|
-
|
200
|
+
|
179
|
-
|
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
文法の修正
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,
|
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,
|
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
文法の修正
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
|
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,
|
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,
|
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/ツールのバージョンなど)
|