Files
KissMe/README.md

230 lines
9.3 KiB
Markdown

# 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.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` | 모든 종목의 최근 250일 동안의 일봉 열람. cron job 으로 오전 장이 시작전에 미리 수집. **data/(PNO)/day/candle-(yyyyMMdd).csv** 파일로 저장.
`candle week [PNO]` | 종목의 최근 52주 동안의 주봉 열람. PNO 은 생략 가능. **data/(PNO)/week/candle-(yyyyMMdd).csv** 파일로 저장.
`candle week all` | 모든 종목의 최근 52주 동안의 주봉 열람. cron job 으로 오전 장이 시작전에 미리 수집. **data/(PNO)/week/candle-(yyyyMMdd).csv** 파일로 저장.
`candle validate (기간)` | (기간) 타입의 모든 csv 파일에 대해서 데이터가 유효한지 검사. (기간) 으로는 **min**, **day**, **week** 을 지정하고, 생략되면 **min** 으로 간주.
`investor [PNO]` | 종목의 투자자 거래량 열람. PNO 은 생략 가능. **data/(PNO)/investor/investor-(yyyyMMdd).csv** 파일로 저장.
`investor all` | 모든 종목의 투자자 거래량 열람. **data/(PNO)/investor/investor-(yyyyMMdd).csv** 파일로 저장.
`shorts [PNO]` | 공매도 잔고를 열람. PNO 은 생략 가능. **data/shorts/(yyyy)/shorts-(yyyyMMdd).csv** 파일로 저장.
`shorts all [resume]` | 모든 종목의 공매도 잔고를 열람. **data/shorts/(yyyy)/shorts-(yyyyMMdd).csv** 파일로 저장.
`load shop` | data/shop-products.csv 로부터 전체 상품을 로딩.
`update shop` | **금융위원회_KRX상장종목정보** 로부터 전체 상품을 얻어서 **data/shop-products.csv** 로 저장.
`look (상품명)` | (상품명) 에 해당되는 PNO 를 표시함.
`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) 이면 영문으로 저장.
* 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)
## Environment
Environment variable | 설명
-------------------- | ---
KISS_RESPONSE_LOGGABLE | `true`, `1` 이면, API 응답로그를 기록함. `false`, `0` 이면 기록하지 않음.
# KissMeIndex
KissMeIndex 는 지표 집합(index set)을 추출하는 도구입니다.
## INPUT
INPUT 으로는 다음과 같은 값을 제공합니다.
* 환경설정 : config.json 파일로 특정 지표에서 보정으로 필요로 하는 설정을 기입합니다.
* 현재시간 : timestamp 값을 반드시 필요로 합니다. simulator 에서도 이 기능을 활용할 수 있습니다.
## OUTPUT
OUTPUT 은 다음과 같은 값을 json 형태로 제공합니다.
* shortCode : 추천종목 코드 번호입니다.
* weight : [-1.0, 1.0] 사이의 가중치 값입니다. 음수이면 매도 성향이고, 양수이면 매수성향입니다.
## Example
```bash
./KissMeIndex KMI-0001 20230616 100000 config.json
{
"code": 200,
"message": "OK",
"kmi": "KMI-0005",
"output": [
{
"shortCode": "005930",
"weight": -1.0
},
{
"shortCode": "247540",
"weight": 0.5
}
]
}
```
# KissMeMatrix
KissMeMatrix 는 다양한 주식의 지표 집합(index set) 통해서 교집합 종목을 찾아내는 데이터 모델 도구입니다.
교집합 종목 중에서도 score 계산을 시도하고, score 값에 따라 정교하게 투자 비율을 조정할 수도 있을 것입니다.
## TODO
* score 계산에는 가중치(weight)를 두어서 현실적인 score 를 계산하도록 할 것입니다.
* weight 계산에는 deep learning 을 수행할 것입니다.
## matrix model list
model | 설명
----- | ---
# KissMeGolder
KissMeGolder 는 KissMeMatrix model 을 충실하게 따르면서, 자동으로 주식 매매를 수행하는 로봇입니다.
사용하고자 하는 model 에 따라서 다양한 투자 성향을 가질 수 있도록 설계할 것입니다.
# Credential json
credential 로 사용하는 json 의 양식은 다음과 같습니다.
### mock-server.json, real-server.json
```json
{
"isMock": false,
"accountNo": "12345678-90",
"appKey": "xxxxxxxxxxx",
"appSecret": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
}
```
mock-server.json, real-server.json 파일을 `./bin` 디렉토리에 생성합니다.
* `isMock` 값이 `true` 이면 모의서버, `false` 이면 실전서버를 의미합니다.
* `accountNo` 에는 계좌번호를 의미합니다. 8-2 형태의 숫자로 입력합니다.
* `appKey` 는 [한국투자증권](https://apiportal.koreainvestment.com) 홈페이지에서 발급받은 appkey 입니다.
* `appSecret` 는 [한국투자증권](https://apiportal.koreainvestment.com) 홈페이지에서 발급받은 appsecret 입니다.
### shop-server.json
```json
{
"openApiKey": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
}
```
shop-server.json 파일을 `./bin` 디렉토리에 생성합니다.
* `openApiKey` 는 [data.go.kr](https://www.data.go.kr/) 에서 발급받은 API 인증키입니다.
* 다음의 Open API 활용신청을 합니다.
* [금융위원회_KRX상장종목정보](https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15094775)
# How to build
## macOS
macOS 환경에서는 최신 Xcode 14.x 이상을 설치하고, Command line tool 을 설치하면 됩니다.
```bash
% xcode-select --install
```
다음의 script 로 빌드하고, `./bin` 경로에서 빌드된 tool 들을 이용하면 됩니다.
```bash
% git clone git@github.com:whomakemecrazy/kissme.git
%
% cd kissme
% ./scripts/build.sh
%
% cd bin
% ./KissMeConsole
```
## Linux
Linux 는 현재 ubuntu 20.4 를 지원합니다.
다음의 guide 를 따라서, swift 컴파일러를 설치합니다.
* [Installing Swift on Ubuntu 20.04](https://gist.github.com/Jswizzy/408af5829970f9eb18f9b45f891910bb)
```bash
$ cd kissme
$ ./scripts/build.sh
$
$ cd bin
$ ./KissMeConsole
```
## Windows
Windows 는 현재 Windows 10 이상을 지원합니다.
다음의 사이트에서 Swift 컴파일러를 설치합니다.
* [Download Swift](https://www.swift.org/download/)
PowerShell 에서 다음의 script 로 빌드하고, `.\bin` 경로에서 빌드된 tool 들을 이용하면 됩니다.
```shell
PS >> cd kissme
PS >> powershell ./scripts/build.ps1
PS >>
PS >> cd .\bin
PS >> .\KissMeConsole
```
## Android (TODO)
Android 는 cross compile 과정이 필요하기 때문에 차후에 지원할 예정입니다.
# License
이 소스의 라이센스는 Private 입니다.