본문 바로가기
728x90

분류 전체보기128

[Python] FMP API 사용해 미국 재무제표 데이터 불러오기 FMP(Financial Modeling Prep)은 미국, 유럽, 홍콩 등 거래소에 상장된 기업들의 주가, 재무제표, 뉴스 등 금융 관련 데이터를 받아올 수 있는 API를 제공해주는 업체다. 금융 데이터를 제공해주는 많은 소스(Quandl, Yahoo Finance 등)가 있지만, FMP가 제공되는 데이터 수준에 비해 가장 합리적인 가격이라 생각돼 FMP를 사용하는 방법을 소개하고자 한다. 위 FMP 링크를 들어가면 API의 Documentation이 아래와 같이 보인다. 맨 왼쪽에 제공되는 데이터 종류, 중간엔 세부 사용 방법, 오른쪽엔 결과물 예시가 보인다. 이번 포스팅에선 Python을 활용해 FMP API로부터 JSON형식의 데이터를 불러오고, 이를 Pandas 형식으로 변형하는 과정을 해 보자.. 2021. 4. 4.
[Python] Yahoo Finance API로 주가 데이터 받아오기 미국 주식 정보는 네이버 등 우리가 흔히 쓰는 사이트에서 확인하기 쉽지 않다. 따라서 해외주식 투자자들은 여러 종류의 사이트를 통해 미국 주식 정보를 얻고 있을 것이다. investing.com, FINVIZ, Stockrow 등 여러 종류의 사이트가 있는데, 이 중 오늘 주가 데이터를 받아올 사이트는 Yahoo Finance이다. Yahoo Finance API 사용 준비 Yahoo Finance API는 종류도 다양하고, 각각 제공하는 데이터도 조금씩 차이가 있다. 단순히 주가 시계열 데이터와 기업정보를 제공해주는 API가 있고, 기업 재무제표를 제공해주는 API도 있다. 이번 포스트에선 주가 데이터를 받아오고자 하므로, yfinance라는 파이썬 API를 사용하도록 한다. 먼저, yfinance를 .. 2020. 8. 20.
버핏지수(Buffett Indicator) 버핏지수란 버핏지수는 단순히 기업 시가총액의 합을 분기별 GDP로 나눈 값으로, 분기별 GDP에 비해 기업의 시가총액이 어느 정도 수준인지를 살펴볼 수 있는 지표이다. 이 지표가 버핏지수로 불리게 된 이유는 워렌 버핏이 포춘지와의 인터뷰에서 'it is probably the best single measure of where valuations stand at any given moment.' 즉, '언제든지 밸류에이션을 할 수 있는 가장 좋은 단일지표'라고 표현한 데에서 비롯되었다. 분자가 기업 시가총액의 합, 분모가 분기별 GDP이기 때문에 버핏지수는 그 값이 클수록 GDP에 비해 기업들의 시가총액이 상대적으로 크다, 즉, 시장이 과대평가되어있다 라고 해석할 수 있다. 반대로 버핏 지수가 낮으면 시.. 2020. 8. 18.
Piotroski Score (F-score) Piotroski score란? Piotroski score는 Joseph Piotroski교수가 개발한 0~9점 사이의 값을 가지는 투자 지표로, 기업의 재무 성과를 바탕으로 점수를 매겨 투자 여부를 판단하는 데에 도움을 줄 수 있는 방법이다. 점수가 높을수록(9점에 가까울수록) 재무 상태가 좋은 기업, 점수가 낮을수록 재무 상태가 좋지 못한 기업이라고 볼 수 있다. 어느 쪽에 투자해야할지는 비밀. 오른쪽 사진은 Piotroski 교수의 사진이다(당연히 동그란 안경낀 통통한 아저씨일거라 생각했지만 전혀 아니다). Piotroski score는 재무 성과를 바탕으로 하기 때문에 초단기투자를 하는 투자자들에게는 적합한 결과를 주지 않으며, 값의 계산 또한 분기 보고서가 나오는 시기에만 계산할 수 있기 때문.. 2020. 8. 12.
[Python] FRED에서 API로 경제 데이터 불러오기 FRED 소개 FRED는 실업률, 금리, PMI 같은 경제 데이터를 모아 볼 수 있는 사이트입니다. 링크 위 FRED사이트에서 데이터를 엑셀파일로 다운받을 수도 있지만, 그때그때 데이터를 엑셀로 받아 코드에 연결하는 일은 매우 번거롭습니다. 따라서 이번 글에서는, 1. 어떻게 API에 연결하는가(코딩 전 준비단계) 2. 어떻게 데이터를 불러오는가(코딩 단계) 두 가지를 설명합니다. 일단 코드를 보고싶다면, 맨 아래에 전체 코드를 정리해 두었습니다. 급하신분은 맨 아래로.. 어떻게 API에 연결하는가 1. API Key 요청: FRED API를 쓰기 위해선 API key가 있어야 하므로, FRED에서 API Key를 발급받습니다. 키를 발급받기 위해서 여기에 들어가 아래 스크린샷처럼 'Request or .. 2020. 7. 22.
Black-Litterman Model (블랙리터만 모델) Black-Litterman Model은 1990년 골드만삭스에서 Black과 Litterman이 Markowitz의 Mean-Variance 최적화 모형의 한계를 극복하기 위해 만든 수학적 모형이다. 기존 Markowitz 모형(MVO)의 한계 먼저 Markowitz Mean-Variance(마코위츠 평균분산 모형, MVO)이 가지는 한계로, 실제 투자시 마코위츠 모형을 적용할 경우 코너해가 발생하는 현상, 즉, 일부 자산에 대한 투자 비중이 매우 커져 분산 투자 효과가 적어지는 현상이 나타나기도 한다. 이 현상을 코너해(Corner Solution)라고 부르며, 이 코너해 때문에 실제 투자시에 평균분산 모형을 사용하면 포트폴리오의 편향 현상이 일어날 수 있다. 코너해 문제를 해결하기 위해 1990년 .. 2019. 12. 18.
[지표] 일목균형표(Ichimoku cloud) 일목균형표는 대부분의 차트가 과거의 주가와 트렌드를 중시함에 반해 시간을 주체로 하여 개발된 보조지표이다. 일목균형표의 구성 요소는 5가지로, 기준선, 전환선, 선행스팬1, 선행스팬2, 후행스팬 이렇게 구성되어 있다. 먼저 각각의 선과 스팬을 계산하는 방법은 아래와 같다. 1. 전환선= $\cfrac{최근\ 9일\ 주가\ 최고값\ +\ 최근\ 9일\ 주가\ 최저값}{2}$ 2. 기준선 = $\cfrac{최근\ 26일\ 주가\ 최고값\ +\ 최근\ 26일\ 주가\ 최저값}{2}$ 3. 선행스팬1 = $\cfrac{당일\ 기준선값\ +\ 당일\ 전환선값}{2}$ 4. 선행스팬2 = $\cfrac{최근\ 52일간\ 주가\ 최고값\ +\ 최근\ 52일간\ 주가\ 최저값}{2}$ 5. 후행스팬 = $현재\ 주가$.. 2019. 10. 24.
AIC, BIC AIC(Akaike Information Criterion)과 BIC(Bayesian Information Criterion)는 특정 데이터를 모델링한 여러 후보군 모델들 중 가장 좋은 모델을 선택할 수 있게 돕는 Model selection 방법들이다. $AIC = -2\ln (Likelihood) + 2p$ $BIC = -2\ln (Likelihood) + p\ln n$ $ p : $변수(파라미터) 개수, $n :$ 데이터값개수 위 식에서 볼 수 있듯이, AIC와 BIC는 모두 likelihood가 커질수록, 변수 개수(p)가 적을수록 작은 값을 가지게 된다. 이를 활용해 Model selection시 AIC와 BIC가 최소화되는 likelihood와 변수 개수를 가진 모델을 가장 좋은 모델로 선정한.. 2019. 10. 15.
[지표] RSI(Relative Strength Index) RSI는 상대강도지수 라고도 부르며, 현재의 시장 상황이 과매도 상태인지 혹은 과매수 상태인지를 판단하기 위해 개발된 지표이다. 먼저 RSI를 계산하는 식을 보고나서 어떻게 해석해야 할 지에 대해 알아보자. RSI를 구하는 식은 다음과 같다. $RSI = \cfrac{n일간\,상승폭\,합계}{n일간\,상승폭\,합계 + n일간\,하락폭\,합계}\times100$ 여기서 n은 주로 14일로 설정한다. 상승폭, 하락폭을 구하는 방법은 아래와 같다. 일자 주가 상승폭 하락폭 1 1000 - - 2 1300 300 - 3 1200 - 100 4 1800 600 - 합계 - 900 100 따라서 4일간 상승폭 합계는 900, 4일간 하락폭 합계는 100으로 계산 가능하다. 위 경우 RSI는 90이 나오게 된다. 이.. 2019. 10. 10.
[지표] MACD(Moving Average Convergence Divergence) MACD는 약자에서 알 수 있듯이 이동평균을 사용하는 지표이다. 이동평균선은 이해하기 편하고 해석이 쉬워 많이 사용하지만, 매매신호가 너무 늦게 나타난다는 단점이 존재한다. MACD는 이러한 단점을 극복하기 위해 개발된 것으로, 산술이동평균이 아닌 지수이동평균을 사용한다. MACD는 다음과 같이 세 가지 값을 이용해 계산되며, 지수이동평균을 구하는 방법과 MACD선, Signal선을 구하는 식은 아래와 같다. MACD의 지수이동평균(보통 9일) 주가 중기 지수이동평균(보통 12일) 주가 장기 지수이동평균(보통 26일) MACD = 12일 지수이동평균 - 26일 지수이동평균 Signal = MACD의 9일 지수이동평균 ※지수이동평균 구하는 방법 $MA_n = (D_n*EP)+(MA_{n-1}*(1-EP)).. 2019. 10. 1.
점프 확산 모델(Jump diffusion model) 점프 확산 과정(Jump Diffusion Model) 블랙-숄즈에 의해 제안된 블랙-숄즈 모형은 자산의 움직임을 설명하는 모형으로 많이 활용되어왔다. 하지만, 이 모형이 실제 자산의 움직임을 잘 반영하지 못한다는 문제가 제기되어 이러한 문제점을 해결하기 위해 많은 새로운 모델들이 개발되어왔다. 그 중 블랙-숄즈 모형이 자산가격이 급격히 변화하는 현상을 설명하지 못하는 문제점을 보완하기 위해 개발한 모형이 점프 확산 모델(Jump Diffusion Model)이다. 이 점프 확산 모델을 통해 블랙-숄즈 모형의 단점을 극복해 옵션 가격 예측에 사용할 수 있다. 점프 확산 모델은 자산 가격의 움직임을 연속적 브라운 운동(Brownian motion, diffusion component)에 불연속적 점프 과정.. 2019. 10. 1.
[Android] Image Url로부터 Bitmap 받아오기 private static Bitmap getBitmapFromURL(String src) { try { URL url = new URL(src); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(input); return myBitmap; } catch (IOException e) { e.printStackTrace(); return null; } } 2019. 9. 29.
[Android] 앱 내에서 언어 설정 변경하는 창 띄우기 startActivity(new Intent(android.provider.Settings.ACTION_LOCALE_SETTINGS)); https://gist.github.com/gunhansancar/45648176dc47d50b1940 혹은 현재 앱 하나 언어만 바꾸는 코드 git. 2019. 9. 29.
[Android] Geocoder의 Address 리턴값 String s1 = address.get(0).getCountryName(); // 국가명 String s2 = address.get(0).getAdminArea(); // 시 String s3 = address.get(0).getLocality(); // 구 메인, "성남시 중원구" 인 경우 "성남시"가 들어감 String s4 = address.get(0).getSubLocality(); // 구 서브데이터 "성남시 중원구" 인 경우 "중원구"가 들어감 String s5 = address.get(0).getThoroughfare(); // 동 String s6 = address.get(0).getSubThoroughfare()); // 번지 String s7 = address.get(0).getFe.. 2019. 9. 29.
[Android] 구글맵에서 화면에 보이는 부분 범위 구하는 방법 public static void getMapStartEndPoint(int centerLatE6, int centerLngE6, int latSpan, int lngSpan){ // Screen 시작 좌표 int slat = centerLatE6 + (latSpan/2); int slng = centerLngE6 - (lngSpan/2); // Screen 끝 좌표 int elat = centerLatE6 - (latSpan/2); int elng = centerLngE6 + (lngSpan/2); } centerLatE6 : 지도중심의 LatitudeE6 centerLngE6 : 지도중심의 LongitudeE6 latSpan : 지도의 LatitudeSpan lngSpan : 지도의 Longitude.. 2019. 9. 29.
[Android] EditText 완료 버튼 리스너 달기 editText.setOnEditorActionListener((textView, i, keyEvent) -> { if(i == EditorInfo.IME_ACTION_DONE) { search(searchEditText.getText().toString()); } return true; }); 2019. 9. 29.
[Android] Bitmap을 Drawable로 바꾸는 방법 Drawable drawable = new BitmapDrawable(getResources(),bitmap); 2019. 9. 29.
[Android] 뒷 배경이 투명한 다이얼로그 생성 final Dialog dialog = new Dialog(this); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 2019. 9. 29.
728x90