クリさんのSeller Central

売って売って売りまくり! 酒田と三種の神器で売り屋になり田舎で豊かで上質な暮らしを目指すブログ

ガラクタ相場機械

夏休みでヒマなので、久しぶりにプログラミングでもやってみた。

昔、若い頃はこう見えてもエンジニアでプログラマだったから、昔取った杵柄ですね。
今、プログラミング言語もずいぶん便利になっていて面倒くさい部分は抽象化されてカンタンになっている。有り体にいえばオブジェクト指向っていうやつだ。よって低レベルなコーディングはすべてモジュールという形で実装されているから、プログラマはそれをいちいちゼロから書く必要はなく利用するのみである。

たぶん今一番流行っているPythonというスクリプト言語を使って、前から自動化できたら、、と思ってたのを書いてみた。こいつは今やそこそこミッションクリティカルなシステムにでも使用されている。例えばインスタグラムはメインの開発言語はPythonだそうだ。H/Wのスピードがものすごく上がったから、プログラムそのものの実行スピードより開発スピードを重視するようになっているのがトレンドらしいね。

大学生で理系なら今どきPythonぐらいは習うだろうが、こういう感じで応用できると随分時間の短縮になると思う。

Yah○○ファイナンスから指定の銘柄の月足4本値を1983年から取得しCSVファイルに保存する

注意: こういうWebページから必要なデータを抜いてくる技術をWebスクレイピングというが、サーバーに負担を掛けるので良い子は真似しないように。あまりやるとブロックされるよww

#! /usr/local/bin/python3

import pandas as pd

url_b = 'https://finance.yah○○.co.jp/quote/9101.T/history?from=19830101&to=20210704&timeFrame=m&page='

page = 1
url = url_b + str(page)

data = pd.read_html(url)
data_stk = data[0]

for page in range(2,100):
        try:
                url = url_b + str(page)
                data = pd.read_html(url)
                data_stk = data_stk.append(data[0])
        except:
                break

data_stk.to_csv("9101-3.csv")


実行結果:

f:id:kurisan1970:20210808120138p:plain
Webにアクセスするので実行時間は10秒ほど。手動でやるよりはマシでしょ?

1分足の4本値データを任意の時間足の4本値に変換する



#! /usr/local/bin/python3

import sys
import pandas as pd
import re
import datetime
column_names = ["DateTime","Open","High","Low","Close"]
column_datetime_format = "%Y%m%d%H%M"

csv_in = pd.read_csv("JP225_20210301.csv",encoding="ms932",sep=",")
csv_in = csv_in.rename(columns={"日時":"DateTime","始値(BID)":"Open","高値(BID)":"High","安値(BID)":"Low","終値(BID)":"Close"})
csv_in["DateTime"] = pd.to_datetime(csv_in.DateTime,format=column_datetime_format)
csv_in = csv_in.set_index("DateTime")

print(csv_in.head())

#df_one = csv_in["2021-03-01": "2021-03-02"]
df_one = csv_in

df_hour = pd.DataFrame()
tf = "4H"

df_hour["Open"] = df_one["Open"].resample(tf).first()
df_hour["High"] = df_one["High"].resample(tf).max()
df_hour["Low"] = df_one["Low"].resample(tf).min()
df_hour["Close"] = df_one["Close"].resample(tf).last()

print(df_hour.head())

実行結果:
f:id:kurisan1970:20210808120133p:plain