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

質問編集履歴

1

文法の修正

2020/09/18 07:46

投稿

nisei2
nisei2

スコア19

title CHANGED
File without changes
body CHANGED
@@ -5,41 +5,165 @@
5
5
  ### 発生している問題・エラーメッセージ
6
6
 
7
7
  ```
8
- 'Calculated_Point' - undeclared identifier//関数の部分
9
-
10
8
  'return' - 'void' function returns a value//最後の部分
11
-
12
9
  ```
13
10
 
14
11
  ###
15
12
 
16
13
  ```MQL4
14
+ #property copyright "Copyright 2020, MetaQuotes Software Corp."
15
+ #property link "https://www.mql5.com"
16
+ #property version "1.00"
17
+ #property strict
18
+ #property copyright"詳解MT4"
19
+ #property link"http://mt4-traders.com"
20
+
21
+ //変数の宣言
22
+ extern int Magic = 1515;
23
+ extern int Break_Period = 24;
24
+ extern double Lots = 0.1;
25
+ extern int Slippage = 10;
26
+ extern string Comments = "Break Out";
27
+ extern int Trailing_Stop = 50;
28
+
29
+ int Buy_Ticket = 0;
30
+ int Sell_Ticket = 0;
31
+ double Pips = 0;
32
+ int Adjusted_Slippage = 0;
33
+
17
34
  //関数の定義
35
+ //関数1
18
36
  double AdjustPoint(string Currency)
19
-   {
37
+ {
38
+ double Calculated_Point;
20
-    int Symbol_Digits = MarketInfo(Currency,MODE_DIGITS);
39
+ int Symbol_Digits = MarketInfo(Currency,MODE_DIGITS);
21
-    if(Symbol_Digits == 2 || Symbol_Digits == 3)
40
+ if(Symbol_Digits == 2 || Symbol_Digits == 3)
22
-   {
41
+ {
23
-    double Calculated_Point = 0.01;
42
+ Calculated_Point = 0.01;
24
-   }
43
+ }
25
-    else if(Symbol_Digits == 4 || Symbol_Digits == 5)
44
+ else if(Symbol_Digits == 4 || Symbol_Digits == 5)
26
-   {
45
+ {
27
-    double Calculated_Point = 0.0001;
46
+ Calculated_Point = 0.0001;
28
-   }
47
+ }
29
-    return(Calculated_Point);   ←ここが問題点
48
+ return(Calculated_Point);
30
-   }
49
+ }
31
50
 
32
- //損切価格の変更
51
+ //関数2
33
- if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && (Current_Stop>Max_Stop_Loss || Current_Stop==0))
52
+ int AdjustSlippage(string Currency,int Slippage_Pips)
34
-   {
53
+ {
54
+ int Calculated_Slippage;
35
- double Modified=OrderModify(OrderTicket(),OrderOpenPrice(),Max_Stop_Loss,0,0);
55
+ int Symbol_Digits = MarketInfo(Currency,MODE_DIGITS);
56
+ if(Symbol_Digits == 2 || Symbol_Digits == 4)
57
+ {
58
+ Calculated_Slippage = Slippage_Pips;
36
-   }
59
+ }
60
+ else if(Symbol_Digits== 3 || Symbol_Digits == 5)
61
+ {
62
+ Calculated_Slippage = Slippage_Pips*10;
37
63
  }
64
+ return(Calculated_Slippage);
65
+ }
66
+
67
+ int OnInit()
68
+ {
69
+ Pips = AdjustPoint(Symbol());
70
+ Adjusted_Slippage = AdjustSlippage(Symbol(),Slippage);
71
+ return(0);
72
+ }
73
+
74
+ void OnDeinit(const int reason)
75
+ {
76
+ }
77
+
78
+ void OnTick()
79
+ {
80
+ //チケット番号の初期化
81
+ if(OrdersTotal()==0)
82
+ {
83
+ Buy_Ticket=0;
84
+ Sell_Ticket=0;
85
+ }
86
+ //クローズ処理
87
+ //ポジション保有の確認
88
+ if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==true)
89
+ {
90
+ //ロングポジションクローズ
91
+ if(OrderType()==OP_BUY)
92
+ {
93
+ if(Close[0]<Low[iLowest(Symbol(),0,MODE_LOW,Break_Period,1)] && OrderCloseTime()==0)
94
+ {
95
+ bool Closed = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Adjusted_Slippage,Magenta);
96
+ if(Closed==true)
97
+ {
98
+ Buy_Ticket=0;
99
+ }
38
100
  }
101
+ }
102
+ //ショートポジションクローズ
103
+ else if(OrderType()==OP_SELL)
104
+ {
105
+ if(Close[0]>High[iHighest(Symbol(),0,MODE_HIGH,Break_Period,1)] && OrderCloseTime()==0)
106
+ {
107
+ bool Closed = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Adjusted_Slippage,Aqua);
108
+ if(Closed==true)
109
+ {
110
+ Sell_Ticket=0;
111
+ }
39
112
  }
113
+ }
114
+ }
115
+
116
+ //エントリー処理
117
+ //ロングエントリー
118
+ if(Close[0]>High[iHighest(NULL,0,MODE_HIGH,Break_Period,1)] && OrdersTotal()==0)
119
+ {
120
+ Buy_Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Adjusted_Slippage,0,0,Comments,Magic,0,Magenta);
121
+ }
122
+
123
+ //ショートエントリー
124
+ if(Close[0]<Low[iLowest(NULL,0,MODE_LOW,Break_Period,1)] && OrdersTotal()==0)
125
+ {
126
+ Sell_Ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Adjusted_Slippage,0,0,Comments,Magic,0,Aqua);
127
+ }
128
+
129
+ //トレイリングストップ
130
+ if(Buy_Ticket>0 || Sell_Ticket>0)
131
+ {
132
+ for(int i=OrdersTotal()-1; i>=0; i--)
133
+ {
134
+ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
135
+ {
136
+ //買いポジションの場合
137
+ if(OrderType()==OP_BUY)
138
+ {
139
+ double Max_Stop_Loss = Bid-Trailing_Stop*Pips;
140
+ Max_Stop_Loss = NormalizeDouble(Max_Stop_Loss,MarketInfo(Symbol(),MODE_DIGITS));
141
+ double Current_Stop=NormalizeDouble(OrderStopLoss(),MarketInfo(Symbol(),MODE_DIGITS));
142
+
143
+ //損切価格の変更
144
+ if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && Current_Stop<Max_Stop_Loss)
145
+ {
146
+ bool Modified=OrderModify(OrderTicket(),OrderOpenPrice(),Max_Stop_Loss,0,0);
147
+ }
148
+ }
149
+ //売りポジションの場合
150
+ else if(OrderType()==OP_SELL)
151
+ {
152
+ double Max_Stop_Loss=Ask+Trailing_Stop*Pips;
153
+ Max_Stop_Loss=NormalizeDouble(Max_Stop_Loss,MarketInfo(Symbol(),MODE_DIGITS));
154
+ double Current_Stop=NormalizeDouble(OrderStopLoss(),MarketInfo(Symbol(),MODE_DIGITS));
155
+
156
+ //損切価格の変更
157
+ if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && (Current_Stop>Max_Stop_Loss || Current_Stop==0))
158
+ {
159
+ double Modified=OrderModify(OrderTicket(),OrderOpenPrice(),Max_Stop_Loss,0,0);
160
+ }
161
+ }
162
+ }
163
+ }
164
+ }
165
+ return(0);
40
166
  }
41
- return(0);    ←ここが問題点
42
- }
43
167
  ```
44
168
 
45
169
  ### 試したこと
@@ -48,4 +172,4 @@
48
172
 
49
173
  ### 補足情報(FW/ツールのバージョンなど)
50
174
 
51
- ここより詳細な情報を記載てください。
175
+ https://mt4-traders.com/wp-content/uploads/2018/12/Break-Out-EA.pdf ←参考にしたもの