Pythonを学習中のものです。APIについての勉強中、為替チャートを表示するプログラムを書いていました。
APIからの情報は以下のように抜き取ることができました。(これはdfをいうリストに保存してあります。)
open high low close time time_id
0 139.632 139.632 139.560 139.628 2017-01-13 07:15:00+00:00 1
1 139.625 139.642 139.551 139.568 2017-01-13 07:20:00+00:00 2
2 139.567 139.596 139.473 139.493 2017-01-13 07:25:00+00:00 3
3 139.493 139.596 139.452 139.580 2017-01-13 07:30:00+00:00 4
4 139.580 139.606 139.542 139.554 2017-01-13 07:35:00+00:00 5
.. ... ... ... ... ... ...
283 136.843 136.997 136.838 136.972 2017-01-16 06:50:00+00:00 284
284 136.968 137.009 136.931 136.957 2017-01-16 06:55:00+00:00 285
285 136.955 137.022 136.800 136.880 2017-01-16 07:00:00+00:00 286
286 136.881 136.944 136.818 136.850 2017-01-16 07:05:00+00:00 287
287 136.856 136.872 136.717 136.813 2017-01-16 07:10:00+00:00 288
APIからは情報を抜き取ることに成功し、いざプロットしようといったところで以下のエラーが発生しました。
Traceback (most recent call last):
File "C:\Users\yagla\Program_lessons\Python\oanda.py", line 44, in <module>
mpf.plot(df, type = "candle")
File "C:\Users\yagla\AppData\Local\Programs\Python\Python39\lib\site-packages\mplfinance\plotting.py", line 275, in plot
dates,opens,highs,lows,closes,volumes = _check_and_prepare_data(data, config)
File "C:\Users\yagla\AppData\Local\Programs\Python\Python39\lib\site-packages\mplfinance_arg_validators.py", line 29, in _check_and_prepare_data
raise TypeError('Expect data.index as DatetimeIndex')
TypeError: Expect data.index as DatetimeIndex
DatetimeIndexが設定されていないからだと思い、以下のコードを追加しました。
df.set_index('time_id', inplace = True)
しかし、依然としてエラーは出続けました。いったい何がダメなのでしょうか。何卒ご教授お願いいたします。
以下は全コードです。
import pandas as pd import numpy as np import datetime import matplotlib.pyplot as plt import mplfinance as mpf from oandapyV20 import API import oandapyV20.endpoints.instruments as instruments days = 1 amount_candles = int(days * 24 * 60 / 5) # 表示するローソク足の全本数 display_time = amount_candles * 5 # 表示する時間 now_time = datetime.datetime.now() - datetime.timedelta(hours = 9) # 日本時間 start_time = now_time - datetime.timedelta(display_time) # 表示の開始時間 start_time = start_time.strftime("%Y-%m-%dT%H:%M:00.000000Z") # 要求する情報 params = { "alignmentTimezone": "Japan", "from": start_time, "count": amount_candles, "granularity": "M5" } # APIにアクセス access_token = "3127ccabb13084358520fe34701cfa5d-e225ccabf4340db5236500eccdda190b" api = API(access_token = access_token, environment = "practice") # 情報を要求 request = instruments.InstrumentsCandles( instrument = "GBP_JPY", params = params ) response = api.request(request) # データを形成 df = pd.DataFrame([row["mid"] for row in response['candles'] ]) # リスト内表記でresponseの中のcandlesの中のmidを新たなリストdfとして保存 df = df.astype(np.float64) df.columns = ["Open", "High", "Low", "Close"] df["time"] = [row["time"] for row in response["candles"]] df["time"] = pd.to_datetime(df["time"]).astype(str) # 冗長な日時データを短縮整形(文字型に変換) df["time_id"] = [i + 1 for i in range(len(response["candles"]))] df.set_index('time_id', inplace = True) mpf.plot(df, type = "candle")
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/29 04:19