FX業者には、レートを、
①小数点以下2桁・4桁まで表示する業者
②小数点以下3桁・5桁まで表示する業者
があります。
これに対応して、PIPSやPOINTの数え方も異なるので、EAを作成するときは注意が必要です。
まずは、基本的な理解をしましょう。
通貨ペア | 2桁・4桁業者 | 3桁・5桁業者 | ||
USD/JPY | 1PIP | 0.01円 | 1PIP | 0.010円 |
1POINT | 0.01円 | 1POINT | 0.001円 | |
EUR/USD | 1PIP | 0.0001ドル | 1PIP | 0.00010ドル |
1POINT | 0.0001ドル | 1POINT | 0.00001ドル |
通常は、いずれの業者でも対応できるように、EAを作成する際に条件分岐をしてプログラムします。
もちろん、いろんなやり方がありますが、私はいつも以下のようなスタイルにしています。
まずは、グローバル領域に、
上のように記述します。
extern int SLIP = 3;
は、許容スリッページで、外部パラメーターによってユーザーが任意に変更できるためのものです。
その下の
double PIP = 0;
は、ピップス単位を代入する変数です。
いずれもグローバル領域で宣言しておきます。
次に、start()関数ではなくinit()関数に上のように記述します。
init()関数は、普段あまり使わない領域ですが、これは、ティックの変動のたびに読み込まれるstart()関数と異なり、EA挿入時に一度だけ読み込まれる領域で、ここへ記述することによって、start()関数の負担を減らして少しでもEAの稼働を速めるための工夫をしているわけです。
先ほど、あえてグローバル領域で
extern int SLIP = 3;
double PIP = 0;
と宣言しておいたのは、そのためです。
3桁・5桁業者であれば、PIPはPointの10倍、SLIPは指定値の10倍にし、2桁・4桁業者であれば、それぞれ1倍にします。
これで、
許容スリッページは、外部パラメーターにおいて常にピップス単位で指定することができ、指値幅なども、start()関数内において、たとえば、「25*PIP」という具合に常にピップス単位でプログラムしていくことができます。
コメントをお書きください