見出し画像

#AI自作 No.9: クリック証券CFDヒストリカルデータの一括取得スクリプトの作成

こんばんは。
先日のこちらの記事はご覧になっていただけましたでしょうか?

これまで私が投稿した記事で最速でビュー件数が伸びています。
つい先日の記事ですが、すでに私の記事のなかでは最高のビュー数になっています。
さて、今日の記事は先日の記事の続編になります。
実は先日の記事では当初CFD商品のヒストリカルデータを取得するものを作成したかったのですが、下調べの段階でFXヒストリカルデータの参考記事があったので、まずFXから手をつけました。
ということで、こちらの記事では当初の目標であったCFD商品のヒストリカルデータを一括ダウンロードするスクリプトの作成について、ご紹介・共有いたします。

背景

ヒストリカルデータを使う目的は前回の記事でご説明したとおりです。
当初はCFDのダンウロードは、FXで作成したスクリプトに多少手を加えればすくにできるものと考えていました。
そのため、今回のCFD用のダウンロードツールの記事を書く予定はなかったのですが、実際にやってみたところ同じクリック証券のデータであるにも関わらずFX用のスクリプトでは全くうまく動きませんでした。
当初の思い違いもあり、CFD用ダウンロードには非常にてこずりました。
CFDのヒストリカルデータのダンウロード画面がFXのように単純な仕組みにはなっておらず、その調査・対応に非常に時間がかかりました。

  • CFDのダウンロード画面への遷移は別セッションを起動し、きちんとデータ連携が必要

  • 別セッションで起動した遷移先のお知らせダイアログを回避する方法の調査に時間がかかり、最終的にも完全な自動化はできずに終わった

  • ダウンロード画面からのダウンロード起動もページに埋め込まれた<a>タグのクリックで起動する必要あり

上記は正確な理解ではないかもしれませんが、通常の画面操作と同様の処理をしないと私には実装が非常に難しかったです。
このためFXのダウンロードでは利用しなかった、よくテストツールとして利用されるSeleniumというツールを利用して実装しました。
このSeleniumを利用すれば、人のWebブラウザでの操作を疑似的にスクリプト化することができます。
また、実際にブラウザが立ち上がり、スクリプトによる画面操作をPC上で追跡でき、デバックも非常にやりやすいという利点があります。
いずれにしても、FXのダウンロードとは全く別のツールを利用することになりました。

CFD用ダウンロードの処理イメージ

このツールを利用して実際にダウンロードする画像を準備しましたので、まずこちらをご覧ください。
全体の処理の流れがご覧いただけるので、イメージがつきやすいと思います。

前回同様Pythonスクリプトになっているので、Pythonの実行環境を準備し、必要なライブラリなどをインストールした上で実行してください。
利用する上での注意点は以下の通りです。
2点目の太字で協調していますが、このスクリプトは完全自動化ではなく、途中人手での操作が必要です。
この部分をスクリプトでの実装がどうしてもできませんでした。
ここだけは、人が介在して対応いただく必要があります。

  • 最初に起動した際にクリック証券へのログイン情報、CFD商品、対象年(From ~To)、ダウロード先のフォルダが指定できます。この設定はスクリプトの保管フォルダ配下に ".settingsCFD"ファイルとして保持され、次回以降に再利用されます。

  • 初期設定後に、「ダウンロード開始」をするとクリック証券にログインし、すぐにCFD画面に遷移します。ここで、「CFDが初めての方へ」というダイアログがでますが、「表示しない」ボタンをクリックしてこのダイアログをすぐに閉じてください。
    この処理が遅れるとエラーが発生するので、最初からやり直しが必要です。

全体的に画面のレスポンスなどに依存している部分が多いため、ネットワークが不安定などの理由でブラウザのレスポンスが悪い場合にはエラーになりやすいと思います。
スクリプトソースでご覧いただけますが、ところどころ時間待ち time.sleep()処理を入れています。
これは画面のレンダリングなど状況により時間がかかったりする場合の対応で、今回の実装ではかなりテキトーに待ち時間の間隔を設定しています。
あくまでご自身個人で利用するための参考、テンプレートとしてご利用ください。
スムーズに処理されれば、指定した期間のヒストリカルデータが一括でダウンロードできると思います。

CFDヒストリカルデータのダウンロードスクリプトを共有します。
こちらのGithubサイトの最新コードを参照ください。

改善点などのコメントは大歓迎です。
よろしくお願いいたします。

最後に

この記事はお気に入りいただけましたでしょうか?
内容お役にたちましたらうれしく思います。
また、サポートなど応援いただけましたら幸いです。


いいなと思ったら応援しよう!

なべなべ
記事の内容を有効に活用できた、記事を気に入っていただけたようでしたらチップでサポートいただけますと嬉しいです。 また、こんなことを知りたい、あんなことができないかなど記事にしたいことがございましたら、サポートの有無にかかわらずお知らせくださいませ。