在本教程中,我想叙述一个简单的REST API实现,供Python用户获取实时和历史外汇数据。我们将尝试使用Python和Pandas了解消费流和历史外汇数据。
我们开始之前的谨慎,您至少需要对Python的中间理解水平。至少通过观看这些教程视频(例如在10分钟内学习Python)的基础知识。再次,其他编程语言的开发人员和愿意使用Traderermade Forex Rest API的有抱负的人也会发现此教程有帮助。 p>
所以让我们开始。
最初,您应该通过单击“免费加入API”来注册我们的API。当您获取API键时,请在安全的位置注明。 API密钥和Python环境实际上是实施本教程所需的。为了进一步简化,我建议没有Python设置的人去Google Colab并启动Jupyter笔记本。与他们一起安装Python的读者可以在本地运行这些程序。
您需要安装一些库。使用COLAB的人无需安装它。他们可以导入库。 Python的初学者或愿意快速测试的人可以使用Google的协作,因为它适合此目的。
使用实时端点调用实时外汇费用
import requests
from pprint import PrettyPrinter
pp = PrettyPrinter()
使用Google Colab的人可以将上述代码复制到Google Colab笔记本上的单元格中。然后,您需要点击shift+Enter或单击“播放”按钮。
单元格;一个新的可以编写下一个代码。在运行之前,让我们了解以下代码的含义。我们正在调用URL,这是端点。该货币以逗号分隔的字符串出现; API键是您注册后收到的唯一键。还记得您在最后一个单元格中导入了请求库吗?您将需要调用外汇REST API。请求库中的``获取函数''带有URL和JSON参数。在这里,这是Querystring。我们将收到API的响应。然后,我们使用PrettyPrinter打印响应以获得更好的外观。
url = "https://marketdata.tradermade.com/api/v1/live"
currency = "USDJPY,GBPUSD,UK100"
api_key = "api_key"
querystring = {"currency":currency,"api_key":api_key}
response = requests.get(url, params=querystring)
pp.pprint(response.json())
因此,我们在不到6行的代码中收到了USDJPY,GBPUSD和FTSE100的实时费率。但是,要分析此数据或更好地可视化速率,必须以表格格式排列它们,例如Pandas中的DataFrame。
在这一点上,我想介绍Pandas,这是一个构建用于数据分析的庞大库。熊猫带来了很多东西;易于迭代,安排,修改和计算数据等基本功能。然而,对于本教程,让我们考虑从API中获得,保存和带有表格格式的数据。让我们继续。
import pandas as pd
df = pd.DataFrame(response.json()["quotes"])
df
pandas可以直接从API获取数据。但是,为了更好地理解,我们正在使用本教程中的请求。如果您寻求的数据不是确切的数据框架,则最好使用该请求。请将您的响应中收到的引号传递到熊猫功能中。 PANDAS功能将数据转换为数据框架,就在那里!我们仅以一行代码将数据制成。
您可以看到熊猫的数据框很容易理解。但是,我们还没有完成。我们将进一步调整它,以使其更简单,更可读。您可以在仪器列中看到NAN。最终,询问,出价和中间是不合适的。同样,我们没有时间戳。作为下一步,我们将修复这些。
# if all instruments are currencies just write a # in front of line 1 and take # off line 2 in the below code. If all instruments are CFDs just write # in line 1 and 2.
import numpy as np
df["instrument"] = np.where(df["base_currency"].isnull(),df["instrument"],df["base_currency"]+df["quote_currency"])
#df["instrument"] = df["base_currency"]+df["quote_currency"]
df["timestamp"] = response.json()["timestamp"]
df["timestamp"] = pd.to_datetime(df["timestamp"], unit="s")
df
在这一点上,我们将导入另一个与Pandas一起搭配的库。然后,我们将使用np.Where函数更改仪器列。此功能接收(条件是正确的,是错误的)。然后,它创建了一个名为“ Timestamp”的新列,并指出了我们通过API Response.json收到的时间戳。最终,它将时间戳转换为可读格式。
现在,您可以意识到为什么熊猫是首选的; Python是有效的。值得注意的是,整个代码的执行速度令人惊讶。这是另一种方法:
可以使用此处显示的单个命令保存您的工作并通过CSV文件共享。
df.to_csv('live_rates.csv')
请检查我们的REST API数据文档页面以获取我们端点的广泛概述。
使用历史终点调用历史外汇数据
每日历史数据
每日历史终点与现场终点完全相同。代替时间戳,响应JSON有一个日期。另一个区别是,您获得开放,高,低和近距离的价格,而不是出价,中间,询问和报价。由于我们已经定义了货币和API密钥,因此我们需要提供需要数据的日期。
url = "https://marketdata.tradermade.com/api/v1/historical"
date = "2021-03-15"
querystring = {"currency":currency,"date":date, "api_key":api_key}
response = requests.get(url, params=querystring)
df = pd.DataFrame.from_dict(response.json()["quotes"], orient='columns', dtype=None, columns=None)
df["instrument"] = np.where(df["base_currency"].isnull(),df["instrument"],df["base_currency"]+df["quote_currency"])
df["date"] = response.json()["date"]
df["date"] = pd.to_datetime(df["date"])
df
您意识到可以轻松地以表格格式列出数据。同样,在大熊猫的帮助下,您可以根据需要安排数据。您也可以循环浏览请求并获取所需日期的数据。您可以通过多种方式利用大熊猫。对于其他两个数据历史终点:Minuse_Historical和Hour-Hissorical,每货币只能将每货币的费率仅为一个速率。因此,循环遍历数据至关重要。
分钟和小时的历史
由于两个端点的调用都是相似的,让我们使用一个示例进行一分钟的历史:
fx = ["EURUSD", "USDJPY"]
dates = ["2021-03-15-13:00"]
array = []
url = "https://marketdata.tradermade.com/api/v1/minute_historical"
for i in fx:
for date in dates:
querystring = {"currency":i,"date_time":date, "api_key":api_key}
response = requests.get(url, params=querystring)
array.append(response.json())
df = pd.DataFrame(array)
df
您现在必须看到,您可以轻松地索要各种日期和货币。需要一些努力来预先设置某些条件并创建一个系统来跟踪费率并突出一些基于它们的警报。由于本教程的范围不超出本教程的范围,因此我们不会深入研究。我建议您探索熊猫,这是一个用于数据分析的综合库。
使用limeseries端点来拨打时间列表外汇数据
通常,在请求历史终点时,请求是在特定时间的价格。让我们考虑时间。它用于图表,趋势分析和掘金中的数据。我们可以使用大熊猫执行此任务,并且不需要请求库。我们可以加速获取数据的过程。
url = "https://marketdata.tradermade.com/api/v1/timeseries?"
currency="USDJPY"
start_date="2021-03-01"
end_date="2021-03-22"
format="split"
interval="daily"
df =pd.read_json('https://marketdata.tradermade.com/api/v1/timeseries?currency='
+currency+'&api_key='+api_key+'&start_date='+start_date+'&end_date='
+end_date+'&format='+format+'&interval='+interval)
df = pd.DataFrame(df.quotes['data'], columns=df.quotes['columns'])
df.tail()
pandas可以使用read_json或read_csv之类的函数从API请求数据。外汇API次数端点采用一个名为“格式”的参数。将该参数设置为拆分时,将该参数转换为pandas数据框架。通过API的列。我们可以使用命令df.tail()并打印我们收到的最后5行数据。您可以使用命令df.head()查看前5个数据点。
您获得了正确格式的数据,并且可以轻松使用它。您还可以提出相同的请求以获取每小时和颗粒状的数据。做一些小改变。您需要将start_date和end_date更改为yyyy-mm-dd-hh-mm。同样,将间隔更改为每小时。查看以下请求:
您可以使用上述数据框架做很多事情。您可以为范围,%更改,波动性和滚动相关性创建一个额外的列。但是,这些方面不超出本文的范围。请查看我们的可视化文章,该文章涵盖了熊猫中的基本命令,以进行波动和可视化。
使用tick示例端点来调用tick外汇历史费率
历史刻度数据对于深入数据分析至关重要,包括交易算法和机器学习。最后,我们将涵盖这一关键方面。值得注意的是,刻度数据具有多维使用。实际上,只有REST API的一行代码中的一行代码将我们的数据在PANDAS数据框架中获取。
在运行代码之前,请提醒一下:对于免费用户,仅在过去四天(不包括今天)的滴答数据可用。同样,您不能在免费计划中要求数据超过30分钟。因此,每个呼叫将收到20个API请求。因此,建议使用df.to_csv(示例csvâ)在本地保存文件。
Google Colab用户的另一个提醒:我们的开始日期和结束日期格式具有tick数据终点的差距。您需要用%20填补这一空白。不需要在Jupyter笔记本或Python脚本中进行操作。
currency="EURUSD"
# start date is 2021-03-22 14:00 but %20 is added to the gap as url dont like empty spaces (this is added automatically but Google Colab doesnt seem to like this)
start_date="2021-03-22%2014:00"
end_date="2021-03-22%2014:30"
format="csv"
url = "https://marketdata.tradermade.com/api/v1/tick_historical_sample/"+currency+"/"+start_date+"/"+end_date+"?api_key="+api_key+"&format="+format
df =pd.read_csv(url)
df.tail()
您已经获得了将近2000个货币对欧元的壁虱历史数据点。访问Tradermade GitHub页面以获取Jupyter笔记本文件。我希望本教程将帮助初学者和经验丰富的程序员使用Python和Pandas从外汇REST API获取数据。您最喜欢改善本教程以及您希望看到的任何未来教程的建议。