본문 바로가기

카테고리 없음

자동매매 - 조코딩님 함수부분 코드 해석

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 변수에 넣었다.

 

 

* 해당 게시물들은 유튜버 조코딩님의 코딩 자료들을 보고 스터디 목적으로 작성된 글입니다.