1. 국내주식/1-1. 국내주식 연구일지

(파이썬) for문 활용 (2) - zip()함수

봄이오네 2022. 9. 19. 08:05
반응형

1. 들어가며

  • 앞에서는 for문의 기본 구조를 설명하였다.
  • 이번에는 for문과 zip함수를 활용하여, 향후 사용할 종목코드, 수익/손실을 비교할 수 있는 코드를 구현한다.

     * for문 기본구조 설명 : https://springcoming.tistory.com/12

 

(주식 자동매매) for문 활용 (1) - 기본 설명

1. 들어가며 for문은 반복적인 작업을 간략하고 효율적으로 실행할 수 있는 코드이다. 이 글에서는 키움증권 OpenAPI를 통해 파이썬 코드 작성할 때 사용되는 for문에 대해 알아본다. 2. for문 설명  1

springcoming.tistory.com


2. zip 함수 설명

  ㅇ 개념 : 순회 가능한 객체를 인자로 받고, 각 자료형의 각각의 요소를 나눈 후 리스트로 반환하는 함수

                 한마디로, 리스트로 반환한다고 보면 될 것 같다.

    * list가 2개 이상일 때, for문과 zip 함수를 함께 쓴다

        → 이때 zip함수는 리스트의 항목에서 순차적으로 축출한다

 ※ (예시) 각 국가-수도-국민으로 연결된 경우, for문과 연결한 경우
    
ㅇ 주어진 자료
        1) 한국 - 서울 - 한국인
        2) 일본 - 도쿄 - 일본인
        3) 중국 - 베이징 - 중국인
        4) 미국 - 워싱턴 - 미국인

    ㅇ 아래와 같이 리스트로 나타낼 수 있다.
       country_names =  ["한국", "일본", "중국", "미국"]
       country_capitals = ["서울", "도쿄", "베이징", "워싱턴"]
       country_peoples = ["한국인", "일본인", "중국인", "미국인"]
country_names = ["한국", "일본", "중국", "미국"]
country_capitals = ["서울", "도쿄", "베이징", "워싱턴"]
country_peoples = ["한국인", "일본인", "중국인", "미국인"]

for name, capital, peolpe in zip(country_names, country_capitals, country_peoples):
    print("{}의 수도인 {}에는 {}이 살고 있다.".format(name, capital, peolpe))
  
(expected rusult)
# 한국의 수도인 서울에는 한국인이 살고 있다.
# 일본의 수도인 도쿄에는 일본인이 살고 있다.
# 중국의 수도인 베이징에는 중국인이 살고 있다.
# 미국의 수도인 워싱턴에는 미국인이 살고 있다.

3. zip함수의 기본 적용

이름, 나이, 키 등이 들어있는 리스트의 모음을 zip을 활용하여 출력한다.

names = ["a", "b", "c", "d"]
ages = [11,22,33]
talls = [150,160,170]

def f():
    for name, age, tall in zip(names, ages, talls):
        result1 = name + "-" + str(age) + "-" + str(tall)
        print(result1)

f()


(expected result)
a-11-150
b-22-160
c-33-170

4. zip 함수 활용

zip 함수는 향후 주식패턴 파악을 통해 매수/매도 시점을 파악할 수 있다.

이는 주식 자동매매의 알고리즘 개발을 위한 초기단계에서 역할을 할 수 있다는 것이다.

 

예를 들어, 어떤 종목의 특정 패턴(aaa 혹은 bbb)에서 매수를 하려고 한다면,

파이썬의 자동매매 프로그램이 특정패턴에서 매수(진입)을 하고,

익절가격 혹은 손절가격을 설정할 수 있다.

import pandas as pd

patterns = ["aaa", "bbb", "ccc", "ddd"]
profits = [111,222,333, 444]
losses = [50,60,70, 80]

def f():
    stocks_pl = {'patterns': [], 'profits': [], 'losses': [],}

    for pattern, profit, loss in zip(patterns, profits, losses):
        stocks_pl['patterns'].append(pattern)
        stocks_pl['profits'].append(profit)
        stocks_pl['losses'].append(loss)

    df_stocks_pl = pd.DataFrame(stocks_pl, columns=['patterns', 'profits', 'losses'])
    print(df_stocks_pl)

f()


(expected result)
 patterns  profits  losses
0      aaa      111      50
1      bbb      222      60
2      ccc      333      70
3      ddd      444      80

5. 마무리

zip함수는 리스트를 묶어서 for문을 돌려주는 장점이 있다.

향후 패턴찾은 후 매수/매도, 특정 종목의 1분봉 받기 등에 쓰일 수 있을거 같다.

반응형