Python で 豪ドル/円チャ-ト を探求
予測最終日取得
ここまでで
豪ドル/円 CSV ダウンロ-ドデ-タをロ-ソク足表示の X 軸日付処理が終了しました。
引き続き、グラフ X 軸日付予測最終日を取得します。
日付 from_date から 日数 add_days 後の日付 current_date を求める関数を作成します。
- ライブラリ取り込み
取り込む必要があるライブラリは1つです。
import datetime
- 予測最終日取得関数作成
日付 from_date から 日数 add_days 後の日付 current_date を求める関数
addBusinessDays(from_date, add_days)
を作成します。
最初に変数を定義します。
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
cur_date8 には 21/3/30 の様な予測最終日までの日付が入ります。
また、cur_date4 には 3/30 の様な予測最終日までの日付が入ります。
その違いは日付の書式だけです。
- 予測最終日までの土日判定
もし、current_date が Python における日付型 datetime になっていれば、日付に関わる操作を簡単に行うことができます。
それでは土日を除く予測最終日を求めていきます。
ループを使用して、日付に一度に1日を追加していきます。
予測最終日までに土日があればその日数分最終日を後ろにずらします。
current_date (from_date) を1日ずつ動かしながらその日が土日か判定します。
current_date += datetime.timedelta(days=1)
で current_date に1日分の日数を足すことができます。
datetime モジュールの weekday()メソッドで曜日を取得します。
current_date.weekday() は
土曜日 = 5
日曜日 = 6
となりますので平日か判定できます。
平日であればカウントし、そうでなければカウントせずに続行します。
予測最終日までの日数
business_days_to_add (add_days)
が5日であればこれが0になるまで続けます。
ここまでの判定部分をまとめると次のようになります。
なお、if 文の continue 以下は、土日はスキップされます。
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 business_days_to_add -= 1
- 各予測日を年/月/日に変換
求められた各予測日 current_date は日付型 datetime になっています。
これを文字列型に変換し、さらに年/月/日に変換します。
日時と文字列を相互に変換するメソッド
strftime(書式化コード)
を使用します。
e11 = current_date.strftime("%y/%m/%d")
年/月/日として文字列になりました。
具体的には 21/03/15 の様な文字列になりました。
ここから /0 を削除します。
e22 = e11.replace("/0", "/")
21/3/15 の様な文字列になりました。
次に、年の 21 を削除します。
e33 = e22[3:] # 21/ 削除
これで 3/15 の様な 月/日 に変換できました。
これらを予測日配列
cur_date8、cur_date4
にまとめておきます。
cur_date8.append(e22)
cur_date4.append(e33)
以上の内容は
if 文の continue 以下に置かれますので、土日はスキップされます。
最後に戻値として
return curdate8, curdate4
を返します。
以上をまとめると予測最終日取得関数は以下のようになります。
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
予測最終日取得関数使用
具体的に予測最終日取得関数を使用します。
mane_chart_go.csv デ-タの中の日付のラスト
Datea[-1]
から5平日後の予測最終日を求めます。
関数 addBusinessDays(from_date, add_days)
に渡す引数は datetime 型である必要があります。
Datea[-1] は文字型ですので、これを datetime 型に変換します。
文字列を datetime に変換するのが strptime() 関数です。
書式は
datetime.datetime.strptime(文字列, 書式指定文字列)
です。
ライブラリを取り込む時に、
import datetime
from datetime import datetime as dt
と書くと
dt.strptime(文字列, 書式指定文字列)
と省略して書くことができます。
Datea[-1] は
2020/04/15 10:00:00
のように年月日と時分秒が記述されていますので
tstr = Datea[-1]
tdatetime = dt.strptime(tstr, '%Y/%m/%d %H:%M:%S')
とすると日付のラストは datetime 型の日付に変換されます。
後は、予測最終日取得関数を呼び出すだけで予測最終日 lastday を求めることができます。
lastday = addBusinessDays(tdatetime, 5)
答えは
lastday[1] に予測最終日までの5日間が 月/日 の文字列型で入っています。
予測最終日は lastday[1][4] に入っています。
ちなみに lastday[0] には予測最終日までの5日間が 年/月/日 の文字列型で入っています。
xData の X 軸の目盛り日付と
xD の日付表示位置に lastday を付け加えます。
xDate.append(lastday[1][4])
xD.append(i + 5)
ここまでで、やっと目盛りの準備ができました。
引き続き、予測日/予測値の一覧表を作成していきます。