2024-11-12 08:52:14 +09:00
2023-08-11 20:47:28 +09:00
2023-06-27 10:01:39 +09:00
2023-06-17 16:25:49 +09:00
2024-11-11 23:17:39 +09:00
2023-06-17 16:25:49 +09:00
2024-11-12 08:52:14 +09:00
2024-10-29 02:27:03 +09:00
2024-11-12 08:52:14 +09:00
2024-11-08 23:24:03 +09:00
2024-10-30 00:50:59 +09:00
2024-11-11 23:17:39 +09:00

About KissMe

KissMe 는 KIS API 를 연동한 swift 라이브러리입니다.

KissMeConsole

KissMeConsole 은 command line 에서 인터렉티브 명령어로 API 호출을 테스트해볼 수 있는 도구입니다.

KissMeConsole 에서 유효한 command line 명령어는 다음과 같습니다.

Command list

Command 설명
quit 종료
login mock Mock 서버로 로그인. mock-server.json 을 credential 로 사용.
login real Real 서버로 로그인. real-server.json 을 credential 로 사용.
logout 접속한 서버에서 로그아웃.
top (0,1,2,3,4) 상위 거래량 30종목 (0:평균거래량, 1:거래증가율, 2:평균거래회전율, 3:거래금액순, 4:평균거래금액회전율). data/top30/(yyyyMMdd)/top30-(BELONG)-(yyyyMMdd)-(HHmmss).csv 파일로 저장.
buy (PNO) (가격) (수량) 상품을 구매. (가격) 에 -8282 로 입력하면 시장가격. (수량) 에 -82 로 입력하면 최대수량.
buy check (PNO) (가격) 현재 잔고로 구매가 가능한 수량을 확인.
sell (PNO) (가격) (수량) 보유한 상품을 판매. (가격) 에 -8282 로 입력하면 시장가격.
cancel (PNO) (ONO) (수량) 주문 내역의 일부를 취소. (수량) 에 -82 로 입력하면 전체수량.
WIP modify (PNO) (ONO) (가격) (수량) 주문 내역을 변경. (수량) 에 -82 로 입력하면 전체수량.
open bag 보유 종목 열람. 보유 주식은 data/account-stocks.csv 파일로 저장. 잔고 상황은 data/account-amount.csv 파일로 저장.
now [PNO] 종목의 현재가 열람. PNO 은 생략 가능. data/(PNO)/price/prices-(yyyyMM01).csv 파일로 저장.
now all 모든 종목의 현재가를 열람. data/(PNO)/price/prices-(yyyyMM01).csv 파일로 저장.
candle [PNO] 종목의 분봉 열람. PNO 은 생략 가능. data/(PNO)/min/candle-(yyyyMMdd).csv 파일로 저장.
candle all [resume] 모든 종목의 분봉 열람. cron job 으로 돌리기 위해서 추가. data/(PNO)/min/candle-(yyyyMMdd).csv 파일로 저장. (resume) 을 기입하면, 이미 받은 파일은 검사하여, 데이터에 오류가 있으면 다시 받고 오류가 없으면 새롭게 열람하지 않음.
candle day [PNO] 종목의 최근 250일 동안의 일봉 열람. PNO 은 생략 가능. data/(PNO)/day/candle-(yyyyMMdd).csv 파일로 저장.
candle day all [resume] 모든 종목의 최근 250일 동안의 일봉 열람. cron job 으로 오전 장이 시작전에 미리 수집. data/(PNO)/day/candle-(yyyyMMdd).csv 파일로 저장.
candle week [PNO] 종목의 최근 52주 동안의 주봉 열람. PNO 은 생략 가능. data/(PNO)/week/candle-(yyyyMMdd).csv 파일로 저장.
candle week all [resume] 모든 종목의 최근 52주 동안의 주봉 열람. cron job 으로 오전 장이 시작전에 미리 수집. data/(PNO)/week/candle-(yyyyMMdd).csv 파일로 저장.
candle validate (기간) (기간) 타입의 모든 csv 파일에 대해서 데이터가 유효한지 검사. (기간) 으로는 min, day, week 을 지정하고, 생략되면 min 으로 간주.
investor [PNO] 종목의 투자자 거래량 열람. PNO 은 생략 가능. data/(PNO)/investor/investor-(yyyyMM01).csv 파일로 저장.
investor all 모든 종목의 투자자 거래량 열람. data/(PNO)/investor/investor-(yyyyMM01).csv 파일로 저장.
shorts [PNO] 공매도 잔고를 열람. PNO 은 생략 가능. data/shorts/(yyyy)/shorts-(yyyyMM01).csv 파일로 저장.
shorts all [resume] 모든 종목의 공매도 잔고를 열람. data/shorts/(yyyy)/shorts-(yyyyMM01).csv 파일로 저장.
index (01,02,03,04) 지수 시세 열람. (01: KRX, 02: KOSPI, 03: KOSDAQ, 04: 테마). index/(yyyyMMdd)/prices-(01,02,03,04)-(yyyyMMdd)-(HHmmss).csv 파일로 저장.
index portfolio 지수를 구성하는 포트폴리오 상품 열람. index/(yyyyMMdd)/portfolio-(IMARKET)-(IDXNO).csv 파일로 저장.
load shop data/shop-products.csv 로부터 전체 상품을 로딩.
update shop 금융위원회_KRX상장종목정보 로부터 전체 상품을 얻어서 data/shop-products.csv 로 저장.
look (상품명) (상품명) 에 해당되는 PNO 를 표시함.
load index data/index-products.csv 로부터 전체 지수 상품을 로딩.
update index KRX 지수 로부터 전체 지수 상품을 얻어서 data/index-products.csv 로 저장.
holiday [yyyyMMdd] 휴장일 여부를 판단함. yyyyMMdd 를 생략하면 오늘 날짜로 확인. data/holiday.csv 로 저장.
WIP showcase 추천 상품을 제안함.
loves 관심 종목 전체를 열람. profile.json 에 저장된 관심 종목을 표시함.
love (탭).(번호) (PNO) 관심 종목에 추가함. (번호) 를 지정하지 않으면 (탭) 마지막에 추가함.
hate (탭) (PNO) 관심 종목에서 삭제함.
localize names csv field name 에 대해서 한글명을 제공하는 data/localized-names.csv 를 저장.
localize (on/off) 앞으로 저장하는 모든 csv file 의 field 에 (on) 이면 한글명으로, (off) 이면 영문으로 저장.
real (PNO) (on/off) 실시간 웹소켓을 접속하여 수신된 데이터를 기록합니다. (on) 이면 파일로 기록, (off) 이면 기록하지 않음.
db candle build all [yyyy] [MM] [dd] 모든 종목에 대해서 csv 파일로부터 지정된 yyyy, MM, dd 날짜에 대해서만 DB 로 빌드. data/(PNO)/min/candle-(yyyy).db1 파일에 저장.
db candle build (PNO) [yyyy] [MM] [dd] PNO 의 csv 파일로부터 지정된 yyyy, MM, dd 날짜에 대해서만 DB 로 빌드. data/(PNO)/min/candle-(yyyy).db1 파일에 저장.
db candle validate (PNO) (yyyy) PNO 의 yyyy DB에 기록된 분봉에 대해서 유효한지 검사.
db candle count (PNO) (yyyy) PNO 의 yyyy DB에 기록된 분봉 갯수를 열람.
db candle (PNO) (yyyyMMdd) [HH] PNO 의 yyyyMMdd 날짜의 HH 시간의 모든 분봉을 열람.
  • PNO 는 Product NO 의 약자이고, 상품의 단축코드 (shortCode) 와 동일합니다.
  • ONO 는 Order NO 의 약자이고, 고유한 주문번호 입니다.
  • BELONG 는 다음과 같은 명칭이 있습니다.
    • 평균거래량: av (average-volume)
    • 거래증가율: vir (volume-increase-rate)
    • 평균거래회전율: avtr (average-volume-turnover-rate)
    • 거래금액순: tv (transaction-value)
    • 평균거래금액회전율: atvtr (average-transaction-value-turnover-rate)
  • IMARKET 은 krx, kosdaq, theme 후보가 있습니다.

Environment

Environment variable 설명
KISS_RESPONSE_LOGGABLE true, 1 이면, API 응답로그를 기록함. false, 0 이면 기록하지 않음. 기본값은 false.
KISS_ASSERT_COMMA_CSV_DATA true, 1 이면, CSV 데이터에 comma 문자가 감지되면 assertion 을 발생시킴. 기본값은 false.

KissMeIndex

KissMeIndex 는 지표 집합(index set)을 추출하는 도구입니다.

다음은 지표 데이터를 추출하는 예제입니다.

첫라인은 INPUT 이고, 이후의 json 데이터는 OUTPUT 입니다.

./KissMeIndex KMI-0005 20230616 105900 config.json
{
  "code": 200,
  "message": "OK",
  "kmi": "KMI-0005",
  "output": [
      {
        "shortCode": "005930",
        "weight": -1.0
      },
      {
        "shortCode": "247540",
        "weight": 0.5
      }
  ]
}

INPUT

  • (indexApp) KMI-(number) (date) (time) (config.json)
    • (indexApp) 는 지표를 추출하는 app binary 입니다. INPUT, OUTPUT 형식만 맞출 수 있다면, 다양한 도구를 통해서 만들 수 있습니다.
    • KMI-(number) 는 고유의 지표 번호입니다. 하나의 app 에서 여러 지표를 추출할 수 있습니다.
    • (date) 는 yyyyMMdd 형식의 날짜입니다.
    • (time) 는 HHmmss 형식의 시간입니다.
    • (config.json) 는 config 로 상세한 설정을 할 수 있는 json 파일입니다. 여기의 내용은 (indexApp) 과 KMI-(number) 에 따라서 다르게 구성될 수 있습니다.

OUTPUT

json 파일 형식으로 결과를 제공합니다.

  • code: 에러코드입니다. 200 은 성공입니다.
  • message: 상세한 메시지를 의미합니다. 성공하면 OK 로 표시합니다.
  • kmi: 데이터로 제공되는 KMI 지표입니다.
  • output: 지표 데이터 배열입니다.
    • shortCode : 추천종목 코드 번호
    • productName : 종목명
    • weight : [-1.0, 1.0] 사이의 가중치 값입니다. 음수이면 매도 성향이고, 양수이면 매수성향입니다.

KissMeMatrix

KissMeMatrix 는 다양한 주식의 지표 집합(index set) 통해서 교집합 종목을 찾아내는 데이터 모델 도구입니다.

교집합 종목 중에서도 score 계산을 시도하고, score 값에 따라 정교하게 투자 비율을 조정할 수도 있을 것입니다.

TODO

  • score 계산에는 가중치(weight)를 두어서 현실적인 score 를 계산하도록 할 것입니다.
  • weight 계산에는 deep learning 을 수행할 것입니다.

matrix model list

model 설명

KissMeGolder

KissMeGolder 는 KissMeMatrix model 을 충실하게 따르면서, 자동으로 주식 매매를 수행하는 로봇입니다.

사용하고자 하는 model 에 따라서 다양한 투자 성향을 가질 수 있도록 설계할 것입니다.

KissMeSacks

KissMeSacks 는 단타 매매를 자동으로 검증해주는 시뮬레이션 로봇입니다.

완성도가 높아지면 나중에 KissGoblin UI 기능으로 연동될 것입니다.

KissGram

KissGram 은 텔레그램 봇과 연동하여 다양한 정보 창구로 쓰일 수 있도록 고안된 인터페이스 툴입니다.

KissGoblin

디아블로의 보물 고블린의 아이디어에서 따온 것입니다.

매수 시점에 고블린이 스폰되고, 매도 시점에 고블린이 아이템을 드랍하고 사라지는 컨셉입니다.

매수와 매도 사이의 재미있는 인터페이스를 제공하는 것이 목표입니다.

Credential json

credential 로 사용하는 json 의 양식은 다음과 같습니다.

mock-server.json, real-server.json

{
  "isMock": false,
  "accountNo": "12345678-90",
  "appKey": "xxxxxxxxxxx",
  "appSecret": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
}

mock-server.json, real-server.json 파일을 ./bin 디렉토리에 생성합니다.

  • isMock 값이 true 이면 모의서버, false 이면 실전서버를 의미합니다.
  • accountNo 에는 계좌번호를 의미합니다. 8-2 형태의 숫자로 입력합니다.
  • appKey한국투자증권 홈페이지에서 발급받은 appkey 입니다.
  • appSecret한국투자증권 홈페이지에서 발급받은 appsecret 입니다.

shop-server.json

{
  "openApiKey": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
}

shop-server.json 파일을 ./bin 디렉토리에 생성합니다.

How to build

macOS

macOS 환경에서는 최신 Xcode 14.x 이상을 설치하고, Command line tool 을 설치하면 됩니다.

% xcode-select --install

다음의 script 로 빌드하고, ./bin 경로에서 빌드된 tool 들을 이용하면 됩니다.

% git clone git@github.com:whomakemecrazy/kissme.git
%
% cd kissme
% ./scripts/build.sh
%
% cd bin
% ./KissMeConsole

Linux

Linux 는 현재 ubuntu 20.4 를 지원합니다.

다음의 guide 를 따라서, swift 컴파일러를 설치합니다.

$ cd kissme
$ ./scripts/build.sh
$
$ cd bin
$ ./KissMeConsole

Windows

Windows 는 현재 Windows 10 이상을 지원합니다.

다음의 사이트에서 Swift 컴파일러를 설치합니다.

PowerShell 에서 다음의 script 로 빌드하고, .\bin 경로에서 빌드된 tool 들을 이용하면 됩니다.

PS >> cd kissme
PS >> powershell ./scripts/build.ps1
PS >>
PS >> cd .\bin
PS >> .\KissMeConsole

Android (TODO)

Android 는 cross compile 과정이 필요하기 때문에 차후에 지원할 예정입니다.

License

이 소스의 라이센스는 Private 입니다.

Description
No description provided
Readme 789 KiB
Languages
Swift 99.8%