| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 단타매매
- 자동매매일지
- 키움OpenAPI
- OpenAPI
- 키움자동매매
- API
- 업데이트
- 시스템트레이딩
- 자동매매
- 주식자동매매
- 주식매매일지
- 스윙매매
- 키움API
- 키움
- 매도로직
- 키움증권
- 이베스트
- 주식프로그램
- 알고리즘매매
- 중소형주
- 주식
- xingAPI
- 무료자동매매
- 시스템매매
- 코스피
- 매매일지
- 주식투자
- 증권
- 매수로직
- 코스닥
- Today
- Total
팡규의 시스템 매매 블로그
2026년 6월 19일 자동매매 프로그램 개발일지 – 거래 데이터 정합성과 거래 추적 기능을 보완한 하루 본문
거래 데이터 정합성과 거래 추적 기능을 보완한 하루
오늘은 새로운 매수·매도 전략을 추가하기보다, 자동매매 프로그램에 기록되는 거래 데이터가 실제 계좌 상태와 정확히 일치하도록 만드는 작업에 집중했습니다.
자동매매 프로그램에서는 매수 조건이나 매도 조건도 중요하지만, 거래가 언제 시작됐고 어떤 과정을 거쳐 종료됐는지 정확하게 기록하는 것도 매우 중요합니다.
거래 기록이 누락되거나 프로그램 재실행 과정에서 기존 정보가 바뀌면, 이후 성과 분석 결과도 신뢰하기 어렵기 때문입니다.
이번 작업에서는 기존 보유종목의 거래정보 복구, 과거 미청산 데이터 점검, 거래 과정 추적 기능 추가, 후보종목과 실제 매수 연결정보 보완 등을 진행했습니다.
오늘 개발한 이유
최근 거래 리포트와 실제 계좌 보유종목을 비교하는 과정에서 몇 가지 데이터 불일치 가능성이 발견됐습니다.
대표적인 문제는 다음과 같았습니다.
- 프로그램 개발 이전부터 보유한 종목에는 거래 리포트가 없는 경우
- 실제 계좌에는 없지만 거래 리포트에는 미청산으로 남아 있는 과거 거래
- 프로그램 재실행 이후 후보종목과 실제 매수의 연결정보가 사라지는 현상
- 화면이나 보고서에 표시되는 오늘 매수 건수가 서로 다른 현상
- 거래 리포트가 누락됐을 때 원인을 확인하기 어려운 문제
이런 문제는 당장 주문 실행에 오류를 일으키지 않더라도, 데이터가 장기간 쌓이면 전략 성과를 잘못 평가하게 만들 수 있습니다.
따라서 오늘은 새로운 전략을 추가하기보다 기존 데이터를 안전하게 보존하면서 기록의 신뢰도를 높이는 작업을 우선했습니다.
기존 보유 데이터 정합성 개선
프로그램 개발 이전부터 계좌에 보유하고 있었지만 거래 리포트에는 존재하지 않는 종목들이 있었습니다.
이 종목들을 일반적인 신규매수 거래로 처리하면 자동매매 전략의 성과통계가 왜곡될 수 있습니다.
이를 방지하기 위해 기존 보유분을 별도의 상태로 구분해 복구하도록 개선했습니다.
복구 과정에서는 과거 최초 매수정보를 임의로 만들지 않았습니다.
현재 계좌에서 확인할 수 있는 평균 매입단가와 보유수량만 반영했으며, 확인할 수 없는 최초 매수일과 최초 매수시간은 빈값으로 유지했습니다.
또한 복구된 기존 보유분은 신규매수 전략의 성과통계에서 제외하도록 했습니다.
검증 결과는 다음과 같습니다.
- 기존 보유종목의 거래 리포트 복구 정상
- 동일 종목의 중복 생성 없음
- 프로그램 재실행 후에도 추가 중복 없음
- 실제 보유종목과 거래 리포트 사이의 누락 없음
- 평균 매입단가와 보유수량이 계좌 잔고와 일치
이번 작업으로 프로그램 개발 이전부터 보유하고 있던 종목과 자동매매 프로그램이 직접 매수한 종목을 구분할 수 있게 됐습니다.
거래 과정 추적 기능 추가
기존에는 거래 리포트가 정상적으로 생성되면 문제가 없었지만, 만약 특정 거래정보가 누락되면 어느 단계에서 문제가 발생했는지 확인하기 어려웠습니다.
이를 보완하기 위해 거래 과정의 주요 상태를 별도로 기록하는 기능을 추가했습니다.
기록 대상은 다음과 같습니다.
- 매수 체결 시점
- 매도 주문 시점
- 매도 체결 시점
- 보유수량이 0이 된 시점
- 실행 중 거래정보를 찾지 못한 예외 상황
프로그램 시작 시 남아 있는 미청산 데이터도 실제 상태에 따라 구분해 확인할 수 있도록 개선했습니다.
- 실제 계좌에 보유 중인 정상 미청산 거래
- 실제 계좌에는 없는 미청산 거래
- 동일 종목에서 중복으로 남아 있는 미청산 거래
이번 기능은 거래 누락이나 데이터 불일치의 원인을 추적하기 위한 장치입니다.
실제 매수 조건과 매도 조건, 주문 판단 순서 등 핵심 매매전략은 변경하지 않았습니다.
기본 검증에서는 거래 추적정보를 저장하는 구조가 정상적으로 생성됐고, 기존 거래 데이터와 기존 보유분 복구 정보도 그대로 유지되는 것을 확인했습니다.
다만 새 기능 적용 이후 아직 자연스럽게 발생한 신규 거래가 없기 때문에, 매수부터 매도 완료까지 모든 기록이 실제 환경에서 순서대로 연결되는지는 다음 거래일부터 확인할 예정입니다.
과거 미청산 데이터 분석 원칙
현재 계좌에는 보유하지 않지만 거래 리포트에는 미청산 상태로 남아 있는 과거 데이터도 확인했습니다.
일부 데이터는 동일 종목의 다른 정상 종료 거래와 겹치는 형태였고, 일부는 당시 로그가 남아 있지 않아 정확한 청산 과정을 확인하기 어려웠습니다.
이런 경우 데이터를 정리한다는 이유로 매도정보를 임의로 생성하면 안 됩니다.
따라서 확인할 수 없는 다음 항목은 추정하지 않았습니다.
- 매도시간
- 매도가격
- 매도수량
- 수익률
- 매도 사유
과거 데이터를 자동으로 삭제하거나 다른 거래와 강제로 합치지도 않았습니다.
현재 상태를 그대로 보존하고, 앞으로 추가되는 거래 추적정보를 통해 같은 문제가 다시 발생하는지를 확인하는 방향으로 정리했습니다.
거래 데이터는 빈값이 있다는 이유로 임의 수정하는 것보다, 확인할 수 없는 정보는 확인 불가 상태로 남겨두는 것이 더 안전하다고 판단했습니다.
후보종목과 실제 매수 연결 문제 개선
자동매매 프로그램에서는 조건검색 등을 통해 확인된 후보종목과 실제 매수 거래를 연결해 분석하고 있습니다.
장중에는 이 연결정보가 정상적으로 기록됐지만, 프로그램을 재실행한 후 장 마감 데이터를 확인하면 일부 연결정보가 사라지는 문제가 발견됐습니다.
확인 결과 장중 최초 저장이나 보고서 출력 자체의 문제는 아니었습니다.
프로그램 재실행 과정에서 후보 데이터의 일부만 복구되고, 실제 매수 연결 여부와 거래 식별정보는 복구되지 않은 상태에서 기본값으로 다시 저장되는 것이 원인이었습니다.
정리하면 다음과 같은 흐름이었습니다.
- 장중 최초 저장은 정상
- 프로그램 재실행 과정에서 일부 정보 복구 누락
- 복구되지 않은 항목이 빈값이나 기본값으로 생성
- 이후 저장 과정에서 기존 정상 정보가 변경됨
이를 해결하기 위해 기존 데이터에 실제 매수 연결정보가 저장돼 있다면, 재실행 이후 만들어진 빈값이나 기본값이 기존 정보를 덮어쓰지 못하도록 저장 방식을 보완했습니다.
이제 프로그램이 재실행되더라도 후보종목과 실제 거래의 연결정보가 유지돼야 합니다.
다만 이 부분도 실제 신규매수가 발생한 뒤 프로그램을 재실행하고, 장 마감 보고서까지 확인해야 최종 검증이 완료됩니다.
장 마감 매수 건수 집계 기준 정리
기존에는 프로그램 화면과 장 마감 보고서에서 오늘 매수 건수가 서로 다르게 표시되는 경우가 있었습니다.
오류라기보다 각 위치에서 서로 다른 기준의 데이터를 사용하고 있었기 때문입니다.
예를 들어 다음 항목은 모두 매수 건수처럼 보이지만 의미가 다릅니다.
- 오늘 발생한 전체 신규매수
- 후보종목에서 실제 매수로 연결된 거래
- 오늘 매수 후 아직 보유 중인 거래
- 현재 프로그램 실행 중 분류 가능한 거래
이번 작업에서는 이러한 수치를 각각 분리해 집계하도록 개선했습니다.
이에 따라 앞으로는 단순히 ‘오늘 매수 몇 건’이라고 표시하는 것이 아니라, 어떤 기준으로 계산된 건수인지 구분할 수 있게 됐습니다.
실제 매매 상태를 관리하는 실행 중 데이터의 범위는 확대하지 않았습니다.
이미 매도 완료된 과거 거래를 실행 중인 매매 판단 영역에 다시 포함하면 매도나 추가매수 판단에 영향을 줄 가능성이 있기 때문입니다.
통계는 보완하되, 실제 매매 판단에 사용되는 데이터 구조는 불필요하게 변경하지 않는 방향으로 작업했습니다.
빌드와 실행 검증
모든 수정이 끝난 뒤 새 실행파일을 생성하고 실제 실행 검증을 진행했습니다.
확인한 항목은 다음과 같습니다.
- 프로그램 컴파일 정상 완료
- 수정사항이 반영된 실행파일 생성
- 키움 OpenAPI 로그인 정상
- 계좌 잔고 조회 정상
- 조건검색 실행 정상
- 초기정보 불러오기 정상
- 기존 보유종목 데이터 유지
- 과거 미청산 데이터 유지
- 거래 추적용 데이터 유지
- 프로그램 실행과 응답 상태 정상
현재 프로그램은 오늘 수정한 내용이 반영된 상태로 실행되고 있습니다.
기존 거래 데이터를 삭제하거나 초기화하지 않고 수정사항을 반영했으며, 프로그램 재실행 후에도 기존 보유분 복구 정보와 과거 데이터가 유지되는 것을 확인했습니다.
아직 남아 있는 실제 거래 검증
오늘 진행한 기능 개발과 기본 실행 검증은 완료됐습니다.
하지만 실제 거래를 통한 최종 검증은 아직 남아 있습니다.
다음 거래일에 신규매수가 발생하면 다음 항목을 확인할 예정입니다.
- 후보종목과 실제 거래의 연결정보가 정상적으로 저장되는지
- 서로 연결된 거래 식별정보가 일치하는지
- 프로그램 재실행 후에도 연결정보가 유지되는지
- 장 마감 보고서에서도 연결값이 남아 있는지
- 매수부터 매도 완료까지 거래 과정이 순서대로 기록되는지
현재는 실제 신규 거래가 발생하기 전이기 때문에 거래 추적 기능과 연결정보 복구 기능이 운영 환경에서 최종 검증됐다고 단정할 수는 없습니다.
기능 구현과 기본 동작 확인은 완료됐지만, 실제 매매를 통한 운영 검증은 다음 거래일부터 계속 진행할 예정입니다.
별도 작업으로 분리한 문제
후보종목 데이터 중 일부 기술지표가 아직 준비되지 않았는데도 수집이 완료된 것처럼 표시되는 문제가 남아 있습니다.
이 문제는 오늘 수정하지 않았습니다.
오늘 진행한 거래 데이터 정합성 작업과 함께 수정하면 데이터 수집 과정뿐 아니라 실제 매매 판단에도 영향을 줄 가능성이 있기 때문입니다.
따라서 해당 문제는 현재 작업과 분리해 별도로 분석하고 수정할 예정입니다.
완료된 작업과 아직 해결되지 않은 문제를 구분하는 것도 안정적인 프로그램 개발에서 중요한 부분이라고 생각합니다.
오늘 개발에 대한 평가
오늘 작업은 눈에 보이는 매수 기회를 늘리거나 수익률을 높이는 기능은 아닙니다.
하지만 장기간 자동매매 데이터를 축적하고 분석하려면 반드시 필요한 기반 작업입니다.
거래 리포트와 실제 계좌 상태가 일치하지 않거나, 프로그램 재실행 과정에서 기존 정보가 사라진다면 아무리 많은 데이터가 쌓여도 정확한 전략 평가가 어렵습니다.
이번 개선을 통해 다음 부분이 보완됐습니다.
- 기존 보유분과 신규매수 거래의 구분
- 실제 계좌와 거래 리포트의 누락 점검
- 과거 불완전한 데이터의 원본 보존
- 거래 과정별 추적 가능성 확보
- 프로그램 재실행 후 연결정보 보호
- 매수 건수별 통계 기준 명확화
특히 확인할 수 없는 과거 정보를 임의로 채우지 않고, 원본을 유지하면서 앞으로 발생하는 거래부터 정확히 추적하도록 한 점이 중요합니다.
자동매매 프로그램의 완성도는 매수·매도 조건만으로 결정되지 않습니다.
문제가 발생했을 때 원인을 확인할 수 있고, 프로그램을 재실행해도 기존 데이터가 안전하게 유지되며, 실제 계좌와 보고서가 일치해야 장기적인 운영과 전략 분석이 가능합니다.
마무리
오늘은 자동매매 전략 자체를 변경하기보다 거래 데이터의 신뢰성과 추적 가능성을 높이는 작업을 진행했습니다.
기본적인 빌드와 실행 검증은 정상적으로 마쳤으며, 기존 보유종목과 과거 거래 데이터도 그대로 유지되는 것을 확인했습니다.
다음 거래일에는 실제 신규매수가 발생했을 때 후보종목과 거래정보가 올바르게 연결되는지, 프로그램 재실행 후에도 연결정보가 유지되는지, 거래 과정이 처음부터 끝까지 정상적으로 기록되는지를 중점적으로 확인할 예정입니다.
실제 거래 검증까지 완료된 뒤에는 이번에 추가한 기능이 장기적인 거래 분석과 오류 추적에 얼마나 도움이 되는지도 계속 점검해보겠습니다.
이 글은 개인적인 자동매매 프로그램 개발 과정을 기록한 내용이며, 특정 종목의 매수·매도 또는 투자를 권유하지 않습니다.
'주식프로그램 > 프로그램 개발' 카테고리의 다른 글
| 2026년 6월 17일 자동매매 개발일지 – 수익보다 먼저 위험한 매수를 줄이는 구조 만들기 (0) | 2026.06.17 |
|---|---|
| 커뮤니티 운영 종료 후 개인용 시스템으로 전환 (0) | 2026.05.11 |
| 키움증권 REST API – 파이썬으로 접근 토큰(Access Token) 발급하기 (4) | 2025.07.12 |
