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」を使いましょう。
もし、何かしらの理由で外部パラメータの値を変更したい場合は、
別な内部変数に渡して、それを使えば問題ないですから。