ADR価格を普通株式の相当価格に換算
預託証券は一定数の外国普通株式を束ねたものであるため、その価格は本国市場の株価と一致しません。間に交換比率と為替レートが介在するからです。本APIは、証券の価格・交換比率・為替レートを受け取り、普通株式1株の本国通貨建て相当価格を返します。証券を本国の上場価格と比較し、プレミアムやディスカウントを見極めるために必要な数値です。
無料で実行
証券価格が株価と一致しない理由
外国企業が米国に上場する際、預託銀行は普通株式の所定数を表す証券を発行します。1株の端数の場合もあれば、10株や50株を束ねる場合もあります。この束ねに加え、証券はドル建てで取引される一方、普通株式はポンド・円・ユーロなどで取引されます。同じ企業を見ている2人の投資家の画面には、したがってまったく異なる2つの数字が表示され、どちらも間違いではありません。ADRが本国の上場価格に対して高いか安いかを知るには、両方の効果を取り除く必要があります。比率で割って1株あたりの価値を求め、さらに通貨を換算して両方の価格を同じ単位で表します。このエンドポイントは、その算術を1回の呼び出しで正確に行い、丸め誤差の心配なく比較できるようにします。スクリーナー、裁定監視ツール、簡単なスプレッドシートのいずれでも、2つの市場を並べて同じ基準で比較できます。
計算式と各入力の意味
換算は1行で表せます。株価は、証券価格に為替レートを掛け、比率で割った値です。<code>adr_price</code>は証券1口の上場通貨建ての最終取引価格です。<code>ratio</code>は証券1口が表す普通株式の数で、0.5なら1株あたり証券2口、5なら証券1口が5株を束ねていることを意味します。<code>exchange_rate</code>は、本国通貨1単位あたりの証券建て通貨の量で表します。証券がドル建て、株式がポンド建てなら、1ポンドあたりのドル数です。為替レートは正でなければなりません。ゼロや負のレートは実際の相場に存在せず、多くの場合上流のデータエラーを示すため、エンドポイントは誤解を招くゼロを返す代わりに入力を拒否します。結果はデフォルトで小数点以下6桁に丸められ、0から12桁まで指定できます。
結果を誤解なく使うために
出力は、入力された値に基づく普通株式1株の本国通貨建て理論相当価格です。証券が実際にプレミアムで取引されているかディスカウントかは別の問題です。返された値を本国市場のライブ相場と比較してください。その際、両市場が同時に開いているとは限らず、比較する価格が異なる時点のものである可能性がある点にご注意ください。手数料、配当の取り扱い、現地税により、理論パリティが1セント単位で成立することもまれです。このツールの役割はそこまでではありません。意図的に1つの決定論的な計算だけを正確に行い、ブラウザでも有料APIでも同一の結果を返します。そのため、手作業で比較の試作を行い、数字に納得できてから$0.002(1リクエスト)で自動化へ移行できます。すべて当社のグローバルエッジで実行され、送信されたデータは応答後に保持されません。
活用例
証券を本国の上場価格と比較する
ADRの相場を本国通貨建ての株価に換算し、証券がプレミアムかディスカウントかを一目で確認できます。
裁定監視ツールへ供給する
ウォッチリスト全体のパリティ価格を一括計算し、乖離がしきい値を超えたペアにフラグを立てられます。
顧客に比率を説明する
比率と通貨を適用すると、25ドルの証券がはるかに高い、あるいは低い価格の株式に対応する理由を示せます。
よくある質問
料金はいくらですか?
API経由で1リクエストにつき$0.002です。このページのブラウザ上では無料で実行できます。
比率とは正確には何ですか?
預託証券1口が表す普通株式の数です。0.5は1株あたり証券2口、5は証券1口が5株を束ねていることを意味します。
為替レートはどのように表しますか?
株式の本国通貨1単位あたりの証券建て通貨で表します。証券がUSD、株式がGBPなら、1ポンドあたりのドル数です。
入力が拒否されたのはなぜですか?
為替レートと比率は正である必要があり、証券価格は負にできません。ゼロや負のレートは実際の相場ではないため、データエラーとして扱われます。
証券の公正価値が返るのですか?
いいえ。入力された証券価格に対応する普通株式の相当価格が返ります。それがプレミアムかディスカウントかは、本国市場のライブ相場と照らしてご自身でご判断ください。
結果の小数点以下の桁数は?
デフォルトは6桁で、decimalsフィールドで0から12まで調整できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/fin/adr \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"adr_price":25.5,"ratio":0.5,"exchange_rate":1.27}'const res = await fetch("https://api.kit.forhosting.com/fin/adr", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"adr_price": 25.5,
"ratio": 0.5,
"exchange_rate": 1.27
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/adr",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"adr_price": 25.5,
"ratio": 0.5,
"exchange_rate": 1.27
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/adr", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"adr_price":25.5,"ratio":0.5,"exchange_rate":1.27}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"adr_price":25.5,"ratio":0.5,"exchange_rate":1.27}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/adr", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"adr_price": 25.5,
"ratio": 0.5,
"exchange_rate": 1.27
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.adr",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |