연결 지점은 시트다

Portle은 사용자가 소유한 구글 시트를 읽습니다. 같은 시트에 다른 프로그램이 쓰는 것을 막는 장치는 없고, 그래서 누군가 내 증권사용 커넥터를 만들어 주기를 기다릴 필요가 없습니다. 증권사가 개인용 API 자격증명을 발급한다면, 내 컴퓨터에서 도는 작은 스크립트가 체결 내역을 원장에 바로 더할 수 있습니다.

이 방식에서 Portle은 증권사 자격증명을 보관하지 않고 스크립트를 보지도 않습니다. 코딩 도구에 그대로 붙여넣어 스크립트를 받게 하는 프롬프트 문서가 있고, 아래에서 설명하는 열 규약과 안전 규칙이 그 안에 들어 있습니다.

프롬프트 문서 열기

코드를 쓰기 전에 API 문서에서 세 가지를 읽는다

첫째, 허용 IP 목록이 있는지. 미리 등록한 주소에서만 호출을 받는 증권사가 많고, 그러면 나가는 주소가 계속 바뀌는 서버리스 호스트는 쓸 수 없으며 휴대폰은 아예 불가능합니다. 이 경우 스크립트는 주소가 고정된 기계에 있어야 합니다.

둘째, 유효한 액세스 토큰이 동시에 몇 개까지인지. 클라이언트당 토큰을 하나만 두고 새로 발급하면 직전 토큰을 조용히 무효화하는 곳이 있어서, 두 작업이 동시에 돌면 서로의 토큰을 계속 죽입니다. 셋째, 체결 이력을 얼마나 과거까지 주는지. 3개월이나 12개월로 잘린다면 그 스크립트는 앞으로의 원장을 유지할 수는 있어도 과거를 복원하지는 못합니다.

두 번 돌려도 안전하게 만드는 것은 Id 열이다

스크립트가 더하는 모든 줄에 증권사 주문번호로 만든 아이디를 붙이고(예: 증권사:주문번호) Id 열에 적습니다. 무엇을 더하기 전에 시트를 읽어 이미 있는 아이디를 모으고, 거기 있는 것은 건너뜁니다. 날짜와 금액으로 맞추는 방법은 부분체결로 똑같아 보이는 거래가 둘 생기는 순간 무너집니다.

놓치기 쉬운 결과가 둘 있습니다. Void 열에 표시한 줄도 이미 있는 것으로 세야 합니다. Void는 그 줄을 계산에 넣지 않겠다는 사용자의 판단이지 그 거래가 없었다는 뜻이 아니기 때문입니다. 그리고 헤더에 Id 열이 없으면 스크립트는 멈춰야 합니다. 그것 없이 계속하면 실행할 때마다 원장이 통째로 중복됩니다.

깨지는 곳은 현금이다

대부분의 증권사 API는 체결 내역과 현재 보유만 주고 입금·출금·환전·배당에 대해서는 아무 말도 하지 않습니다. 매수와 매도만 더하면 원장에는 들어온 적 없는 현금이 생기고, 앱의 모든 현금 수치가 그것을 따라 어긋납니다.

정직한 처리는 매매만 더하고 차이를 보고하는 것입니다. 원장의 현금 잔액과 증권사가 말하는 잔액을 나란히 찍고, 입금은 사용자가 직접 적습니다. 빠진 현금 줄을 추론해서 만든다면 각각에 고유한 아이디를 주고 추론한 줄임을 메모 열에 반드시 표시해서, 추론한 줄이 보고된 줄처럼 보이는 일이 없게 합니다.

재구성기는 브릿지가 아니다

가장 빨리 쓰는 방법은 모든 줄을 다시 만들어 탭을 통째로 덮어쓰는 것이고, 결과가 맞아떨어지니 되는 것처럼 보입니다. 그런데 그것은 손으로 적은 줄과 설정해 둔 Void를 실행할 때마다 지웁니다. 계산이 아무리 정확해도 그런 스크립트를 예약 실행에 걸 수 없는 이유가 이것입니다.

간단하다면 전체 줄을 메모리에서 만들어도 됩니다. 다만 그 다음에 아이디로 시트와 견주어 없는 것만 더하세요. 증권사 잔액에 맞춘 현금 보정처럼 진짜 보정인 줄만 제자리에서 고치고 나머지는 그대로 둡니다. 그리고 확인하세요. 한 번 돌리고 다시 돌렸을 때 두 번째 실행이 할 일이 없다고 말해야 합니다.