2. 해외선물/2-4. 해외선물 API (사용)

(키움증권 해외선물 OpenAPI-W) 현재시간 표현 및 시간에 따라 다른 패턴 적용 등 시간 다루기 (datetime 모듈)

봄이오네 2023. 2. 10. 11:56
반응형
목 차
1. 들어가며
2. 사전설명
1) datetime 모듈 설명
2) 현재시간 나타내기
3) 24시간 표현 및 if문 적용
3. 코드설명 및 전체코드
4. 마치며

 

1. 들어가며

주식이든 해외선물이든 투자를 할 때 가장 중요한 것은 수익(profit)일 것이다. "돈 앞에 장사없다"는 말이 있듯 수익 앞에 모든 투자자는 고개를 숙일 수 밖에 없을 것이다. 그래서 투자자는 항상 "수익을 낼 수 있는 전략"을 연구하고 고민하면서 차트를 보고 있을 것이다.

두번째 중요한 것은 무엇일까???
사람마다 차이는 있겠지만, 필자는 시간(time)이라고 생각한다. 몇 시간 혹은 며칠이 걸리더라도 수익이 난다면 상관없겠지만, 급변하는 시장에서 "수익에 대한 굳은 믿음(truth)"이 손실이라는 결과로 귀결되었을때의 절망감은 이루 말할 수 없으리라...

그래서 대부분의 투자자는 목표수익이 있을 지언정, 수익에 대해 "어느 정도 타협(?)"은 할 것이다. 스스로가 만족할 만한 수익을 결정하는 기준은 무엇일까? 수익낼수 있는 더 좋은 종목이 보였을 때, 그리고 시간일 것이다.

수익낼 수 있다고 생각되는 더 좋은 종목에 대한 투자는 "수익"이 나면 상관없겠지만, 갑자기 움직임이 적어진다든가, 진입(매수)을 해서 청산(매도)를 하기 전까지의 그 지루한 과정에서 투자자는 지치기 마련이다. "더 좋은 종목"에 대한 달콤한 유혹에서 왠만한 투자자는 마음이 동할 것이다.

장기투자부터 단기투자(단타, 스켈핑, 스윙)까지 본인의 성향에 맞는 투자스타일에 따라 투자시간을 정했을 것이다. 몇시간 혹은 몇분(시간)만에 수익을 냈다는 것은 단기투자자 입장에서 환영할 만한 일이다. 다만, 차트의 움직임이 생각만큼 나오지 않아 계속 모니터나 핸드폰 화면만을 봐야하는 그 답답한 상황은 투자자를 지치게 만들고, 이때 마침 "수익낼 수 있다고 생각되는 더 좋은 종목"이 나오면... 결국 청산을 하게 되어있다.

원론으로 다시 돌아와보자. 시간, 아무리 강조해도 지나치지 않는 그 개념... 시간을 제대로 관리할 수 있다면 성공적인 투자가 될 것으로 보인다.

나스닥 등 해외선물 투자할 때 느끼는 것 중 하나는 낮(day)에는 비교적 횡보장인 반면, 밤(night)에는 미국장이 개장해서인지 움직임(moving)이 상당히 심하고, 방향을 잡으면 한방향(one-way)으로 추세를 만드는 걸 종종 목격한다.

방향을 잡았을 때, 일상적인 패턴(rsi 70이상은 short, rsi 30이하는 long)의 투자는 모의계좌의 누적된 손실을 확인하고나서 통하지 않는다는 걸, 최근 1주일 간 확인하였다. 물론 필자가 목격한 1주일만 한방향(one-way)일 수 있다는 생각이 들어 계속 모니터링을 하고 있지만, 일단 낮에는 횡보장, 밤에는 변동장으로 가정하고 시스템을 만들고 있다.

해야할 일은 무엇일까? 파이썬에서 if문을 통해 시간을 구분(datetime)할 수 있어야 하고, true / false일 때 적용할 패턴만 각각 작성해주면 될 것 같다.

이 글에서는 파이썬 내장모듈인 datetime를 이용하여 시간(분/초)을 받아온 후 if문을 통해 각각 다른 패턴이 적용(print문)되는 것을 확인해보자.

 


2. 사전설명

1) datetime 모듈 설명

  • 모듈 개념 : 파이썬 내장모듈이며 연도-날짜-시간 및 현재시간 등을 표현할 때 사용된다.
  • 모듈 호출 : 기본형태는 import datetime이며, import datetime as dt 및 from datetime import datetime 쓰인다.
  • 주의 사항 : datetime 모듈은 불러오는(import) 클래스가 datetime이므로 모듈 > 클래스를 불어올 때 주의한다. datetime.datetime로 불러오는 것보다는 dt.datetime 형태로 불러오는 게 마음이 편하다.

 

2) 현재시간 나타내기

아래 코드에서 확인하였듯이, 현재시간을 나타내는 방법은 datetime.now()함수로 나타낸다.
3줄 : now_time1을 datetime.now()로 표현하여 13줄~14줄에서 태형(type)은 datetime.time이며 현재시간은 마이크로초(sec)까지 표기되었다.

7줄 : now_time2을 datetime.now()로 표현하였고, 뒤에 strftime(~~~)을 붙였다. 핵심은 strftime에 있다. str + ftime로 생각하면 편할 것이다. datetime 태형은 문자형(str)으로 변경해준다고 생각하면 된다.

이 글에서는 문자형(str)으로 현재시간을 표현하는 7줄의 now_time2를 활용할 것이다.

더보기
from datetime import datetime

now_time1 = datetime.now()
print(type(now_time1))
print(now_time1)

now_time2 = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(type(now_time2))
print(now_time2)


# (expected result)

# <class 'datetime.datetime'>
# 2023-02-10 11:00:57.911747

# <class 'str'>
# 2023-02-10 11:00:57

 

3) 24시간 표현 및 if문 적용

현재시간이 11:17분일 때 파이썬에 적용하는 방법은 1117로 표현할 수 있다.
너무 당연한 이야기이다.

그렇다면 09:08분은 어떻게 나타낼 것인가? 908일 것이다. 그런데 과연 908로 표현이 될까?
필자가 1차 실험해본 바로는 908이 아닌, 98로 출력이 되었다.

  • 시간 : datetime.now().hour 으로 표현할 경우 9가 출력
  • 분 : datetime.now().minute 으로 표현할 경우 8이 출력

상당히 주의해야 할 것으로 보인다.

필자는 0400~2130까지는 횡보장의 패턴1을 적용할 예정이고, 2130~0400까지는 변동장의 패턴2를 적용할 것이기 때문이다. (시간을 어떻게 적용할지는 고민이다.)

흠... 400~2130까지는 적용은 if문을 통해 적용할 수 있겠는데, 2130~400은 if 문으로 어떻게 나타낼까...
if 와 else로 나타내면 될 것 같다.

if 400 <= now_time <= 2130:
    print("패턴1 적용")
    
else:
    print("패턴2 적용")

 


3. 코드설명 및 전체코드

전체코드는 아래와 같다.

from datetime import datetime

now_time1 = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

now_time1 = now_time1[11:16]

now_time2_m = now_time1[0:2]
now_time3_s = now_time1[3:5]

now_time3 = now_time2_m + now_time3_s
now_time4 = int(now_time3)

print(type(now_time2_m))
print(now_time2_m)

print(type(now_time3_s))
print(now_time3_s)

print(type(now_time3))
print(now_time3)

print(type(now_time4))
print(now_time4)

if 400 <= now_time4 <= 2130:
    print("패턴1 적용")
else:
    print("패턴2 적용")


# (expected result)
# <class 'str'>
# 11
# <class 'str'>
# 38
# <class 'str'>
# 1138
# <class 'int'>
# 1138
# 패턴1 적용


얼핏 길어보이지만, 13줄~23줄이 print문인 것을 감안하면 15줄 내외의 코드이니 부담없이 쭈욱 확인해보자.

1줄 : 현재시간을 구하기 위해 datetime 모듈을 임포트한다.
3줄 : 문자형으로 현재시간을 받아온다.

5줄 : 문자형에서 "시간 : 분"을 가져온다.
7줄 : 5줄의 "시간 : 분"에서 시간([0:2])을 가져온다. (7줄의 태형은 13줄에서 문자형인 것을 확인할 수 있다)
8줄 : 5줄의 "시간 : 분"에서 분([3:5])을 가져온다. (8줄의 태형은 14줄에서 문자형인 것을 확인할 수 있다)

10줄 : 이 글의 핵심이다. "문자형 + 문자형"은 각각의 문자형을 붙인 결과이다. 위에서 말한 09:08분에서 문자형인 08분 앞에 int를 바로 붙이면 8만 반환되므로, "문자형 + 문자형"을 붙여 문자형으로 만들다.

11줄 : if 문 적용(25줄~28줄)을 위해, 숫자형(int)으로 변환한다.

25줄~26줄 : 현재시간(11줄)이 새벽 4시(400) ~ 저녁 21:30(2130) 안에 있으면 패턴1 적용
27줄~28줄 : 400~2130이 아니면, 패턴2 적용

 


4. 마치며

시간에 따라 다른 패턴을 적용하는 방법을 알아보았다.
위 방법을 잘 활용하면, 국내주식 장마감(1530) 전에 파이썬을 종료(sys.exit)할 수 있는 등 여러가지로 유용할 것 같다.

주식/선물은 시간과의 싸움이라고 생각한다. 초조할 필요없다. 다만, 진입하고 나서 고민할 것이 아니라, 충분한 고민과 머릿속 시뮬레이션(대응)을 통해 진입할 수 있도록 노력할 것이다.

패턴에 맞는 시간을 정할 때 신중할 필요가 있어보인다. 2130~0400을 정한 것도 지극히 주관적이다. 좀 더 모니터링을 해보고, 적용 패턴도 점검해 보도록 하자.

반응형