소스파일은 github.com/galaxywiz/StockCrawler_py 에서 확인 가능합니다.

 

이전 장에서 가지고 온 주식데이터를 담을 그릇을 만들어볼 차례입니다.

이전 장, 야후 파이낸셜이나, 네이버 금융 페이지에서 데이터를 가지고 오는데, 해당 페이지를 방문하면 오른쪽과 같은 페이지의 데이터를 가지고 온 것입니다.

이제 저 데이터들을 웹으로부터 가지고 왔으니, 이를 우리 프로그램에 맞게 사용할 수 있도록 만들어 봅니다.

저는 오른쪽과 같이 구성해보고자 합니다.

기본데이터는 웹에서 가지고 온 데이터(앞 글자 영어 따서 ohlc 데이터라 합니다), 이를 기반으로 계산한 보조 지표, 매수 정보 같은 건 추후 실제 매매 API를 붙이기 위해 만들어 두었습니다.

 

stockData.py

from enum import Enum
import os

import talib
import talib.abstract as ta
from talib import MA_Type
import dataframe

import pandas as pd 
import numpy as np

import util

class BuyState (Enum):
    STAY = 0
    BUY = 1
    SELL = 2

class StockData:
    def __init__(self, code, name, df):
        self.code_ = code
        self.name_ = name
        self.chartData_ = df
        
        self.buyCount_ = 0
        self.buyPrice_ = 0
        self.position_ = BuyState.STAY
        self.predicPrice_ = 0        # 머신러닝으로 예측한 다음날 주식값
        self.strategyAction_ = BuyState.STAY
        self.teleLog_ = ""
        self.marketCapRanking_ = 0

    def canPredic(self):
        size = len(self.chartData_)
        if size < 300:
            return False
        return True

    def calcPredicRate(self):
        if self.canPredic() == False:
            return 0
        
        nowPrice = self.candle0()
        rate = util.calcRate(nowPrice["close"], self.predicPrice_)
        return rate

    # 최신 캔들
    def candle0(self):
        rowCnt = self.chartData_.shape[0]
        if rowCnt == 0:
            return None
        return self.chartData_.iloc[-1]

    # 전날 캔들
    def candle1(self):
        rowCnt = self.chartData_.shape[0]
        if rowCnt <= 1:
            return None
        return self.chartData_.iloc[-2]

    # 
    def candle2(self):
        rowCnt = self.chartData_.shape[0]
        if rowCnt <= 2:
            return None
        return self.chartData_.iloc[-3]

    def calcProfit(self):
        if self.buyCount_ == 0:
            return 0
     
        profit = self.buyCount_ * self.buyPrice_
        return profit    

    # 각종 보조지표, 기술지표 계산
    def calcIndicator(self):        
        arrClose = np.asarray(self.chartData_["close"], dtype='f8')
        arrHigh = np.asarray(self.chartData_["high"], dtype='f8')
        arrLow = np.asarray(self.chartData_["low"], dtype='f8')
     
        # 이평선 계산
        self.chartData_["sma5"] = ta._ta_lib.SMA(arrClose, 5)
        self.chartData_["sma10"] = ta._ta_lib.SMA(arrClose, 10)
        self.chartData_["sma20"] = ta._ta_lib.SMA(arrClose, 20)
        self.chartData_["sma50"] = ta._ta_lib.SMA(arrClose, 50)
        self.chartData_["sma100"] = ta._ta_lib.SMA(arrClose, 100)
        self.chartData_["sma200"] = ta._ta_lib.SMA(arrClose, 200)

        self.chartData_["ema5"] = ta._ta_lib.EMA(arrClose, 5)
        self.chartData_["ema10"] = ta._ta_lib.EMA(arrClose, 10)
        self.chartData_["ema20"] = ta._ta_lib.EMA(arrClose, 20)
        self.chartData_["ema50"] = ta._ta_lib.EMA(arrClose, 50)
        self.chartData_["ema100"] = ta._ta_lib.EMA(arrClose, 100)
        self.chartData_["ema200"] = ta._ta_lib.EMA(arrClose, 200)

        self.chartData_["wma5"] = ta._ta_lib.WMA(arrClose, 5)
        self.chartData_["wma10"] = ta._ta_lib.WMA(arrClose, 10)
        self.chartData_["wma20"] = ta._ta_lib.WMA(arrClose, 20)
        self.chartData_["wma50"] = ta._ta_lib.WMA(arrClose, 50)
        self.chartData_["wma100"] = ta._ta_lib.WMA(arrClose, 100)
        self.chartData_["wma200"] = ta._ta_lib.WMA(arrClose, 200)

        macd, signal, osi = ta._ta_lib.MACD(arrClose, fastperiod=12, slowperiod=26, signalperiod=9)
        self.chartData_["MACD"] = macd
        self.chartData_["MACDSignal"] = signal
        self.chartData_["MACDOsi"] = osi
  
        #볼린저 계산
        upper, middle, low = ta._ta_lib.BBANDS(arrClose, 20, 2, 2, matype=MA_Type.SMA)
        self.chartData_["bbandUp"] = upper
        self.chartData_["bbandMid"] = middle
        self.chartData_["bbandLow"] = low

        # 기타 자주 사용되는 것들
        self.chartData_["rsi"] = ta._ta_lib.RSI(arrClose, 14)
        self.chartData_["cci"] = ta._ta_lib.CCI(arrHigh, arrLow, arrClose, 14)
        self.chartData_["williumR"] = ta._ta_lib.WILLR(arrHigh, arrLow, arrClose, 14)
        self.chartData_["parabol"] = ta._ta_lib.VAR(arrClose, 5, 1)
        self.chartData_["adx"]  = ta._ta_lib.ADX(arrHigh, arrLow, arrClose, 14)
        self.chartData_["plusDI"]  = ta._ta_lib.PLUS_DI(arrHigh, arrLow, arrClose, 14)
        self.chartData_["plusDM"]  = ta._ta_lib.PLUS_DM(arrHigh, arrLow, 14)
       
        self.chartData_["atr"] = ta._ta_lib.ATR(arrHigh, arrLow, arrClose, 30)
        

사실 이 프로그램의 핵심 기능 보조 지표 계산 calcIndicator 가 이 클래스의 핵심입니다.

기술지표는 시가, 고가, 저가, 종가를 특정 목적에 맞게 계산식에 의해 도출된 값들입니다.

보통 추세, 지금 주식 가격이 계산상 적정 범위인가, 과 매수 매도 구간인가 판단하는데 도움을 주는 툴이며 인터넷 웹이나, hts 에 아래와 같이 여러 지표들을 보여주고 있습니다.

calcIndicator 함수 보시면 이 기술지표 데이터를 TaLib라는 라이브러리를 사용하여 계산 결과값만 받아왔습니다.

물론 원하는 기술지표를 직접 계산하시어도 문제없습니다만, 그 경우 결과 값이 정확한지 엑셀에 수식으로 구현해서 그 값과 같은 값이 나오는지 체크해서 써야 합니다만, 프로그램이 복잡해지는 문제가 발생됩니다.

그리고 이런 공개된 라이브러리에 계산 값이 다르거나 버그 나면, 전세계 사람들이 달려들어 수정하기 때문에 굳이 안 믿고 안 쓸 이유가 없다고 생각합니다.

TaLib 에 대해서는 https://ta-lib.org/ 홈페이지에 자세한 설명이 나와있고, 자세하건 오른쪽 홈페이지의 function list를 확인해서 원하는 기술지표 함수를 체크해서 사용하시는 게 좋습니다.

소스파일은 github.com/galaxywiz/StockCrawler_py 에서 확인 가능합니다.

 

주식 트레이딩에 성공적인 사람들은 대부분 장기 투자자입니다.

워렌버핏도 10년이상 볼 것이 아니면 10분도 가지지 말라는 말을 한적이 있죠.

저도 처음에는 1, 1, 3, 5분봉 보면서 단타를 해봤지만, 결국 다 잃고,

1년 이상 홀딩 한 종목이 엄청난 수익을 안겨주면서 위 말을 믿고 있습니다.

 

굳이 이런 말을 하는 이유는 구태여 분봉 데이터를 얻어서 트레이딩 하는 건 해외선물이 아닌 이상의미가 없다는 걸 말씀드리고 싶었습니다.

 

우선 인터넷에 흔히 있는 데이터를 모으는 것부터 시작합시다.

보통 인터넷에선 네이버나 야후 파이낸셜 데이터를 가지고 오는데, 저는 야후 쪽을 사용합니다.

왜냐면, 미국 주식을 가지고 오기도 편하고, 주식 분할 등을 했을 경우,

주식 분할 전 데이터도 다 분할해서 데이터를 전달해 주기 때문에, 정확한 데이터를 얻어 오기 좋습니다.

Crawler 라고 수집 클래스를 아래와 같이 작성합니다.

 

stockCrawler.py

# 인터넷에서 주식 데이터를 가지고 옵니다.
# 한국주식, 미국주식
#  
import pandas as pd 
from pandas import Series, DataFrame
from pandas_datareader import data as web
import numpy as np
import dataframe
import urllib.request
from bs4 import BeautifulSoup
import os
import time
import yfinance as yf
 
from datetime import datetime
from datetime import timedelta
 
#----------------------------------------------------------#
# 주식 목록 갖고오기 (상위)
class StockCrawler:
    def __getNaverURLCode(self, code):    
        url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code)
        print("요청 URL = {}".format(url))
        return url

    # 종목 이름을 입력하면 종목에 해당하는 코드를 불러오기
    def __getNaverStockURL(self, item_name, stockDf):
        code = stockDf.query("name=='{}'".format(item_name))['code'].to_string(index=False)
        url = self.__getNaverURLCode(code)
        return url

    # 네이버에서 주식 데이터를 긁어 온다.
    def getKoreaStockDataFromNaver(self, ticker, loadDays):
        # 일자 데이터를 담을 df라는 DataFrame 정의
        df = pd.DataFrame()
        try:
            url = self.__getNaverURLCode(ticker)
            loadDays = (loadDays / 10) + 1
            # 1페이지가 10일. 100페이지 = 1000일 데이터만 가져오기 
            for page in range(1, int(loadDays)):
                pageURL = '{url}&page={page}'.format(url=url, page=page)
                df = df.append(pd.read_html(pageURL, header=0)[0], ignore_index=True)
            
            # df.dropna()를 이용해 결측값 있는 행 제거 
            df = df.dropna()
            df.reset_index(inplace=True, drop=False)
            stockDf = pd.DataFrame(df, columns=['날짜', '시가', '고가', '저가', '종가', '거래량'])
            stockDf.rename(columns={'날짜': 'candleTime', '고가': 'high', '저가': 'low', '시가': 'start', '종가': 'close', '거래량' : 'vol'}, inplace = True)
            stockDf['candleTime'] = stockDf['candleTime'].str.replace(".", "-")
            
            print(stockDf)
            return stockDf
        except:
            return None

    #파일에서 로딩할떄 “종목:코드:순위” 형식으로 로딩
    def _loadFromFile(self, targetList):
        stockDf = DataFrame(columns = ("name", "code","ranking"))
        for text in targetList:
            tokens = text.split(':')
            row = DataFrame(data=[tokens], columns=["name", "code","ranking"])
            stockDf = stockDf.append(row)
            stockDf = stockDf.reset_index(drop=True)
        return stockDf
   
    #일부 종목만 지정해서 로딩하고 싶을 때
    def getStocksListFromFile(self, fileName):
        with open(fileName, "r", encoding="utf-8") as f:
            targetList = f.read().splitlines()
        return self._loadFromFile(targetList)
 
#----------------------------------------------------------#
### 아후에서 데이터 긁어오기.
class KoreaStockCrawler(StockCrawler):
    def __getTicker(self, ticker):
        # 코스피는 KS, 코스닥은 KQ
        t = ticker + ".KS"
        try:
            p = web.get_quote_yahoo(t)['marketCap']
            return t
        except:
            return ticker +".KQ"
 
    def getStockData(self, ticker, loadDays):
        rowTicker = ticker
 
        try:
            ticker = self.__getTicker(ticker)
            oldDate = datetime.now() - timedelta(days=loadDays)
            fromDate = oldDate.strftime("%Y-%m-%d")
            stockDf = web.DataReader(ticker, start = fromDate, data_source='yahoo')
            if len(stockDf) == 0:
                return self.getKoreaStockDataFromNaver(rowTicker, loadDays)
 
            stockDf.reset_index(inplace=True, drop=False)
            stockDf.rename(columns={'Date': 'candleTime', 'High': 'high', 'Low': 'low', 'Open': 'start', 'Close': 'close', 'Volume' : 'vol'}, inplace = True)
            stockDf['candleTime'] = stockDf['candleTime'].dt.strftime("%Y-%m-%d")
 
            stockDf = pd.DataFrame(stockDf, columns=['candleTime', 'start', 'high', 'low', 'close', 'vol'])
            print(stockDf)
            return stockDf
 
        except:
            return self.getKoreaStockDataFromNaver(rowTicker, loadDays)
   
    def getStocksList(self, limit):
        # 한국 주식 회사 등록 정보 가지고 오기
        stockDf = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0]
        stockDf.종목코드 = stockDf.종목코드.map('{:06d}'.format)
        stockDf = stockDf[['회사명', '종목코드']] 
        stockDf = stockDf.rename(columns={'회사명': 'name', '종목코드': 'code'})
        
        # 시총 구하기
        marketCapList = []
        ranking = []
        dropIdx = []
        for idx, row in stockDf.iterrows():
            try:
                ticker = self.__getTicker(row['code'])
                p = web.get_quote_yahoo(ticker)['marketCap']
                marketCap = int(p.values[0])
                marketCapList.append(marketCap)
            except:
                dropIdx.append(idx)
                print("[%s][%s] 시총 갖고오기 에러" % (row['name'], row['code']))
        
        stockDf.drop(dropIdx, inplace = True)
 
        rank = 1
        for i in marketCapList:
            ranking.append(rank)
            rank += 1
 
        stockDf['MarketCap'] = marketCapList
        stockDf = stockDf.sort_values(by='MarketCap', ascending=False)
        stockDf['ranking'] = ranking
        if limit > 0:
            stockDf = stockDf[:limit]
        return stockDf
 
# 미국 주식 긁어오기
class USAStockCrawler(StockCrawler):
    def getStockData(self, ticker, loadDays):
        oldDate = datetime.now() - timedelta(days=loadDays)
        fromDate = oldDate.strftime("%Y-%m-%d")
        try:
            stockDf = web.DataReader(ticker, start = fromDate, data_source='yahoo')
            
            stockDf.reset_index(inplace=True, drop=False)
            stockDf.rename(columns={'Date': 'candleTime', 'High': 'high', 'Low': 'low', 'Open': 'start', 'Close': 'close', 'Volume' : 'vol'}, inplace = True)
            stockDf['candleTime'] = stockDf['candleTime'].dt.strftime('%Y-%m-%d')
 
            features =['candleTime', 'start', 'high', 'low', 'close', 'vol']
            stockDf = stockDf[features]
            print(stockDf)
            return stockDf
 
        except:
            print("[%s] Ticker load fail" % ticker)
            return None
    
    def getStocksList(self, limit):
        sp500 = pd.read_html("https://en.wikipedia.org/wiki/List_of_S%26P_500_companies")[0]
        sp500 = sp500[['Security', 'Symbol']] 
        sp500 = sp500.rename(columns={'Security': 'name', 'Symbol': 'code'})
        
        nasdaqDf = pd.read_html("https://en.wikipedia.org/wiki/NASDAQ-100#External_links")[3]
        nasdaqDf = nasdaqDf.rename(columns={'Company': 'name', 'Ticker': 'code'})
 
        stockDf = sp500.append(nasdaqDf)
        stockDf = stockDf.drop_duplicates(['code'], keep='last')
        # 시총 구하기
        marketCapList = []
        ranking = []
        dropIdx = []
        for idx, row in stockDf.iterrows():
            try:
                tickers = row['code']
                p = web.get_quote_yahoo(tickers)['marketCap']
                marketCap = int(p.values[0])
                marketCapList.append(marketCap)
            except:
                dropIdx.append(idx)
                marketCapList.append(0)
                print("[%s][%s] 시총 갖고오기 에러" % (row['name'], row['code']))
        
        rank = 1
        for i in marketCapList:
            ranking.append(rank)
            rank += 1
 
        stockDf['MarketCap'] = marketCapList
        stockDf = stockDf.sort_values(by='MarketCap', ascending=False)
        stockDf['ranking'] = ranking
 
        stockDf.drop(dropIdx, inplace = True)
        if limit > 0:
            stockDf = stockDf[:limit]
        
        print(stockDf)
        return stockDf 

각각의 클래스는 StockCrawler 라는 상위 공통 집합이 있고, 이를 상속받는 KoreaStockCrawler (74라인) USAStockCrawler (142라인) 클래스를 정의했습니다.

각 클래스들은 공통의 함수 getStockList getStockData를 갖고 있습니다. 또한 공통 기능으로 StockCrawler getStockListFromFile 함수가 있습니다.

이제 위 3함수는 아래와 같은 기능으로 작성되어 있습니다.

 

KoreaStockCrawler에 대한 기술을 읽어 보시고, USAStockCrawler 에서 어떻게 응용하고 어느 부분이 바뀌었는지 보시면 큰 도움이 되실 것 같습니다.

getStockList, 입력 파라메터 limit

108줄을 보시면 http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13 라는 페이지를 읽어 오는데 실제 이 링크를 웹브라우저에 입력해 보시면 한국 기업 공시 채널 홈페이지의 상장목록 파일을 다운 받을 수 있습니다.

이 글을 쓰고 있는 2020-10-20일 최근 상장한 빅히트 종목도 있네요.

111라인까지는 컬럼명을 프로그램 사용에 맞게 통일하는 작업 정도입니다.

이대로 return 해도 되겠지만, 여기선 시총을 구해서 시총 순으로 정렬하여 리턴 하고자 합니다.

시총을 구하는 이유는 아무리 그래프가 좋아도 시총이 작으면 작전 세력의 먹이가 될 수 있기 때문에 이런 불확실한 종목은 배제하기 위함입니다.

어느 정도 시총이 크면 작전 세력들이 주가를 흔들기 어렵기 떄문에 큰 시총에 투자하는 게 안전하다고 생각하고, 개인적으로 한국 주식은 시총 200위 정도면 볼만하고 그 이하는 프로그래밍 매매하기 위험하다고 생각합니다.

위에 limit 파라메터 받아오는데, 이는 시총 몇 위까지 잘라서 리턴 하기 위함입니다.

 

그럼 시총을 어떻게 구하는가?

이는 119라인부터 기술되어 있습니다.

get_quote_yahoo라고, 야후에서 시총 항목을 구하는 함수가 있는데,
이를 웹에서 가지고 와서 새로운 컬럼 열을 만들어 줍니다.

그리고 129라인에 1부터 차례대로 증가하는 배열을 만들고
,135 라인에서 sort로 시총 순으로 정렬한 뒤, 136라인처럼 이를 붙여 줍니다.

getStockListFromFile 입력 파라메터 filename

67라인에 파일로부터 주식 목록을 가지고 오는 함수를 정의했습니다.

웹에서 매일 가지고 오기 귀찮고, 내가 알고 있는 주식에 대해서만 (사실 이게 가장 정답인 것 같아요) 모니터닝 하고자 할 때 사용하는 함수입니다.

파라메터로 file이름을 넘겨주면,

그 파일을 열어서 종목:코드:순위 로 읽어 옵니다.

파일 기술은 오른쪽 그림과 같이 정의합니다

(개인적으로 많이 보고 있는 주식들입니다).

getStockData 파라메터 ticker, loadDays

주식의 일자, 시가, 고가, 저가, 종가, 거래량을 웹에서 얻어오는 함수입니다.

우선 88라인 보시면 내부 함수로 (밖에서 못쓰는 함수) codeticker 로 변환합니다.

이후 89라인으로 얼마만큼 데이터를 가지고 올지 startDate 를 구하고, 91 라인으로부터 yahoo에서 주식 데이터를 얻어 옵니다.

만약 얻어오는데 실패했다면, except: 문을 따라104라인에 네이버 웹에서 데이터를 얻어 오도록 하였습니다.

96 라인 부터는 컬럼명을 프로그램에 맞게 재조정하는 코드입니다.

'재테크 > 주식 알람 시스템 만들기' 카테고리의 다른 글

5. 주식 차트 그리기  (0) 2020.11.08
4-1 주식 데이터 저장 (sqlite)  (0) 2020.11.08
4. 주식 데이터 저장 (sqlite)  (0) 2020.11.07
3. 주식 데이터  (0) 2020.11.07
1. 프로그램 설계  (0) 2020.11.07

소스파일은 github.com/galaxywiz/StockCrawler_py 에서 확인 가능합니다.

 

직장일을 하면서 재테크로 주식으로 재산을 불리고 싶지만,

제대로 된 주식을 일일이 분석하기 어려우니 이런 일련의 작업 목록을 정의해서

일을 컴퓨터에게 시키게 하는게 목적이니 여기에 맞게 작성해 봅니다.

마인드맵으로 주식 매매 알람 시스템이니 아래와 같이 생각해 봤습니다.

이제 이걸 가지고 각각의py 파일을 만들어 주도록 하고 코드를 작성해 보도록 합시다.

작성하실 때는, 레고 테크닉 하 듯이, 각각 python 파일이 각각의 모듈 들입니다.

이들을 조합하여 사용하는 시스템 부분이 완성되어야,

프로그램이 톱니바퀴에 맞물려 제대로 도는 모습을 볼 수 있으니 너무 조급하지 마시고 천천히 따라해 보시기 바랍니다.

'재테크 > 주식 알람 시스템 만들기' 카테고리의 다른 글

5. 주식 차트 그리기  (0) 2020.11.08
4-1 주식 데이터 저장 (sqlite)  (0) 2020.11.08
4. 주식 데이터 저장 (sqlite)  (0) 2020.11.07
3. 주식 데이터  (0) 2020.11.07
2. 주식데이터 가지고 오기  (0) 2020.11.07

제 생각도 그렇고 누구도 동의 하겠지만, 현재 세계최강은 미국입니다.

중국이 쫏아오고 몇년후면 미국을 뛰어 넘는다 이야기를 하지만,

군사력이나 경제력에서는 아직 압도적으로 미국이 위라 생각합니다. (중국은 너무 거짓말이 많아서...)

 

전 게임업계 일하다 보니 IT쪽 뉴스가 주 관심사인데요.
중국이 재작년인가 인터넷 만리장성 같은 방화벽을 걸어놔서 중국내에선

페이스북, 구글, 유튜브, 아마존이 안되고, 대신 웨이보, 바이두, 유큐, 아이치이, 타오바오 가 돌고 있죠.
(전에도 안되긴 했는데, vpn 을 통해서 할 사람들은 하긴 했는데, 지금은 아예 안된다 하네요)

그리고 웃긴건 저 중국 기업중 일부는 나스닥에 상장해서 투자 받고 있죠 ;;; (왜???)

 

하여간, 미국은 명실공히 세계 최강국이고, 그런 나라의 기업을 함부로 하지 않고
(사드 설치했다고 미국 안때리고 한국 때리는것만 봐도...)

무엇보다, 미국인들의 연금이 미국 주식에 투자 되는 방식이라

미국 주식이 떨어지면 대통령 지지율이 떨어지므로,

민주당이든 공화당이든 대통령들이 기를 쓰고 주식은 지키려 합니다.

 

아래의 각 나라의 기술 지수를 보죠

미국 기술주 나스닥 5년 추이
중국의 기술주 深圳(선전) 5년 추이

위에서 나열했듯, 중국이 자국 sw 산업을 보호하기 위해 외국의 자본이 못들어오게 막는건 이해가 되는데,

나스닥의 아마존, 구글, 페이스북이 날아 다닐때, 중국의 타오바오, 바이두, 웨이보는 놀고 있었던걸까요?

아무리 세계 vs 중국 으로 인구가 불리하다 해도, 세계 1/5 인구 대국 아닌가요? 

(물론 한국 코스닥은 머리 박아야 합니다. 공매도 놈들)

 

그리고 전에 전 중국원양해양에 데인적이 있어서 중국 주식을 잘 믿지 못하겠더군요. (사기꾼 느낌이 좀...)

중국은 나중에 또 포스팅 하고

 

미국 주식을 해보죠.

제가 생각하는 안전한 미국 주식주는 아래와 같습니다.

 

1. 주변에 있는 물건으로서 내가 아는 브랜드 인가?

   -> 미국은 기업은 많지만, 뭘 하는지 알지도 못하는 그런 회사에 돈을 넣는다는것은
       생선가계를 고양이에게 맏기는 꼴이라 생각합니다.
       미국은 다국적을 상대로 사업하는 회사도 많고,
       그게 내 주위에 있다면 그건 굉장히 유명한 회사일 확율이 높습니다.

 

2. 이 브랜드 다른 사람에게 이야기 했을때 바로 아는 그건가?

  -> IT업계다 보니, 저 혼자 "이번에 나온 AMD CPU 가 아주 쩔어" 라고 해도 그건 제 주변에서 아는거지
      자동차 업계 다니는 친구에게 저 말 하면, "컴퓨터가 다 거기서 거기 아냐?" 란식으로 얘길 합니다.

      그러나 제가 "이번에 나온 테슬라 회사 사람이 사서 좀 타봤는데 아주 쩔더라" 라고 얘길 하면

      이 친구는 "그 단차 쩌는걸 왜 산데냐? 돈 많은가봐 ㄷㄷ" 식으로 이야기 합니다.

      이게 그것에 대해서 왈가왈부 할정도 이야깃 거리를 만들 정도면 꽤 이슈가 되어가고 있는 것이므로
      인지도가 꽤 있는 회사일 가능성이 높습니다.

 

3. 회사가 충분히 큰가?

  -> 아무리 다들 아는 회사고 뉴스나 신문에 화자가 된 회사라 해도 이게 시총 (회사 전체 자산규모)가 낮으면,
      솔직히 믿기가 좀 그렇습니다.
      그쪽 재무재표를 본다 한들 영어로 되어 있어서 어느정도 한계가 있고,
      구글 맵으로 밖에 회사 근처를 구경하는게  전부라 어느날 돌연 파산 할 수도 있습니다.

      특히 상한가 / 하한가 제한이 없는 미국의 경우 자고 일어나니 상장 폐지가 될 수도 있습니다.
      (전에 루이싱 커피가 하룻밤에 80% 떨어진거 보고는...)

      제 기준으로는 시총 Top50위 이내면 그래도 좀 기반이 닦이고 탄탄한 기업이지 않을까 생각합니다.

 


그럼 미국 주식으로 투자할 회사들을 정리해 봅시다.

 

1. 미국 시총 top을 갖고 와 봅시다.

아래는 트레이딩뷰 사이트로, 주식 증권 전문가들이 차트 분석하는것에 대해서 서로 의견을 나누는 사이트 입니다.

https://www.tradingview.com/markets/stocks-usa/market-movers-large-cap/

 

Large Cap (Big Cap) Stocks — USA — TradingView

Top companies by market capitalization. List of large cap stocks on TradingView.

www.tradingview.com

아래처럼 나오는데, TICKER (주식 구분 코드:AAPL) / 회사 이름:APPLE INC 등이 있습니다.
RATING은 차트 기술 분석인데, 매매 참고에 도움이 됩니다.

2020-07-15 당시 시총들 (버크셔해셔웨이A주 1주당 28만달러!!!)

 

 

2. 위의 데이터를 참고로 구글 시트로 데이터를 정리합니다.

https://rosagigantea.tistory.com/639

 

구글 시트를 활용하여 주식 포트폴리오 작성

구글에 보면 구글 시트라고 웹에서 작성이 가능한 엑셀 시트가 있습니다. 웹에 연동된 엑셀 시트의 장점은 데이터를 실시간으로 받아올 수 있습니다. 이를 이용해서 주식 포트폴리오를 구성하��

rosagigantea.tistory.com

 

3. 여기서는 취향인데, 제 경우에는 아래의 기준을 정했습니다. 
    a. 코로나 충격후 (20년 3월), 이전 주가를 회복하고 꾸준히 우 상향을 하고 있는지?

    b. 기업이 미국 기업인지 (알리바바 좋아하는 사이트지만 주식은 여기선 잠시;;;)

    c. 내 주변에 볼 수 있는 상품을 생산하는 회사인가?

 

이걸 바탕으로 개인적으로 2020-7-15일 기준으로 추천 할 수 있는 기업은 아래와 같습니다.

 

AAPL / 애플 / 말이 필요 없는 애플 생태계

MSFT / 마이크로소프트 / 클라우드 서버 2인자 -> 1인자? , OS 최강자

AMZN / 아마존 / 소셜커머셜 1인자, Amazon Web Service 클라우드 최강자

GOOG / 구글 / 안드로이드, 구글 생태계
FB / 페이스북 / sns
WMT / 월마트 / 대형 마트
TSLA / 테슬라 / 전기차 선구자
NVDA / 엔비디아 / 게임 그래픽 & 자율주행 AI 등..
AMD / AMD / 콘솔 게임기 CPU & 가정용 PC CPU

 

제 경우 위 주식을 상대로 한달에 일정 금액을 적금 들듯이 투자하고 있습니다.

올해 끝나봐야 알겠지만, 제 생각으론 미국에 핵미사일이 떨어지지 않는 한 (그럼 세계 멸망일, 돈이 뭔 소용),

저 회사들이 쉽게 문을 닫거나 망조가 보이는 회사로는 보이지 않습니다.

 

끝까지 읽어주셔서 감사드리며, 자신만의 기준을 정하셔서 위의 툴(웹페이지)를 이용해서

슬기로운 투자 되시길 바랍니다.

제가 한국 주식을 한건, 2006년 이후 소액으로 조금씩 해왔었습니다.

그러다가 별 재미를 못보고 했다 안했다 반복을 하다가, 2016년 부터 다시 소액으로 해왔습니다.

 

그러다가 이번 코로나 사태 이후. 

전 한국 주식을 정리하고 모두 미국주식으로 계좌를 옮겼습니다.

2020-02-28일 당시 제 계좌

이 글을 작성한 (2020-7-12) 기준으로

삼전, LG화학, 현기차 등 국내 줄지의 대기업을 장기 투자 했다고 했을때의 손익을 따져보면 아래와 같습니다.

LG화학 말고는 아직도 10~20% 손해를 보고 있는 상황이네요.

이때 정리 하면서, MS와 테슬라로 넘어갔는데, 이 둘은 잘 나가는 반면

국내 전통 제조업 회사들이 아직 코로나 충격으로 회복이 안되고 있어서 안타깝습니다.

 

지금 그래도 한국 주식 모니터닝 하고 있는 것들 보면,

베터리는 테슬라로 인한 전기차 기대감으로 오르는거 같고,

네이버 / 카카오 얘넨 우리나라에서 망할 일이 없으니.

게임주도 언컨택트 사회다 보니 이쪽으로 돈이 몰리는거 같네요.

 

여튼 제가 미국주식으로 넘거간 계기는 아래와 같은 10년 장기 차트를 보고 나서 입니다.

 

주봉 차트로 보면 코스닥은 거의 10년간 박스권에 갇혀서 왔다 갔다 하는반면

나스닥의 경우 그냥 우 상향이 보입니다.

 

최근 한국 증시가 2200 선에 부딪쳤는데 저게 박스권 상단으로 해석할 수 있어서

만약 이번 동학개미 운동으로 재미를 보셨다면, 어느정도 이익을 실현하는게 좋을거 같아요.

 

나스닥은 기술주니까 저렇게 오르는게 당연하거 아니냐? 이렇게 반문 하실 수도 있는데,

미국 대표 기업 S&P 500 을 봐도 저 추이가 보입니다.

 

물론 이게 결과론적이고, 요새 들리는 이야기론, 중국 증시가 날개를 피고 올라갈거다 란 얘기도 들리긴 하지만,

그건 장기 추세가 확실히 결정되면 그때 들어가도 늦지 않다고 생각합니다.

 

그리고 왜 미국 주식들은 저렇게 우상향을 하냐...

아래 슈카형이 설명을 잘해주셨는데, 

구글 / ms / 애플 / 넷플릭스등, 다들 자기네 플렛폼을 만들고,

거기에 나오는 수입을 끌어다 쓰는 비즈니스 모델이 크게 성공했기 때문이라 하시는데,

제 생각도 거의 비슷합니다. (요즘 네이버가 네이버 쇼핑 / 네이버 보험 이런거 하는것도 비슷한 이치죠)

 

https://www.youtube.com/watch?v=Gd1ag08O0GE

 

제가 미국 주식으로 넘어간다니

주변에서, 그럼 차익 실현시 세금은 어떻게 할 것이냐? 란 질문을 많이 받았는데

해외 주식이 1년간 총 차익중 250만원이 공제되고 남은 금액에서 22% 양도세를 내기때문에 솔직히 부담 스럽긴 합니다.

 

그리고 이월공제도 안되서

작년에 해외 선물 / 주식으로 -4500만원 손해 봤고, 

올해 미국 주식으로 1억을 벌면,
외국은 과거 3~5년은 이월 해서 (1억 - 4500만) = 5500만원에 대한 양도세를 내면된다는데,

우리나라는 작년은 모르겠고, 올해 1억 번거에 대해서 250만원 공제 한 나머지 9750만원에 대한 22% 양도세를 내야 한다고 하네요.

 

그래도 외화 벌이를 하는 IMF시대엔 외화벌이 전사인데..

지금 이빨빠져가는 일본이 저리 떵떵거리는게 잃어버린 20~30년간 외국 주식을 엄청 사놔서

그에 대한 배당금, 자본만 1년경상 수지를 넘는데..

 

이런 좋은 일을 하는 외국 투자자에게 이건 좀 너무한 처사는 아닌지 싶네요. ㅠㅠ

'재테크 > 주식 투자' 카테고리의 다른 글

미국 주식 주권 프린트 해보기  (0) 2021.02.08
미국 주식 투자 하기  (0) 2020.07.15
ARK 에 대해서  (0) 2020.07.11
AMD에 투자한 이유에 대해서  (0) 2020.07.11
MS에 투자한 이유에 대해서  (0) 2020.07.11

+ Recent posts