전체 글 159

29. 이평선 투자 전략 : 정배열 또는 역배열에 매수하는 경우

이평선을 이용한 투자전략 : 정배열 또는 역배열에 매수하는 경우 이평선 데이터들을 데이터프레임으로 합치기 # 이평선 데이터들을 데이터프레임으로 합치기 allsma_df = pd.DataFrame({f'adj_close_sma{win}d': d[f'adj_close_sma{win}d'].stack(dropna=False) for win in sma_winli}) # 맨 앞 열에 수정주가 데이터 추가 allsma_df.insert(0, 'adj_close', d['adj_close'].stack(dropna=False)) for문으로 딕셔너리 생성해서 데이터프레임으로 만든다. 정배열, 역배열 조건 쿼리 만들기 _cn_li = allsma_df.columns # 수정종가 ~ 120이평선 _qrli = list..

퀀트 2023.01.25

28. 이평선 투자 전략 : 이평선의 위 또는 아래에서 매수하는 경우

이평선을 이용한 투자 전략 : 이평선의 위 또는 아래에서 매수하는 경우 이평선 데이터 준비 # 실험할 이평선 N일 sma_winli = [5, 10, 20, 40, 60, 120] # 이평선 데이터 for win in sma_winli: d[f'adj_close_sma{win}d'] = adj_close.rolling(win, axis=1, min_periods=win//2).mean() min_period=win//2 : 필요한 최소 데이터 갯수 기간 수익률 데이터 준비 # 기간 수익률 데이터 for hold_day in [1,2,3,5,10,20,40,60,120]: d[f'close_return_{hold_day}d'] = d['adj_close'].pct_change(periods=hold_day..

퀀트 2023.01.20

27. 모든 주식에 대해 보유 기간별 수익률 검증하기

모든 주식에 대해 보유 기간별 수익률 검증하기 : 손절매가 필수적인 통계적 근거 데이터 준비 d = {} # For문 이용하여 읽기- 주가, 시가총액, 매출액, 영업익, 순이익, 부채, 유동자산, 자본 for data_name in ['adj_close', 'mc', 'sales_ttm', 'op_ttm', 'ni_ttm', 'liab', 'asset_cur', 'eq']: print(f"read csv {data_name} ...") d[data_name] = pd.read_csv(f"./stock.{data_name}.csv", index_col=0, encoding='cp949', parse_dates=True) print(f"done! {d[data_name].shape}") # 자주 쓰는 데이터..

퀀트 2023.01.19

26. 해리 마코위츠의 포트폴리오 이론(분산투자의 필요성)

분산 투자의 필요성 - 해리 마코위츠의 포트폴리오 이론 자산을 분산투자하여 포트폴리오를 만들게 되면 분산투자 전보다 위험을 감소시킬 수 있다는 이론이다. 포트폴리오 이론의 가정에 따르면 투자자들은 투자안의 의사결정과정에서 고려하는 수익과 위험은 각각 평균과 분산으로 표현할 수 있으며, 포트폴리오를 구성할 경우 자산 간의 상관계수가 1인 경우가 아니라면 분산이 감소함을 통해 이득을 얻을 수 있다고 본다. 효율적 투자선(Efficient Frontier) 표준편차(변동성)을 최소로 하면서 최대의 기대 수익률을 얻을 수 있도록 포트폴리오 비율을 구성하는 기준 평균-분산 최적화(Mean-Variance Optimization) 최적의 비중을 계산하기 위해서는 평균-분산 최적화를 수행해야한다. PyPortfoli..

퀀트 2023.01.16

25. 레이 달리오의 올웨더 전략

레이 달리오 - 올웨더 전략 전략의 기본 원리 경제는 장기적으로 우상향 할 것이라는 믿음하에 리스크를 최소화하면서 경제 성장분의 이익을 취하는 베타 전략. 모든 경제 상황과 위기를 고려해서 항상 수익을 낼 수 있게 자산군을 분배한다. 상황에 맞게 자산군의 비중을 조합하여 리스크를 동일하게 맞춘다. 올웨더 구성 비율 여러가지 이견이 있다. ofdollarsanddata : The Definitive Guide to the All Weather Portfolio - Of Dollars And Data 40% TLT (Long-Term U.S. Bonds) : 미국장기채권 30% SPY (S&P 500) : 미국 주식 15% IEI (Intermediate Term U.S. Bonds) : 미국중기채권 7.5..

퀀트 2023.01.15

24. 게리 안토나치의 듀얼 모멘텀 전략

게리 안토나치의 듀얼 모멘텀 전략 게리 안토나치가 제안한 절대 모멘텀과 상대 모멘텀을 결합한 투자 전략 전략의 기본 원리 상승장이 아닌 시점에는 현금을 보유함으로써 위험을 최소화하고(절대모멘텀), 상승장인 시점에서는 가장 큰 추세를 가진 자산군을 사용함으로써 최대의 수익을 취함(상대 모멘텀) 모멘텀 : 특정 자산에 대하여 상승하는 가격이 더욱 상승하거나, 하락하는 자산 가격이 더욱 하락하는 경향을 말하며 주가 추세의 가속도를 측정해 주가의 변동 상황을 이해하는 하나의 방법 절대 모멘텀 : 투자 자산의 과거 12개월과 비요하여 절대적 상승세를 평가 상대 모멘텀 : 투자 자산 가운데 상대적으로 강세를 보이는 곳에 투자 파라미터 어떤 자산군(종목)을 편입할 것인가? 절대 모멘텀의 기준은 무엇인가? (지난 6개..

퀀트 2023.01.14

23. 래리 윌리엄스의 변동성 돌파 전략

래리 윌리엄스 - 변동성 돌파 전략 Volatility Breakout Strategy 전략의 기본 원리 하루 동안의 단기 상승 추세에 탑승해서 이익을 실현한다. 시장 상황이 상승 추세인 상황에서, 현재 주가가 이미 오늘 시가에 어제 Range 보다 더 올라가고 있다면, 오늘 하루 상승을 예측함. Range = (어제 고가 - 어제 저가) 매수 : 현재가 > (오늘 시가 + Range * 0.5(=k)) k는 조절 가능 매도 : 다음 날 시가 코스닥 지수에 백테스팅 # 코스닥 지수(KQ11) 전체 (데이터 시작 ~ 현재) df = fdr.DataReader('KQ11') # 변동성 돌파 전략 시뮬레이션 def volatility_break_out_strategy(df, k): # 함수 내의 변수 df로 ..

퀀트 2023.01.13

22. 켈리 베팅

켈리 베팅 퀀트 분석을 통해서 나온 승률과 손익비를 켈리 공식에 적용하여 최적의 비중을 잡는 베팅 방법. (승률 50% 이상일때만) 백테스팅 결과를 켈리 공식에 적용해서 비중 구하기 stats = p = stats['Win Rate [%]']/100 q = 1 - p b = (1 + stats['Avg. Trade [%]'] / 100) f_optimal = (b * p - q) / b # 0.008509040722422218 백테스팅에 적용하기 # 골든 크로스 매수 - 데드 크로스 매도 class SmaCross(Strategy): def init(self): price = self.data.Close self.ma1 = self.I(SMA, price, 120) self.ma2 = self.I(SMA..

퀀트 2023.01.12

20. 투자 전략을 과거 시장에 실험해보기 : 백테스트

백테스팅 나의 투자 전략을 과거 데이터로 테스트 해보는 것. 백테스트시 체크할 사항 CAGR : 연 수익률 MDD : 최대 손실 Sharp Ratio : 변동성 대비 수익률 승률 : 청산 시점마다 이익으로 끝나는 비율 손익비(Avg. Trade) : 청산 시점마다 평균적으로 얻을 수 있는 수익 전략 개발시 고려사항 논리성 : 전략의 근본적인 논리가 있는가 (우연성X, 가정) 시장의 상황 : 상승장 or 하락장 or 횡보장 섹터별 분석 : 섹터별로 종목의 특성이 다름 종목의 특성 : 대형주, 중소형주, 테마주 등 ⇒ 모든 상황에서 통하는 전략을 만들기는 어렵기 때문에 ⇒ 특정 상황에서 통하는 전략을 탐색하여 대비한다. 백테스트 유의 사항 과적합(Overfitting) 과거 데이터에만 너무 최적화된 경우 미..

퀀트 2023.01.09