teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

文法の修正

2020/09/03 08:57

投稿

nisei2
nisei2

スコア19

title CHANGED
File without changes
body CHANGED
@@ -1,23 +1,9 @@
1
1
  ### 前提・実現したいこと
2
- 1、高値・安値・終値が前日の足より高ければ始値で買い
3
-
4
- 2、高値・安値・終値が前日の足より低ければ始値で売り
5
-
6
- 3、ポジションは1つ以上もたない
7
-
8
- 4、損切は前日の足の買いなら安値、売りなら高値
9
-
10
- 5、利確はエントリー位置から損切幅と同じだけ離れたところ(リスクリワード1:1)
11
-
12
- というEAを作りたい。
13
- このようなEAためあとどようなプログラムを書いたらいいでょうか?
2
+ 買いポジション持ってい売り条件がみされた決済たい。
14
-
15
3
  ### 発生している問題・エラーメッセージ
16
4
 
17
5
  ```
18
- パイルエラーすべてくなっのでMT4でバックテストしみたのですうまく動かない。
6
+ 買いポジショ、売りポジション持っいる時の判別方法わからめ思っいる処理できない。
19
-
20
- エラーとしてOrderSend error 130とでる。
21
7
  ```
22
8
 
23
9
  ### 該当のソースコード
@@ -38,64 +24,90 @@
38
24
 
39
25
  }
40
26
 
41
-
42
27
  extern int maxspread = 20;//スプレッド
28
+ extern int closeperiod = 20;//有効期限
29
+ extern double rot =0.1;//ロット
43
30
 
44
31
  void OnTick()
45
32
  {
46
33
 
47
- //前日足の4本値
34
+ //前日足の本値
48
35
  double H1 = iHigh(NULL,0,1);
49
36
  double L1 = iLow(NULL,0,1);
50
37
  double O1 = iOpen(NULL,0,1);
51
38
  double C1 = iClose(NULL,0,1);
39
+
40
+ //週足の四本値
41
+ double WH1 = iHigh(NULL,PERIOD_W1,1);
42
+ double WL1 = iLow(NULL,PERIOD_W1,1);
43
+ double WO1 = iOpen(NULL,PERIOD_W1,1);
44
+ double WC1 = iClose(NULL,PERIOD_W1,1);
52
45
 
53
- //前々日足の四本値
46
+ //前足の四本値
54
- double H2 = iHigh(NULL,0,2);
47
+ double WH2 = iHigh(NULL,PERIOD_W1,2);
55
- double L2 = iLow(NULL,0,2);
48
+ double WL2 = iLow(NULL,PERIOD_W1,2);
56
- double O2 = iOpen(NULL,0,2);
49
+ double WO2 = iOpen(NULL,PERIOD_W1,2);
57
- double C2 = iClose(NULL,0,2);
50
+ double WC2 = iClose(NULL,PERIOD_W1,2);
58
51
 
59
- //上昇トレンド
52
+ //月足の四本値
60
- double kiriage = H1>H2 && L1>L2 && H2<C1;
53
+ double MNH1 = iHigh(NULL,PERIOD_MN1,1);
54
+ double MNL1 = iLow(NULL,PERIOD_MN1,1);
55
+ double MNO1 = iOpen(NULL,PERIOD_MN1,1);
56
+ double MNC1 = iClose(NULL,PERIOD_MN1,1);
61
57
 
62
- //下降トレンド
58
+ //前月足の四本値
59
+ double MNH2 = iHigh(NULL,PERIOD_MN1,2);
60
+ double MNL2 = iLow(NULL,PERIOD_MN1,2);
61
+ double MNO2 = iOpen(NULL,PERIOD_MN1,2);
63
- double kirisage = H1<H2 && L1<L2 && L2>C1;
62
+ double MNC2 = iClose(NULL,PERIOD_MN1,2);
64
63
 
65
- //買いの場合の利確
64
+ int highestprice = iHighest(NULL,PERIOD_D1,MODE_HIGH,20,1);//最高値
66
- double rikakuB = H1-L1;
65
+ int cheapestprice = iLowest(NULL,PERIOD_D1,MODE_LOW,20,1);//最安値
67
66
 
68
- //売り場合の利確
67
+ //最高値4本値
68
+ double highestH = iHigh(NULL,0,highestprice);
69
- double rikakuS = L1-H1;
69
+ double highestL = iLow(NULL,0,highestprice);
70
+ double highestO = iOpen(NULL,0,highestprice);
71
+ double highestC = iClose(NULL,0,highestprice);
70
72
 
71
- int slipp = 10;
72
-
73
-
74
-
75
- //陽線と陰線
73
+ //最安値の4本値
74
+ double cheapestH = iHigh(NULL,0,cheapestprice);
75
+ double cheapestL = iLow(NULL,0,cheapestprice);
76
- //double yousen1 = iOpen(Symbol(),0,1) < iOpen(Symbol(),0,1);
76
+ double cheapestO = iOpen(NULL,0,cheapestprice);
77
- //double yousen2 = iOpen(Symbol(),0,2) < iOpen(Symbol(),0,2);
77
+ double cheapestC = iClose(NULL,0,cheapestprice);
78
- //double insen1 = iOpen(Symbol(),0,1) > iOpen(Symbol(),0,1);
78
+
79
- //double insen2 = iOpen(Symbol(),0,2) > iOpen(Symbol(),0,2);
80
- if(OrdersTotal() == 0)//ポジション制限
79
+ if(OrdersTotal() == 0)//ポジション制限
80
+ {
81
+ if(cheapestH < C1 && MarketInfo(NULL,MODE_SPREAD) < maxspread)//買いの条件とスプレッド制限
81
82
  {
83
+ int Ticket = OrderSend(Symbol(),OP_BUYLIMIT,rot,cheapestH,10,cheapestL,0,NULL,1212,closeperiod,Magenta);//購入の処理
84
+ }
82
85
 
83
- if(kiriage && MarketInfo(NULL,MODE_SPREAD) < maxspread)//買いの条件とスプレッド制限
86
+ if(highestL > C1 && MarketInfo(NULL,MODE_SPREAD) < maxspread)//売りの条件とスプレッド制限
84
87
  {
85
- int Ticket = OrderSend(NULL,OP_BUY,0.01,Ask,slipp,L1,Ask+rikakuB*Point,NULL,0,0,Red);//購入の処理
88
+ int Ticket = OrderSend(Symbol(),OP_SELLLIMIT,rot,highestL,10,highestH,0,NULL,1111,closeperiod,Magenta);
86
89
  }
90
+ }
91
+
92
+
93
+
94
+ if(highestL > C1)//買いポジションの決済
95
+ {
96
+ bool Close = OrderClose(1111,rot,Bid,10,Magenta);
97
+ }
87
98
 
88
- if(kirisage && MarketInfo(NULL,MODE_SPREAD) < maxspread)//売りの条件とスプレッド制限
99
+ if(highestL > C1)//売りポジション決済
89
100
  {
90
- int Ticket = OrderSend(NULL,OP_SELL,0.01,Bid,slipp,H1,Bid+rikakuS*Point,NULL,0,0,Yellow);//売却の処理
101
+ bool Close = OrderClose(1212,rot,Ask,10,Magenta);
91
102
  }
92
- }
103
+ }
93
- }
104
+
94
105
  ```
95
106
 
96
107
  ### 試したこと
97
108
 
98
109
 
110
+
99
111
  ### 補足情報(FW/ツールのバージョンなど)
100
112
 
101
113
  ここにより詳細な情報を記載してください。

2

文法の修正

2020/09/03 08:57

投稿

nisei2
nisei2

スコア19

title CHANGED
File without changes
body CHANGED
@@ -82,16 +82,15 @@
82
82
 
83
83
  if(kiriage && MarketInfo(NULL,MODE_SPREAD) < maxspread)//買いの条件とスプレッド制限
84
84
  {
85
- int Ticket = OrderSend(NULL,OP_BUY,0.01,slipp,L1,1,Ask+rikakuB*Point,NULL,1,Red);//購入の処理
85
+ int Ticket = OrderSend(NULL,OP_BUY,0.01,Ask,slipp,L1,Ask+rikakuB*Point,NULL,0,0,Red);//購入の処理
86
86
  }
87
87
 
88
88
  if(kirisage && MarketInfo(NULL,MODE_SPREAD) < maxspread)//売りの条件とスプレッド制限
89
89
  {
90
- int Ticket = OrderSend(NULL,OP_SELL,0.01,slipp,Bid,10,H1,Bid+rikakuS*Point,NULL,1,Yellow);//売却の処理
90
+ int Ticket = OrderSend(NULL,OP_SELL,0.01,Bid,slipp,H1,Bid+rikakuS*Point,NULL,0,0,Yellow);//売却の処理
91
91
  }
92
92
  }
93
93
  }
94
-
95
94
  ```
96
95
 
97
96
  ### 試したこと

1

文法の修正

2020/08/31 09:26

投稿

nisei2
nisei2

スコア19

title CHANGED
File without changes
body CHANGED
@@ -38,6 +38,9 @@
38
38
 
39
39
  }
40
40
 
41
+
42
+ extern int maxspread = 20;//スプレッド
43
+
41
44
  void OnTick()
42
45
  {
43
46
 
@@ -65,24 +68,26 @@
65
68
  //売りの場合の利確
66
69
  double rikakuS = L1-H1;
67
70
 
68
- int mn = 10;
71
+ int slipp = 10;
69
72
 
73
+
74
+
70
75
  //陽線と陰線
71
76
  //double yousen1 = iOpen(Symbol(),0,1) < iOpen(Symbol(),0,1);
72
77
  //double yousen2 = iOpen(Symbol(),0,2) < iOpen(Symbol(),0,2);
73
78
  //double insen1 = iOpen(Symbol(),0,1) > iOpen(Symbol(),0,1);
74
79
  //double insen2 = iOpen(Symbol(),0,2) > iOpen(Symbol(),0,2);
75
- if(OrdersTotal() == 0)
80
+ if(OrdersTotal() == 0)//ポジション制限
76
81
  {
77
82
 
78
- if(kiriage)//買いの条件とポジション制限
83
+ if(kiriage && MarketInfo(NULL,MODE_SPREAD) < maxspread)//買いの条件とスプレッド制限
79
84
  {
80
- int Ticket = OrderSend(NULL,OP_BUY,0.01,Ask,Ask-100*Point,1,Ask+rikakuB*Point,NULL,mn,1,Red);//購入の処理
85
+ int Ticket = OrderSend(NULL,OP_BUY,0.01,slipp,L1,1,Ask+rikakuB*Point,NULL,1,Red);//購入の処理
81
86
  }
82
87
 
83
- if(kirisage)//売りの条件とポジション制限
88
+ if(kirisage && MarketInfo(NULL,MODE_SPREAD) < maxspread)//売りの条件とスプレッド制限
84
89
  {
85
- int Ticket = OrderSend(NULL,OP_SELL,0.01,Bid,10,Bid̟+100*Point,Bid+rikakuS*Point,NULL,mn,1,Yellow);//売却の処理
90
+ int Ticket = OrderSend(NULL,OP_SELL,0.01,slipp,Bid,10,H1,Bid+rikakuS*Point,NULL,1,Yellow);//売却の処理
86
91
  }
87
92
  }
88
93
  }
@@ -91,10 +96,6 @@
91
96
 
92
97
  ### 試したこと
93
98
 
94
- 損切の記述がおかしい所まではわかったので変更してみた。
95
- 前→買いの場合L1、売りの場合H1
96
- 現→買いの場合Ask-100*Point、Bid̟+100*Point
97
- とりあえずなんとか動かないかとこのように変更。
98
99
 
99
100
  ### 補足情報(FW/ツールのバージョンなど)
100
101