質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

568閲覧

python oanda API 自動取得

globalplus

総合スコア119

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/03/18 04:47

oanda APIを自動(バックグラウンドでも)で取得し続けるプログラムを書きたいと思っています。
ところが、調べても中々出てこないので自動取得に関して書いてあるサイト(oanda API以外でも嬉しいです)や実際のコードのヒントを頂ければ嬉しいです。
以下のコードではレートの取得、チャート表示が出来ていますが、新しいデータを更新したい時にはプログラムを実行し直さないといけません。

python

1#oandaAPI 2from oandapyV20 import API 3import oandapyV20.endpoints.instruments as instruments 4import pandas as pd 5import oandapy 6#日付 7import pytz 8import datetime 9from datetime import datetime, timedelta 10#ローソク足ライブラリ 11import matplotlib.pyplot as plt 12import mpl_finance as mpf 13from matplotlib import ticker 14import matplotlib.dates as mdates 15#tkinter 16import tkinter as tk 17#-------------------------------------------------------------------------------# 18# APIの設定 19accountID = "accountID" 20access_token = "access_token" 21api = API(access_token=access_token) 22 23# APIへ接続 24oanda = oandapy.API(environment="practice", access_token=access_token) 25 26# 5分足で1000データ 27params = { 28 "count": 1000, 29 "granularity": "M5" 30} 31 32# APIへ過去データをリクエスト 33r = instruments.InstrumentsCandles(instrument="USD_JPY", params=params) 34api.request(r) 35 36#日本時間へ変換 37def iso_to_jp(iso): 38 date = None 39 try: 40 date = datetime.strptime(iso, '%Y-%m-%dT%H:%M:%S.%fZ') 41 date = pytz.utc.localize(date).astimezone(pytz.timezone("Asia/Tokyo")) 42 except ValueError: 43 try: 44 date = datetime.strptime(iso, '%Y-%m-%dT%H:%M:%S.%f%z') 45 date = date.astimezone(pytz.timezone("Asia/Tokyo")) 46 except ValueError: 47 pass 48 return date 49 50# datetime -> 表示用文字列 51def date_to_str(date): 52 if date is None: 53 return '' 54 return date.strftime('%Y/%m/%d %H:%M:%S') 55 56# ドル円の現在のレートを取得 57res = oanda.get_prices(instruments="USD_JPY") 58 59print(date_to_str(iso_to_jp(res['prices'][0]['time']))) 60 61# 日本時間へ変換 62iso_to_jp(res['prices'][0]['time']) 63 64# 為替レートのdictをDataFrameへ変換 65df = pd.DataFrame.from_dict({r.response['candles'][i]['time']: r.response['candles'][i]['mid'] 66 for i in range(0,len(r.response['candles'])) 67 for j in r.response['candles'][i]['mid'].keys()}, 68 orient='index', 69 ) 70 71# date型を綺麗にする 72df.index = pd.to_datetime(df.index) 73print(df.tail()) 74 75# 念のためDataFrameの確認 76df.head() 77 78# ローソク足 79def candlechart(data, width=0.8): 80 fig, ax = plt.subplots() 81 mpf.candlestick2_ohlc(ax, opens=data.o.values, closes=data.c.values, 82 lows=data.l.values, highs=data.h.values, 83 width=width, colorup='r', colordown='b') 84 85 # x軸を時間にする 86 xdate = data.index 87 ax.xaxis.set_major_locator(ticker.MaxNLocator(6)) 88 89 def mydate(x, pos): 90 try: 91 return xdate[int(x)] 92 except IndexError: 93 return '' 94 95 ax.xaxis.set_major_formatter(ticker.FuncFormatter(mydate)) 96 ax.format_xdata = mdates.DateFormatter('%Y-%m-%d') 97 98 99 fig.autofmt_xdate() 100 fig.tight_layout() 101 102 return fig, ax 103 104# ローソク足チャートのプロッティング 105candlechart(df) 106 107plt.show()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

time.sleep関数というものを見つけたので試してみます。わからなくなったらまた質問させて頂くかもしれません。

投稿2019/03/18 05:38

globalplus

総合スコア119

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問