목 차
1. 들어가며
2. 필요성
3. 사전 준비 (리스트 요소의 내용 바꾸기)
1) 리스형 데이터의 요소를 가져오는 방법
2) 리스트 요소를 바꾸는 방법 (업데이트)
4. 활용 사례
1) aaa0 = eval("aaa" + str(0))는 동일하다.
2) for문과 eval 모듈의 사례
5. 전체코드 및 결과
6. 마치며
1. 들어가며
지난 글에서는 eval 모듈을 활용하여 문자형을 리스트형으로 전환해 보았다.
원래 eval 모듈은 2번의 글로 마무리 하려고 했으나,
리스트형으로 변환 후 활용에 대해 설명하지 않아, 추가 글을 쓰게 되었다.
for문과 eval모듈을 활용하면, 문자형에 순차적으로 붙일 수 있다.
(예시) pattern0, pattern1, pattern2, ...... , pattern10
이번 글에서는 문자형을 리스트형으로 전환 후의 활용 사례를 알아보자.
- 키움서버에서 가져오는 3종목의 패턴을 갱신하는 방법은?
(파이썬) for문 활용 (4) - eval 모듈을 활용하여 문자형(str)을 list형으로 타입 전환하기
목 차 1. 들어가며 2. 사전준비 3. eval 모듈 설명 1) eval 모듈 기능 2) eval 예시 ① 숫자 1과 문자형1을 비교 ② 리스트 zzz를 for문/if문을 통해 출력한 결과 ③ eval 모듈의 사용례 4. 활용처 1) 코드 사례
springcoming.tistory.com
2. 필요성
리스트형으로 전환 후를 설명하는 이유는
필자가 생각하고 있는 프로그램은
1분마다 1분봉을 키움서버에서 패턴을 받아와서,
수익나는 패턴과 비교하여 매수/매도를 하기 위해서이다.
즉, 위 코드가 실행되면 1분마다 "종목 패턴"을 가져온 후
그 패턴을 "사용자가 미리 설정한 패턴"과 비교하여,
"1분봉 패턴 = 미리 설정 패턴"이 일치하면 매수할 때 쓰인다.
여기서는 1분봉 패턴을 갱신하는 방법을 알아볼 것이다.
3. 사전 준비 (리스트 요소의 내용 바꾸기)
1) 리스형 데이터의 요소를 가져오는 방법
리스트형에서 요소를 뽑아올 때는 "리스트[0]"으로 입력하면 문자형 a가 출력된다.
aaa0 = ["a"]
print(aaa0[0])
# (expected result)
# a
2) 리스트 요소를 바꾸는 방법 (업데이트)
아래 코드의 5번줄에서 확인하였듯이,
aaa0리스트의 1번째 요소를 바꾸는 방법은 aaa0[0] = pattern 이다.
리스트의 몇번째 자리를 무엇(pattern)으로 바꿀지에 대한 내용이다.
아래 코드의 aaa0의 1번째 요소는 z를 바뀌었다.
aaa0 = ["a"] → aaa0 = ["z"]
aaa0 = ["a"]
print(aaa0[0])
pattern = "z"
aaa0[0] = pattern
print(aaa0[0])
# (expected result)
# a
# z
4. 활용 사례
1) aaa0 = eval("aaa" + str(0))는 동일하다.
이 글에서는 eval모듈을 통해 "종목의 1분봉 패턴 = 사용자 설정한 패턴"을 비교하려고 한다.
- 결론부터 이야기 하면, 리스트 aaa0는 eval("aaa" + str(0))과 같다는 것이다.
eval("aaa" + str(0))이 필요한 이유는 for문을 돌리기 위해서이다.
0 자리에 변수 j를 넣어주면, aaa 뒤에 계속 반복해서 숫자가 붙는다.
aaa0 = ["a"]
if aaa0 == eval("aaa" + str(0)):
print("동일합니다.")
# (expected result)
# 동일합니다.
2) for문과 eval 모듈의 사례
1줄~3줄 : aaa0의 요소는 a, aaa1의 요소는 b, aaa2의 요소는 3(숫자)이다.
5줄~7줄 : 키움서버에서 받아오는 3종목의 패턴이 patter0, patter1, patter2 이라고 가정하자.
→ 위 3개의 리스트 요소를 각각 d, e, 7로 변경해보자
9줄 : for문을 통해 3번 돌릴 예정이다.
range(0,3) → 0, 1, 2 순차적으로 for문에 들어감
10줄 : 이글의 핵심이다.
위 3-2(사전준비)에서도 확인하였듯이, 리스트형의 요소(내용)를 바꾸는 방법은
aaa0[0] → 리스트 aaa0의 첫요소를,
pattern0의 내용으로 바꾸어라는 내용이다.
→ a = b : b를 a에 넣어라는 개념을 참고하자.
13줄~15줄 : 각 리스트의 변경된 내용 출력
17줄 : aaa2[0]의 요소가 숫자 7로 변경되었고,
19줄 : 숫자 7 x 4는 28이다.
→ 리스트 내 정수도 바뀌는 것을 보여준다.
5. 전체코드 및 결과
aaa0 = ["a"] # → d
aaa1 = ["b"] # → e
aaa2 = [3] # → 7
pattern0 = "d"
pattern1 = "e"
pattern2 = 7
for j in range(0,3):
eval("aaa" + str(j))[0] = eval("pattern" + str(j))
# print(eval("aaa" + str(j))[0])
print(f"aaa0의 요소는 당초 a에서 {aaa0[0]}로 바뀌었다.")
print(f"aaa1의 요소는 당초 b에서 {aaa1[0]}로 바뀌었다.")
print(f"aaa2의 요소는 당초 3에서 {aaa2[0]}로 바뀌었다." + "\n")
h = aaa2[0] * 4
print(h)
print(f"h의 결과는 {h}이다.")
# (epected result)
# aaa0의 요소는 당초 a에서 d로 바뀌었다.
# aaa1의 요소는 당초 b에서 e로 바뀌었다.
# aaa2의 요소는 당초 3에서 7로 바뀌었다.
# 28
# h의 결과는 28이다.
6. 마치며
총 3편의 eval 모듈에 대한 설명을 했다.
eval 모듈에 대한 설명은 이 글에서 마무리 지으려고 한다.
리스트 뒤의 숫자를 순차적으로 증가시키고 싶었는데,
eval 모듈을 알게 되어, 코드 분량을 상당히 줄일 수 있었다.
위의 5번(전체코드)가 쓰이는 곳은,
향후 설명하겠지만, 키움에서 받아오는 종목의 1분봉 패턴을 꾸준히 업데이트 한다.
그러고 나서, 1분봉 패턴 = 사용자 설정 1분봉 패턴에 해당하면,
매수 후 수익 타점이 오면 수익을 내고,
손실 타점에 도달하면 손절하려는데 쓰일 예정이다.
'1. 국내주식 > 1-1. 국내주식 연구일지' 카테고리의 다른 글
(주식 자동 매매) 키움증권 주식 호가창 및 주식주문 체결순서 설명 (0) | 2022.11.17 |
---|---|
(엑셀) ROW, MAX, INDEX, MATCH 함수를 이용하여 동적데이터의 표 마지막값 찾기 (0) | 2022.11.06 |
(엑셀) INDEX 함수, MATCH 함수, COUNTIF함수를 이용하여 중복데이터 제거하기 (0) | 2022.11.05 |
(엑셀) INDEX 함수 및 MATCH 함수를 이용하여 데이터 찾기 (0) | 2022.11.04 |
(파이썬) threading와 time 모듈로 특정 시간마다 반복 실행 (2) 클래스 내에서 실행하고 일정시간 경과 후 종료하기 (0) | 2022.10.24 |
(파이썬) for문 활용 (4) eval 모듈을 활용하여 문자형(str)을 list형으로 타입 전환하기 (0) | 2022.10.22 |
(파이썬) for문 활용 (3) - 단어 뒤에 숫자 붙여서 출력하기 (0) | 2022.10.21 |
(엑셀) 주식 자동 매매를 위한 알고리즘 패턴 찾기 (4) 패턴별 승률을 엑셀로 계산해보기 (카카오 035720) (0) | 2022.10.20 |