1. 数据清洗与整理
首先对原始样本数据进行清洗和整理,包括处理缺失值、异常值,确保数据的准确性和完整性。然后对数据进行归一化处理,以减少模型训练时的数值波动,确保各特征在相同的尺度上进行比较。
- 数据清洗:主要包括处理缺失值、异常值以及数据的重复性问题。
- 数据归一化:采用
min-max
归一化方法,将数据缩放到[0, 1]区间。 -
% 数据加载与清洗 data = readtable('gold_futures.csv'); % 加载黄金期货数据 % 数据清洗:移除缺失值 cleaned_data = rmmissing(data); % 数据归一化 min_data = min(cleaned_data{:, 2:end}); max_data = max(cleaned_data{:, 2:end}); normalized_data = (cleaned_data{:, 2:end} - min_data) ./ (max_data - min_data); % 将归一化数据重新组合 cleaned_data{:, 2:end} = normalized_data;
2. 技术指标的构建
通过整理后的黄金期货数据,构建常见的技术指标,例如移动平均线(MA)、相对强弱指数(RSI)等,并将这些技术指标作为特征输入到模型中。
% 计算技术指标 - 移动平均线(MA)
window = 10;
cleaned_data.MA = movmean(cleaned_data.Close, window);
% 计算相对强弱指数(RSI)
rsi_period = 14;
cleaned_data.RSI = rsindex(cleaned_data.Close, rsi_period);
5. 模型评估
使用均方根误差(RMSE)和决定系数(R²)两个评价指标,比较10个基模型的预测效果,并选择表现最好的模型进行集成预测。
6. 集成学习模型构建
将多个表现较好的模型(随机森林、XGBoost等)进行集成,构建更强大的国际黄金期货价格预测模型。
% 设定交易信号
buy_signal = ensemble_predictions > cleaned_data.MA; % 当预测价格高于MA时买入
sell_signal = ensemble_predictions < cleaned_data.MA; % 当预测价格低于MA时卖出
% 回测交易策略
initial_capital = 1000000;
positions = buy_signal * initial_capital; % 满仓策略
returns = diff([0; cleaned_data.Close]) ./ cleaned_data.Close; % 日收益率
% 计算策略收益率
strategy_return = sum(positions .* returns);
disp(['策略收益率: ', num2str(strategy_return)]);