質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

Q&A

解決済

1回答

2749閲覧

EA作成初心者でMQL4制作中ですがエラーが出るのでエラーを治したい。

shirogane

総合スコア11

MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

1グッド

1クリップ

投稿2019/04/01 01:46

メタエディターで記入していってるのですがエラーが出るのでエラーをなくしてコンパイルできるようにしたい。
治したいエラー箇所
-------------------------------------------------------------------行    列
'  ' - declaration without type しろがね3号機.mq4        17 26
'Exit_L' - declaration without type しろがね3号機.mq4     104 5
'Exit_S' - declaration without type しろがね3号機.mq4     115 6
'Currency' - undeclared identifier しろがね3号機.mq4     80 38
'Calculated_Point' - undeclared identifier しろがね3号機.mq4 90 9
'return' - 'void' function returns a value しろがね3号機.mq4 90 2
'Calculated_Point' - undeclared identifier しろがね3号機.mq4 43 13
'return' - 'void' function returns a value しろがね3号機.mq4 188 19


言語はMQL4

MQL4

1コード 2 3 4//パラメーター設定 5 6 extern double Lots = 0.1; //取引ロット数  7 extern int Slip = 5;  //許容スリップページ  ←17行目26列ここでエラー 8 extern string coment = "";//コメント 9 extern int Trailing_Stop = 500; 10 double Pips = 0; 11 extern int TrailingStop=50; // if 0, MoveTrailingStop() will not be called 12 extern int MagicNumber=3333; 13//変数の設定 14 15 int Ticket_L = 0;//買い注文の結果をキャッチする変数 16 int Ticket_S = 0;//売り注文の 、、 17 int Exit_L = 0;//買いポジションの決済注文の結果をキャッチする変数 18 int Exit_S = 0;//売りポジションの 、、 19 20double AdjustPoint(string Currency); 21double AdjustPoint(string Currency) 22{ 23 int Symbol_Digits = (int)MarketInfo(Currency,MODE_DIGITS); 24 25 if(Symbol_Digits == 2 || Symbol_Digits == 3) 26 { 27 double Calculated_Point = 0.01; 28 } 29 else if(Symbol_Digits == 4 || Symbol_Digits == 5) 30 { 31 double Calculated_Point = 0.0001; 32 } 33 return(Calculated_Point); }; ここでエラー43行目13列 34 35 //トレール設定関数--------------------------------- 36 if(TrailingStop>0)MoveTrailingStop(); 37//+------------------------------------------------------------------+ 38//| Expert initialization function | 39//+------------------------------------------------------------------+ 40int OnInit() 41 { 42 43//---トレールの記述 44 Pips = AdjustPoint(Symbol()); 45//--- 46 return(INIT_SUCCEEDED); 47 } 48//+------------------------------------------------------------------+ 49//| Expert deinitialization function | 50//+------------------------------------------------------------------+ 51void OnDeinit(const int reason) 52 { 53//--- 54 55 } 56//+------------------------------------------------------------------+ 57//| Expert tick function | 58//+------------------------------------------------------------------+ 59 60 61void OnTick() 62 63 64 65//タイムフィルター----------------------------- 66 67 68//通貨表示の桁数統一の定義 69{ 70 int Symbol_Digits = (int)MarketInfo(Currency,MODE_DIGITS); ←ここでエラー80行目38列 71 72 if(Symbol_Digits == 2 || Symbol_Digits == 3) 73 { 74 double Calculated_Point = 0.01; 75 } 76 else if(Symbol_Digits == 4 || Symbol_Digits == 5) 77 { 78 double Calculated_Point = 0.0001; 79 } 80 return(Calculated_Point); ここでエラー90行目9列 90行目2列 81} 82 83 84 85 86 87 //---------------------------------------------------------------------------- 88 89 //買いポジションのエグジット 90 if( 91 92 &&(Ticket_L != 0&&Ticket_L != -1));//約定が0でなくて失敗してない場合、つまりポジションを持っている場合 93 94 Exit_L=oederClose(Ticket_L,Lots,Bid,Slip,Red);        ←ここでエラー104行目5列 95 if(Exit_L==1){Ticket_L=0};//1で約定したら0で注文を出さないという意味 96 97 98 //---------------------------------------------------------------------------- 99 100 //売りポジションのエグジット 101 if( 102 103 &&(Ticket_S != 0&&Ticket_S != -1));//約定が0でなくて失敗してない場合、つまりポジションを持っている場合 104 105 Exit_S=oederClose(Ticket_S,Lots,Ask,Slip,Blue);    ←ここでエラー115行目6列 106 if(Exit_S==1){Ticket_S=0};//1で約定したら0で注文を出さないという意味 107 108 109 110 111 112 113 114 115 116 //----------------------------------------------------------------- 117 118 //買いエントリー  119 //買い注文の条件=if(○○ 120 if( 121                                     122  //&&はかつなになにで||はどちらか一方でこれは注文結果を確定させるための指示 123 //0は一度も注文を出してない状態-1は注文が失敗した状態 124 125    &&(Ticket_L==0||Ticket_L==-1)//買いポジションを持ってないという意味 126 &&(Ticket_S==0||Ticket_S==-1))//売りポジションを持ってないという意味 127 128 //注文内容の設定 129 { 130 Ticket_L=ordersend(symbol(),OP_BUY,Lots,Ask,slip,0,0,comments,MAGIC,0,RED) 131 } 132 //------------------------------------------------------------------------ 133 //売りエントリー 134 135 if( 136                                     137  //&&はかつなになにで||はどちらか一方でこれは注文結果を確定させるための指示 138 //0は一度も注文を出してない状態-1は注文が失敗した状態 139    &&(Ticket_S==0||Ticket_S==-1)//売りポジションを持ってないという意味 140    &&(Ticket_L==0||Ticket_L==-1))//買いポジションを持ってないという意味 141 142 143 //注文内容の設定 144 { 145 Ticket_S=ordersend(symbol(),OP_SELL,Lots,Bid,slip,0,0,comments,MAGIC,0,Blue) 146 } 147 //トレール設定関数--------------------------------- 148 if(TrailingStop>0)MoveTrailingStop(); 149 150 //---------------------------------------------- 151 //トレールのソース----------------------------------- 152 void MoveTrailingStop() 153{ 154 int cnt,total=OrdersTotal(); 155 for(cnt=0;cnt<total;cnt++) 156 { 157 if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false) continue; 158 if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) 159 { 160 if(OrderType()==OP_BUY) 161 { 162 if(TrailingStop>0) 163 { 164 if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-Point*TrailingStop,Digits))||(OrderStopLoss()==0)) 165 { 166 OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Blue); 167 return; 168 } 169 } 170 } 171 else if(OrderType()==OP_SELL) 172 { 173 if(TrailingStop>0) 174 { 175 if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+Point*TrailingStop,Digits)))||(OrderStopLoss()==0)) 176 { 177 OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red); 178 return(0) ←ここでエラー188行目19列  179 } 180 } 181 } 182 } 183 } 184} 185//+------------------------------------------------------------------+
pyarayo👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

extern int Slip = 5;  //許容スリップページ  ←17行目26列ここでエラー

全角のスペースが紛れ込んでいます。

return(Calculated_Point); }; ここでエラー43行目13列

if の中でCalculated_Pointを宣言しています。

こうするのはいかがでしょうか
余談ですが最近通貨ペア6桁もありますね 
double AdjustPoint(string Currency)
{
int Symbol_Digits = (int)MarketInfo(Currency,MODE_DIGITS);
double Calculated_Point;
if(Symbol_Digits == 2 || Symbol_Digits == 3)
{
Calculated_Point = 0.01;
}
else if(Symbol_Digits == 4 || Symbol_Digits == 5)
{
Calculated_Point = 0.0001;
}
return(Calculated_Point);};

return(Calculated_Point); ここでエラー90行目9列 90行目2列
}

void Ontick()で始めている為returnに戻り値は不要

return(Calculated_Point); は return; です。
しかしここでreturn をするとその後「//買いポジションのエグジット」いかが動作しません。
return と次の行の } を削除して、最後に}を調整してはいかがでしょうか

int Symbol_Digits = (int)MarketInfo(Currency,MODE_DIGITS); ←ここでエラー80行目38列

OnTick()内ではCurrency が宣言されていません。CurrencyをSymbol()に置き換えてはどうでしょうか

Exit_L=oederClose(Ticket_L,Lots,Bid,Slip,Red);        ←ここでエラー104行目5列
Exit_S=oederClose(Ticket_S,Lots,Ask,Slip,Blue);    ←ここでエラー115行目6列

正しくはOrderClose

return(0) ←ここでエラー188行目19列 

;セミコロンが抜けています。

がんばれ!

投稿2019/04/28 04:07

TACA-AMSER

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shirogane

2020/10/17 20:12

丁寧にありがとうございます!がんばります!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問