株価データを取得して加工する 改良版
以前作ったものを改良しみました。2024年で試してみます
前提
次のサイトを見てから確認してください
日経225銘柄
@echo off
set SKIP1=25
set SKIP2=999
set SPAN1=3
del y:\output.txt
set N=0
:::powershell -command "get-clipboard">225.txt
:::
"C:\app\busybox\sed.exe" -n %SKIP1%,%SKIP2%p 225.txt | ^
findstr /v "銘柄名 騰落率 前日比 " >y:\225.txt
"C:\app\busybox\sed.exe" -e "/日経平均採用銘柄の入れ替え/,999d" -e "s/,//g" -e "s/(\([0-9]\+\)\/東P)/\1.T/g" y:\225.txt > y:\out.txt
"C:\app\busybox\sed.exe" -n "1p" y:\out.txt
for /f "usebackq tokens=1 delims=" %%A in (y:\out.txt) do (
call :CHK
if ERRORLEVEL 255 goto :th
if not ERRORLEVEL 1 echo %%A>>y:\output.txt
if ERRORLEVEL 1 SET /P Xtmp= %%A <NUL >>y:\output.txt
)
:th
type NUL > y:\output1.txt
::echo 銘柄名 (コード) 業種 現値 前日比 騰落率 特色>>y:\output1.txt
"C:\app\busybox\sed.exe" -e "s/\t/,/g" y:\output.txt >>y:\output1.txt
trdsql "select c2 from y:\output1.txt" >y:\t255.txt
timeout /t 99
goto :EOF
:CHK
set /a N+=1 , X=N %% %SPAN1%
set /a N2=%N% +%SKIP1%+1
if %N2% geq %SKIP2% exit /b 255
if %X%==1 exit /b 1
if %X%==2 exit /b 2
if %X%==0 exit /b 0
exit /b 0
結果
スイ,1000.T,水産・農林業,878.5,-4.3,-0.49%,水産大手
株価取得
1ヶ月ごとに1年間
import pandas as pd
import yfinance as yf
import datetime
'''
# 日経平均株価のデータを取得
ticker = "^N225"
data = yf.download(ticker , period= "3mo", interval = "1wk")
print(data)
data.to_csv('ticker.csv')
'''
tickers = "AMZN AAPL"
df2 = pd.read_csv('N225.txt', header=None)
tickers = df2.to_numpy().tolist()
print(tickers)
df = pd.DataFrame()
for ticker in tickers:
# data = yf.download(ticker, group_by="Ticker", period= "3mo", interval = "1wk")
data = yf.download(ticker, group_by="Ticker", period= "1y", interval = "1mo")
data['tick'] = "ticker"
df = pd.concat([df, data])
df["tick"] = df["tick"].replace(["ticker"], [ticker])
df.to_csv('ticker.csv')
加工
何ヶ月上昇したかの回数と2ヶ月前と比べてどれだけ上がったか1年前に比べてどれだけ上がった計算します
copy /y "D:\WinPython\notebooks\ticker.csv" y:
::"C:\app\Perl\trdsql.exe" -is 1 "select substr(c8,1,4) ,round(c6, 0),c1 from y:/ticker.csv ORDER BY c8,c1 DESC" >y:\ticker1.csv
"C:\app\Perl\trdsql.exe" -is 1 "select c8 ,round(c6, 0),c1 from y:/ticker.csv ORDER BY c8,c1 DESC" >y:\ticker1.csv
@echo off
setlocal enableDelayedExpansion
set inputFile="y:\ticker1.csv"
set outputFile="y:\t.csv"
:: 初期値を設定
set prevValue=
:: ファイル内の各行を読み込んで処理
(for /f "usebackq tokens=1,2 delims=," %%a in (%inputFile%) do (
set "value1=%%a"
set "value2=%%b"
if "!value1!" neq "!prevValue!" (
if "" neq "!prevValue!" echo ,
SET /P ="!value1!,!value2!" < NUL
) else (
SET /P =",!value2!" < NUL
)
set "prevValue=!value1!"
)) > %outputFile%
echo , >> %outputFile%
@echo off
setlocal enabledelayedexpansion
:: 入力ファイルと出力ファイルのパス
set "input_file=y:\t.csv"
set "output_file=y:\t2.csv"
:: 一時ファイルのパス
set "temp_file=y:\temp.csv"
@echo off
:: 既存の一時ファイルを削除
if exist "%temp_file%" del "%temp_file%"
:: CSVファイルの読み込みと処理
for /F "tokens=*" %%A in (%input_file%) do (
set "line=%%A"
set "count=0"
set /A "i=0"
:: 各列をカウント
for %%B in (!line!) do (
set /A i+=1
if !i! GTR 2 (
if !previous_value! GTR %%B (
set /A count+=1
)
)
set "previous_value=%%B"
)
:: 結果を一時ファイルに出力
echo !line!,!count! >> %temp_file%
)
:: 出力ファイルに一時ファイルの内容をコピー
move /Y %temp_file% %output_file%
echo 処理が完了しました。結果は %output_file% に出力されました。
"C:\app\Perl\trdsql.exe" "SELECT c1,c15,concat(TRUNC(100*c2/c13),'%%'),concat(TRUNC(100*c2/c4),'%%'),* FROM y:/t2.csv" >y:\t.csv
"C:\app\Perl\trdsql.exe" "select * from y:/t.csv ORDER BY replace(c4, '%%', '') *1 DESC" >y:\t2.csv
"C:\app\Perl\trdsql.exe" "SELECT u.c1,h.*,u.c7 FROM y:/output1.txt as u LEFT JOIN y:/t2.csv as h ON(u.c2=h.c1) WHERE h.c6*1<8000" >y:\tic.csv
endlocal
timeout /t 55&goto:eof
exit /b
結果
クジラ,5000.T,8 ,521%,108%,0000.T,624,532,573,478,418,303,315,320,271,224,178,119,,8 ,御三家
加工して並び替えをしたりすると見えてくるものがあります
フジクラ
IHI
古河電
日製鋼
三菱重
川 重
リクルートHD
DeNA
ディスカッション
コメント一覧
まだ、コメントがありません