요즘 주식 투자 시뮬레이션 관련 개발을 하고 있는데,
주식 데이터를 야후 파이낸스에서 CSV 파일로 받아서 사용하고 있다.
하지만 1거래일이 지날 때마다 새로운 데이터가 계속 쌓이다보니,
매일 최신 데이터를 가져오는 것이 번거로웠었다.
Time Period를 최대로 설정해두고.. 다운로드 버튼 누르고...
일일히 들어가는 것도 귀찮고, API 연동을 해보자니 돈을 내라고 하고...
개발중인 주식 시뮬레이터 특성상 하루 한 번만 데이터를 받으면 되기 때문에,
Bash 스크립트를 사용해서 만들어보고자 했다.
CSV파일 받는 쿼리는 다음과 같다.
1. 주식의 Ticker
2. 시작일(Unix 타임스탬프)
3. 종료일(Unix 타임스탬프)
테스트 해본 결과, 시작일을 0으로 지정하면 주식 데이터가 있는 최초 날짜부터 데이터를 반환하는 것을 확인했다.
삽질을 통해 배쉬 스크립트를 만들어 보자.
현재 시간의 Unix 타임스탬프를 출력하기 위해서는 아래와 같은 명령어를 입력하면 된다.
$ date +%s
1673790531
출력 결과를 period2로 지정해주면 최신 데이터를 받아올 수 있을 것이다.
출력 결과를 해당 위치에 넣어주기 위해서는 원하는 부분에 백틱을 사용해서 해당 부분을 evaluate 시키면 된다.
$ echo "https://query1.finance.yahoo.com/v7/finance/download/SPY?period1=0&period2=`date +%s`&interval=1d&events=history&includeAdjustedClose=true"
https://query1.finance.yahoo.com/v7/finance/download/SPY?period1=0&period2=1673790692&interval=1d&events=history&includeAdjustedClose=true
잘 들어간 것을 확인할 수 있다.
다음 단계는 curl 명령어를 통해 csv 데이터 가져오기이다.
위 명령어에서 echo를 curl로 바꿔서 실행시켜보자.
$ curl "https://query1.finance.yahoo.com/v7/finance/download/SPY?period1=0&period2=`date +%s`&interval=1d&events=history&includeAdjustedClose=true"
Date,Open,High,Low,Close,Adj Close,Volume
1993-01-29,43.968750,43.968750,43.750000,43.937500,25.218214,1003200
1993-02-01,43.968750,44.250000,43.968750,44.250000,25.397585,480500
1993-02-02,44.218750,44.375000,44.125000,44.343750,25.451389,201300
1993-02-03,44.406250,44.843750,44.375000,44.812500,25.720440,529400
1993-02-04,44.968750,45.093750,44.468750,45.000000,25.828053,531500
1993-02-05,44.968750,45.062500,44.718750,44.968750,25.810116,492100
1993-02-08,44.968750,45.125000,44.906250,44.968750,25.810116,596100
1993-02-09,44.812500,44.812500,44.562500,44.656250,25.630749,122100
1993-02-10,44.656250,44.750000,44.531250,44.718750,25.666636,379600
1993-02-11,44.781250,45.125000,44.781250,44.937500,25.792170,19500
1993-02-12,44.875000,44.875000,44.593750,44.593750,25.594889,42500
1993-02-16,44.468750,44.468750,43.406250,43.468750,24.949181,374800
....
1993년 1월 19일부터 현재까지의 SPY ETF 데이터를 가져온다.
리다이렉션을 통해 해당 결과를 별도의 csv 파일에 기록한다.
curl "https://query1.finance.yahoo.com/v7/finance/download/SPY?period1=0&period2=`date +%s`&interval=1d&events=history&includeAdjustedClose=true" > SPY.csv
하지만 SPY 외에도 다른 주식 데이터도 받고 싶다.
배쉬 스크립트를 실행할때 파라미터를 전달해 주자.
if [ -z $1 ]
then
echo "티커를 지정해 주세요.";
exit 1
fi
curl "https://query1.finance.yahoo.com/v7/finance/download/$1?period1=0&period2=`date +%s`&interval=1d&events=history&includeAdjustedClose=true" > $1.csv
$1은 스크립트의 첫 번째 argument로, 원하는 ticker를 지정해주면 해당 데이터를 가져와서 [Ticker명].csv 파일을 생성해줄 것이다.
argument를 지정해주지 않았을 경우를 대비해서 안내 메시지도 써주자.
get_data.sh로 저장해서 아래와 같이 실행하면 원하는 주식 데이터의 csv 파일을 손쉽게 받아올 수 있다.
$ . get_data.sh QQQ