• [C#, LS증권 dll api] 주문 구조체 CSPAT00600 처리

    모의 주문 모의 주문은 이용하지 않는 게 좋다. 체결 방식과 서버가 요청을 처리하는 방식이 실제와 많이 다르다. 주문 처리 서버는 주문 요청을 여느 요청과 다르게 처리한다. 요청 구조체를 채워 보낼 때 보통은 필요한 필드만 입력하면 된다. C++ struct를 char 배열로 마셜한 때 입력하지 않은 필드는 null이다. 주문 요청 아닌 struct에는 널이 있어도 된다. 주문 요청…

  • [C#] 마셜하지 않고 Ls증권 dll api 이용하기

    c++ 코드를 c#으로 쓰려면 marshal을 하는 게 흔한 방법이다. 그런데 이게 좀 느리다. 하지만 대부분의 경우에는 특별히 문제가 되지는 않는다. ls증권과 키움증권의 api들은 모두 x86으로만 작동하고 WinUi를 완전하게 지원하지 않는다. 그래서 이들을 이용한 producer 앱을 만들고 있다. consumer 앱들은 x64 WinUi로 만든다. named pipe를 쓰면 편한데 이거도 좀 느리다. 4천 개 넘는 종목들의 체결, 호가,…

  • Ls증권 프로그램 매매와 실제 체결 사이의 시간 차이

    272,208,000원 어치 매도는 212주의 금액이다. 프로그램 매도를 한 시간부터 거슬러 같은 수의 매도 수량을 찾아 보면 프로그램 매도 21초 전부터 8초 전 사이에 있다. 증권회사들은 대이터에 자기 서버의 시간을 저장한다. 따라서 논리적으로는 거래소가 생산한 대이터의 시간이 증권회사들마다 다를 수 있다. 하지만 거의 같다. 거래소들과 증권회사들 사이의 전송 속도에 의미 있는 차이가 없기 때문이다. 따라서 위의…

  • c# DllImport 대신 LibraryImport

    최신 비주얼 스투디오는 DllImport를 쓰면 LibraryImport로 바꾸라고 경고한다. 전자는 오래되었고 느리기 때문이다. LibraryImport의 기본 형태는 아래와 같다. access modifier는 생략할 수 없다. 정적으로만 이용할 수 있으므로 static으로 해야 한다. 컴파일러가 다른 파일에 자동으로 코드를 추가할 거라 partial로 해야 한다. 정수와 달리 bool이나 string은 마셜을 해야 한다. unmanaged의 정수와 .네트의 그것은 구조가 같지만 bool과 string은 그렇지…

  • c# ls증권 etk_decompress 예제

    ls증권의 rest api는 10분 200번 제한이 없어서 좋지만 서버로 하여금 압축하여 보내게 할 수가 없다. 레스트representational state transfer는 월드 와이드 웹에서 오가는 전송이다.

  • c# fixed byte 배열에 대이터 넣기

    예를 들어 ls증권 api의 경우 오래 전 버전의 비주얼 스투디오로 만들어 utf를 쓰지 않고 unified hangul code로 보낸다. 이 코드를 code page 949(cp949)나 windows-949 등으로 부른다. 949는 그냥 여러 코드 패이지들 가운데 구분하기 위한 identifier다. 오래된 거고 지금은 거의 쓰지 않는다. 최근 버전의 .네트는 utf만 지원하여 위 코드 패이지로 인코드나 디코드를 하려면 encoding provider라는 걸…

  • c# value 타입 배열 만들기

    배열은 레퍼런스 타입이다. 레퍼런스 타입은 메모리 매핑을 할 수 없다. 블리터블이 아니기 때문이다. 컴퓨터에서 map은 지도를 그린다는 뜻이 아니다. (transitive, followed by a “to” phrase) To create a direct relationship to; to create a correspondence with.wiktionary 직역을 하면 대응하게 만든다는 의미다. 쉽게 설명하면 이미 메모리에 있는 물리적 바이트를 가리키는 포인터를 추가로 만드는 행위다. 예를 들어…