银行港币基准汇率数据集(多货币对,高频采集)
浏览 463下载 71数据大小: 0.65文件格式: CSV2024/09/05
#数据预处理#时间序列预测#PyTorch#深度学习#GRU模型#货币汇率预测#早停策略#数据加载器#序列化数据输入#金融数据分析#神经网络训练#模型训练#回归任务#金融市场预测#机器学习在金融中的应用
数据集简介
该数据集包含了银行一天内多种货币对港币的汇率变动情况。数据采集频率为每10秒一次,涵盖了17种不同货币的汇率变化,包括但不限于美元、人民币等主要国际货币。此数据集能够为金融分析、汇率预测模型、外汇市场研究等提供基础的数据支持。
数据集特点:
- 时间跨度:一天(24小时)
- 采样频率:每10秒一次
- 货币种类:共17种货币对港币的汇率
- 数据格式:结构化数据,适合使用CSV或其他表格形式存储
- 应用场景:适用于时间序列分析、机器学习预测模型训练等
通过这个数据集,研究人员和开发者可以探索不同货币对之间的相关性,分析短期汇率波动模式,并尝试建立预测模型来预估未来的汇率走向。对于那些希望了解外汇市场动态并进行量化交易策略开发的人来说,这将是一个有价值的资源。
数据预览
| id | time | currency | sell | buy |
|---|---|---|---|---|
| 1 | 2024-09-03 17:39:20 | 美元/港元 | 7.77350 | 7.82480 |
| 2 | 2024-09-03 17:39:20 | 人民幣/港元 | 1.08869 | 1.10139 |
| 3 | 2024-09-03 17:39:20 | 英鎊/港元 | 10.16879 | 10.29224 |
| 4 | 2024-09-03 17:39:20 | 日圓/港元 | 0.05310 | 0.05384 |
| 5 | 2024-09-03 17:39:20 | 澳元/港元 | 5.22392 | 5.29908 |
| 6 | 2024-09-03 17:39:20 | 紐元/港元 | 4.78764 | 4.86627 |
| 7 | 2024-09-03 17:39:20 | 加元/港元 | 5.73364 | 5.80478 |
| 8 | 2024-09-03 17:39:20 | 歐羅/港元 | 8.56151 | 8.66949 |
| 9 | 2024-09-03 17:39:20 | 瑞士法郎/港元 | 9.09467 | 9.20896 |
| 10 | 2024-09-03 17:39:20 | 丹麥克郎/港元 | 1.14668 | 1.16238 |
| 11 | 2024-09-03 17:39:20 | 挪威克郎/港元 | 0.72602 | 0.74026 |
| 12 | 2024-09-03 17:39:20 | 瑞典克郎/港元 | 0.74939 | 0.76495 |
| 13 | 2024-09-03 17:39:20 | 新加坡元/港元 | 5.93863 | 5.98435 |
| 14 | 2024-09-03 17:39:20 | 泰國銖/港元 | 0.22440 | 0.23267 |
| 15 | 2024-09-03 17:39:20 | 文萊元/港元 | 5.93863 | 5.98435 |
| 16 | 2024-09-03 17:39:20 | 南非蘭特/港元 | 0.42805 | 0.44341 |
| 17 | 2024-09-03 17:39:30 | 美元/港元 | 7.77350 | 7.82480 |
| 18 | 2024-09-03 17:39:30 | 人民幣/港元 | 1.08868 | 1.10137 |
| 19 | 2024-09-03 17:39:30 | 英鎊/港元 | 10.16801 | 10.29146 |
| 20 | 2024-09-03 17:39:30 | 日圓/港元 | 0.05310 | 0.05384 |
| 21 | 2024-09-03 17:39:30 | 澳元/港元 | 5.22392 | 5.29908 |
| 22 | 2024-09-03 17:39:30 | 紐元/港元 | 4.78764 | 4.86627 |
| 23 | 2024-09-03 17:39:30 | 加元/港元 | 5.73364 | 5.80478 |
| 24 | 2024-09-03 17:39:30 | 歐羅/港元 | 8.56151 | 8.66949 |
| 25 | 2024-09-03 17:39:30 | 瑞士法郎/港元 | 9.09467 | 9.20896 |
| 26 | 2024-09-03 17:39:30 | 丹麥克郎/港元 | 1.14666 | 1.16236 |
| 27 | 2024-09-03 17:39:30 | 挪威克郎/港元 | 0.72601 | 0.74025 |
| 28 | 2024-09-03 17:39:30 | 瑞典克郎/港元 | 0.74939 | 0.76495 |
| 29 | 2024-09-03 17:39:30 | 新加坡元/港元 | 5.93863 | 5.98435 |
| 30 | 2024-09-03 17:39:30 | 泰國銖/港元 | 0.22440 | 0.23267 |
| 31 | 2024-09-03 17:39:30 | 文萊元/港元 | 5.93863 | 5.98435 |
| 32 | 2024-09-03 17:39:30 | 南非蘭特/港元 | 0.42804 | 0.44339 |
| 33 | 2024-09-03 17:39:40 | 美元/港元 | 7.77350 | 7.82480 |
| 34 | 2024-09-03 17:39:40 | 人民幣/港元 | 1.08866 | 1.10136 |
| 35 | 2024-09-03 17:39:40 | 英鎊/港元 | 10.16801 | 10.29146 |
| 36 | 2024-09-03 17:39:40 | 日圓/港元 | 0.05310 | 0.05384 |
| 37 | 2024-09-03 17:39:40 | 澳元/港元 | 5.22392 | 5.29908 |
| 38 | 2024-09-03 17:39:40 | 紐元/港元 | 4.78764 | 4.86627 |
| 39 | 2024-09-03 17:39:40 | 加元/港元 | 5.73364 | 5.80478 |
| 40 | 2024-09-03 17:39:40 | 歐羅/港元 | 8.56151 | 8.66949 |
| 41 | 2024-09-03 17:39:40 | 瑞士法郎/港元 | 9.09467 | 9.20896 |
| 42 | 2024-09-03 17:39:40 | 丹麥克郎/港元 | 1.14664 | 1.16234 |
| 43 | 2024-09-03 17:39:40 | 挪威克郎/港元 | 0.72572 | 0.73995 |
| 44 | 2024-09-03 17:39:40 | 瑞典克郎/港元 | 0.74932 | 0.76489 |
| 45 | 2024-09-03 17:39:40 | 新加坡元/港元 | 5.93863 | 5.98435 |
| 46 | 2024-09-03 17:39:40 | 泰國銖/港元 | 0.22440 | 0.23267 |
| 47 | 2024-09-03 17:39:40 | 文萊元/港元 | 5.93863 | 5.98435 |
| 48 | 2024-09-03 17:39:40 | 南非蘭特/港元 | 0.42783 | 0.44317 |
| 49 | 2024-09-03 17:39:50 | 美元/港元 | 7.77350 | 7.82480 |
示例代码(Python 加载)
在这种情况下,可以考虑使用门控循环单元(GRU),它是RNN的一种变体,与LSTM类似,但在参数量上更少,同样能够处理长期依赖的问题。
我们将使用PyTorch库来实现一个基本的GRU模型。以下是使用PyTorch构建GRU模型的基本代码示例:
首先,确保安装了必要的库:
pip install pandas numpy torchimport pandas as pd
import numpy as np
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
# 加载数据
data_path = 'exchange_rates.csv' # 假设这是你的数据文件路径
df = pd.read_csv(data_path, parse_dates=['datetime']) # 假设'datetime'是时间戳列
# 确保时间戳被正确解析
df['datetime'] = pd.to_datetime(df['datetime'])
# 将时间戳转换为数值特征(例如,Unix时间戳)
df['timestamp'] = df['datetime'].apply(lambda x: x.timestamp())
# 定义特征和目标变量
# 这里我们使用前n个货币对作为特征来预测USD对HKD的汇率
features = list(df.columns[2:-1]) # 假设除了第一个时间戳列外的所有其他列都是特征
target = 'USD_to_HKD'
# 数据预处理
scaler = MinMaxScaler()
df[features] = scaler.fit_transform(df[features])
df[target] = scaler.fit_transform(df[[target]])
# 准备训练数据
class ExchangeRateDataset(Dataset):
def __init__(self, features, target, seq_length=10):
self.features = features
self.target = target
self.seq_length = seq_length
self.data_size = len(features) - seq_length
def __len__(self):
return self.data_size
def __getitem__(self, index):
start_index = index
end_index = start_index + self.seq_length
feature_seq = self.features[start_index:end_index]
target_val = self.target[end_index]
return feature_seq, target_val
seq_length = 10 # 序列长度
X = df[features].values
y = df[target].values
dataset = ExchangeRateDataset(X, y, seq_length)
# 划分数据集
train_size = int(0.8 * len(dataset))
train_dataset, test_dataset = torch.utils.data.random_split(dataset, [train_size, len(dataset) - train_size])
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)
# 定义GRU模型
class GRUModel(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim, n_layers):
super(GRUModel, self).__init__()
self.hidden_dim = hidden_dim
self.n_layers = n_layers
self.gru = nn.GRU(input_dim, hidden_dim, n_layers, batch_first=True)
self.fc = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
h0 = torch.zeros(self.n_layers, x.size(0), self.hidden_dim).requires_grad_()
out, (hn) = self.gru(x, (h0.detach()))
out = self.fc(out[:, -1, :])
return out
input_dim = len(features)
hidden_dim = 32
output_dim = 1
n_layers = 1
model = GRUModel(input_dim, hidden_dim, output_dim, n_layers)
# 损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
# 训练模型
n_epochs = 100
early_stopping = EarlyStopping(patience=10, verbose=True)
for epoch in range(n_epochs):
model.train()
for i, (seq, labels) in enumerate(train_loader):
optimizer.zero_grad()
seq = seq.float()
labels = labels.float()
y_pred = model(seq)
loss = criterion(y_pred, labels)
loss.backward()
optimizer.step()
early_stopping(loss, model)
if early_stopping.early_stop:
print("Early stopping")
break
print(f"Training complete after {epoch+1} epochs.")这段代码展示了如何使用PyTorch来定义一个GRU模型,并使用给定的数据集进行训练。注意,实际应用时可能需要根据数据的具体情况进行调整,比如调整序列长度、隐藏层大小、层数、学习率等超参数。此外,这里使用了一个简单的早停策略来防止过拟合。