IT」カテゴリーアーカイブ

pythonの引数は原則参照渡しだが、実際は限定的で注意

pythonの引数は、ミュータブル(変更が可能)とイミュータブル(変更ができない)ものが存在する。
つまり参照渡しをしてもイミュータブルの型(int,str,floatなど)は値が変わらないから値渡しと同じになる。ミュータブル型(list,setなど)を使えば参照渡しになる。
引数の値を変えたい場合はミュータブル型にするか、メソッドの返り値として変更した値を受け取るほうが理解しやすい。

参考URL

Python♪次は理屈で覚えよう「参照渡し」「浅いコピー」「深いコピー」
https://snowtree-injune.com/2019/09/16/shallow-copy/#toc7

 

【Python】参照渡しと値渡しの違い

https://algorithm.joho.info/programming/python/call-by-reference/

エクセルVBA、楽天証券マーケットスピードのRSSを使用して株価情報取得

マーケットスピードの株価チャートを見ていて、株価や板をずっと見ていると目が疲れてくる。
株価の変動が大きいときは我慢できるが、商いが薄いときは株価が動かず眠くなる。
そこで、楽天証券マーケットスピードのRSSを使用して株価情報を取得して必要な値になったら色の変化で表示させたら便利かもと思った。
このRSSを使用して株価情報をエクセルのシードに表示させるとどうなるか試してみた。
なお、エクセルを使用するために、毎月約1300円くらい支払う。年払いのほうが安いが毎回数ヶ月くらいしかエクセルを使わないので今回も月極にした。

マーケットスピード2のRSSのマクロはこちら

・RSS(リアルタイムスプレッドシート)
「RSSとは、マーケットスピード投資情報ページ「市況情報(先物OP市況情報)」に表示される値(注)を特殊な関数(RSS関数)を用いて市販表計算ソフト『Microsoft Excel』に取り込み、セル上に表示させるツールです。」
https://www.rakuten-sec.co.jp/MarketSpeed/onLineHelp/msman1_11_1.html

マーケットスピードの機能でも株価情報を表示させることは可能だが、RSSとエクセルを使用することにヨテ自分だけの必要な情報のみを表示させるシートを作成することができる。

・VBAの注意点
IF文のelse if は[elseif](他の言語は、大抵[else if]のようにスペースを入れる)
等価はイコール1つ(他の言語は大抵イコールが2つ必要)
ちなみにVBAとマクロは厳密に仕様が異なることがあるので確認するとよい

・使用環境:Windows10、エクセル Office365 マーケットスピード、RSS.exe
なお、RSSを登録するにはエクセルのマクロを有効にするなど、いくつか設定が必要である。
またRSSが実行できるようにセキュリティソフトの設定も必要。
これらの設定は楽天証券のホームページとグーグル先生が教えてくれる。
(数年経過すると、サイトが閉鎖されているのでネットの情報も永遠ではない)

・エクエルシート構成、マクロ仕様

‘VBAはシングルクォーテーションがコメントになる
‘Ctr+spaceで入力途中でコマンドの候補が表示される。簡易的な入力支援みたい

・動作環境:Windows,マーケットスピード、RSSを起動しマーケットスピードにログインしておく
‘Windowsのみ、RSSが対応しているのはWindowsのみでMacは動作しない
・目的
‘RSSで取得した情報を一定時間間隔で別セルにコピーする、時刻、比率等を記載
‘株価の動きを予測する資料とする
・動作手順
‘マーケットスピードにログインして、RSSを起動する「接続中」となる。「接続処理中」は接続できていないので接続中になるように調整すること
‘エクセルを起動して該当のファイルを開く
‘取得したい銘柄コードを入力する。この作業は手作業
‘マクロを実行させる。その後は、自動でセルのコピーが始まる
‘市場が開いていない時間帯はコピー処理は行わない。
‘2021・04・26

 

楽天証券のマーケットスピード2、エクセル、別のブックのセルからコピーする案

作業はこれからで、アイデアだけをまとめておく

楽天証券の「マーケットスピード2」(2)のRSSと「マーケットスピード」(1)のRSSは構成が異なる。
「マーケットスピード」(1)(以下(1)とする)のRSSは実行形式であり、(1)を起動してRSS.exeを起動する必要があった。
一方「マーケットスピード2」(以下(2)とする)のRSSは、(2)を起動すれば使用できる。(2)用のRSS.exeは存在しない。
なお、エクセルのアドイン登録がどちらの場合も済んでいるものとする。
(1),(2)は同時に実行が可能である。

やってみたこと

(1)の場合VBAでループ処理により、株価の取得からいくつかの処理を行っていた。
(2)で(1)の同様な機能を実行しようとしても、動作しなかった。
具体的には(1)を別名保存して、(2)用の関数名に置換した。大まかに置換することで実行可能。
必要な関数の変更を行ったが、(2)では実行できなかった。エラー等の発生はないが、マクロとVBAの組み合わせの相性が悪いようだった。

改良

よって、
(2)で(1)と同様な機能を実行する場合、(2)で取得したデータをブックのシートのセルに貼り付け、その貼り付けたデータを別のブック(VBAコードあり)へコピーすることにした。
つまり、(2)のブックで株価等のデータを集め、別の処理をするブック(B)を作成し、ブック(B)にループ処理を行うVBAコードを記述することにした。

ブックA(マーケットスピード2のRSS):株価等の情報をセルに確保

ブックB(VBAコード):株価等の情報をもとに適宜必要な処理を行う。

VBA,マクロ

ブックAのマクロ
(これから)

ブックBのVBAコード
(これから)

以前のRSSを利用したマクロ

MarketSpeed2RSSのローソク足のデータ取得例

楽天証券、マーケットスピード2のRSSの関数、ローソク足RSS2の機能 @RSSChart()
9201コードのローソク足を取得例
2分足2M、2本取得(もっと多くのローソク足データを取得できる)

A2セルにマクロを記入すると、A3以降に出力結果が表示される。ローソク足データを取得することによりリバウンド時の状態を検知できる。また出来高の増減を把握できる

注意点

「マーケットスピード2」RSSのVBAと「マーケットスピード(1)」RSSのVBAは違うようだ。1で動いたエクセルVBAが、2では動かないところがあった。(1)でループ処理してたところが(2)では動かない。なので、(1)と(2)は別々の動作と考える必要があり、しばらくは(1)と併用するほうが良さそう。2021/08/27

環境

Windows10、エクセル、MarketSpeed2(RSSはMarketSpeed2を起動するだけでよい)

ボートレース公式サイトから情報を取得するスクレイピング

#2021/07/07
#環境:OS:Mac, 言語python, anaconda, 作業をするときはanaconda jupterのエディタよりMS Codeのほうがやりやすい。
#boatRaceCompuYosou.ipynbで使用
”’
・仕様
ボートレース公式https://www.boatrace.jp/
から「本日の払戻金一覧」のところを
クリックして、本日開催の場の開催時間をクリックする
出走表から結果までの情報を掲載したページが表示される
コンピュータ予想 https://www.boatrace.jp/owpc/pc/race/racelist?
その中のコンピュータ予想タブをクリック
「予想フォーカス」という項目に予想が表示される。
蒲郡  jcd=07 hd=20210707
1R rno=1

 

・目的:予想するレースの当選番号が出現するかもしれないレースを探す。

例えば6-全-全が出現するレースを探したい。その場合コンピュータ予想の予想フォーカスで予想されている番号に
6-全-全に該当しそうな予想が表示されていたら、そのレースを出力したい。
なお、コンピュータ予想は当然ながら、当たるとは限らず確率は低い
すべてのレースの予想を手動で探すのは面倒なので、自動で探したい。

 

・機能:該当のページから必要な情報を取得して、該当の情報(ここでは予想番号)を取得して

CSV出力する。

 

作業内容

1.「本日の払戻金一覧」7月7日の場合
https://www.boatrace.jp/owpc/pc/race/pay?hd=20210707
から開催される全レースのURLを取得
2.取得したURLを場ごとに取得。ループ
3.レースごとにループする
4「予想フォーカス」という項目のところの予想番号を取得する
5.予想する番号、例えば6,1の数字があればリストに追加する
6.CSV出力する。該当する予想がなければ出力しない。

 

※使用上の注意点

一度のスクレイピングとCSV出力だけに対応していて、前回作成したCSVを読み込んで処理を追記する仕様はない。
一度作成したファイルに、レース結果を追記変更することはしない。
ようするに、朝実行して、夜に実行しても朝作成したファイルを読み込んで処理をするものではない。
朝実行すると、朝のファイルを作成し、その後実行すればそのWebサイトの情報をCSVとして出力する。

 

>>なぜこのように書くかというと、レースが開催されるとレース結果が払戻金一覧ページに表示される。
レースが開催されていない場合は時刻が記載されていて、出力されるCSVの記載が異なるので、後日CSVの内容を
確認すると、「レース結果が後で追記されるのか?」と勘違いするかもしれない。
現時点では、払戻金一覧のレース前の状態で、コンピュータ予想を知りたいだけの機能である。
よってコンピュータ予想を取得してCSV出力して、その後の処理は何もしない。

 

ソースコード

クラスコード

CSVの出力例 6コースが予想されている番号を出力

その後、改良したクラスコードはこちら

今日のエラー、Python,JupyterLab「ChromeDriver only supports」

環境MacOS,Python,Chrome,JupyterLab、Mysql

症状:JupyterLab上でPythonを実行したらエラーが表示

エラー「

原因:Chromeドライバーのバージョンが異なる。

対応:ドライバーを最新に更新する 最新のバージョンを入れるpipとBrew

ターミナルでバージョンを確認するバージョンをチェックする たぶん古いものが入っている
chromedriver –version

https://sites.google.com/a/chromium.org/chromedriver/downloads
にアクセスして最新の番号を取得する。以下の==の右の方にバージョン番号を入れる。そしてMacのターミナルに以下を実行する

pip install chromedriver-binary==91.0.4472.101
brew reinstall chromedriver
#再度

chromedriver –versionを実行してダイアログエラーが表示された、セキュリティとプライバシーで許可する

Google Colaboratory python df.head 出力されない printで囲め

こんな感じでGoogle Colaboratoryでpythonを実行してheadの中身が表示されなかった。Colabでは単にprintで囲めばよいだけだった。

誤り
dflist=[6050,
3546
]
for list in dflist:
nlist=str(list)+’.T’
df=data.DataReader(nlist,’yahoo’,start,end)
df.head(2)
正しくは
dflist=[]
#1
dflist=[6050,
3546
]
for list in dflist:
nlist=str(list)+’.T’
df=data.DataReader(nlist,’yahoo’,start,end)
print(df.head(2))

MarketSpeed 自動ログイン Windows10 VBA

環境;Windows10,VBA
WindowsのMarketSpeedを便利にする。
スクリプト実行でログインまでを自動処理
いちいちパスワードを入力する手間を省く。
あくまでも利用者が限定されている前提。

Macの場合はAutomatorを使った Macはこちら

詳しくは参考サイトにて
なおスクリプトの実行の際は
システム環境設定のセキュリティで、許可が必要

<スクリプト例>IDはMarketSpeed側に設定済。パスワードのみ入力
テキストファイルの拡張子をvbsにする。そしてそのファイルをダブルクリックすれば処理が始まる。
注意点
SJISで保存すること
アプリの絶対パスを確認する

 

参考

【Automator】アプリを起動してパスワードを自動入力する
https://kinopy-techhack.hateblo.jp/entry/180308

システム環境設定のセキュリティで、許可
https://www.dev-dev.net/entry/2019/08/25/091633

以下の内容をテキスト化して拡張子をVBAにする

 

MarketSpeed 自動ログイン Mac Automator

環境;Mac Big Sur,Automator (LaunchPadの「その他」)

MacのMarketSpeedを便利にする。

スクリプト実行でログインまでを自動処理

いちいちパスワードを入力する手間を省く。

あくまでも利用者が限定されている前提。

AutomatorはLaunchPadの「その他」の中にある。

新規スクリプトは新規からアプリケーションを選択する。

詳しくは参考サイトにて

なおスクリプトの実行の際は

システム環境設定のセキュリティで、許可が必要

<スクリプト例>IDはMarketSpeed側に設定済。パスワードのみ入力

 

参考

【Automator】アプリを起動してパスワードを自動入力する

https://kinopy-techhack.hateblo.jp/entry/180308

システム環境設定のセキュリティで、許可

https://www.dev-dev.net/entry/2019/08/25/091633

株価チェックEXCELマクロ、安値高値

株価をチェックして、安値高値でサウンドを再生

ちなみにヤフーファイナンスでも安値、高値に達したらメールで知らせてくれるサービスは存在するが、メールを見ないといけないし、複数の銘柄をチェックする場合は面倒になってくる。エクセルシートを見ながら、再生音で安値、高値をチェックできたら便利と思った。

エクセルを複数起動したい場合は、Windowキー+Rファイルを指定して起動で[excel /x]と入力して起動させて、エクセルブックを開けばよい。

仕様
楽天証券、マーケットスピード、RSS.exeが必要。Windowsのみ。
VBAによるループ処理で、現在値と安値、高値を比較します。
DoEvntsでイベントを受け付けます。
安値、高値になるとサウンドが1回再生されます。達成チェック列(H2以降)の文字を消すと再度再生します。サウンドファイルは個別に用意をする必要があります。
コードを入力後は銘柄ボタンをクリックしないと株価を取得しません。

参考にしたサイト

https://dp-invest.hateblo.jp/entry/2020/11/09/192427

使い方

(1)コードを入力して銘柄ボタンをクリックすると銘柄名と株価を取得します。
(2)安値と高値を入力します。省略可能。
(3)チェック開始ボタンで比較実行
(4)終了ボタンで処理を停止