월배당 ETF 교체 규칙: 날짜·총수익·주문 상태를 분리하기
TECH INSIGHT / EXPLAINED
달력에 ‘월중 ETF에서 월말 ETF로 이동’이라고 적는 것과, 주문 가능한 규칙을 만드는 것은 다르다. 날짜·분배금 자격·실제 체결·총수익을 각각 표현해야 한다. 여기서는 두 종목을 교체하는 아이디어를 검증 가능한 상태와 계산으로 바꾸며, 특정 상품이나 수익성을 추천하지 않는다.
기존 사용 화면과 소개 이미지
기존 글에 담았던 사용 화면과 소개 이미지를 함께 보며 구조와 동작을 확인할 수 있습니다.


분배금 두 번이 이익 두 번은 아니다
분배금락일, 기준일, 지급일을 구분하고 해당 시장과 상품의 공식 일정으로 수령 자격을 확인한다. 매월 15일·말일처럼 날짜 숫자만 고정하면 휴장일과 일정 변경을 놓친다. 분배금은 펀드 자산에서 지급되며 가격·순자산가치 변화와 함께 평가해야 한다. 분배금락 이후 매수했다는 이유만으로 이미 발생한 가격 조정을 다시 손실로 부담한다고 설명해서도 안 된다.
가정으로 100주를 주당 10,000원에 사서 9,950원에 팔고 주당 50원을 분배받았다면 가격 손익 −5,000원과 분배금 +5,000원이 상쇄된다. 여기에 왕복 비용과 세금이 합계 1,000원이라면 순손익은 −1,000원이다. 실제 비용과 과세는 상품·계좌별로 확인하며 이 숫자는 계산 예시다.
날짜 배열은 정책표로 발전시킨다
날짜별 규칙을 한 곳에 모으는 발상은 유용하다. 다만 0·1·3·4 같은 숫자 대신 ROTATE_TO_A, ROTATE_TO_B, HOLD, PAUSE처럼 의미를 적는다. 각 날짜를 거래소 시간대의 YYYY-MM-DD로 지정하고 근거 공시 URL과 확인 시각을 보관한다. 일정이 없거나 검증되지 않은 날짜는 기본적으로 PAUSE다.
‘신규 매수 금지지만 그리드는 계속’이라는 정책도 분리해야 한다. 그리드의 매수 주문은 보유량을 늘릴 수 있다. 모든 매수를 막는 상태인지, 교체만 막고 기존 한도 안에서 매수를 허용하는 상태인지 명시한다. 시간은 9.31 같은 소수 대신 자정부터의 분으로 표현한다. 9시 31분은 571분이다.
괴리율과 수익률의 단위를 맞춘다
괴리율은 시장가격과 NAV의 차이를 NAV로 나눈 값이다. 두 종목을 비교할 때 분모, 시점, 소수 비율과 퍼센트 표기를 일치시킨다. 0.03은 소수 비율이면 3%, 퍼센트 수치이면 0.03%이므로 임계값의 단위가 필요하다. 장중 추정 NAV와 전일 NAV도 구분한다. 괴리 차이가 작다는 사실만으로 청산이 합리적이라고 단정할 수 없다.
종목별 수익률을 더해 계좌 수익률로 쓰지 않는다. 외부 입출금이 없는 단순 예에서 900,000원의 +1%와 100,000원의 −1%는 합계 +8,000원, 전체 +0.8%다. 실계좌는 분배금·비용·입출금도 일관되게 반영한다.
주문 간격 계산에는 경계가 필요하다
1/보유수량은 하나의 실험적 휴리스틱이며 다른 가격의 종목에 같은 위험을 주지 않는다. 아래 순수 함수는 0 수량과 잘못된 입력을 거절하고 상·하한을 모두 적용하는 계산 예시다. 주문을 보내지 않는다.
function gridGap(quantity, minGap = 0.002, maxGap = 0.02) {
if (!Number.isFinite(quantity) || quantity <= 0 ||
!Number.isFinite(minGap) || !Number.isFinite(maxGap) ||
minGap <= 0 || maxGap < minGap) return null;
return Math.min(maxGap, Math.max(minGap, 1 / quantity));
}
console.assert(gridGap(100) === 0.01);
console.assert(gridGap(500) === 0.002);
console.assert(gridGap(1) === 0.02);
console.assert(gridGap(0) === null);
계산 뒤에도 호가 단위, 최소 주문 수량, 주문 빈도, 최대 보유액을 별도로 제한한다. 매도와 매수가 한 번에 원자적으로 체결된다고 가정하지 않고 부분 체결·잔고 부족·시간 초과를 상태로 기록한다. 알 수 없는 주문 결과가 나오면 잔고와 주문 내역을 대조하기 전 재주문하지 않는다.
검증에서는 보류 이유도 결과다
백테스트에는 당시 알 수 있었던 일정과 분배금, 비용, 휴장일, 체결 가능한 가격을 사용한다. 단순 보유와 같은 기간의 총수익·낙폭·회전율을 비교한다. ‘일정 미확인’, ‘시세 오래됨’, ‘주문 결과 확인 중’ 같은 보류 이유를 남기면 작동 여부와 전략 성과를 구분할 수 있다.
참고 자료
내용·예제 검토: 2026-09-29
댓글
댓글 쓰기