Julia언어로 '상장 법인 정보'를 획득하는 기능을 작성해봤다.

 

소스 코드는 다음 함수 3개로 되어 있다.

- f상장_법인_정보() : KRX 웹사이트에서 상장 법인 정보를 추출하는 함수.

- csv저장_법인_정보() : f상장_법인_정보()로 얻은 데이터를 CSV파일로 저장.

- csv읽기_법인_정보() : 저장된 CSV파일을 불러옴.

 

------------------------------

using Dates
using InlineStrings
using DataFrames
using TypedTables
using HTTP
using Gumbo
using Cascadia
using StringEncodings
using CSV


# KRX 웹사이트에서 상장 법인 정보를 얻는 함수.
function f상장_법인_정보()::Table
    상장_법인_정보 = DataFrame(
        종목코드=String7[], # 종목코드는 길이가 일정하므로, 고정폭 문자열 자료형 사용.
        회사명=String[],
        업종=String[],
        주요제품=String[],
        상장일=Date[],
        결산월=UInt8[])

    # KRX 상장 법인 정보 URL
    url = "https://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13"
    응답값 = HTTP.get(url)
    응답_문자열 = StringEncodings.decode(응답값.body, "EUC-KR") # EUC-KR인코딩을 UTF-8인코딩으로 변환

    # Gumbo.jl을 이용해서 HTML 파싱.
    문서 = parsehtml(응답_문자열)

    # Cascadia.jl을 사용해서 테이블의 행을 추출.
    rows = eachmatch(Selector("body > table > tbody > tr"), 문서.root)

    # 각각의 행(tr)에서 정보를 추출하는 반복문.
    for tr in rows
        cols = eachmatch(Selector("td"), tr)

        회사명 = ""
        종목코드 = ""
        업종 = ""
        주요제품 = ""
        상장일 = Date(0)
        결산월 = 0

        for (열, td) in enumerate(cols)
            문자열 = strip(text(td))  # 공백 문자 제거

            if 열 == 1
                회사명 = 문자열
            elseif 열 == 2
                종목코드 = 문자열
            elseif 열 == 3
                업종 = 문자열
            elseif 열 == 4
                주요제품 = 문자열
            elseif 열 == 5
                try
                    상장일 = Date(문자열, "yyyy-mm-dd")
                catch e
                    println("상장일 에러 : $(종목코드) '$문자열'")
                end
            elseif 열 == 6
                결산월 = tryparse(UInt8, match(r"\d+", 문자열).match)
            end
        end

        if !isempty(종목코드) && !isempty(회사명) && !isempty(업종) && 상장일 != Date(0)
            push!(상장_법인_정보, Dict(
                :종목코드 => 종목코드,
                :회사명 => 회사명,
                :업종 => 업종,
                :주요제품 => 주요제품,
                :상장일 => 상장일,
                :결산월 => 결산월))
        end
    end

    # println("행 수량 : $(length(rows))")
    println("법인정보 수량 : $(nrow(상장_법인_정보))")

    # Type-stable TypedTables.jl형태로 반환.
    # 어쩌면 그냥 DataFrame을 그대로 쓰는 게 나을런지도.
    return Table(상장_법인_정보)
end

function csv저장_법인_정보()
    CSV.write("krx_ticker.csv", f상장_법인_정보())
end

function csv읽기_법인_정보()::Table
    return CSV.read("krx_ticker.csv", Table, types=Dict(1 => String, 5 => Date, 6 => UInt8))
end

# f상장_법인_정보()
# csv저장_법인_정보()
# csv읽기_법인_정보()

사치품은 가격이 오를수록 오픈런, 사재기, 되팔이등이 발생하면서 수요가 증가한다.

식료품은 가격이 내릴수록 할인행사를 놓치지 않으려고 수요가 증가한다.

둘 다 현실 세계에서 흔하게 발생하는 현상이다.

 

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

 

워렌 버핏이 주식을 (사치품이 아니라) 식료품 사듯이 산다는 말을 처음으로 들었을 때는 그게 당연하다고 생각했다.

그런데, 경험이 쌓일수록 떨어지는 칼날은 잡는 게 아니라는 것을 깨달았다.

주식을 식료품 사듯이 산다는 것은 시장의 등락에 무관하게 자신의 판단대로 장기간 보유할 수 있는 워렌 버핏에게는 맞는 말이겠지만, 대부분의 사람은 하락 추세가 지속되거나, 좀처럼 반등하지 않고 오랜 시간 바닥을 기어다니면, 멘탈이 나가서 못 버티고 최악의 시점에 매도하는 경우가 흔하다.

 

게다가, 워렌 버핏은 항상 시장을 모른다고 말하면서도 마켓 타이밍을 귀신같이 한다.

2001년 IT버블은 피해갔으며,

2009년(리먼 사태 다음 해)에 시장이 반등하기 시작하는 시점에 철도 회사(BNSF)를 줍줍했다.

큰 폭락 사태가 발생해도 타격을 적게 받거나, 금방 회복하거나, 혹은 거꾸로 자산을 크게 불리는 기회로 역이용했다.

 

워렌 버핏은 외모는 평범해 보이지만, 결코 보통 사람이 아니다. 

워렌 버핏은 우리와 다르다는 것을 인식하고, 함부로 따라하지 말아야 한다.

다만, 너무 고평가 된 자산은 피하는 원칙 정도만 지켜도 나쁘지 않은 것 같다.

 

 

 

 

겸손 - 하워드 막스

투자 이야기 2025. 2. 19. 16:30 Posted by UnHa Kim

조금만 손실이 나도 기분이 침울해지고,

조금만 수익이 나도 의기양양 해질려고 한다.

 

많은 자산군이 상승하고, 지지부진하던 국장마저 반등하는 것처럼 보여질 때,

아무 것도 한 것 없이, 단지, 시장이 상승하는 시기에 맞닥뜨렸을 뿐인데도,

마치 스스로 뭔가를 해낸 듯한 기분이 드는 게 참 묘하다.

 

그런데, 유튜브 알고리즘이 정말 좋은 영상을 내밀어준다.

 

채권 투자의 대가인 하워드 막스가 겸손에 대해서 말하는 영상이다.

 

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

 

인상 깊은 어구 정리.

 

겸손은 중요한 자질이다.

끝까지 살아남는 사람이 승자이고, 살아남는 것은 겸손에서 시작하기 때문이다.

 

키가 185cm인 사람이 평균 수심이 150cm인 개천을 건너다가 익사했다는 사실을 잊지말라.

평균적으로 생존한다는 것은 의미가 없고, 매일, 항상, 나쁜 상황에서도 생존해야 한다.

 

대부분의 사람은 자신의 결점과 한계에 대해서 심리적 방어기제가 있으므로, 겸손한 태도를 유지한다는 것은 어려운 일이다.

 

성공은 실패의 씨앗을 담고 있고, 실패는 성공의 씨앗을 담고 있다.

 

성공으로부터 배우는 교훈은 다음과 같은 데, 자존심만 드높여서 투자에 좋지 않다.

- 생각보다 쉽네.  (혹은 별 거 아니네. )

- (자신이 잘 모르는) 다른 분야에서도 잘 할 수 있을 거야.

- 더 많은 돈을 투입해도 잘 될 거야.

- 내가 혼자서 잘 한 거야.

 

자신감에는 균형이 필요하다.

- 자신감이 너무 부족하면, 가격이 하락할 때마다 매도하게 될 것이고,

- 자신감이 과도하면, 가격이 하락할 때마다 더 많이 매수하게 되면서,

두 경우 모두 투자자로서 제 기능을 하지 못하게 된다.

 

 

유튜브  '메이킹 알파' 채널은 정말 좋은 거 같다.