2023-07-16 11:03:27 +09:00
2023-07-10 09:27:55 +09:00
2023-06-27 10:01:39 +09:00
2023-06-17 16:25:49 +09:00
2023-07-16 11:03:27 +09:00
2023-06-17 16:25:49 +09:00
2023-07-04 22:53:54 +09:00
2023-06-30 08:50:41 +09:00
2023-07-04 22:53:54 +09:00
2023-06-30 16:23:08 +09:00
2023-05-30 22:41:05 +09:00
2023-06-30 08:50:41 +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) 이면 영문으로 저장.
  • 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 에 따라서 다양한 투자 성향을 가질 수 있도록 설계할 것입니다.

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%