【MQL4】externとinputの違いは?外部パラメータの設定方法

MQL4では、ユーザーからのパラメータ入力が可能です。

ロットやロスカットなど、ユーザーの希望で設定を変えたいときに、
ユーザー自身に設定値を入力して貰って、それをEAプログラムで使用します。

ユーザーが入力した設定値をEAでは「外部パラメータ」として扱います。

スポンサーリンク

外部パラメータを設定する

どうやったら、ユーザーがパラメータを入力できるようになるのか?

変数宣言のときに、外部パラメータであることを記述してあげればOKです。
こんな感じです。

extern double Lots = 1; // ロット
extern double StopPips = 50; // 損切り(pips)

先頭の「extern」が外部パラメータを宣言しています。
すると、EAの「パラメーターの入力」タブで、値を入力できるようになります。

この入力値をプログラム内で受け取って、色々な処理に使います。

ちなみにですが、

コード末尾の「// ロット」「// 損切り(pips)」など、コメントを記述すると、「パラメーター入力」タブの「変数」欄に表示されます。

何の値か分かりやすくなるので、設定すると良いですね。

外部パラメータの種類 extern、input

実は、外部パラメータの宣言には、大きく2通りあります。
「extern」と「input」です。

extern double Lots = 1; // ロット
extern double StopPips = 50; // 損切り(pips)
input double Lots = 1; // ロット
input double StopPips = 50; // 損切り(pips)

どちらも外部パラメータとして同じように受け取れます。

ただし、この2つには、大きな違いがあります。

externとinputの違い

「extern」と「input」の違いは、

「プログラム内で値を変更できるかどうか」になります。

「extern」は、値の書き換え「可能」
「input」は、値の書き換え「不可能」

これは、とても重要な違いです。

プログラムが、外部パラメータを意図せず書き換えてしまう危険があります。

大げさに説明すると、

「1ロットで取引するつもりで設定したのに、プログラムのバグで、100ロットでエントリーされてしまったら?」

「50pipsで損切りしたかったのに、300pipsまで損切りされなかったら?」

即退場になるかも知れませんね。

まあ、さすがに、ここまで初歩的なことはないと思いますが、
こういう危険性があるということです。

外部パラメータの値で、プログラムの処理を分けてる場合なども、
別な処理が実行されてしまいますから、危険ですね。

結論、どっちを使えば良いの?

間違えて外部パラメータを書き換えるリスクを回避するためにも、
基本的に「input」を使いましょう。

もし、何かしらの理由で外部パラメータの値を変更したい場合は、
別な内部変数に渡して、それを使えば問題ないですから。

タイトルとURLをコピーしました