Python で 豪ドル/円チャ-ト を探求
豪ドル/円 CSV ダウンロ-ド,グラフ化合体ファイル
ここまでで、
豪ドル/円 CSV ダウンロ-ドデ-タ グラフ化ファイル動作確認
を行なうことができました。
引き続き、次のファイルをまとめて定時自動実行します。
まずは、2つのファイル
豪ドル/円 CSV ダウンロ-ドファイル
sc_sele_mane_go.py と
豪ドル/円 CSV ダウンロ-ドデ-タ グラフ化ファイル
mane_polyfit-7.py
を合体します。
そして、途中経過は一切表示しないようにします。
ヘッドレスモードを有効にします。
options.headless = True
また、Virtual Ubuntu 起動後最初の Chromium-browser の立ち上げ時間も配慮し
driver = Chrome(options=options)
直後の待ち時間設定を3秒から180秒に
time.sleep(3) # 必須
↓
time.sleep(180)
に延ばしています。
また、マネパ Login 画面を開いた後の待ち時間設定6秒を
driver.get('https://www.moneypartners.co.jp/login/')
time.sleep(6)
追加しています。
以下に合体したファイル内容を表示します。
from selenium import webdriver from selenium.webdriver import Chrome, ChromeOptions, Remote from selenium.webdriver.common.keys import Keys # 追加ボップアップ対応 from selenium.webdriver.common.alert import Alert import time from selenium.webdriver.support.select import Select import datetime import os from dotenv import load_dotenv load_dotenv() # 認証の情報は環境変数から取得する。 MANEPA_ID = os.environ['MANEPA_ID'] MANEPA_PA = os.environ['MANEPA_PA'] now = datetime.datetime.now() # 140日 減算 now100 = now - datetime.timedelta(days=140) now100str = now100.strftime('%Y%m%d') options = ChromeOptions() # ヘッドレスモードを有効にする options.headless = True # prefs オプション設定、デフォルトダウンロードディレクトリ変更 options.add_experimental_option("prefs", { "download.default_directory": "/home/yamada/public_html/manep" }) # ChromeのWebDriverオブジェクトを作成する。 driver = Chrome(options=options) time.sleep(180) # 必須、初回は 3ダメ180 # マネパ Login 画面を開く。 driver.get('https://www.moneypartners.co.jp/login/') time.sleep(6) # 追加 # タイトルに'マネーパートナーズ'が含まれていることを確認する。 assert 'マネーパートナーズ' in driver.title # ID,Password を入力する。 id = driver.find_element_by_name('loginId') id.send_keys(MANEPA_ID) password = driver.find_element_by_name('password') password.send_keys(MANEPA_PA) time.sleep(1) # ログインボタンをクリック login_button = driver.find_element_by_id('loginBtn') login_button.click() time.sleep(1) driver.get( 'https://account.moneypartners.co.jp/retail/pfx_download_chart.do') fr_date = driver.find_element_by_id('dateFrom') fr_date.send_keys(Keys.CONTROL, "a") fr_date.send_keys(Keys.DELETE) # 一旦値を選択してから消してそして入力する fr_date.send_keys(now100str) tp_chat = driver.find_element_by_id('chartType') select = Select(tp_chat) select.select_by_value('7') # valueが"7"のoptionタグを選択状態にする # 銘柄選択 commo = driver.find_element_by_id('commodity') select = Select(commo) select.select_by_value('3') # valueが"3"のoptionタグを選択(豪ドル)状態にする time.sleep(1) # 送信ボタンをクリック send_button = driver.find_element_by_id("outputChart") send_button.click() time.sleep(1) # 秒 logout_but = driver.find_element_by_id("logout") logout_but.click() time.sleep(3) # 秒 # 2行追加ポップアップ Alert(driver).accept() time.sleep(4) # 秒 driver.quit() # ブラウザーを終了する。 # ダウンロードディレクトリ、ファイル名変更 # フルパス指定 path = "/home/yamada/public_html/manep/" # ここには適当に mane_chart_go.csv をおいておくこと files = os.listdir(path) # 取得できるのはパスの文字列のリスト。 # files[*] に取得した PFX_CHART_20210209160810.csv が入る # files[*]='mane_chart_go.csv' files0 = files[0] if len(files[1]) > len(files[0]): files0 = files[1] path1 = path + files0 path2 = path + 'mane_chart_go.csv' os.rename(path1, path2) import datetime def addBusinessDays(from_date, add_days): cur_date8 = [] # 21/03/30 cur_date4 = [] # 3/30 business_days_to_add = add_days current_date = from_date while business_days_to_add > 0: current_date += datetime.timedelta(days=1) weekday = current_date.weekday() if weekday >= 5: # sunday = 6 continue #土日は以下はスキップ # 年/月/日として文字列にする #例 21/03/30 e11 = current_date.strftime("%y/%m/%d") e22 = e11.replace("/0", "/") e33 = e22[3:] # 21/ 削除 cur_date8.append(e22) cur_date4.append(e33) business_days_to_add -= 1 return cur_date8, cur_date4 import pandas as pd import numpy as np from datetime import datetime as dt import matplotlib.pyplot as plt # import mplfinance as mpf from mplfinance.original_flavor import candlestick_ohlc xl_df = pd.read_csv( "/home/yamada/public_html/manep/mane_chart_go.csv", encoding="cp932") Close = xl_df["終値(売り)"].values Idx = xl_df.index # Idx は 0 スタ-ト Idx5 = Idx[-5:] + 5 z = np.polyfit(Idx, Close, 9) p = np.poly1d(z) # print("予測値=最終日+1~+5日") # print(np.round(p(Idx5),3)) p_pand = np.round(p(Idx5),3) # ここから結果表示 Open = xl_df["始値(売り)"].values High = xl_df["高値(売り)"].values Low = xl_df["安値(売り)"].values # Closea = xl_df["終値(売り)"].values Date = xl_df["日付"].values Idx = xl_df.index tstr = Date[-1] tdatetime = dt.strptime(tstr, '%Y/%m/%d %H:%M:%S') # 文字列をdatetimeに変換するのがstrptime()関数 # datetime.datetime.strptime(文字列, 書式指定文字列) lastday = addBusinessDays(tdatetime, 5) # pandas concat 関数で横(列)方向へ連結 axis=1 を忘れるな lastday_pd = pd.DataFrame(lastday[0]) p_pand_pd = pd.DataFrame(p_pand) df_concat = pd.concat([lastday_pd, p_pand_pd], axis = 1) # print(df_concat) df_concat.to_csv( '/home/yamada/public_html/manep-img/mane_chart_go.csv', header=False, index=False) xDate = [] xD = [] for i, key in enumerate(Date): if(i % 10 == 0): e4 = str(key)[4:10] e6 = e4.replace("/0", "/") e8 = e6.lstrip("/") xDate.append(e8) xD.append(i) xDate.append(lastday[1][4]) xD.append(i + 5) ohlc = zip( Idx, Open, High, Low, Close) fig = plt.figure( figsize=(8.34, 5.56)) #③ ax = fig.add_subplot(1,1,1) #④ ax.grid() plt.plot( Idx, p(Idx), Idx5, p(Idx5),'bo') candlestick_ohlc( ax, ohlc, width=0.5, alpha = 1, colorup='r', colordown='g') #⑤ plt.xticks(xD, xDate) #⑥ plt.title('AUS$ / JPY chart')#⑦ plt.xlabel('Date') plt.ylabel('Yen') plt.savefig( '/home/yamada/public_html/manep-img/mane_chart_go.png')#⑧
上記ファイルは動作確認のため TeraPad 等で作成したら、ファイル名を適当に
sc_sele_mane_poly.py
として保存します。
文字コ-ドは、UTF-8N
BOM なし
改行コ-ドは、LF
です。
保存先はホスト Wimdows OS の 共有フォルダ c:\vb_public_html にしました。
なお、
c:\vb_public_html
はゲスト OS Ubuntu のなかの
/home/yamada/public_html
とリンクしていて共有フォルダの関係にあります。
詳細は
ユ-ザ-ごとの公開ディレクトリを用意する
を読んでみてください。
ここまでで、豪ドル/円 CSV ダウンロ-ド、グラフ化合体ファイルが完成しました。
引き続き、本ファイルの動作確認をします。