使用Python可视化外汇数据
历史外汇数据对于识别趋势、评估过去的表现以及对货币市场做出明智的预测至关重要。通过清晰地显示价格波动和模式,可视化这些数据可以增强分析,帮助交易者和分析师做出更好的决策。
本教程将指导您使用TraderMade API检索历史货币数据,并使用Plotly将其可视化为烛形图格式。烛形图在金融分析中很流行,因为它可以清晰地显示价格波动,包括特定时期内开盘价、最高价、最低价和收盘价。我们将使用指定日期范围内的欧元/美元货币对数据。
在本教程结束时,您将能够
- 使用Python发出获取历史数据的API请求。
- 将JSON数据格式化并处理成数据框。
- 使用Plotly创建交互式烛形图进行金融分析。
前提条件
在开始之前,请确保您拥有以下内容:
1. Python基础知识:熟悉Python编程,特别是函数和错误处理,将非常有帮助。
2. TraderMade API密钥:访问“https://tradermade.com/dashboard”获取API密钥。在TraderMade注册以获得免费的API密钥,您将在教程中使用它。
3. 已安装所需的库
requests:要安装requests,请使用以下命令:
pip install requests
此库使您可以向API发出HTTP请求。
pandas:要安装pandas,请使用以下命令:
pip install pandas
Pandas将用于以表格格式组织和操作API数据。
plotly:要安装plotly,请使用以下命令:
pip install plotly
此库有助于创建交互式图表,在本教程中特别是烛形图。
示例
导入所需的库
这些库是必不可少的
- requests:向TraderMade API发出HTTP请求。
- pandas:组织和操作从API获取的数据。
- datetime:用于日期格式化和转换。
- plotly.graph_objects:用于创建可视化效果,在本教程中特别是烛形图。
import requests import pandas as pd from datetime import datetime import plotly.graph_objects as go
设置API密钥和基本URL
要访问数据,请使用您的TraderMade API密钥和历史数据的基本URL。请务必将“KEY”替换为您实际的API密钥。
API_KEY = 'KEY' # Replace with your TraderMade API Key BASE_URL = 'https://marketdata.tradermade.com/api/v1/historical'
定义参数
Set the currency pair and the date range for the historical data you wish to retrieve. symbol = 'EURUSD' # For EUR/USD currency pair start_date = '01-01-2023' # Start date in DD-MM-YYYY format end_date = '31-01-2023' # End date in DD-MM-YYYY format
定义日期转换函数
API期望日期采用YYYY-MM-DD格式,因此辅助函数将转换DD-MM-YYYY输入格式。def convert_date_to_api_format(date_str): return datetime.strptime(date_str, '%d-%m-%Y').strftime('%Y-%m-%d')
获取历史数据函数
此函数从API检索数据。def fetch_historical_data(symbol, start_date, end_date): # Convert date formats api_start_date = convert_date_to_api_format(start_date) api_end_date = convert_date_to_api_format(end_date) params = { 'currency': symbol, 'date': api_start_date, # Starting date 'end_date': api_end_date, # Ending date 'api_key': API_KEY } response = requests.get(BASE_URL, params=params) # Check if the request was successful if response.status_code != 200: print(f"Error: Received status code {response.status_code}") print("Response:", response.json()) raise Exception("Failed to fetch data from TraderMade API") # Log raw response for reference data = response.json() print("Raw API Response:", data) # Check for the 'quotes' field in response if 'quotes' not in data: print("Error: 'quotes' field not found in response") print("Response:", data) raise KeyError("'quotes' field missing from API response") # Convert the 'quotes' field to DataFrame df = pd.DataFrame(data['quotes']) print("DataFrame structure:\n", df.head()) # Handle date column if 'date' in data: df['date'] = data['date'] else: # Estimate dates if only one is provided df['date'] = pd.date_range(start=api_start_date, periods=len(pdf), freq='D') # Ensure the date column is datetime df['date'] = pd.to_datetime(df['date']) return df
获取和显示数据
使用该函数获取数据,确保结构已准备好进行绘图。
df = fetch_historical_data(symbol, start_date, end_date)
检查所需列
烛形图需要“开盘价”、“最高价”、“最低价”和“收盘价”列。验证这些列是否存在。
required_columns = {'open', 'high', 'low', 'close'} if not required_columns.issubset(df.columns): missing_cols = required_columns - set(df.columns) raise ValueError(f"Missing columns in data for candlestick chart: {missing_cols}")
创建和自定义烛形图
现在您已经拥有了数据,您可以使用Plotly对其进行可视化。
fig = go.Figure(data=[go.Candlestick( x=df['date'], open=df['open'], high=df['high'], low=df['low'], close=df['close'], name=f'{symbol} OHLC' )]) fig.update_layout( title=f'{symbol} Candlestick Chart from {start_date} to {end_date}', xaxis_title='Date', yaxis_title='Price', xaxis_rangeslider_visible=False ) fig.show()
处理错误
如果上述步骤中发生错误,则会捕获并打印该错误,以帮助诊断问题。
except Exception as e: print(f"An error occurred: {e}")
结论
通过此设置,您可以轻松修改符号或日期范围,并使用TraderMade API可视化各种货币对的历史数据。如果将其应用于较大的项目,请记住安全地处理API密钥,并在“https://tradermade.com/docs/restful-api”文档中查看API使用限制。