def get_current_price(code="005930"):
"""현재가 조회"""
PATH = "uapi/domestic-stock/v1/quotations/inquire-price" # <- API홈페이지에서 URL에 해당되는 부분
URL = f"{URL_BASE}/{PATH}"
headers = {"Content-Type":"application/json",
"authorization": f"Bearer {ACCESS_TOKEN}", # 접근토큰
"appKey":APP_KEY, #APP키, APP시크릿은 거의 고정으로 들어감
"appSecret":APP_SECRET,
"tr_id":"FHKST01010100"}
params = {
"fid_cond_mrkt_div_code":"J",
"fid_input_iscd":code,
}
res = requests.get(URL, headers=headers, params=params) # get은 데이터를 조회할 때, post는 서버의 상태를 변경할 때(서버에 데이터 업데이트)
return int(res.json()['output']['stck_prpr'])
return int(res.json()['output']['stck_prpr'])
-> 이 부분은 api에서 output응답상세 중 주식현재가를 받아들이는 코드
이외에도 다양한 정보들을 받아들일 수 있고,
2차원 데이터로 이루어 져 있는데
output 중 stck_prpr
홈페이지를 보면 -로 표시된 것을 확인할 수 있음
또 위의 코드에서는 Response의 Header부분은 사용되지 않음
=> Response 부분의 Required의 Y 부분은 들어가도 되고 안 들어가도 되는구나
def get_target_price(code="005930"): # API 문서 중 '주식현재가 일자별' 파트
"""변동성 돌파 전략으로 매수 목표가 조회"""
PATH = "uapi/domestic-stock/v1/quotations/inquire-daily-price"
URL = f"{URL_BASE}/{PATH}"
headers = {"Content-Type":"application/json",
"authorization": f"Bearer {ACCESS_TOKEN}",
"appKey":APP_KEY,
"appSecret":APP_SECRET,
"tr_id":"FHKST01010400"}
params = {
"fid_cond_mrkt_div_code":"J",
"fid_input_iscd":code,
"fid_org_adj_prc":"1",
"fid_period_div_code":"D"
}
res = requests.get(URL, headers=headers, params=params)
stck_oprc = int(res.json()['output'][0]['stck_oprc']) #오늘 시가
stck_hgpr = int(res.json()['output'][1]['stck_hgpr']) #전일 고가
stck_lwpr = int(res.json()['output'][1]['stck_lwpr']) #전일 저가
target_price = stck_oprc + (stck_hgpr - stck_lwpr) * 0.5
return target_price
오늘 시가의 경우에는 output의 index 0을 사용함
전일의 경우에는 output의 index 1을 사용함
주식 매수부분
def buy(code="005930", qty="1"):
"""주식 시장가 매수"""
PATH = "uapi/domestic-stock/v1/trading/order-cash"
URL = f"{URL_BASE}/{PATH}"
data = {
"CANO": CANO,
"ACNT_PRDT_CD": ACNT_PRDT_CD,
"PDNO": code,
"ORD_DVSN": "01",
"ORD_QTY": str(int(qty)),
"ORD_UNPR": "0",
}
headers = {"Content-Type":"application/json",
"authorization":f"Bearer {ACCESS_TOKEN}",
"appKey":APP_KEY,
"appSecret":APP_SECRET,
"tr_id":"TTTC0802U",
"custtype":"P",
"hashkey" : hashkey(data)
}
res = requests.post(URL, headers=headers, data=json.dumps(data))
if res.json()['rt_cd'] == '0':
send_message(f"[매수 성공]{str(res.json())}")
return True
else:
send_message(f"[매수 실패]{str(res.json())}")
return False
- 헤더의 hashkey 부분은 api 문서에는 입력 불필요라 돼있는데, 코드에는 입력이 되어 있다.
- body 부분을 data 변수에 넣었다.
* 해당 게시물들은 유튜버 조코딩님의 코딩 자료들을 보고 스터디 목적으로 작성된 글입니다.