株価データを取得して加工する 改良版

以前作ったものを改良しみました。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

bat,

Posted by eightban