목 차
1. 들어가며
2. 사전설명
1) eval 모듈 설명
2) zip 함수
3) eval 모듈, zip, for문 조합
3. 코드 설명
4. 전체 코드
5. 마치며
1. 들어가며
지난 글에서는 1종목의 패턴을 받아오는 방법을 알아보았다.
이번 글에서는 4종목의 패턴을 받아와서 비교 후 진입하는 방법을 알아보자.
2. 들어가며
국내주식에 적용한 eval과 중복되는 내용이 많아, 여기서는 간략하게 설명하고 자세한 내용은 링크를 참고하자.
- eval 모듈 설명 링크
- zip 함수 설명 링크
1) eval 모듈 설명
- 모듈 개념 : 파이썬 내장모듈이며, 문자형(str)을 리스트(list)형으로 태 변환시켜주는 모듈
- 사용 방법 : eval(문자형)으로 사용하며, print(type(eval(문자형)))으로 찍어보면, list형으로 나온다.
- 활용 사례 : for문, zip 함수, eval 모듈이 함께 쓰이면, 각각 패턴-익절-손절을 매칭하여 활용
2) zip 함수
- 함수 개념 : 파이썬 내장함수이며, 각 자료형의 요소를 매칭으로 추출하여 리스트화 하는 함수
- 사용 방법 : for문과 함께 쓰이고, 리스트가 3개 있으면, 첫요소리, 두번째 요소끼리 매칭되어 추출
3) eval 모듈, zip, for문 조합
문자형을 리스트형으로 굳이 바꾸어 주어야 하는 것일까?
필자는 eval 모듈, zip함수를 활용하여 파이참에서 반복되는 200줄 이상을 삭제하였다.
활용형태는 아래와 같다.
- for i, j, k in zip(eval(i 모음), eval(j 모음), eval(k 모음)) :
- for문이 돌아가면서 i모음, j모음, k모음을 각각 짝을 이루어 추출한다.
아래 코드와 같이, short 패턴을 만든 후, 익절/손절 값을 찾는다.
예를 들어보자.
숏 패턴 = [패턴1, 패턴2, 패턴3, ...]
숏 익절값 = [익절1, 익절2, 익절3, ...]
숏 손절값 = [손절1, 손절2, 손절3, ...]
위의 3가지 리스트형은 for / eval모듈 / zip함수로 돌리면,
패턴1-익절1-손절1
패턴2-익절2-손절2
패턴3-익절3-손절3
위와 같이 패턴별로 익절값과 손절값을 설정할 수 있는 장점이 있다.
if self.interesting_codes[j]:
for check_pattern_my_setting_short, check_profit_short, check_loss_short in zip(eval("pattern_my_setting_short" + str(j)), eval("profit_short" + str(j)), eval("loss_short" + str(j))):
self.check_pattern_my_setting_short = check_pattern_my_setting_short
self.check_profit_short = float(check_profit_short)
self.check_loss_short = float(check_loss_short)
3. 코드 설명
아래와 같이 간단한 내용으로 설명해보자
patterns = ["aaa", "bbb", "ccc", "ddd"]
profits = ["100", "200", "300", "400"]
loses = ["-100", "-200", "-300", "-400"]
for i, j, k in zip(patterns, profits, loses):
print(i + " " + j + " " + k)
1줄~3줄 : 패턴/익절/손절을 임의로 설정하였다.
5줄 : for문과 zip을 통해 for문을 선언하였다.
6줄 : print문을 이용해 코드를 출력해본다.
여기서 잠깐~!
위쪽의 코드 중 eval("pattern_my_setting_short" + str(j)) 는 무엇을 뜻할까?
나중에 설명하겠지만, 4종목에 대해 각각의 패턴이 분명 존재할 것이다.4종목별로 각각 long / short을 for문을 통해 일치하는 패턴을 찾으려면?각각 마련한다고 가정하면 8가지의 경우의 수가 발생한다.1번째 종목 long/short, ... / 4번째 종목 long/short
이런 중복코드를 줄여주는 것이 eval 모듈이다.pattern_my_setting_short(문자형)는 필자가 정의한 변수가 있는데,종목에 따라 str(변수 j)를 바꾸어주면, 어떻게 될까?종목별로 바꾸어서 "필자가 세팅한 패턴"을 변경하여 적용하고 싶은데 말이다.
이때, 활약을 하는 것이 eval 함수이다.
문자 + 문자 → 문자형이 된는데, eval(문자형 + 문자형)의 태형은 list가 된다.
eval모듈을 이용하여 list 태형으로 바꾸고, zip 함수를 통해 매칭해서 추출하는 것이다.
※ eval 모듈에 대한 자세한 설명은 링크를 참고하자.
* eval 모듈 링크 새창에서 열기
4. 전체 코드
patterns = ["aaa", "bbb", "ccc", "ddd"]
profits = ["100", "200", "300", "400"]
loses = ["-100", "-200", "-300", "-400"]
for i, j, k in zip(patterns, profits, loses):
print(i + " " + j + " " + k)
# (expected result)
# aaa 100 -100
# bbb 200 -200
# ccc 300 -300
# ddd 400 -400
5. 마치며
국내주식에서 설명한 내용이 대부분이어서 중복된 설명이 많았던거 같다.
그래도 처음 접하는 분들이 있을 수 있으니, 최대한 간략하게 설명하였다.
1분봉 패턴 만들기에 대한 설명은 거의 끝난 것 같다.
다음 시간에는 1분봉 패턴 만들 때 참고사항을 알아보자
'2. 해외선물 > 2-4. 해외선물 API (사용)' 카테고리의 다른 글
(키움증권 해외선물 OpenAPI-W) 미체결내역 조회 (opw30002) (0) | 2023.01.25 |
---|---|
(키움증권 해외선물 OpenAPI-W) 주문가능수량 조회 (opw30011, 주문가능수량요청) (0) | 2023.01.23 |
(키움증권 해외선물 OpenAPI-W) 주문가능금액 조회 (opw30009, 예수금및증거금현황조회) (2) | 2023.01.22 |
(키움증권 해외선물 OpenAPI-W) 패턴 만들기 (8) 참고사항 (5) | 2023.01.21 |
(키움증권 해외선물 OpenAPI-W) 패턴 만들기 (6) 패턴 만들기(엑셀) (0) | 2023.01.19 |
(키움증권 해외선물 OpenAPI-W) 패턴 만들기 (5) 패턴 만들기(파이썬) (0) | 2023.01.18 |
(키움증권 해외선물 OpenAPI-W) 패턴 만들기 (4) 패턴 개념 이해하기 (0) | 2023.01.17 |
(키움증권 해외선물 OpenAPI-W) 패턴 만들기 (3) 패턴 만들기 필요성 (0) | 2023.01.16 |