/ インサイト ← インサイト一覧

韓国・日本・米国銘柄を1つのCSVに — 価格変動と為替変動を分けて読む

2026.05.17 · 更新 2026.10.07 · マルチ通貨 · CSV · FX分離 · 한국어 ↗

外国株の現地価格が変わらなくても、為替が動けばウォン換算の評価額は変わります。ただし、アプリの表示リターンの意味は、原価と現在評価額にどのレートを使うかによって異なります。「為替のせいで減ったのか、銘柄の価格が下がったのか」を、仮の保有例とCSV計算で区別します。

価格が変わらないのにウォン評価額が変わる理由

ここでの取引時点・価格・数量・為替レートはすべて計算用の仮定で、実際の取引や過去の相場ではありません。購入時点をT0、1か月後の比較時点をT1とします。T0に1321.Tを1株28,000円で100株購入し、1円 = 9.0ウォンだったとすると、ウォン建て取得額は28,000 × 100 × 9.0 = 25,200,000ウォンです。配当・手数料・税金・為替スプレッド・追加売買は除きます。

T1にもETF価格は28,000円で、レートだけが1円 = 8.55ウォンに下がったと仮定します。ウォン建て評価額は28,000 × 100 × 8.55 = 23,940,000ウォン。T0のレートで計算した取得額25,200,000ウォンと比べると、損益は−1,260,000ウォン、リターンは−5%です。

この例の現地通貨での価格リターンは0%、ウォンで測った円の価値の変化は−5%です。100株の円評価額2,800,000円は変わりませんが、ウォン評価額は減っています。このウォン損失をETF価格の下落と読み違えてはいけません。

1回の購入後に数量を変えないこの単純な例では、基準通貨での価格リターンは(1 + 現地価格リターン) × (1 + 為替リターン) − 1です。為替は外貨1単位あたりのウォンで表します。現地価格+10%、このレート−5%なら1.10 × 0.95 − 1 = +4.5%で、単純に5パーセントポイントを引く計算とは異なります。CFA Instituteの通貨リターンの説明も2つの効果を乗算で結び付けています。

価格リターンと換算基準を区別する

現在の保有分について、現地価格の変化・アプリの換算・取得時からの為替変動を区別します。以下は価格リターンの比較で、配当・手数料・税金・実現損益を含む総投資リターンではありません。単価・取得額は正とします。

リターンの種類計算方式意味
現地通貨での価格リターン(現在価格 − 平均取得単価) / 平均取得単価現地通貨で測る価格変化。投資の実力や損益全体を示すものではありません。
アプリの現在レート換算(現在評価額 − 残存保有分の原価) / 原価 — どちらも同じ現在レートで換算銘柄ごとのリターン%は現地通貨での価格リターンと同じです。取得時からの為替損益は含みません。
取得時レートを含むリターン(T1価格 × T1レート) / (T0取得単価 × T0レート) − 1数量固定の例でのウォン建てリターン。取得時のレートは別途必要です。

先ほどの−5%はT0のウォン建て取得額とT1のウォン評価額を比べたものです。アプリのように両方をT1のレートで換算すると、原価も評価額も23,940,000ウォンになり、リターンは0%です。計算の出発点が異なります。

CSV列設計 — 現地通貨をそのまま保存する

MultifoliosのCSVフォーマットが一つの原則で作られている理由がここにあります — 取得価格は常に現地通貨で記録する。換算しません。為替変換は表示時点で動的に処理されます。

symbol,currency,buyPrice,shares,accountName
005930.KS,KRW,72000,50,ミレーアセット
1321.T,JPY,28000,100,SBI
SOXL,USD,15.4,200,楽天
AAPL,USD,178.50,30,楽天

上の単価・数量・口座名は形式を説明するための例です。韓国銘柄はウォン、日本銘柄は円、米国銘柄はドルで単価を記録します。入力した現地通貨の単価は為替だけでは変わりませんが、例示値や推定単価が実際の取引原価を代わりに示すわけではありません。

この例は現在の保有数量と平均取得単価を取り込む形式です。buyDate列を追加しても購入日は保有状況に保存されず、個別の購入履歴は復元されません。

ダッシュボードのCSV → CSVインポート → CSVファイルを選択から読み込みます。反映前にプレビューの銘柄・通貨・数量・単価・口座と適用範囲を確認してください。新しい銘柄のみ追加(既存銘柄はスキップ)と保有状況を置き換えでは結果が異なり、置換ではこのファイルの口座のみか全口座を置き換えかも確認します。通貨の未指定や同じ値の行の確認が出た場合は選択を済ませ、推定単価ならその表示も選びます。

取込時のスナップショット基準日はアップロード当日で、実際の購入日ではありません。編集画面の保有開始日 (任意・推定)に見える例) 2024-03-15は入力案内のプレースホルダーです。入力しなければ日付は空欄で、この例示日が自動保存されることはありません。

分割購入を記録するには、保有銘柄の編集 → 購入履歴 → + 追加 → 保存を使います。CSVから取り込んだ銘柄は最初、日付のない合計数量・平均単価の1行として表示されます。元の記録から購入ごとに分けるときは、この合計行を調整または置き換え、数量と加重平均単価を一致させてください。合計行を残して過去の購入分を加えると二重計上になります。銘柄追加は既存銘柄に購入行を追加する操作ではなく、別の保有銘柄を作成します。

ティッカーコードの規則

アプリで確認すること — 表示通貨と為替寄与

同じ仮の保有を使って画面の計算を説明します。実際にCSVを取り込むと、アプリは取得した株価と現在レートを使うため、以下の仮定と同じ金額になるとは限りません。CSVで過去のT0・T1の相場を再現する手順でもありません。

ステップ1 — 表示通貨KRWで見る

画面上部の歯車メニューから設定 → 表示通貨 → KRWを選ぶと、評価額と損益額がウォン表示になります。

T1の仮定が適用される場合、1321.Tの評価額は23,940,000ウォンです。Multifoliosは残存保有分の原価も同じ現在レートで換算する(28,000 × 100 × 8.55 = 23,940,000ウォン)ため、画面のリターンは0.0%です。この保有情報には取得時のレート9.0は保存されていません。

ステップ2 — 表示通貨をJPYに切り替え

同じ設定で表示通貨JPY。1321.T 評価額2,800,000円、損益0円、収益率0.0%。表示される金額の単位が変わるだけで、収益率はKRWのときと同じです。

価格・数量・為替レートが同じ時点で表示通貨だけを切り替えると、原価と評価額が同じ比率で換算され、合計リターン%も変わりません。期間中の為替変動の寄与は、ダッシュボードの株価・為替寄与の分解(今日の要約・月間評価額変化カード)で別に確認します。

株価・為替寄与は特定の比較期間についての分解です。月間カードは現在の保有数量を固定し、月初からの株価を先に変え、次に為替を変える推定で、期間中の売買や入出金を再現しません。過去の価格・為替がない場合は現在値で代用する項目もあるため、購入以降の損益全体や正確な取引履歴としては読めません。

ステップ3 — 銘柄自体の成績は現地通貨価格で確認

株価と有効な平均取得単価がある場合、銘柄カードのリターン%は現地通貨での価格リターンです。原価と評価額には同じレートを使うため、表示通貨を変えてもこの比率は同じです。株価未取得時に取得単価を代用する場合は、表示の0%を実際の価格が動いていない証拠にはできません。

例えば米国銘柄の平均取得単価が40ドル、現在価格が64ドルなら価格リターンは+60%で、KRW表示でも同じです。一方、時間が経って実際の為替レートが動くと、複数通貨の原価比率が変わり、ポートフォリオ合計のリターンが変化する場合があります。同じレートのまま表示単位だけを変えることとは区別が必要です。

よくある落とし穴

  1. 取得価格を換算してCSVに記入する: 28,000円を「ウォン換算で」252,000ウォンと記入するミス。為替は毎日変わるので、2回目の換算が発生した時に矛盾が生じます。常に現地通貨で。
  2. 表示通貨を変えただけで為替影響を確認したつもりになる: 同じ時点のレートで表示単位だけを変えてもリターン%は変わりません。今日の要約や月間カードの株価・為替寄与は、その比較期間と計算上の制限を確認して読みます。
  3. 購入時レートが必要なのに記録していない: Multifoliosは購入時レートを保存せず、元本・評価額をすべて現在レートで換算します。「当時のレートでいくらだったか」が必要なら、元の取引記録(実際の購入日・数量・単価)を別途保管し、それを外部ツールで過去為替と突き合わせて計算してください。
  4. CSVが購入履歴まで復元してくれると期待する: CSV取り込みは現在の保有数量と平均取得単価を収めた保有状況スナップショットです。複数日にわたる個別の購入ロットは自動復元されず、日付のない単一ポジションとして保存されます。分割購入の記録を残すにはアプリで直接入力する必要があり、過去の購入時レートを外部で計算するには元の取引記録と実際の購入日をCSVとは別に保管しておく必要があります。

CSVエクスポート → 外部分析

基本の保有状況CSVはsymbol,currency,buyPrice,shares,accountName,buyDateの順で出力します。buyDateは手入力した購入記録の最初の記録の日付で、CSV取り込み銘柄のように購入記録がなければ空欄です。個別の購入履歴全体を出力する形式ではありません。以下は基本CSVを外部ツールで分析する例です。

CSV → CSVダウンロードの基本ファイル名はmultifolios_YYYY-MM-DD.csvです。詳細CSVは現在価格や評価額も出力しますが、全取引の台帳ではありません。両形式のbuyDateは保存された最初の購入行の日付で、時系列で最も早い日付とは限らず、空欄の場合もあります。

以下のPython 3コードは上の4行のCSVを埋め込んであり、そのまま実行できます。標準ライブラリだけを使うため追加パッケージは不要です。実際の基本出力ファイルを使う場合は、StringIO(sample)をopen("実際のファイル名.csv", encoding="utf-8-sig", newline="")に置き換えます。8.55と8.1225は取得したレートではなく仮定です。

import csv
from decimal import Decimal
from io import StringIO

sample = """symbol,currency,buyPrice,shares,accountName
005930.KS,KRW,72000,50,ミレーアセット
1321.T,JPY,28000,100,SBI
SOXL,USD,15.4,200,楽天
AAPL,USD,178.50,30,楽天
"""
rate_now = Decimal("8.55")
rate_scenario = rate_now * Decimal("0.95")
print("symbol,base_krw,scenario_krw,fx_impact_krw")
for row in csv.DictReader(StringIO(sample)):
    if row["currency"] != "JPY":
        continue
    yen = Decimal(row["buyPrice"]) * Decimal(row["shares"])
    base = yen * rate_now
    scenario = yen * rate_scenario
    print(f"{row['symbol']},{base:.2f},{scenario:.2f},{scenario - base:.2f}")

実行結果:

symbol,base_krw,scenario_krw,fx_impact_krw
1321.T,23940000.00,22743000.00,-1197000.00

23,940,000ウォンから22,743,000ウォンへの−1,197,000ウォンの追加変化です。基準レート8.55から円がさらに5%下落するシナリオで、T0の9.0とT1の8.55を比べた先ほどの−1,260,000ウォンとは基準が異なります。

上のコードは現在価格ではなくbuyPrice × sharesを使った取得元本の換算額に対する為替シナリオです。現在価格が取得単価と等しく、価格・数量が固定されると仮定した場合にのみ評価額の変化として解釈でき、一般的な現在の評価損益の計算ではありません。実際の評価額の変化には現在価格が必要で、購入時からの投資損益には元の取引記録と当時の為替レートも別途必要です。

まず換算基準を確かめ、価格変動と為替変動を分けて読みます。

まとめ

Sangji Lee
個人投資家・開発者 · Multifolios 制作・運営
複数の証券会社・通貨に散らばった資産を自分で追跡するうちに不便を感じ、Multifolios を作りました。実際に運用しながら直面したリターン計算・為替分離・リバランスの問題を記事にまとめています。お問い合わせ: 紹介・連絡先
サンプルポートフォリオで実際に確認
ログイン不要でサンプルポートフォリオの表示を確認できます。
デモを試す →
📬 週間マーケット要約を受け取る
毎週日曜、米国・韓国・日本市場のポイントをメールで — 無料。