Write account stock to csv file

This commit is contained in:
2023-06-03 08:20:12 +09:00
parent dab4e8d659
commit e91141251d
4 changed files with 38 additions and 16 deletions

View File

@@ -74,8 +74,8 @@ public struct BalanceResult: Codable {
public let message: String
public let straightInqueryCondition: String?
public let straightInqueryKey: String?
public let output1: [OutputDetail1]?
public let output2: [OutputDetail2]?
public let output1: [OutputStock]?
public let output2: [OutputAmount]?
private enum CodingKeys: String, CodingKey {
case resultCode = "rt_cd"
@@ -87,7 +87,7 @@ public struct BalanceResult: Codable {
case output2 = "output2"
}
public struct OutputDetail1: Codable {
public struct OutputStock: Codable, PropertyIterable {
///
public let productNo: String
@@ -196,7 +196,7 @@ public struct BalanceResult: Codable {
}
}
public struct OutputDetail2: Codable {
public struct OutputAmount: Codable, PropertyIterable {
/// ()
public let depositTotalAmount: String

View File

@@ -18,6 +18,14 @@ extension KissConsole {
func topProductsUrl(_ belong: BelongClassCode) -> URL {
URL.currentDirectory().appending(path: "data/top-\(belong.fileBelong).csv")
}
var accountStocksUrl: URL {
URL.currentDirectory().appending(path: "data/account-stocks.csv")
}
var accountAmountUrl: URL {
URL.currentDirectory().appending(path: "data/account-amount.csv")
}
}

View File

@@ -505,15 +505,23 @@ extension KissConsole {
private func onOpenBag() async {
do {
let result = try await account!.getStockBalance()
if let output = result.output1 {
for item in output {
if let stocks = result.output1 {
for item in stocks {
print("\(item)")
}
let fileUrl = accountStocksUrl
try stocks.writeCsv(toFile: fileUrl)
print("wrote \(fileUrl.lastPathComponent) with \(stocks.count)")
}
if let output = result.output2 {
for item in output {
if let amounts = result.output2 {
for item in amounts {
print("\(item)")
}
let fileUrl = accountAmountUrl
try amounts.writeCsv(toFile: accountAmountUrl)
print("wrote \(fileUrl.lastPathComponent) with \(amounts.count)")
}
} catch {
print("\(error)")

View File

@@ -17,20 +17,20 @@ command | 설명
`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:평균거래금액회전율)
`top (0,1,2,3,4)` | 상위 거래량 30종목 (0:평균거래량, 1:거래증가율, 2:평균거래회전율, 3:거래금액순, 4:평균거래금액회전율). **data/top-(BELONG).csv** 파일로 저장.
`buy (PNO) (가격) (수량)` | 상품을 구매. (가격) 에 -8282 로 입력하면 시장가격. (수량) 에 -82 로 입력하면 최대수량.
`buy check (PNO) (가격)` | 현재 잔고로 구매가 가능한 수량을 확인.
`sell (PNO) (가격) (수량)` | 보유한 상품을 판매. (가격) 에 -8282 로 입력하면 시장가격.
`cancel (PNO) (ONO) (수량)` | 주문 내역의 일부를 취소. (수량) 에 -82 로 입력하면 전체수량.
WIP `modify (PNO) (ONO) (가격) (수량)` | 주문 내역을 변경. (수량) 에 -82 로 입력하면 전체수량.
`open bag` | 보유 종목 열람.
`open bag` | 보유 종목 열람. 보유 주식은 **data/account-stocks.csv** 파일로 저장. 잔고 상황은 **data/account-amount.csv** 파일로 저장.
`now [PNO]` | 종목의 현재가 열람. PNO 은 생략 가능.
`candle [PNO]` | 종목의 분봉 열람. PNO 은 생략 가능. data/(PNO)/min/candle-(yyyyMMdd).csv 파일로 저장.
`candle all` | 모든 종목의 분봉 열람. cron job 으로 돌리기 위해서 추가. data/(PNO)/min/candle-(yyyyMMdd).csv 파일로 저장.
`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 [PNO]` | 종목의 분봉 열람. PNO 은 생략 가능. **data/(PNO)/min/candle-(yyyyMMdd).csv** 파일로 저장.
`candle all` | 모든 종목의 분봉 열람. cron job 으로 돌리기 위해서 추가. **data/(PNO)/min/candle-(yyyyMMdd).csv** 파일로 저장.
`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** 파일로 저장.
`load shop` | data/shop-products.csv 로부터 전체 상품을 로딩.
`update shop` | **금융위원회_KRX상장종목정보** 로부터 전체 상품을 얻어서 data/shop-products.csv 로 저장.
`look (상품명)` | (상품명) 에 해당되는 PNO 를 표시함.
@@ -41,6 +41,12 @@ WIP `showcase` | 추천 상품을 제안함.
* PNO 는 `Product NO` 의 약자이고, 상품의 `단축코드` (shortCode) 와 동일합니다.
* ONO 는 `Order NO` 의 약자이고, 고유한 주문번호 입니다.
* BELONG 는 다음과 같은 명칭이 있다.
* 평균거래량: average-volume
* 거래증가율: volume-increase-rate
* 평균거래회전율: average-volume-turnover-rate
* 거래금액순: transaction-value
* 평균거래금액회전율: average-transaction-value-turnover-rate
# KissMeMatrix