반응형

전체 글 251

ETF 거래량이 적으면 팔기 어려울까?

거래량이 적은 ETF를 보면 나중에 팔고 싶을 때 받아 줄 사람이 없을까 걱정됩니다. 하지만 하루 거래량만으로 매도 가능 여부를 판단하기는 어렵습니다. 거래량은 이미 체결된 양이고, 지금 팔 수 있는 가격과 수량은 현재 호가창에서 확인해야 합니다. ETF가 담은 자산의 거래 여건도 함께 봐야 합니다.어제 거래량과 지금의 유동성은 다릅니다유동성은 원하는 규모를 큰 가격 양보 없이 얼마나 원활하게 거래할 수 있는가의 문제입니다. 거래량이 많은 ETF는 대체로 매수·매도 호가 차이인 스프레드가 좁은 편입니다. 그렇다고 거래량이 적으면 반드시 거래가 막히거나, 거래량이 많으면 어떤 주문이든 좋은 가격에 체결된다는 뜻은 아닙니다. SEC의 ETF 투자자 안내도 거래량과 스프레드의 관계를 설명하면서 거래시장이 충분..

주문이 없는데 COUNT가 1이라면: LEFT JOIN 집계 기준 고르기

고객별 주문 수를 만들었는데 한 번도 주문하지 않은 고객도 1건으로 나온다. LEFT JOIN으로 고객을 남긴 것까지는 맞다. 다음으로 살펴볼 곳은 COUNT의 괄호 안이다. 조인 결과의 행 수와 실제 주문 수는 같지 않을 수 있다.주문이 없는 고객도 결과에는 한 행 남는다아래는 가상의 고객 세 명과 주문 세 건이다. 실제 고객 데이터가 아니다. 빈 연습용 DB에서 준비 코드를 한 번 실행하고, 뒤의 SELECT를 순서대로 실행한다. 고객 1은 두 건, 고객 2는 영 건, 고객 3은 한 건이 정답이다.CREATE TABLE customers ( id INTEGER PRIMARY KEY);CREATE TABLE orders ( id INTEGER PRIMARY KEY, customer_id..

주식 비중이 커졌을 때, 리밸런싱은 꼭 팔아야 할까?

주식이 많이 올라 목표보다 비중이 커졌다고 해서 반드시 일부를 팔아야 하는 것은 아닙니다. 앞으로 넣을 투자금을 비중이 부족한 자산에 배분해 조정할 수도 있습니다. 다만 새로 넣을 돈이 충분한지, 조정하는 동안 어느 정도의 위험을 감수할지는 따로 계산해야 합니다.리밸런싱은 자산 구성을 정해 둔 목표에 맞추는 일입니다. 매도할 금액과 추가로 넣을 금액은 같지 않을 수 있습니다. 새 돈이 들어오면 비중을 계산하는 전체 금액도 커지기 때문입니다.같은 60%로 돌아가도 필요한 돈은 다릅니다설명을 위해 주식 750만 원과 채권 250만 원, 합계 1,000만 원인 가상 포트폴리오를 생각해 보겠습니다. 현재 주식 비중은 75%이고, 목표는 주식 60%·채권 40%라고 가정합니다. 이 비율은 계산용이며 권장 비중이 ..

Python zip의 조용한 누락을 strict=True로 막기

세 항목을 처리했어야 하는데 결과가 두 개뿐이고 오류도 없다. Python에서 두 목록을 zip으로 묶었다면 길이가 같은지 확인해 보자. 기본 zip은 짧은 쪽이 끝나는 순간 멈추므로, 입력을 빠짐없이 짝지어야 하는 작업에서는 누락을 감출 수 있다.끝까지 처리한 것처럼 보이는 결과아래는 가상의 작업 이름과 상태 목록이다. 실제 서비스 데이터가 아니다. 각 이름에 상태 하나가 있어야 한다는 조건으로 묶어 보자.names = ['alpha', 'beta', 'gamma']states = ['ready', 'done']pairs = list(zip(names, states))print(pairs)# [('alpha', 'ready'), ('beta', 'done')]gamma는 결과에 없다. zip은 모자란 ..

주가가 30% 떨어졌는데 PER은 왜 더 높아질까?

주가가 고점에서 30% 내려오면 예전보다 싸 보입니다. 같은 주식을 더 적은 돈으로 살 수 있는 것은 맞지만, 이익에 비해 싸졌는지는 별도로 봐야 합니다. 같은 기준의 양수 주당순이익(EPS)이 주가보다 더 큰 비율로 줄면 PER은 오히려 올라갈 수 있습니다.PER은 주가를 EPS로 나눈 값입니다. 주가 차트만 보고 할인율을 계산하기 전에, 분모에 넣은 이익이 그대로인지부터 확인할 필요가 있습니다.주가는 30%, 예상 이익은 50% 줄었다면가상의 기업을 놓고 계산해 보겠습니다. 처음 주가는 100달러, 특정 회계연도의 예상 EPS는 5달러입니다. 이후 주가가 70달러로 떨어졌습니다. 비교하는 EPS는 두 시점 모두 같은 회계연도·같은 산정 기준의 예상치이며, 주식분할 등 주당 수치를 바꾸는 사건은 없다고..

async 함수가 throw했는데 assert.throws 테스트는 실패한다면

비동기 함수 안에서 분명히 throw를 했는데 테스트에는 “Missing expected exception”이 나타날 수 있다. Node.js의 assert.throws로 검사했다면, 예외가 전달되는 경로부터 확인하자. 호출 순간 던져지는 예외와 반환된 Promise의 거부는 검사 방법이 다르다.await가 없는 async 함수도 Promise를 반환한다다음은 동작을 재현하기 위한 가상 이름 검증 함수다. 네트워크나 실제 사용자 자료는 사용하지 않는다. 코드를 validate.test.mjs로 저장한다. 테스트 대상은 빈 문자열을 거부하지만, 아래 테스트 작성 방식은 잘못됐다.import test from 'node:test';import assert from 'node:assert/strict';asy..

채권 ETF도 만기까지 기다리면 원금을 돌려받을까?

국고채 10년물 ETF를 사서 10년을 기다리면 매수한 돈이 돌아올까요? 일반 채권 ETF는 내가 산 날부터 만기를 세어 원금을 상환하는 상품이 아닙니다. ETF가 담은 채권의 만기와 ETF 자체의 존속기한을 구분해야 합니다.만기매칭형 채권 ETF에는 끝나는 시점이 따로 있지만, 이 경우에도 내가 낸 매수금액을 보장하는 것은 아닙니다. 나중에 쓸 돈을 넣어 두려는 목적이라면 이 차이부터 확인하는 편이 좋겠습니다.편입 채권은 만기가 와도 ETF는 계속될 수 있습니다일반적인 고정금리·만기일시상환 채권은 발행자가 약속을 정상적으로 이행한다는 전제에서 정해진 이자와 만기 상환금을 받는 구조입니다. 조기상환권이나 별도 조건이 붙은 채권은 발행 조건을 따로 봐야 합니다. 이때 상환의 기준은 발행 조건에 정해진 액면..

Stream.toList()로 만든 목록에 add가 안 된다면

Java에서 스트림 결과를 List로 받았는데 add 한 줄에서 UnsupportedOperationException이 발생할 수 있다. 특히 collect(Collectors.toList())를 더 짧은 toList()로 바꾼 뒤라면, 결과 목록의 수정 가능 여부부터 확인하자. 변수의 선언형이 List라는 사실만으로 추가·삭제가 보장되지는 않는다.짧아진 코드에 다른 계약이 붙는다아래는 문제를 재현하기 위한 가상 예제다. Demo.java로 저장해 javac Demo.java와 java Demo를 차례로 실행하면 add에서 예외가 난다. Stream.toList()는 Java 16부터 제공되므로 Java 8이나 11에서는 이 코드 자체가 컴파일되지 않는다.import java.util.List;impor..

ETF는 올랐는데 내 계좌는 왜 손실일까?

ETF 가격이 투자 시작 때보다 높아도, 중간에 추가로 산 계좌는 손실일 수 있습니다. 처음 산 돈과 나중에 넣은 돈이 같은 가격 변화를 겪지 않았기 때문입니다. 차트의 상승률과 내 손익이 다르다면 매수 날짜와 금액부터 나눠 볼 필요가 있습니다.특히 가격이 오른 뒤 투자금을 늘렸다면, 앞서 적은 돈으로 얻은 이익보다 뒤에 큰돈으로 겪은 손실이 커질 수 있습니다. ETF의 전체 기간 상승률만으로는 이 차이가 보이지 않습니다.가격은 8% 상승, 계좌에는 4만 원 손실실제 상품이 아닌 가상의 ETF를 생각해 보겠습니다. 가격은 10,000원에서 12,000원으로 오른 뒤 10,800원이 됩니다. 처음과 끝만 비교하면 8% 상승입니다. 분배금·수수료·세금·환율 변화는 없다고 가정합니다.처음에는 100만 원을 입..

파일 이름을 바꿨더니 Git 이력이 끊겼다면: log --follow

파일을 정리한 뒤 현재 이름으로 이력을 조회했는데, 이름을 바꾼 커밋 하나만 보일 때가 있다. 예전 수정 기록이 삭제됐다고 판단하기 전에 조회 경로와 --follow 옵션부터 확인해 보자.이름이 바뀌기 전의 경로는 다르다아래는 실제 프로젝트와 무관한 가상 예제다. Bash에서 새 임시 저장소를 만들고 같은 파일에 생성, 수정, 이름 변경을 차례로 커밋한다. 기존 프로젝트에서는 실행하지 않는다. 작성자 정보는 이 연습 저장소에만 저장되며 원격 전송은 없다.work=$(mktemp -d) && cd "$work" || exit 1git init -qgit config user.name 'Demo'git config user.email 'demo@example.invalid'printf 'first\n' > ..

반응형