지난 게시글에서 우리는 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
이제 이 함수는 인자로 전달받은 두 개의 일자 데이터를 기반으로 하여 다음과 같은 세 가지 로직을 거치게 된다.