MQL4MQL5 スクリプト 資金管理・リスク
pips とポイントを正しく換算したい(3桁・5桁対応)
結論:_Digits が 3 か 5 の口座では 1pips = 10 ポイント(_Point × 10)、2 か 4 の口座では 1pips = 1 ポイントです。
考え方
MT4・MT5 の _Point は「価格の最小単位(1ポイント)」です。いまは多くの口座が5桁(EURUSD 1.23456)・3桁(USDJPY 150.123)表示で、この場合 1pips = 10 ポイントになります。pips で決めた幅を価格に直すときは「pips × 1pips の大きさ」を使います。
- _Digits が 3 か 5 なら、1pips = _Point × 10。そうでなければ _Point
- pips を価格の幅にするときは pips × 1pips の大きさ
- 価格の差を pips にするときは 差 ÷ 1pips の大きさ
そのまま使えるコード
MetaEditor の「新規作成」で「スクリプト」を選び、できたファイルの中身をすべてこのコードに置き換えてコンパイル(F7)します。ファイルは Scripts フォルダに保存され、ナビゲーターからチャートにドラッグして使います。
MQL4・MQL5 共通
#property strict
// pips とポイントの換算を確認するスクリプト
double PipSize()
{
return (_Digits == 3 || _Digits == 5) ? _Point * 10 : _Point;
}
double PipsToPrice(double pips) { return pips * PipSize(); }
double PriceToPips(double diff) { return diff / PipSize(); }
void OnStart()
{
double spreadPrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK) - SymbolInfoDouble(_Symbol, SYMBOL_BID);
Print(_Symbol, " 桁数=", _Digits, " 1ポイント=", DoubleToString(_Point, _Digits),
" 1pips=", DoubleToString(PipSize(), _Digits));
Print("20pips は価格で ", DoubleToString(PipsToPrice(20), _Digits));
Print("いまのスプレッドは ", DoubleToString(PriceToPips(spreadPrice), 1), " pips");
}MT4 版・MT5 版とも MetaEditor でコンパイル(エラー・警告なし)を確認済みです。実際の口座で使う前に、デモ口座やストラテジーテスターで動作を確かめてください。
カスタマイズのポイント
- ゴールドや株価指数などは、ブローカーによって「1pips」の定義が違います。FX の通貨ペア以外では、ポイントのまま扱うほうが安全です。
注意点
- MarketInfo(MODE_STOPLEVEL) や SYMBOL_SPREAD はポイント単位です。pips と混同しないようにします。
このコードで使っている関数
あわせて読みたいレシピ
「資金管理・リスク」のレシピ一覧
- 資金の◯%のリスクでロット数を計算したい
- ロット数を最小ロット・刻み幅に合わせたい
- pips とポイントを正しく換算したい(3桁・5桁対応)
- 注文する前に証拠金が足りるか確認したい
- 損失が一定を超えたら EA を止めたい
- 今日の確定損益を計算したい












