本文へスキップ
AllTick
データ選定

為替レートの Bid・Ask とスプレッドの計算・実装ガイド

FX・外国為替相場における Bid(売値)、Ask(買値)、仲値(Mid)、pips スプレッドの意味と、プログラムで正確に扱う方法を解説します。

更新日時:
保守運営:AllTick 公式エンジニアリングチーム
対象読者:アプリケーションで外国為替レートやスプレッドを処理する開発者

要約 · 30秒開発サマリー

Bid はプライス提供者が買う価格、Ask は売る価格であり、Ask から Bid を引いた差がスプレッドです。画面に「現在値」を表示する際は仲値 (Bid + Ask) / 2 を使うか Bid/Ask を明記し、取引コストや約定シミュレーションを行う際は必ず両側の価格を保持します。

01

4つの基本概念

フィールド意味プログラムでの主な用途
Bidクォート提供側の買値ユーザーの成行売り・ポジションクローズ価格の算出
Askクォート提供側の売値ユーザーの成行買い・ポジションクローズ価格の算出
仲値(Mid)(Bid + Ask) / 2一覧表示、チャート描画、各種テクニカル指標の計算
スプレッドAsk − Bid流動性モニタリングおよび取引コストの計測

02

pips(ピップス)への換算方法

多くの通貨ペアは小数点以下4桁までが標準で 1 pip = 0.0001 ですが、クロス円(USD/JPY など)は小数点以下2桁が標準で 1 pip = 0.01 です。多くのデータ配信ではさらに1桁細かい端数(pipette)が含まれます。一律に 10,000 を掛けるのではなく、通貨ペアの桁数仕様に応じて換算してください。

通貨ペアの精度に応じた pips スプレッド計算例python
def pip_size(symbol: str) -> float:
return 0.01 if symbol.upper().endswith("JPY") else 0.0001
def spread_in_pips(symbol: str, bid: float, ask: float) -> float:
return round((ask - bid) / pip_size(symbol), 1)
print(spread_in_pips("EURUSD", 1.08512, 1.08525)) # 1.3
print(spread_in_pips("USDJPY", 149.812, 149.826)) # 1.4

03

実装でよくあるミス

  • 片側の価格だけを保存してしまい、後からスプレッドや取引コストを再現できなくなる。
  • 板情報の最良気配(Bid/Ask)と約定履歴(Trade Tick)を混同する。
  • 浮動小数点数を == で直接比較してしまう(Decimal または許容誤差を使うべき)。
  • データソースごとのシンボル表記ゆれ(EURUSD と EUR/USD)を正規化せずに扱う。

04

AllTick で為替レートを取得する

AllTick の為替・貴金属・コモディティデータは quote-b-api(REST)と quote-b-ws-api(WebSocket)で提供され、通貨ペアは EURUSD、USDJPY のように区切り文字なしで表記されます。板情報(depth-tick)エンドポイントから Bid / Ask の両方を取得してスプレッドを計算できます。

仕様出典と検証記録 · 2026-10-13

以下の一次資料で関連するエンドポイント、フィールド、取引所規則を確認しました。

Python コードは Python 3.14.0 の ast.parse で構文解析を通過しました。依存関係、実行互換性、ネットワーク応答の検証は含みません。

今回の確認では実際の Token による AllTick 要求や本番エンドツーエンド試験は実行していません。再現時にプラン、ライブラリ版、取引時間、ret/trace、結果を記録してください。

導入前に再現する項目

  • 同一更新の bid/ask と十進精度を保持し、欠損、非正価格、ask が bid 未満の場合は計算を止めます。
  • 最小変動単位と価格差・pip の区別を確認し、通常時間、ロールオーバー、古い気配を比較します。