묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결평생 써먹는 데이터 기반 투자법 with 파이썬 퀀트 투자
리밸런싱에서 주기와 가중치 변경시 오류 현상
안녕하세요. 이전 맛집지도 프로젝트부터 이번 강의까지 재미있게 수강하고 있습니다. 다음 강좌도 재미있는 콘텐츠 내주시면 수강하려고 합니다.다름이 아니라, [2-5. 리밸런싱 기법]에서 강의에서는 weight를 1:1로 설정하고, Month 단위 리밸런싱만 다루는데요. 리밸런싱 주기를 quarter 또는 year로 하고 가중치를 달리 먹이면 오류가 발생합니다.closeDateSet의 날짜와 rebalancingDate의 날짜가 일치하지 않기 때문인 것 같은데요. 나름대로 열심히 손대봐도 답을 못찾아서 도움을 부탁드립니다. weight를 어떻게 집어 넣는지 다뤄주시면 좋을 것 같습니다. 감사합니다.# 데이터 로드 stockETF = getCloseData("SPY", "2002", "2022-6-17") # 주식 ETF bondETF = getCloseData("IEF", "2002", "2022-6-17") # 채권 ETF # kodex200 = 069500 # kodex10Bond = 152380 # S&P500 = SPY # 미국 7-10 국채 = IEF closeDataSet = pd.concat([stockETF, bondETF], axis=1) closeDataSet.columns = ['stockETF', 'bondETF'] closeDataSet.dropna(inplace=True) closeDataSet # 종목의 상장일을 기준으로 리밸런싱 날짜 선별 # rebalancingDate = getRebalancingDate(closeDataSet) rebalancingDate = getRebalancingDate(closeDataSet, "quarter") rebalancingDate # 리밸런싱 날짜에 맞춰서 가중치 설정 weightSet1 = pd.DataFrame({ 'stockETF': [0.7] * len(rebalancingDate), 'bondETF': [0.3] * len(rebalancingDate) }, index=rebalancingDate) # 모든 리밸런싱 날짜에 대한 가중치 지정 rebalPortfolioDayReturn, rebalPortfolioCumulativeReturn = getRebalancingPortfolioResult(closeDataSet, weightDf=weightSet1)
-
미해결퀀트 투자를 위한 주식 자동매매 봇 만들기 Part 1
파이참 가상환경 설정도 해주어야 되는지
궁금합니다.
-
미해결퀀트 투자를 위한 주식 자동매매 봇 만들기 Part 1
파이썬 예제 코드 실습 에러
예제 코드를 파이참을 실행해서 어느 프로그램 경로에다가 어떤식으로 연결해야 실행이 되는지 잘 모르겠습니다. 현재 예제 코드가 실행이 잘 안되서요
-
미해결금융데이터 분석을 위한 판다스 활용법
DataFrame 강의 중 About NaN 질문입니다.
안녕하세요, 수업 잘 듣고 있습니다. 감사합니다.강의 중 DataFrame 값 중 NaN인 값의 날짜를 추출하는 방법이 있었습니다. 이 부분이 잘 이해가 안가서 질문을 드립니다.df_samsung_close.isna() 를 하게 되면, 삼성전자의 종가값이 있는 날은 False, 없는 날은 True이고 인덱스가 날짜인 데이터프레임이 조회됩니다. 따라서, df_samsung_close.isna().values를 하면 True와 False로 이루어진 numpy array가 출력됩니다. 이때 선생님께서는 df_samsung_close[df_samsung_close.isna().values].index를 이용해서 답을 찾으셨는데,일단 데이터프레임[np array]가 의미하는 바를 모르겠습니다. 데이터프레임[np.array(true, false,...)] 했더니 true인 값만이 조회가 되는 syntax가 잘 이해가 가지 않아서요.설명해주실 수 있나요?
-
미해결모두를 위한 ChatGPT Part 3 - ChatGPT로 퀀트 투자 전략 만들기
FinanceDataReader 관련 문의드립니다
FinanceDataReader로 코스피, 코스닥 데이터를 불러오면 강의에서는 컬럼이 10개인데 제가 불러들이니까 컬럼 17개에 symbol, sector, industry가 안나오고 다른 카테고리들이 나오는데 FinanceDataReader가 업데이트가 되어서 그런건가요?
-
미해결평생 써먹는 데이터 기반 투자법 with 파이썬 퀀트 투자
리밸런싱 포트폴리오 구현 원리 질문있습니다.
안녕하세요.리밸런싱 포트폴리오 구현 원리에서 리밸런싱 일자(노란색) 비중을 리밸런싱 기간이 아닌 모든 행에 곱해주면 곱하는 날 모두 리밸런싱이 적용되는 것이 아닌가요? 리밸런싱 일자에만 비중을 곱해주고 나머지는 그대로 누적수익률을 구해야하는 것이 아닌지 이해가 잘 가지 않아서 질문드립니다.
-
미해결퀀트 투자를 위한 파이썬 트레이딩룸 만들기 - Part 2
df_etf.Xlsx 파일 최신 날짜로 업데이트
엑셀 파일 자료중에서 df_etf.Xlsx 파일 최신 날짜로 업데이트 하려면 어떻게 하나요?
-
미해결비트코인 알고리즘 트레이딩 봇 개발
바이낸스 오픈 API 깃허브 링크
안녕하세요! 강의 너무 잘 보고 있습니다.혹시 바이낸스 오픈 API를 제공하는 깃허브링크로 갔는데 삭제된 링크 인것 같습니다. https://github.com/Binance-docs/Binance_Futures_python다른 깃허브 페이지로 옮긴걸까요?
-
미해결파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part1
드랍박스 경로 다시 공유해주실수있나요?
3.1 EDA 소개강의 초반에 나오는 드랍박스 경로 막힌것 같은데다시 공유 가능한가요?
-
미해결퀀트 투자를 위한 파이썬 트레이딩룸 만들기 - Part 2
spyder에서 실행시 dash.html이 없다는 에러가 나옵니다.
pip install 로 dash module 설치하고, 스파이더로 실행을 해 보는데, 한번 실행 되더니 그 다음 부터는 되지가 않습니다. pip list 해 보면 dash 모듈이 설치되어 있는 것이 보입니다.어디가 에러일까요?
-
미해결퀀트 투자를 위한 파이썬 트레이딩룸 만들기 - Part 2
sell in may heatmap
sell in may... 가 맞는지 알아 보기 위해서 heatmap 그릴 때, 모든 ETF의 연도별 월별 수익률 평균을 구해 보는 것은 의미가 있을까요? 이렇게 구해보면 sell in may... 라는 말은 맞이 않는 것 같습니다. 이렇게 하는 것도 의미가 있을까요?import pandas as pdimport numpy as npimport plotly.graph_objects as godf = pd.read_excel('df_etf.xlsx', index_col = 0)df_copy = df.copy()# KODEX ETF data 추출condition_kodex = [df_copy.columns[i] for i in range(df_copy.shape[1]) if 'KODEX' in df_copy.columns[i]] # list comprehensiondf_copy_kodex = df_copy.loc[:, condition_kodex]df_copy_kodex['YEAR'] = df_copy_kodex.index.yeardf_copy_kodex['MONTH'] = df_copy_kodex.index.month# 년도별 월별 모든 ETF 수익률 평균 YEAR = 2012 # ETF data 기간 : 2012 ~ 2022empty_df = pd.DataFrame()while YEAR < 2023 : YEAR = YEAR df_copy_kodex_yr = df_copy_kodex[df_copy_kodex['YEAR'] == YEAR] df_copy_gr = df_copy_kodex_yr.groupby('MONTH') df_sell_in_may = df_copy_gr.mean() df_month_return = np.round((df_sell_in_may.mean(axis = 1).pct_change(periods = 1))*100, 2) empty_df[YEAR] = df_month_return YEAR = (YEAR + 1)trace = go.Heatmap(x = empty_df.columns, y = empty_df.index, z = empty_df)fig = go.Figure(data = trace)fig.show()
-
미해결파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part2
fdr.DataReader 오류
ValueError: "Timestamp" is not a supported functionfinancedatareader를 import 하면 되는데, 실제로 데이터를 불러오면 저런 에러가 뜹니다.예 : df1 = fdr.DataReader("005930", '2018-01-02', '2018-10-30') 인터넷을 뒤져도 해결책이 잘 나오지 않는데 도움이 필요합니다버전은 아래와 같습니다finance-datareader==0.9.31
-
미해결비트코인 알고리즘 트레이딩 봇 개발
데이터 수집하기 오류 질문
8분 22초 print(type(webpage)) run하면 아무 결과값이 안뜹니다14분 50초 run 눌러도실행이 안되고 오류가 납니다. File "C:\Users\kimminsoo\AppData\Local\Temp\ipykernel_6404\2059768320.py", line 31 $ print(df_temp_data.head(5)) ^ SyntaxError: invalid syntax 이런 오류메시지가 뜹니다 뭐가 문제인가요?
-
해결됨파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part2
fdr.DataReader 오류
ValueError: "Timestamp" is not a supported functionfinancedatareader를 import 하면 되는데, 실제로 데이터를 불러오면 저런 에러가 뜹니다.예 : df1 = fdr.DataReader("005930", '2018-01-02', '2018-10-30') 인터넷을 뒤져도 해결책이 잘 나오지 않는데 도움이 필요합니다
-
미해결평생 써먹는 데이터 기반 투자법 with 파이썬 퀀트 투자
FAA 전략에서 상관성
안녕하세요 강좌를 듣던중 궁금증이 생겨서 글 남깁니다.FAA 전략을 보면 상관성이 낮은 종목들의 순위를 높게 주려는거 같은데요.해당 수치를 계산할때 합산을 해버리면 '상관성이 낮다'의 의미는 아닌거 같습니다.abs나 **2 해서 합산을 하고 그 수치가 작은 것이 자산간의 상관관계가 낮은게 아닌가 생각됩니다.예를 들어 1과 -1 은 둘다 상관관계는 높습니다.
-
미해결파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part2
안녕하세요 ! 강의 내용 정리해서 github에 업로드 해도 될까요 ?
안녕하세요 ! 파트1부터 강의 잘 듣고 있습니다 !!복습하고 있는데 혹시, 강의 내용 정리해서 github에 업로드 해도 될까요 ?
-
미해결파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part1
fdr 오류 도오ㅏ주세요 ㅠ
인증오류 질문HTTPSConnectionPool(host='fchart.stock.naver.com', port=443): Max retries exceeded with url: /sise.nhn?timeframe=day&count=6000&requestType=0&symbol=005930 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000001FA2561CC70>: Failed to establish a new connection: [WinError 10060] 이렇게 뜹니다 ㅠ 크롤링 할때도 똑같이 떴어서 url 옆에 verify = False 입력하여 진행하였는데, fdr 라이브러리는 너무 방대해서 어떻게 해야할지 모르겠네요 ㅜㅠ 도와주세요
-
미해결파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part1
row 출력 개수 변경
선생님 row 출력 개수 변경하려고(최대 20개)pd.set_option("display.max_row", 20) 입력했고 별 에러는 안뜨는데 계속 10개만 나옵니다어떻게 해야 하나요?
-
미해결파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part1
df.nsmallest(5, "PER(배)") 중 양수값만 표출
선생님3.4(정렬) 수강 중 df.nsmallest(5, "PER(배)")을 해보면 per이 음수인데per이 양수중 가장작은 5개 종목은 어떻게 추출하나요?
-
미해결파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part1
df1 = fdr.DataReader("005930", '2018-01-02', '2018-10-30') 오류
안녕하세요df1 = fdr.DataReader("005930", '2018-01-02', '2018-10-30') 실행했는데 안됩니다import FinanceDataReader as fdr 은 정상작동하는거 보니 라이브러리는 깔린거 같은데요(스샷)df1 = fdr.DataReader("005930", '2018-01-02', '2018-10-30') 실행하면 아래와 같이 메시지가 뜹니다--------------------------------------------------------------------------- KeyError Traceback (most recent call last) ~\anaconda3\lib\site-packages\pandas\core\computation\scope.py in resolve(self, key, is_local) 197 if self.has_resolvers: --> 198 return self.resolvers[key] 199 ~\anaconda3\lib\collections\__init__.py in __getitem__(self, key) 940 pass --> 941 return self.__missing__(key) # support subclasses that define __missing__ 942 ~\anaconda3\lib\collections\__init__.py in __missing__(self, key) 932 def __missing__(self, key): --> 933 raise KeyError(key) 934 KeyError: 'Timestamp' During handling of the above exception, another exception occurred: KeyError Traceback (most recent call last) ~\anaconda3\lib\site-packages\pandas\core\computation\scope.py in resolve(self, key, is_local) 208 # e.g., df[df > 0] --> 209 return self.temps[key] 210 except KeyError as err: KeyError: 'Timestamp' The above exception was the direct cause of the following exception: UndefinedVariableError Traceback (most recent call last) ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit_Call(self, node, side, **kwargs) 665 try: --> 666 res = self.visit(node.func) 667 except UndefinedVariableError: ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit(self, node, **kwargs) 414 visitor = getattr(self, method) --> 415 return visitor(node, **kwargs) 416 ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit_Name(self, node, **kwargs) 548 def visit_Name(self, node, **kwargs): --> 549 return self.term_type(node.id, self.env, **kwargs) 550 ~\anaconda3\lib\site-packages\pandas\core\computation\ops.py in __init__(self, name, env, side, encoding) 84 self.is_local = tname.startswith(LOCAL_TAG) or tname in DEFAULT_GLOBALS ---> 85 self._value = self._resolve_name() 86 self.encoding = encoding ~\anaconda3\lib\site-packages\pandas\core\computation\ops.py in _resolve_name(self) 108 --> 109 res = self.env.resolve(local_name, is_local=is_local) 110 self.update(res) ~\anaconda3\lib\site-packages\pandas\core\computation\scope.py in resolve(self, key, is_local) 210 except KeyError as err: --> 211 raise UndefinedVariableError(key, is_local) from err 212 UndefinedVariableError: name 'Timestamp' is not defined During handling of the above exception, another exception occurred: ValueError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_6828\4160705912.py in <module> ----> 1 df1 = fdr.DataReader("005930", '2018-01-02', '2018-10-30') ~\anaconda3\lib\site-packages\FinanceDataReader\data.py in DataReader(symbol, start, end, exchange, kind) 17 if (symbol.isdigit() and len(symbol)==6 and exchange==None) or \ 18 (symbol.isdigit() and exchange and exchange.upper() in ['KRX', '한국거래소']): ---> 19 return NaverDailyReader(symbol, start, end, exchange, kind).read() 20 21 if (symbol.isdigit() and exchange and exchange.upper() in ['KRX-DELISTING']): ~\anaconda3\lib\site-packages\FinanceDataReader\naver\data.py in read(self) 27 df['Change'] = df['Close'].pct_change() 28 ---> 29 return df.query('index>=%r and index<=%r' % (self.start, self.end)) ~\anaconda3\lib\site-packages\pandas\util\_decorators.py in wrapper(*args, **kwargs) 329 stacklevel=find_stack_level(), 330 ) --> 331 return func(*args, **kwargs) 332 333 # error: "Callable[[VarArg(Any), KwArg(Any)], Any]" has no ~\anaconda3\lib\site-packages\pandas\core\frame.py in query(self, expr, inplace, **kwargs) 4472 kwargs["level"] = kwargs.pop("level", 0) + 2 4473 kwargs["target"] = None -> 4474 res = self.eval(expr, **kwargs) 4475 4476 try: ~\anaconda3\lib\site-packages\pandas\util\_decorators.py in wrapper(*args, **kwargs) 329 stacklevel=find_stack_level(), 330 ) --> 331 return func(*args, **kwargs) 332 333 # error: "Callable[[VarArg(Any), KwArg(Any)], Any]" has no ~\anaconda3\lib\site-packages\pandas\core\frame.py in eval(self, expr, inplace, **kwargs) 4610 kwargs["resolvers"] = tuple(kwargs.get("resolvers", ())) + resolvers 4611 -> 4612 return _eval(expr, inplace=inplace, **kwargs) 4613 4614 def select_dtypes(self, include=None, exclude=None) -> DataFrame: ~\anaconda3\lib\site-packages\pandas\core\computation\eval.py in eval(expr, parser, engine, truediv, local_dict, global_dict, resolvers, level, target, inplace) 351 ) 352 --> 353 parsed_expr = Expr(expr, engine=engine, parser=parser, env=env) 354 355 # construct the engine and evaluate the parsed expression ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in __init__(self, expr, engine, parser, env, level) 811 self.parser = parser 812 self._visitor = PARSERS[parser](self.env, self.engine, self.parser) --> 813 self.terms = self.parse() 814 815 @property ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in parse(self) 830 Parse an expression. 831 """ --> 832 return self._visitor.visit(self.expr) 833 834 @property ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit(self, node, **kwargs) 413 method = "visit_" + type(node).__name__ 414 visitor = getattr(self, method) --> 415 return visitor(node, **kwargs) 416 417 def visit_Module(self, node, **kwargs): ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit_Module(self, node, **kwargs) 419 raise SyntaxError("only a single expression is allowed") 420 expr = node.body[0] --> 421 return self.visit(expr, **kwargs) 422 423 def visit_Expr(self, node, **kwargs): ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit(self, node, **kwargs) 413 method = "visit_" + type(node).__name__ 414 visitor = getattr(self, method) --> 415 return visitor(node, **kwargs) 416 417 def visit_Module(self, node, **kwargs): ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit_Expr(self, node, **kwargs) 422 423 def visit_Expr(self, node, **kwargs): --> 424 return self.visit(node.value, **kwargs) 425 426 def _rewrite_membership_op(self, node, left, right): ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit(self, node, **kwargs) 413 method = "visit_" + type(node).__name__ 414 visitor = getattr(self, method) --> 415 return visitor(node, **kwargs) 416 417 def visit_Module(self, node, **kwargs): ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit_BoolOp(self, node, **kwargs) 748 749 operands = node.values --> 750 return reduce(visitor, operands) 751 752 ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visitor(x, y) 741 def visit_BoolOp(self, node, **kwargs): 742 def visitor(x, y): --> 743 lhs = self._try_visit_binop(x) 744 rhs = self._try_visit_binop(y) 745 ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in _try_visit_binop(self, bop) 737 if isinstance(bop, (Op, Term)): 738 return bop --> 739 return self.visit(bop) 740 741 def visit_BoolOp(self, node, **kwargs): ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit(self, node, **kwargs) 413 method = "visit_" + type(node).__name__ 414 visitor = getattr(self, method) --> 415 return visitor(node, **kwargs) 416 417 def visit_Module(self, node, **kwargs): ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit_Compare(self, node, **kwargs) 721 op = self.translate_In(ops[0]) 722 binop = ast.BinOp(op=op, left=node.left, right=comps[0]) --> 723 return self.visit(binop) 724 725 # recursive case: we have a chained comparison, a CMP b CMP c, etc. ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit(self, node, **kwargs) 413 method = "visit_" + type(node).__name__ 414 visitor = getattr(self, method) --> 415 return visitor(node, **kwargs) 416 417 def visit_Module(self, node, **kwargs): ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit_BinOp(self, node, **kwargs) 534 535 def visit_BinOp(self, node, **kwargs): --> 536 op, op_class, left, right = self._maybe_transform_eq_ne(node) 537 left, right = self._maybe_downcast_constants(left, right) 538 return self._maybe_evaluate_binop(op, op_class, left, right) ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in _maybe_transform_eq_ne(self, node, left, right) 456 left = self.visit(node.left, side="left") 457 if right is None: --> 458 right = self.visit(node.right, side="right") 459 op, op_class, left, right = self._rewrite_membership_op(node, left, right) 460 return op, op_class, left, right ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit(self, node, **kwargs) 413 method = "visit_" + type(node).__name__ 414 visitor = getattr(self, method) --> 415 return visitor(node, **kwargs) 416 417 def visit_Module(self, node, **kwargs): ~\anaconda3\lib\site-packages\pandas\core\computation\expr.py in visit_Call(self, node, side, **kwargs) 668 # Check if this is a supported function name 669 try: --> 670 res = FuncNode(node.func.id) 671 except ValueError: 672 # Raise original error ~\anaconda3\lib\site-packages\pandas\core\computation\ops.py in __init__(self, name) 612 def __init__(self, name: str) -> None: 613 if name not in MATHOPS: --> 614 raise ValueError(f'"{name}" is not a supported function') 615 self.name = name 616 self.func = getattr(np, name) ValueError: "Timestamp" is not a supported function