externとinputの違い - ページ 4 1234567 新しいコメント Aleksey Semenov 2019.06.29 16:10 #31 Igor Makanu: enum型の 変数を宣言するのはどうでしょうか? 暗黙のenum変換 tst1.mq5 24 17 EnumToString()で確認することもできます。 変数が宣言されていない型は、使われていないとしてコンパイルで捨てられただけだと思うのですが つまり、すでに使われているenumと同じ名前の変数を誤って宣言してしまい、どことどこの膝を撃ったのか、非常に長く苦しい時間を過ごすことになるのです Dmitry Fedoseev 2019.06.29 16:12 #32 Maksim Neimerik: さて、皆さん、評決はいかがでしょうか?.mq5のプログラムを.mqh (#include) で書く場合、externを安全に書くことができ、(mql4でやったように)予期せぬ結果を恐れることはありませんし、inputを使って? MT5では、外部変数を宣言するために入力を使用します。MT5におけるExternは、別の目的を持っています。 Igor Makanu 2019.06.29 16:16 #33 Dmitry Fedoseev: MT5では、外部変数を宣言するために入力を使用します。MT5におけるExternは、別の目的を持っています。 MT5ではなぜexternが使えないのですか?- MT5の例をコンパイルしてみましたが、基本的な違いは見当たりません。 Artyom Trishkin 2019.06.29 16:20 #34 Igor Makanu: なぜMT5ではexternが使えないのですか?- MT5の例をコンパイルしてみましたが、基本的な違いは見当たりません。 古いMQL4からの習慣で、入力パラメータにexternを使おうとしている人がいるからです。 そして、新しいMQL4とMQL5では、inputは#property strictと一緒に使われ、externは他の用途に使われるようになりました。 だからexternを使うなと言われたのです。 Igor Makanu 2019.06.29 16:25 #35 Artyom Trishkin: というのも、昔のMQL4からの習慣で、入力パラメータにexternを使おうとしてしまうのです。 そして、新しいMQL4とMQL5では、inputは#property strictと一緒に使われ、externは他の用途に使われます。 だからexternを使うなと言ったんだ。 だからみんなブカブカに書こうとして、結果的にMQL5ではONLYで使ってはいけないし、他の場所でも使ってはいけないということになる)))。 古いコードでexternを見かけたら、inputに置き換えて、すべての警告を修正してください。 Artyom Trishkin 2019.06.29 16:29 #36 Igor Makanu: ほら、みんなたくさんブクオフを書こうとして、結局MT5でしか使わないとか、全く使わないとかいうことになるじゃないですか )))) もし、古いコードにexternがあったら、inputに置き換えて、すべての警告を修正してください。 ここに書かれていることは、あまり理解できない。 ただ、MQL5やMQL4でexternを#property strictで使ってプログラムの外部パラメータを宣言するのではなく、ヘルプに(漠然と)書いてあるような目的で使うという意味です。 Maksim Neimerik 2019.06.29 16:43 #37 考えたんだけど、ちょっと思っただけなんだけど...。MQL5では、iCustom()との連携はMQL4よりもずっと問題があるのでは(MQL4では一般的にインジケータ呼び出しでも)ないでしょうか?そうなんですか?もしYesなら、続けます。 MQL5を少し勉強し始めたところです...。 おそらく新しいトピックを立ち上げることになると思います。 Igor Makanu 2019.06.29 16:50 #38 Maksim Neimerik: ちょっと思ったんだけど...MQL5では、iCustom()との連携はMQL4よりもずっと難しいですよね(というか、MQL4では一般的にインジケータの呼び出しは 難しい)?そうなんですか?もしそうなら、続けます。 MQL5では、iCustom()を2つのステップで操作しなければならないからです。 1.インジケーターハンドルを手に入れる 2. CopyBuffer()で指標となるバッファの値を要求する。 MQL4では、iCustom()はパラメータを持つ関数呼び出しとして機能します - 呼び出して、それを受け取る MQL5でも同じように動作します。開発者は意図的に組み込み関数の機能を減らし、時系列へのアクセスを不便にしました。つい最近、MQL5にiClose()とiHigh()を追加しましたが、以前はCopyBuffer()と同様にデータを配列にコピーする必要がありました。 一般に、MT5はMT4よりも書き込みが多い。 Maksim Neimerik 2019.06.29 17:20 #39 Igor Makanu: MQL5では、iCustom()を2つのステップで操作しなければならないからです。 1.インジケーターハンドルを手に入れる 2. CopyBuffer()で指標となるバッファの値を要求する。 MQL4では、iCustom()はパラメータを持つ関数呼び出しとして機能します - 呼び出して、それを受け取る MQL5でも同じように動作します。開発者は意図的に組み込み関数の機能を減らし、時系列へのアクセスを不便にしました。つい最近、MQL5にiClose()とiHigh()を追加しましたが、以前はCopyBuffer()と同様にデータを配列にコピーする必要がありました。 一般に、MT5はMT4よりも書き込みが多い。 https://www.mql5.com/ru/forum/316800 MQL4 & MQL5 2019.06.29www.mql5.com Я тут вот что думаю, просто мысли... В MQL5 ведь намного проблемнее работа с iCustom() чем в MQL4 (да и вообще с вызовом индикаторов в советнике... Alexey Navoykov 2019.06.30 06:02 #40 残念ながら、MQL5でのextern変数の実装はまだ確定していません。 つまり、これらの変数の強制的な1回限りの 初期化を制御することができないのです。 例えば、このような書き方をすることがあります。 extern int a=1; extern int a=2; これらの初期化が別々のプラグインで行われることを想像してください。そして、最終的な結果は、これらのファイルが含まれる順番に依存します。 あるいは、このように書くこともできます(実行ファイル)。 extern int a; void OnStart() { Print(a); } ここでは、extern-variableを全く初期化していませんが、エラーも出ていません。 したがって、他のファイルで同じ変数が定義されているかどうかを制御することはできません。 誤って名前を変えてしまっても、他のファイルでは別の名前の変数があるのに、プログラムは何事もなかったかのようにコンパイルされます。 全体として、どこにもフィットしない。そのため、extern変数ではなく、関数を使うのがよいでしょう。 関数は、1つだけ定義され、それ以上でも以下でもないことが保証されています。 1234567 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
enum型の 変数を宣言するのはどうでしょうか?
暗黙のenum変換 tst1.mq5 24 17
EnumToString()で確認することもできます。
変数が宣言されていない型は、使われていないとしてコンパイルで捨てられただけだと思うのですが
つまり、すでに使われているenumと同じ名前の変数を誤って宣言してしまい、どことどこの膝を撃ったのか、非常に長く苦しい時間を過ごすことになるのです
さて、皆さん、評決はいかがでしょうか?.mq5のプログラムを.mqh (#include) で書く場合、externを安全に書くことができ、(mql4でやったように)予期せぬ結果を恐れることはありませんし、inputを使って?
MT5では、外部変数を宣言するために入力を使用します。MT5におけるExternは、別の目的を持っています。
MT5では、外部変数を宣言するために入力を使用します。MT5におけるExternは、別の目的を持っています。
MT5ではなぜexternが使えないのですか?- MT5の例をコンパイルしてみましたが、基本的な違いは見当たりません。
なぜMT5ではexternが使えないのですか?- MT5の例をコンパイルしてみましたが、基本的な違いは見当たりません。
古いMQL4からの習慣で、入力パラメータにexternを使おうとしている人がいるからです。
そして、新しいMQL4とMQL5では、inputは#property strictと一緒に使われ、externは他の用途に使われるようになりました。
だからexternを使うなと言われたのです。
というのも、昔のMQL4からの習慣で、入力パラメータにexternを使おうとしてしまうのです。
そして、新しいMQL4とMQL5では、inputは#property strictと一緒に使われ、externは他の用途に使われます。
だからexternを使うなと言ったんだ。
だからみんなブカブカに書こうとして、結果的にMQL5ではONLYで使ってはいけないし、他の場所でも使ってはいけないということになる)))。
古いコードでexternを見かけたら、inputに置き換えて、すべての警告を修正してください。
ほら、みんなたくさんブクオフを書こうとして、結局MT5でしか使わないとか、全く使わないとかいうことになるじゃないですか ))))
もし、古いコードにexternがあったら、inputに置き換えて、すべての警告を修正してください。
ここに書かれていることは、あまり理解できない。
ただ、MQL5やMQL4でexternを#property strictで使ってプログラムの外部パラメータを宣言するのではなく、ヘルプに(漠然と)書いてあるような目的で使うという意味です。
考えたんだけど、ちょっと思っただけなんだけど...。MQL5では、iCustom()との連携はMQL4よりもずっと問題があるのでは(MQL4では一般的にインジケータ呼び出しでも)ないでしょうか?そうなんですか?もしYesなら、続けます。
MQL5を少し勉強し始めたところです...。
おそらく新しいトピックを立ち上げることになると思います。ちょっと思ったんだけど...MQL5では、iCustom()との連携はMQL4よりもずっと難しいですよね(というか、MQL4では一般的にインジケータの呼び出しは 難しい)?そうなんですか?もしそうなら、続けます。
MQL5では、iCustom()を2つのステップで操作しなければならないからです。
1.インジケーターハンドルを手に入れる
2. CopyBuffer()で指標となるバッファの値を要求する。
MQL4では、iCustom()はパラメータを持つ関数呼び出しとして機能します - 呼び出して、それを受け取る
MQL5でも同じように動作します。開発者は意図的に組み込み関数の機能を減らし、時系列へのアクセスを不便にしました。つい最近、MQL5にiClose()とiHigh()を追加しましたが、以前はCopyBuffer()と同様にデータを配列にコピーする必要がありました。
一般に、MT5はMT4よりも書き込みが多い。
MQL5では、iCustom()を2つのステップで操作しなければならないからです。
1.インジケーターハンドルを手に入れる
2. CopyBuffer()で指標となるバッファの値を要求する。
MQL4では、iCustom()はパラメータを持つ関数呼び出しとして機能します - 呼び出して、それを受け取る
MQL5でも同じように動作します。開発者は意図的に組み込み関数の機能を減らし、時系列へのアクセスを不便にしました。つい最近、MQL5にiClose()とiHigh()を追加しましたが、以前はCopyBuffer()と同様にデータを配列にコピーする必要がありました。
一般に、MT5はMT4よりも書き込みが多い。
https://www.mql5.com/ru/forum/316800
残念ながら、MQL5でのextern変数の実装はまだ確定していません。 つまり、これらの変数の強制的な1回限りの 初期化を制御することができないのです。
例えば、このような書き方をすることがあります。
これらの初期化が別々のプラグインで行われることを想像してください。そして、最終的な結果は、これらのファイルが含まれる順番に依存します。
あるいは、このように書くこともできます(実行ファイル)。
ここでは、extern-variableを全く初期化していませんが、エラーも出ていません。
したがって、他のファイルで同じ変数が定義されているかどうかを制御することはできません。 誤って名前を変えてしまっても、他のファイルでは別の名前の変数があるのに、プログラムは何事もなかったかのようにコンパイルされます。
全体として、どこにもフィットしない。そのため、extern変数ではなく、関数を使うのがよいでしょう。 関数は、1つだけ定義され、それ以上でも以下でもないことが保証されています。