さくら VPS Python 豪ドル/円 4時間足予測
X 軸日付予測4時間足最終日時取得
ここまでで
豪ドル/円 CSV ダウンロ-ドデ-タをロ-ソク足表示の X 軸日付処理が終了しました。
引き続き、X 軸日付予測4時間足最終日時を取得します。
ある日時 current_date から4時間ずつ延長する回数 business_days_to_add_h 後の日時
cur_date8 書式例:21/03/30 12~
を求めます。
これにより24時間先までの予測日時6本のそれぞれの日時を知ることができます。
- ライブラリ取り込み
取り込む必要があるライブラリは1つです。
import datetime
- 予測最終日時取得関数作成
日時 current_date から4時間ずつ延長する回数 business_days_to_add_h 後の日時 cur_date8 を求める関数
addBusinessDays_4h(current_date, business_days_to_add_h)
を作成します。
例えば24時間後の日時を知りたいのであれば
business_days_to_add_h = 6
とすれば求めることができます。
最初に変数を定義します。
def addBusinessDays_4h(current_date, business_days_to_add_h): cur_date8 = [] # 21/03/30 12~ cur_date4 = [] # 3/30 man_f = 1 #月曜フラグ 0 or 1 doyo_f = 0 #土曜フラグ 0 or 1 current_date0 = current_date weekday0 = current_date0.weekday() if(weekday0 == 0): #月 man_f = 0
cur_date8 には 21/3/30 の様な予測最終日時までの日付が入ります。
また、cur_date4 には 3/30 の様な予測最終日時までの日付が入ります。
その違いは日付の書式だけです。
- 予測最終日時までの土日月判定
4時間足は曜日によって存在状態が変わります。
火~金は 00:00 から4時間ごとに1本づつ存在するのですが、その他の曜日は存在状態が異なります。
その状況は下図のようになります。 - Python における日付型 datetime
current_date が Python における日付型 datetime になっていれば 日付に関わる操作を簡単に行うことができます。
それでは土日を除く予測最終日時を求めていきます。
ループを使用して、日時に一度に4時間を追加していきます。
予測最終日時までに土日月曜日があれば曜日にしたがって最終日時を後ろにずらします。
current_date を4時間ずつ動かしながらその日が土日月か判定します。
current_date += datetime.timedelta(hours=4)
で current_date に4時間分の時間数を足すことができます。
datetime モジュールの weekday()メソッドで曜日を取得します。
current_date.weekday() は
土曜日 = 5
日曜日 = 6
となりますので平日か判定できます。
平日であれば処理を実行しそうでなければ処理をしません。
日曜日(6) であれば処理をしません。
hour_doyo = current_date.hour とすると時刻がわかります。 土曜日(5) で、かつ hour_doyo = 8 であれば doyo_f = 1 とします。
土曜日(5) で、かつ土曜フラグ(doyo_f == 1)であれば処理をしません。
土曜は 08~12時以降の4時間足はありません。
月曜日(0) で、かつ月曜フラグ(man_f == 1) であれば man_f = 0 とします。
月曜日 00~04時の4時間足は存在しません。
以上の条件を満たさないときは(主に平日)、処理を実行します。
予測最終日時までの4時間期間数
business_days_to_add_h
が6であればこれが0になるまで続けます。
ここまでの判定部分をまとめると次のようになります。
なお、if 文の continue 以下は、スキップされ while に戻ります。
def addBusinessDays_4h(current_date, business_days_to_add_h): # current_date : 処理する初日の日時 例) 2022-02-03 00:00:00 # business_days_to_add_h : 4時間ずつ延長する回数 cur_date8 = [] # 21/03/30 12~ cur_date4 = [] # 3/30 man_f = 1 #月曜フラグ 0 or 1 doyo_f = 0 #土曜フラグ 0 or 1 current_date0 = current_date weekday0 = current_date0.weekday() if(weekday0 == 0): #月 man_f = 0 while business_days_to_add_h > 0: current_date += datetime.timedelta(hours=4) weekday = current_date.weekday() hour_doyo = current_date.hour if weekday == 6: # sunday = 6 continue if((weekday == 5) and (hour_doyo == 8)): #土 doyo_f = 1 if((weekday == 5) and (doyo_f == 1)): #土 continue if((weekday == 0) and (man_f == 1)): #月 man_f = 0 continue # 年/月/日 時刻として文字列にする処理①をここに入れる business_days_to_add_h -= 1 return cur_date8, cur_date4
- 各予測日時を年/月/日/時に変換(処理①)
求められた各予測日時 current_date は日付型 datetime になっています。
これを文字列型に変換し、さらに年/月/日/時に変換します。
日時と文字列を相互に変換するメソッド
strftime(書式化コード)
を使用します。
e11 = current_date.strftime("%y/%m/%d %H")
年/月/日 時として文字列になりました。
具体的には 22/03/15 00 の様な文字列になりました。
ここから /0 を削除します。
e22 = e11.replace("/0", "/")
22/3/15 00 の様な文字列になりました。
次に、年の 22 を削除します。
e33 = e22[3:] # 22/ 削除
これで 3/15 00 の様な 月/日 に変換できました。
これらを予測日時配列
cur_date8、cur_date4
にまとめておきます。
cur_date8.append(e22)
cur_date4.append(e33)
以上の内容は
if 文の continue 以下に置かれますので、日曜日及び条件付き月土曜日時はスキップされます。
最後に戻値として
return curdate8, curdate4
を返します。
ここまでで、予測最終日時取得関数の説明が完了しました。
引き続き、この関数ファイルをまとめます。