PYTHON/Kiwoom Open API

키움증권 Open API 거래일자 데이터 얻기 (3)

  • -

아마 이번 게시글을 마지막으로 거래일 데이터를 조회하는 코드를 모두 구축할 수 있을 것 같다.(아마도)

 

 

우리가 찾는 날짜가 거래일자인지부터 확인해보자.

지난 게시글에서 우리는 day_data라는 변수 내에 \n을 제거한 일자 데이터만을 입력해주었고, 그 일자 데이터들은 모두 거래일에 해당하는 일자들이었다. 이제 우리는 우리가 확인하고자 하는 일자가 day_data 내에 있는지만 확인해주면 된다.

result = read_text("거래일데이터", "trade_date")
day_data = []

for i in result:
	date = i.replace("\n", "")
	day_data.append(date)

print(day_data)

if "20220401" in day_data:
	print("거래일입니다.")
else:
	print("거래일이 아니네요.")
    
>>>
['20220328', '20220329', '20220330', '20220331', '20220401', '20220404', '20220405', '20220406', '20220407', '20220408']
거래일입니다.

 

맨 마지막 줄에서 "거래일입니다."를 출력함으로써 거래일 여부를 잘 판단하고 있는 것을 확인할 수 있다. 그렇다면 우리는 이걸 그냥 두지 말고, 함수로 하나 만들어주도록 하자. 바로 입력한 일자가 거래일인지를 판단해주는 함수 말이다.

def is_trade_date(date):
	result = read_text("거래일데이터", "trade_date")
	day_data = []

	for i in result:
		date = i.replace("\n", "")
		day_data.append(date)

	if date in day_data:
		print("거래일입니다.")
	else:
		print("거래일이 아닙니다.")
        

is_trade_date("20220401")

>>>
거래일입니다.

웬걸, 거래일을 계산해낼 수 있는 함수를 만들었다니.

 

 


728x90

 

 

일자 간에 며칠의 텀이 있는지도 확인해보자.

지난 게시글에서 언급했듯, 미수 거래는 3일의 거래일이 경과되면 자동적으로 반대매매가 이루어진다. 따라서 우리는 거래일 간의 차이값을 확인해주어야 한다. 이는 정말정말 간단하게도 리스트의 인덱스 번호를 통해 계산할 수 있다.

일단 기본적으로 일자 간의 며칠의 거래일 텀이 있는지 확인하기 위해서는 반드시 두 개의 일자 데이터가 존재해야 한다. 따라서 텀을 확인해주는 함수를 제작한 후에, 해당 함수에서 두 개의 인자를 전달받도록 하자.

def cal_dif(first_date, second_date):
	pass

 

그 후에 혹여나 일자 데이터가 잘못 입력될 가능성을 고려하여, first_date와 second_date 간의 대소를 비교해주도록 하자. 본인은 second_date에 더 후일의 일자 데이터가 입력되도록 구축할 예정이다.

def cal_dif(first_date, second_date):
	if first_date <= second_date:     ## 정상적인 데이터 입력
		pass
	else:	## 비정상적인 데이터 입력
		pass

 

그 후에 이제 is_trade_date() 함수에서 제작했던 것과 동일한 방식으로 동작할 수 있게끔, 저장되어 있는 거래일 데이터를 가져와보도록 하자.

def cal_dif(first_date, second_date):

	if first_date <= second_date:
		result = read_text("거래일데이터", "trade_date")
		day_data = []

		for i in result:
			date = i.replace("\n", "")
			day_data.append(date)

	else:
		pass

 

이제   cal_dif  에도 거래일 데이터만 입력되어 있는   day_data  변수가 생성되었으니, 이제 해당 함수로 전달된 변수이자 인자인   first_date  와   second_date  인덱스 번호를 찾아주도록 하면 된다.

def cal_dif(first_date, second_date):

	if first_date <= second_date:
		result = read_text("거래일데이터", "trade_date")
		day_data = []

		for i in result:
			date = i.replace("\n", "")
			day_data.append(date)

		idx_first = day_data.index(first_date)
		idx_second = day_data.index(second_date)
		print(idx_first, idx_second)

	else:
		pass

 

 

이제 함수를 한 번 실행해보자.

해당 함수에 20220401과 20220408를 인자로 하여 함수를 실행했더니, 각각 4와 9라는 인덱스 번호를 출력했다. 즉, 20220401 일자 데이터는 네 번째 인덱스에 위치해 있으며 20220408 일자 데이터는 아홉 번째 인덱스에 위치해 있다는 것이다.  

cal_dif("20220401", "20220408")

>>>
4 9

 

아래의 사진을 보면, 20220401과 20220408 사이에 어떠한 거래일 차이가 있는지 한 눈에 확인할 수 있다.

 

그럼 우리는 이제 20220401의 인덱스 번호가 담긴 idx_first와 20220408의 인덱스 번호가 담긴 idx_second의 차이값을 반환해주면 된다.

def cal_dif(first_date, second_date):

	if first_date <= second_date:
		result = read_text("거래일데이터", "trade_date")
		day_data = []

		for i in result:
			date = i.replace("\n", "")
			day_data.append(date)

		idx_first = day_data.index(first_date)
		idx_second = day_data.index(second_date)
		idx_dif = idx_second - idx_first
		return idx_dif
        
	else:
		pass
        
result = cal_dif("20220401", "20220408")
print(result)

>>>
5

 

 

 

잠깐, 입력한 거래일자 데이터가 거래일이 아니면 어떡해?

아래의 사진을 보면 20220401, 20220404 사이에 20220402와 20220403이라는 두 개의 값이 빠져있음을 확인할 수 있다. 그렇다면 20220402와 20220403 간의 거래일 차이를 계산하기 위해 두 개의 값을 인자로 전달해주면 어떤 일이 일어나는지 구경해보자.

 

  ValueError : "20220402" is not in list  라는 오류가 발생한다.

result = cal_dif("20220402", "20220403")
print(result)

>>>
Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2020.3\plugins\python-ce\helpers\pydev\pydevd.py", line 1483, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2020.3\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/나무/PycharmProjects/trading/web_crawler/manage_folder.py", line 86, in <module>
    result = cal_dif("20220402", "20220403")
  File "C:/Users/나무/PycharmProjects/trading/web_crawler/manage_folder.py", line 77, in cal_dif
    idx_first = day_data.index(first_date)
ValueError: '20220402' is not in list

Process finished with exit code 1

 

오호. 그렇다면 이 오류를 처리해주도록 하자.

def cal_dif(first_date, second_date):

	if first_date <= second_date:
		result = read_text("거래일데이터", "trade_date")
		day_data = []

		for i in result:
			date = i.replace("\n", "")
			day_data.append(date)

		if (first_date and second_date) in day_data:
			idx_first = day_data.index(first_date)
			idx_second = day_data.index(second_date)
			idx_dif = idx_second - idx_first
			return idx_dif

		else:
			print("입력된 일자가 거래일이 아닙니다.")
			return False

	else:
		return False
        
        
result = cal_dif("20220402", "20220403")
print(result) 

>>>
입력된 일자가 거래일이 아닙니다.
False

 

이제 이 함수는 인자로 전달받은 두 개의 일자 데이터를 기반으로 하여 다음과 같은 세 가지 로직을 거치게 된다.

  • 두 거래일 간의 차이값을 반환하거나
  • 거래일 일자가 아니라 판단하여 False을 반환하거나
  • 거래일 데이터가 잘못 입력되었다 판단하여 False를 반환하거나

 

끝!

 

 


728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.