한국·일본·미국 종목을 하나의 CSV로 — 환율 변동을 수익률에서 분리하는 법
엔화가 5% 빠진 달, 닛케이 ETF 수익률에서 그 5%가 그냥 사라집니다. 사용자가 한 일은 아무것도 없는데 말이죠. 다국적 포트폴리오를 한 화면에서 관리하는 사람이라면 누구나 마주치는 질문 — "환율 때문에 손해 본 건지, 종목 자체가 빠진 건지" — 을 데이터 레벨에서 분리해 보는 워크플로를 정리합니다.
왜 단일 통화 수익률은 거짓말을 하는가
한국 거주자가 SBI 증권을 통해 일본 닛케이 225 ETF (1321) 를 보유하고 있다고 칩시다. 2025년 1월 1일 100주 매수, 가격 28,000 엔, 당시 환율 1엔 = 9.0원. 매수 시점의 원화 평가액은 28,000 × 100 × 9.0 = 25,200,000원.
한 달 뒤 ETF 가격은 그대로 28,000 엔. 그런데 엔화가 빠져서 환율이 1엔 = 8.55원. 원화 평가액은 28,000 × 100 × 8.55 = 23,940,000원. 매수 시점 환율 9.0원으로 계산한 원금 25,200,000원과 비교하면 손익 −1,260,000원, 수익률 −5%.
사용자 입장에서 "내가 산 종목이 5% 빠졌나?" 라는 착각이 들 수 있습니다. 사실 종목 자체는 0% — 환율만 5% 빠진 거죠. 같은 28,000엔을 들고 있는데 환산 통화만 바뀐 결과를 종목 손익으로 잘못 읽게 됩니다.
두 가지 수익률
멀티 통화 포트폴리오는 항상 두 종류의 수익률을 가집니다:
| 수익률 유형 | 계산 방식 | 의미 |
|---|---|---|
| 현지 통화 수익률 | (현재가 − 매수가) / 매수가, 모두 현지 통화로 | 종목 자체의 성과. 외환 노이즈 0. |
| 표시 통화 수익률 | (현재 평가액 − 투자원금) / 투자원금 — 둘 다 현재 환율로 표시 통화 환산 | 표시 통화로 본 손익 금액. 원금과 평가액을 같은 환율로 환산하므로 종목별 수익률 % 는 현지 통화 기준과 같습니다. |
두 수익률 모두 유효합니다. 어느 게 "진짜" 라기보다는 무엇을 보고 싶은지에 따라 다릅니다.
- 종목 선정의 정확성을 검증: 현지 통화 수익률. 환율 변동을 빼고 봐야 종목 분석이 맞았는지 알 수 있습니다.
- 실제 자산 변화를 추적: 표시 통화 수익률. 통장에 찍히는 숫자는 결국 자국 통화로 봐야 직관적.
- 현지 통화로 인출 예정: 현지 통화 수익률. 미국 증권사에서 USD로 인출할 사용자라면 USD 기준 수익률이 더 의미 있음.
CSV 컬럼 설계 — 현지 통화를 그대로 보존
멀티폴리오스의 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 열을 추가해도 매수일은 보유현황에 저장되지 않으며 개별 매수 이력은 복원되지 않습니다.
종목 코드 규칙
- 한국: 6자리 종목코드 +
.KS(코스피) 또는.KQ(코스닥). 예:005930.KS(삼성전자),035420.KQ형태. - 일본: 4자리 종목코드 +
.T. 예:1321.T(Nikkei 225 ETF),7203.T(Toyota). - 미국: 티커 그대로. 예:
SOXL,AAPL,SPY. - 자동 추론: currency 컬럼이 KRW 인데 종목코드가
.KS없이 6자리 숫자만 있으면 자동으로.KS가 붙습니다. JPY + 4자리도 마찬가지로.T자동 부여.
실전 워크플로 — 환율 노이즈 분리
실제 사용 시나리오 하나 따라가 보겠습니다. 1321.T (Nikkei 225 ETF) 100주를 28,000엔에 산 사용자. 한 달 뒤 확인.
단계 1 — 표시 통화 KRW 로 보기
대시보드 우상단 설정에서 표시 통화 KRW 선택. 보유 종목 카드에 표시되는 평가액·손익은 모두 원화 환산.
결과: 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 — 종목 자체 성과는 현지 통화 가격으로 확인
개별 종목 카드의 수익률 % 는 언제나 그 종목의 현지 통화 기준 수익률과 같습니다 — 매수가와 현재가가 같은 환율로 환산되기 때문입니다. 표시 통화를 바꿀 필요 없이 그 값이 곧 환율 노이즈가 없는 종목 자체 성과입니다.
예: 매수가 $40, 현재가 $64 인 미국 종목이라면 종목 자체 수익률은 +60%. 표시 통화를 KRW 로 두어도 그 종목의 수익률 % 는 +60% 로 같습니다. 다만 포트폴리오 합계 수익률은 통화가 섞이면 환율에 따라 달라집니다 — 환율이 통화별 비중을 바꾸기 때문입니다.
사람들이 자주 빠지는 함정
- 매수 가격을 환산해서 CSV 에 적기: 28,000엔을 "원화로 환산해서" 252,000원으로 적는 실수. 환율이 매일 바뀌니까 두 번째 환산이 발생할 때 모순이 생깁니다. 항상 현지 통화로.
- 표시 통화만 바꿔 보고 환율 영향을 확인했다고 여기기: 표시 통화를 바꿔도 수익률 % 는 그대로입니다. 환율이 얼마나 기여했는지는 오늘의 요약과 월간 카드의 주가·환율 기여에서 확인하세요.
- 매수 시점 환율이 필요한데 기록해 두지 않기: Multifolios 는 매수 시점 환율을 저장하지 않고 원금·평가액을 모두 현재 환율로 환산합니다. "그때 환율로 얼마였나" 가 필요하면 원본 거래내역(실제 매수일 · 수량 · 단가)을 따로 보관해 두고, 그 기록을 외부 도구에서 과거 환율과 결합해 계산해야 합니다.
- CSV 가 매수 이력까지 복원해 줄 거라 기대하기: CSV 가져오기는 현재 보유수량과 평균 매수단가를 담은 보유현황 스냅샷입니다. 여러 날에 걸친 개별 매수 이력(랏)은 자동 복원되지 않고 날짜 없는 단일 포지션으로 저장됩니다. 분할 매수 내역을 남기려면 앱에서 직접 입력해야 하고, 과거 매수 시점 환율을 외부에서 계산하려면 원본 거래내역과 실제 매수일을 CSV 와 별도로 보관해 두어야 합니다.
CSV 내보내기 → 외부 분석
기본 보유현황 CSV는 symbol,currency,buyPrice,shares,accountName,buyDate 순서로 내보냅니다. buyDate에는 직접 입력한 매수 기록 중 첫 기록의 날짜가 들어가며, 매수 기록이 없는 CSV 가져오기 종목은 빈칸입니다. 개별 매수 이력 전체를 내보내는 형식은 아닙니다. 아래 예시는 기본 CSV를 외부 도구에서 분석하는 방법입니다.
# Python 예시 — 매입원금 환산액의 환율 시나리오
import pandas as pd
df = pd.read_csv('multifolios-export.csv')
# 가정: 현재가 = 매입단가, 주가·수량 고정, 엔화 추가 5% 약세
df_jp = df[df['currency'] == 'JPY'].copy()
df_jp['fx_scenario_krw'] = df_jp['buyPrice'] * df_jp['shares'] * 8.1225 # 가정: 1엔 = 8.1225원 (8.55 × 0.95)
df_jp['actual_krw'] = df_jp['buyPrice'] * df_jp['shares'] * 8.55 # 현재: 1엔 = 8.55원
df_jp['fx_impact'] = df_jp['fx_scenario_krw'] - df_jp['actual_krw']
print(df_jp[['symbol', 'fx_impact']])
위 코드는 현재가가 아니라 buyPrice × shares를 사용한 매입원금 환산액의 환율 시나리오입니다. 현재가가 매입단가와 같고 주가·수량이 고정되어 있다고 가정할 때만 평가액 변화로 해석할 수 있으며, 일반적인 현재 평가손익 계산은 아닙니다. 실제 평가액 변화를 보려면 현재가가 필요하고, 매수 시점부터의 투자손익을 계산하려면 원본 거래내역과 당시 환율도 따로 필요합니다.
"환율 변동을 손익에 포함시킬지 말지는 선택이지만, 항상 그 두 수익률을 따로 볼 수 있어야 한다."
정리
- CSV 의 매수 가격은 항상 현지 통화로. 환산은 시스템이 표시 시점에 동적으로.
- 표시 통화 전환은 금액의 단위만 바꿉니다. 환율 노이즈를 숫자로 분리하려면 오늘의 요약·월간 카드의 주가·환율 기여를 보세요.
- 한국·일본·미국 종목의 현재 보유현황을 계좌별로 하나의 CSV에 정리할 수 있습니다. 매수 이력·세금 계산에 필요한 원본 거래내역은 별도로 보관하세요.
- 환율 시나리오 분석은 CSV 내보내기 → 외부 도구가 가장 빠른 길. 멀티폴리오스 내부 표시 통화는 현재값 기준이지만, 시뮬레이션은 외부에서.