量化交易系统的示例,它包括数据处理、模型训练和交易决策等步骤。我将为您逐步解释代码的每个部分。
-
环境设置和文件检查:
import json import os.path import pandas as pd from tqdm import tqdm import glob from paddlets.datasets import TSDataset from paddlets.transform import StandardScaler from paddlets.models.forecasting import MLPRegressor from paddlets.models.forecasting import NHiTSModel from paddlets.models.forecasting import RNNBlockRegressor from paddlets.ensemble import WeightingEnsembleForecaster
代码首先导入了所需的库和模块。
-
文件和目录检查与创建:
result_center = "forecasting_all_result_center" pic_center = "pic_forecasting_center" model_center = "model_forecasting_center_2048_a_b" best_param_center = "best_forecasting_param_center" excel_center = "best_forecasting_EXCEL_center_a_b_3" if not os.path.exists(result_center): os.mkdir(result_center) if not os.path.exists(pic_center): os.mkdir(pic_center) if not os.path.exists(model_center): os.mkdir(model_center) if not os.path.exists(best_param_center): os.mkdir(best_param_center)
这段代码检查了几个目录是否存在,如果不存在,则创建它们。
-
数据处理:
csv_paths = glob.glob(os.path.join("./tu_share_data_day", "*.csv")) sum_dam_data = [] for csv_path in tqdm(csv_paths): new_data = pd.read_csv(csv_path).values.tolist() if len(new_data) < 2048: continue new_data.reverse() new_data = new_data[-2048:] for i in range(len(new_data)): new_data[i].append(int(i + 1)) sum_dam_data.extend(new_data) dam_data = pd.DataFrame(sum_dam_data, columns=['ts_code', 'trade_date', 'open', 'high', 'low', 'close', 'pre_close', 'change', 'pct_chg', 'vol', 'amount', 'index_new']) print(dam_data)
这段代码从指定的文件夹中读取CSV文件,处理数据,并将其合并为一个大的数据集。
-
数据集构建:
dataset = TSDataset.load_from_dataframe( dam_data, # pd.DataFrame group_id='ts_code', time_col="index_new", # 索引 target_cols=['open', 'high', 'low', 'close', 'pre_close'], # 需要预测的结果 )
这里使用
TSDataset
类从paddlets
库将数据帧转换为TSDataset
对象,以便于后续的模型训练和预测。 -
模型训练和风险管理:
# 模型训练相关代码被注释掉了
代码中包含了一些模型训练的参数和模型定义,但由于它们被注释掉了,所以这部分代码实际上并没有执行。
-
交易决策逻辑(续):
for csv_path in tqdm(csv_paths): try: base_new_data = pd.read_csv(csv_path).values.tolist() except: print(csv_path) continue base_case = 0 base_num = 0 money = 0 deal = [] last_price_data = str(pd.read_csv(csv_path)['trade_date'].iloc[0]) export_csv = os.path.split(csv_path)[-1] print(last_price_data) if len(base_new_data) < 2048: continue base_new_data.reverse() for i in range(len(base_new_data)): base_new_data[i].append(int(i + 1)) for day_i in range(256): new_data = base_new_data[-2048:-(256 - day_i)] dam_data = pd.DataFrame(new_data, columns=['ts_code', 'trade_date', 'open', 'high', 'low', 'close', 'pre_close', 'change', 'pct_chg', 'vol', 'amount', 'index_new']) dataset = TSDataset.load_from_dataframe( dam_data, # pd.DataFrame time_col="index_new", # 索引 target_cols=['open', 'high', 'low', 'close', 'pre_close'], # 需要预测的结果 ) train_dataset, val_dataset = dataset.split(0.8) # 8:2 val_dataset = scaler.transform(val_dataset) predicted = reg.recursive_predict(val_dataset, 3) predicted = scaler.inverse_transform(predicted) predicted = predicted.to_dataframe() high_value = predicted.max().to_dict()['high'] low_value = predicted.min().to_dict()['low'] high_index = predicted[predicted['high'] == high_value].index.values[0] - len(dam_data) low_index = predicted[predicted['low'] == low_value].index.values[0] - len(dam_data) # 交易逻辑 ... pd.DataFrame(deal).to_csv(os.path.join("deal", export_csv), index=False) if not os.path.exists(os.path.join("good_deal_101", last_price_data)): os.mkdir(os.path.join("good_deal_101", last_price_data)) os.mkdir(os.path.join("good_deal_105", last_price_data)) if deal[-1]['rate'] > 10: if pd.DataFrame(deal)['rate'].sum() > 0: pd.DataFrame(deal).to_csv(os.path.join("good_deal_101", last_price_data, export_csv), index=False) if deal[-1]['rate'] > 50: if pd.DataFrame(deal)['rate'].sum() > 0: pd.DataFrame(deal).to_csv(os.path.join("good_deal_105", last_price_data, export_csv), index=False)
这部分代码包含了交易决策的逻辑。它读取每个CSV文件,处理数据,然后使用训练好的模型(
reg
)来预测未来的价格。然后,它根据预测的价格和其他交易逻辑来做出买卖决策,并记录交易的结果。 -
结果记录:
if not os.path.exists(os.path.join("good_deal_101", last_price_data)): os.mkdir(os.path.join("good_deal_101", last_price_data)) os.mkdir(os.path.join("good_deal_105", last_price_data)) if deal[-1]['rate'] > 10: if pd.DataFrame(deal)['rate'].sum() > 0: pd.DataFrame(deal).to_csv(os.path.join("good_deal_101", last_price_data, export_csv), index=False) if deal[-1]['rate'] > 50: if pd.DataFrame(deal)['rate'].sum() > 0: pd.DataFrame(deal).to_csv(os.path.join("good_deal_105", last_price_data, export_csv), index=False)
这段代码将交易结果保存到CSV文件中,并根据特定的条件将交易结果保存到不同的目录中,这些目录是根据最后一天的价格数据命名的。
-
完整交易逻辑解释:
代码中的交易逻辑是一个简化的示例,它基于预测的价格和一些特定的规则来做出买卖决策。交易逻辑包括计算base_case
(基础情况),base_num
(基础数量),money
(资金)以及交易的总和。交易逻辑还考虑了价格的变化,并根据这些变化调整base_case
和base_num
,以及计算最终的收益rate
。
这段代码是一个复杂的交易系统示例,它结合了数据处理、模型预测和交易决策。在实际应用中,这样的系统会涉及更多的风险管理和合规性考虑,以及更复杂的交易逻辑和后处理步骤。此外,代码中的模型训练部分被注释掉了,这意味着在实际应用中,您需要训练模型并将其集成到系统中。
请注意,这段代码是一个示例,它可能需要根据实际的市场数据和交易平台进行调整。此外,量化交易涉及高风险,因此在实际应用之前,建议进行充分的测试和验证。