스터디 포스트 >  파이썬으로 나만의 투자 전략 세우기

판다스를 사용한 시계열 데이터 및 금융분석 & 금융 도메인 지식

박철종 멘토
퀀트 개발자가 되기 위해 노력하는 박철종입니다.

파이썬으로 나만의 투자 전략 세우기 - 1주차

 
💡
판다스를 활용하여 금융 데이터 만지기 & 트레이딩 기초 지식
 

개념


  • Pandas
    • python을 활용해 데이터 분석을 하기 위해 사용하는 필수 패키지 Python에서 사용할 수 있는 형태의 DataFrame을 제공
  • Pandas DataFrame
    • 데이터를 표 형태로 처리하는 자료구조
    • list, dictionary, series, ndarrayemd 타입으로 사용가능

공통 사용메소드


Pandas Library

read_csv(): csv 파일을 읽어 데이터 프레임 만들기
  • stocks.csv
    • notion image
import pandas as pd
stocks = pd.read_csv("stocks.csv", header = [0, 1], index_col = [0], parse_dates = [0])
  1. header = [0, 1] 을 통해 상위 2개의 row를 header(= column index)로 지정
  1. index_col = [0] 을 통해 첫 번째 column을 index로 지정
  1. parse_dates = [0] 을 통해 첫 번째 column을 datetime Type으로 변경
  • 결과
    • notion image
데이터 프레임 다루기
stocks.head() # 데이터프레임의 처음 5개의 row 출력
stocks.tail() # 데이터프레임의 마지막 5개의 row 출력
stocks.info() # 데이터프레임의 정보 출력, -> 데이터프레임을 구성하는 행과 열의 크기, 컬럼명, 컬럼을 구성하는 값의 자료형 등을
stocks.to_csv("stocks.csv") # 해당 데이터 프레임으로 csv 파일 저장
stocks.columns = stocks.columns.to_flat_index() # 2개이상의 header(column index)가 있을때 1개의 header로 합치기
stocks.columns = pd.MultiIndex.from_tuples(stocks.columns) # 합쳐진 index 되돌리기
stocks.loc["2013-01-01 01:00:00"] # 2013-01-01 01:00:00 값의 row index로 값 뽑아내기
stocks.iloc[0,1] # 0,1 에 있는 값 꺼내기
stocks.describe() # 각 row의 전체개수, 표준편차, 최소값, 최대값 등등 구하기
stocks.pct_change() # 각 col에 대해 row+1 값을 row 값으로 나누고 -1을 한 (=((row+1)/row)-1), 맨 첫 row는 값이 없다는 'Nan'으로 표시
stocks.dropna() # dropna() 를 통해 Nan 값 삭제 

목표1. 일별 평균 수익과 표준 편차

주식데이터를 받아 각 주식의 일별 평균 수익(Return)을 계산하고 그에 대한 표준 편차(Risk)를 구한다. → 금융 분야에선 리스크와 수익의 지표로 평균 수익과 수익의 표준편차를 사용한다.
notion image
⇒ 우측으로 갈수록 High Risk (고 위험), 위로 갈수록 High Return (고 수익)

순서

  1. stock.csv에서 값 가져오기
    1. stocks = pd.read_csv("stocks.csv", header = [0,1], index_col= [0], parse_dates= [0])
  1. stocks에서 종가를 의미하는 Close 값만 가져오기
    1. close = stocks.loc[:, "Close"].copy()
  1. close에서 모든 주식의 일별 수익을 계산
    1. ret = close.pct_change().dropna()
      • 중간 확인
        • notion image
  1. ret 값에서 일별 평균 수익과 표준편차 구하기
    1. # cf. ret.describe() # describe() 를 통해 전체개수, 표준편차, 최소수익, 최대수익 등등 구하기
      ret.describe().T.loc[:, ["mean", "std"]] # T(transpose) 속성을 통해 요약 통계를 하고 열에는 평균과 표준편차만 남긴다.
      notion image
  1. 차트로 그리기
    1. summary = ret.describe().T.loc[:, ["mean", "std"]]
      summary["mean"] = summary["mean"]*252 # 일별 수익을 연별 수익으로, 주식 거래일은 통상 252일
      summary["std"] = summary["std"] * np.sqrt(252) # 일별 표준편차를 연별 표준편차로
      summary.plot(kind = "scatter", x = "std", y = "mean", figsize = (15,12), s = 50, fontsize = 15)
      for i in summary.index:
          plt.annotate(i, xy=(summary.loc[i, "std"]+0.002, summary.loc[i, "mean"]+0.002), size = 15)
      plt.xlabel("ann. Risk(std)", fontsize = 15) # 표준편차를 Risk로 표현
      plt.ylabel("ann. Return", fontsize = 15) # 수익을 Return으로 표현
      plt.title("Risk/Return", fontsize = 20)
      plt.show()

목표2. 공분산과 상관관계

어떠한 주식이 상승 또는 하락할때 다른 주식들이 상승 or 하락하는지를 비교하는 기법
notion image
  • ret.cov() , 여기서 ret은 목표 1에서 ret
    • 공분산
  • ret.corr()
    • 상관관계로 -1 부터 1의 값을 갖는다. 해당 데이터가 공분산 보다 더 중요, 1=두 주식이 완벽히 같이 움직인다는 의미
  1. 목표1에서 했던 값을 활용하여 상관 관계를 표로 출력
    1. import seaborn as sns
      plt.figure(figsize=(12,8))
      sns.set(font_scale=1.4)
      sns.heatmap(ret.corr(), cmap = "Reds", annot = True, annot_kws={"size":15}, vmax = 0.6)
      plt.show()

심화 지식

 

기술적 분석과 트레이딩

 

기본적 분석 VS 기술적 분석

  • 기본적 분석 : 회사의 내재가치를 재무제표를 통해 확인해서 하는 방식
  • 기술적 분석 : 주가, 거래량, 보조지표 등으로 패턴을 찾아서 하는 방식
 

투자 VS 트레이딩

  • 투자 : 기업을 산다 (회사의 내재 가치, 현재 트렌드, 경영진 등 고려)
  • 트레이딩 : 가격을 산다 (신발 리셀러와 같은 느낌)
 

카지노에서 트레이딩 원칙

  • 확률적 우위
  • 최대한 많은 거래
  • 리스크 관리
 

로그 수익률

 

단순 수익률

notion image
 

로그 수익률

notion image
 

금융권에서 로그 수익률을 쓰는 이유

  • 단순 수익률은 수익률 합계와 최종 수익률이 다르지만, 로그 수익률에서는 둘이 같기 때문이다.
  • 단순 수익률은 상승 퍼센트와 하락 퍼센트가 다르게 나오지만, 로그 수익률에서는 같게 나와 직관적으로 보기 편하기 때문이다.
 

장기 이동평균선과 단기 이동평균선의 관계

 

이동평균선 : 평균 + 이동

  • 평균의 관점
notion image
  • 이동의 관점
notion image
 

장기 이동평균선 VS 장기 이동평균선

notion image
 
PPT 파일
 
 
 

 
 
본 스터디는 Udemy의 <【한글자막】 알고리즘 거래와 투자의 기술적 분석 with Python> 강의를 활용해 진행됐습니다. 강의에 대한 자세한 정보는 아래에서 확인하실 수 있습니다.
 
 
프밍 스터디는 Udemy Korea와 함께 합니다.
 
 

 
원하는 스터디가 없다면? 다른 스터디 개설 신청하기
누군가 아직 원하는 스터디를 개설하지 않았나요? 여러분이 직접 개설 신청 해 주세요!
이 포스트는
"파이썬으로 나만의 투자 전략 세우기" 스터디의 진행 결과입니다
진행중인 스터디
파이썬으로 나만의 투자 전략 세우기
파이썬을 활용해 주식 투자 전략을 짜보고 과거의 데이터로 검증을 해보는 스터디입니다.
박철종 멘토
퀀트 개발자가 되기 위해 노력하는 박철종입니다.