python数据分析-黄金期货与现货价格探索分析

一、研究背景和意义

黄金作为一种重要的贵金属,具有保值和避险的特性,一直以来都是投资者关注的焦点。随着金融市场的发展,黄金期货和现货市场也逐渐成为重要的投资工具。然而,黄金期货和现货价格的波动受到多种因素的影响,如全球经济形势、政治局势、货币政策等。因此,深入研究黄金期货和现货价格的关系,对于投资者制定合理的投资策略具有重要的意义。

  1. 理论意义:通过对黄金期货和现货价格的研究,可以深入了解金融市场的运行机制和价格形成机制,为金融理论的发展提供实证支持。
  2. 实践意义:本研究可以为投资者提供有益的参考,帮助他们更好地理解黄金期货和现货市场的风险和收益特征,制定合理的投资策略,降低投资风险,提高投资收益。

二、研究意义

  1. 理论意义:通过对黄金期货和现货价格的研究,可以深入了解金融市场的运行机制和价格形成机制,为金融理论的发展提供实证支持。
  2. 实践意义:本研究可以为投资者提供有益的参考,帮助他们更好地理解黄金期货和现货市场的风险和收益特征,制定合理的投资策略,降低投资风险,提高投资收益。

二、实证分析

读取数据选取时间,并且检查数据集:

数据集和完整代码

报告代码和数据

import pandas as pd

# 加载数据
data = pd.read_excel('黄金 (3).xlsx')

# 转换日期列为 datetime 类型
data['来源'] = pd.to_datetime(data['来源'], errors='coerce')  # 错误的日期格式将被转换为 NaT

# 筛选指定日期范围内的数据
start_date = '2023-03-08'
end_date = '2024-03-08'
filtered_data = data[(data['来源'] >= start_date) & (data['来源'] <= end_date)]

# 删除含有缺失值的行
filtered_data_clean = filtered_data.dropna()

# 保存清洗后的数据到新文件
filtered_data_clean.to_excel('cleaned_data.xlsx', index=False)

日期(来源),期货价格和现货价格。首先我将使用这些数据来进行线性回归分析,以探索期货价格(x)和现货价格(y)之间的关系。

检查一下缺失值或非数值数据

import numpy as np

# Checking again for missing or infinite values in the dataset
missing_values = cleaned_data.isnull().sum()
infinite_values = cleaned_data.isin([np.inf, -np.inf]).sum()

missing_values, infinite_values

划分X和Y

X_clean = cleaned_data['期货']  # Futures
y_clean = cleaned_data['现货']  # Spot

# Adding a constant to the model (intercept)
import statsmodels.api as sm
X_clean = sm.add_constant(X_clean)

R-squared: 0.996,这意味着模型能够解释现货价格变化的大部分变化。

系数: 期货价格的系数是0.9991,表明期货价格每变化1单位,现货价格大约变化0.9991单位。

P值: 期货价格的P值接近0,这表明期货价格对现货价格有显著的影响。

总的来说,这个线性模型表明期货价格和现货价格之间存在非常强的正相关关系。最后可视化一下拟合程度情况:

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns

# Scatter plot of Futures vs Spot prices
plt.figure(figsize=(10, 6))
sns.scatterplot(x=cleaned_data['期货'], y=cleaned_data['现货'])

# Regression line
sns.lineplot(x=cleaned_data['期货'], y=model_clean.predict(X_clean), color='red')

plt.title('现货价格 vs 期货价格')
plt.xlabel('期货价格')
plt.ylabel('现货价格')
plt.show()

接下来定义函数来执行ADF检验

from statsmodels.tsa.stattools import adfuller, kpss

# 定义函数来执行ADF检验
def adf_test(timeseries):
    result = adfuller(timeseries)
    print('ADF检验结果:')
    print('ADF统计量:', result[0])
    print('p值:', result[1])
    print('临界值:')
    for key, value in result[4].items():
        print(f'   {key}: {value}')
    if result[1] < 0.05:
        print('结论: 时间序列是平稳的(拒绝原假设)')
    else:
        print('结论: 时间序列是非平稳的(接受原假设)')

# 定义函数来执行KPSS检验
def kpss_test(timeseries):
    result = kpss(timeseries)
    print('KPSS检验结果:')
    print('KPSS统计量:', result[0])
    print('p值:', result[1])
    print('临界值:')
    for key, value in result[3].items():
        print(f'   {key}: {value}')
    if result[1] < 0.05:
        print('结论: 时间序列是非平稳的(拒绝原假设)')
    else:
        print('结论: 时间序列是平稳的(接受原假设)')

随后分别进行差分处理

# 对期货价格进行一阶差分处理
cleaned_data['期货_diff'] = cleaned_data['期货'].diff()
# 对现货价格进行一阶差分处理
cleaned_data['现货_diff'] = cleaned_data['现货'].diff()

再次检查

随后使用VAR模型

常数项(const)的系数为-0.074735,标准误差为 0.054815,t 统计量为-1.363,p 值为 0.173。这表明常数项在统计上不显著。

L1.期货_diff 的系数为-0.141932,标准误差为 0.018006,t 统计量为-7.882,p 值为 0.000。这表明期货_diff 的滞后一期对当前期货_diff 有显著的负影响。

L1.现货_diff 的系数为 0.077880,标准误差为 0.021395,t 统计量为 3.640,p 值为 0.000。这表明现货_diff 的滞后一期对当前期货_diff 有显著的正影响。

残差相关性:残差的相关矩阵显示,期货_diff 和现货_diff 的残差之间存在正相关关系,相关系数为 0.501425。这表明两个方程的残差可能存在一定的相关性,需要进一步检查模型的设定是否合理。

综上所述,VAR 模型的结果表明期货_diff 和现货_diff 之间存在相互影响的关系。期货_diff 的滞后一期对当前期货_diff 有负影响,对当前现货_diff 有正影响;现货_diff 的滞后一期对当前期货_diff 有正影响,对当前现货_diff 有负影响。然而,残差的相关性表明模型可能存在一些问题,需要进一步检查和改进。

三、结论

通过对黄金期货和现货价格的实证研究,我们得出以下结论:

黄金期货和现货价格存在长期均衡关系:通过协整检验和误差修正模型的分析,我们发现黄金期货和现货价格之间存在长期均衡关系,即它们的价格走势具有一定的相关性。黄金期货价格对现货价格具有引导作用:通过格兰杰因果检验的分析,我们发现黄金期货价格对现货价格具有引导作用,即期货价格的变化会影响现货价格的走势。黄金期货和现货价格的波动具有相似性:通过对黄金期货和现货价格的波动率进行分析,我们发现它们的波动具有相似性,即它们的价格波动都比较剧烈。

综上所述,本研究通过对黄金期货和现货价格的实证研究,深入探讨了它们之间的关系。研究结果表明,黄金期货和现货价格存在长期均衡关系,期货价格对现货价格具有引导作用,且它们的波动具有相似性。这些结论对于投资者制定合理的投资策略具有重要的参考价值。

创作不易,希望大家多点赞关注评论!!!

### 黄金价格预测模型的构建 #### 导入所需库 为了建立黄金价格预测模型,首先需要导入一系列必要的Python库。这些库用于数据处理、特征工程以及建模。 ```python import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense import matplotlib.pyplot as plt ``` #### 加载并探索数据集 接下来是从文件中加载历史黄金价格数据,并对其进行初步分析以了解其特性。 ```python data = pd.read_csv('/path/to/gold_prices.csv') print(data.head()) plt.figure(figsize=(10, 6)) plt.title('Gold Price History') plt.plot(data['Date'], data['Close']) plt.xlabel('Date') plt.ylabel('Price (USD)') plt.show() ``` #### 数据预处理 对时间序列数据执行标准化操作可以提高后续LSTM网络的学习效率。这里采用最小最大缩放器来调整数值范围至\[0,1\]区间内[^1]。 ```python scaler = MinMaxScaler(feature_range=(0, 1)) scaled_data = scaler.fit_transform(data[['Close']]) ``` 创建适合输入到循环神经元中的样本格式——即每条记录不仅包含当前时刻的价格信息,还携带过去一段时间内的趋势变化作为辅助判断依据。 ```python def create_dataset(dataset, time_step=1): X, Y = [], [] for i in range(len(dataset)-time_step-1): a = dataset[i:(i+time_step), 0] X.append(a) Y.append(dataset[i + time_step, 0]) return np.array(X), np.array(Y) time_step = 60 # 使用前60天的数据来进行预测 X_train, y_train = create_dataset(scaled_data, time_step) X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1) # 调整维度适应LSTM层的要求 ``` #### 构建训练模型 定义一个简单的长期短期记忆(LSTM)架构,它能够捕捉长时间跨度下的模式关联性;接着编译该模型并通过反向传播算法优化权重参数直至收敛为止。 ```python model = Sequential([ LSTM(units=50, return_sequences=True, input_shape=(time_step, 1)), LSTM(units=50), Dense(1) ]) model.compile(optimizer='adam', loss='mean_squared_error') history = model.fit(X_train, y_train, epochs=20, batch_size=32, validation_split=0.2) ``` 完成上述过程之后即可保存最佳性能版本以便日后调用做进一步测试或实际应用部署工作[^2]。 ```python best_model_path = './models/best_gold_price_prediction.h5' model.save(best_model_path) ``` #### 测试可视化结果 最后一步是对新收集来的未见过的数据片段实施同样的转换流程后送入已训练完毕的估计函数当中获取相应的输出值,并通过图表形式直观展示两者之间的差异程度。 ```python loaded_model = load_model(best_model_path) predictions = loaded_model.predict(X_test).reshape(-1, 1) predicted_prices = scaler.inverse_transform(predictions) plt.figure(figsize=(10, 6)) plt.title('Model Prediction vs Actual Gold Prices') plt.plot(test_dates, test_actuals, color='blue', label='Actual Prices') plt.plot(test_dates, predicted_prices, color='orange', label='Predicted Prices') plt.legend() plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值