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

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

新規登録して質問してみよう
ただいま回答率
85.35%
メタプログラミング

メタプログラミングとは、プログラミング技法の一つ。プログラムをプログラミングすることを指します。他のプログラムや、そのプログラム自体を操作・出力するメタプログラムを記述する作業をメタプログラミングと呼びます。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

Q&A

解決済

1回答

1701閲覧

MT4 EA プログラミング初心者です。コンパイルエラー表示で悩んでます

max4

総合スコア1

メタプログラミング

メタプログラミングとは、プログラミング技法の一つ。プログラムをプログラミングすることを指します。他のプログラムや、そのプログラム自体を操作・出力するメタプログラムを記述する作業をメタプログラミングと呼びます。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

0グッド

0クリップ

投稿2021/06/25 10:03

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
MT4 EA Meta Editorでエラー修正お願いします。
MT4 EA プログラミング初心者です。rciを使ってエントリー、決済、のEAを作成してます。
ブレイクイーブンを追加したいのですが、以下のエラーメッセージが発生しました。
解決方法を教えてください。
以下、内容です。対応する箇所(line)の頭に、番号(①②③)が振ってあります。

発生している問題・エラーメッセージ

エラーメッセージ①'}'-unexpected end of program ②'{'-unbalanced parentheses ③'Calculated_Point' - undeclared identifie

該当のソースコード

ソースコード#include <MyLib.mqh> #include <stdlib.mqh> #property strict #define COMMENT "s" // 外部パラメータ extern double Lots = 0.01; extern int Slippage = 3; extern int BBPeriod = 7; extern int Magic = 1; extern double Break_Even = 20;double Use_Point = 0;int Ticket = 0; //関数の宣言 double AdjustPoint(string Currency) { int Calculated_Digits = MarketInfo(Symbol(),MODE_DIGITS); if(Calculated_Digits == 2 || Calculated_Digits == 3) { double Calculated_Point = 0.01; } else if(Calculated_Digits == 4 || Calculated_Digits == 5) { double Calculated_Point = 0.0001; } return(③Calculated_Point); } int init() { Use_Point = AdjustPoint(Symbol()); return(0); } int start() ②{ double RCI1 = iCustom(NULL, 0,"SpearmanRankCorrelation",BBPeriod,0, 1); if(Ticket > 0 && RCI1 < 0.8) { double Closed = OrderClose(Ticket,Lots,Bid,Slippage,Magenta); if(Closed == true) { Ticket = 0; } } else if(Ticket > 0 && RCI1 > -0.8) { double Closed = OrderClose(Ticket,Lots,Ask,Slippage,Magenta); if(Closed == true) { Ticket = 0; } } if(OrdersTotal() == 0 && RCI1 < -0.7) //&& L <= -0.8 { Ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,COMMENT,Magic,0,Magenta); } if(OrdersTotal() == 0 && RCI1 > 0.7) //&& L >= 0.8 && { Ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,COMMENT,Magic,0,Magenta); } //ブレイクイーブン for(int i = OrdersTotal() -1; i >= 0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true) { if(OrderMagicNumber() == Magic && OrderSymbol() == Symbol()) { if(OrderType() == OP_BUY) { double Pips_Profit = Bid - OrderOpenPrice(); double Minimum_Profit = Break_Even * Use_Point; if(Pips_Profit >= Minimum_Profit && OrderOpenPrice()! = OrderStopLoss()) { bool Modified = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() ,OrderTakeProfit(), 0, Orange); } } else if(OrderType() == OP_SELL) { Pips_Profit = OrderOpenPrice() - Ask; Minimum_Profit = Break_Even * Use_Point; if(Pips_Profit >= Minimum_Profit && OrderOpenPrice()! = OrderStopLoss()) { Modified = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(),OrderTakeProfit(), 0, Orange); } } } } return(0); ①}

試したこと

ここに問題に対して試したことを記載してください。
10個エラー表示されましたが、本、ネットなど調べて解決しましたが、
この3個のエラーのどの様に書けばいいのか分かりません。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

括弧の数があってませんよ

そもそものはなし、インデントをきちんとしよう。
こんなしょーもないエラーに煩わされすに済みますよ


C

1//関数の宣言 2double AdjustPoint(string Currency) 3{ 4 int Calculated_Digits = MarketInfo(Symbol(),MODE_DIGITS); 5 6 if(Calculated_Digits == 2 || Calculated_Digits == 3){ 7 double Calculated_Point = 0.01; 8 }else if(Calculated_Digits == 4 || Calculated_Digits == 5){ 9 double Calculated_Point = 0.0001; 10 } 11 return(Calculated_Point); 12} 13

#インデントの見本を見せるのに修正

カッコの中で定義した変数は、そのカッコ内でしか有効ではありません
ということで、ここで登場しているCalculated_Pointという変数はすべて別物になってます。
で、return の所のやつが、未定義になってる、ってのはわかりますかね


型名に続いて変数名を書くと、そこで変数の定義となります
で、その変数は、定義したカッコ内でだけしか有効ではありません
Calculated_Point は、そのif文のカッコを抜けると無効になります

なら、最後のreturn まで有効になる場所で定義してあげよう
#他のところも同様

C

1//関数の宣言 2double AdjustPoint(string Currency) 3{ 4 int Calculated_Digits = MarketInfo(Symbol(),MODE_DIGITS); 5 double Calculated_Point; 6 7 if(Calculated_Digits == 2 || Calculated_Digits == 3){ 8 Calculated_Point = 0.01; 9 }else if(Calculated_Digits == 4 || Calculated_Digits == 5){ 10 Calculated_Point = 0.0001; 11 } 12 return(Calculated_Point); 13} 14

#実はこれでもダメなんだけどね。。

C言語の基本的な文法の話なんで、そこらへんもうちょい学習を進めよう。

投稿2021/06/25 10:16

編集2021/06/26 01:49
y_waiwai

総合スコア88042

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

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

max4

2021/06/25 10:53

括弧をどこ入れたら(減らす)、いいんですか? そこが分かりません。そこが解決できたら、③'Calculated_Point' - undeclared identifi もエラー解決するですか?
y_waiwai

2021/06/25 10:56

解決しません。別のエラーです
y_waiwai

2021/06/25 10:59

まずはそのコードのインデントをきちんとしてみよう
max4

2021/06/26 01:32

返答ありがとうございます。 コードのインデントを直して見ました。 int Calculated_Digits = MarketInfo(Symbol(),MODE_DIGITS); ↑のように Calculated_Point も定義しないとダメって事ですか? もしくは、変数をif文の外で宣言すればいいんですか? double Calculated_Point; Calculated_Point = AdjustPoint(Symbol());
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問