From 636be73db0e836720b9cd186d8f3785bb006a289 Mon Sep 17 00:00:00 2001 From: bingyi Date: Sun, 2 Nov 2025 08:41:37 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AD=96=E7=95=A5=E7=9B=B8=E5=85=B3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=A7=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gogogo/result_visualizer.py | 30 +----------------------------- gogogo/strategy_executor.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/gogogo/result_visualizer.py b/gogogo/result_visualizer.py index 32cb739..7b23d54 100644 --- a/gogogo/result_visualizer.py +++ b/gogogo/result_visualizer.py @@ -3,40 +3,12 @@ import vectorbt as vbt import pandas as pd import matplotlib.pyplot as plt from strategy_executor import execute_strategy +from strategy_executor import create_portfolio # 设置中文显示 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False -def create_portfolio(strategy_data): - """创建投资组合""" - print("创建基于价格比率的投资组合...") - - price_ratio = strategy_data['price_ratio'] - size = strategy_data['size'] - initial_cash = strategy_data['initial_cash'] - commission = strategy_data['commission'] - - try: - # 将price_ratio转换为DataFrame(vectorbt需要) - ratio_close = pd.DataFrame({'RATIO': price_ratio}) - - portfolio = vbt.Portfolio.from_orders( - close=ratio_close, # 只传入比率数据 - size=size, # 基于比率的交易信号 - init_cash=initial_cash, - fees=commission, - freq='D' - ) - - print("基于价格比率的投资组合创建成功!") - return portfolio - - except Exception as e: - print(f"创建投资组合时出错: {e}") - import traceback - traceback.print_exc() - return None def plot_results(strategy_data, portfolio): """绘制结果图表""" diff --git a/gogogo/strategy_executor.py b/gogogo/strategy_executor.py index 3de9ccd..ed6b2c2 100644 --- a/gogogo/strategy_executor.py +++ b/gogogo/strategy_executor.py @@ -1,6 +1,7 @@ # strategy_executor.py import pandas as pd import numpy as np +import vectorbt as vbt from data_fetcher import get_processed_data def calculate_ratio_signals(ratio_series, window=20, num_std=2): @@ -117,6 +118,36 @@ def execute_strategy(): 'hhic_data': hhic_data } +def create_portfolio(strategy_data): + """创建投资组合""" + print("创建基于价格比率的投资组合...") + + price_ratio = strategy_data['price_ratio'] + size = strategy_data['size'] + initial_cash = strategy_data['initial_cash'] + commission = strategy_data['commission'] + + try: + # 将price_ratio转换为DataFrame(vectorbt需要) + ratio_close = pd.DataFrame({'RATIO': price_ratio}) + + portfolio = vbt.Portfolio.from_orders( + close=ratio_close, # 只传入比率数据 + size=size, # 基于比率的交易信号 + init_cash=initial_cash, + fees=commission, + freq='D' + ) + + print("基于价格比率的投资组合创建成功!") + return portfolio + + except Exception as e: + print(f"创建投资组合时出错: {e}") + import traceback + traceback.print_exc() + return None + if __name__ == "__main__": strategy_data = execute_strategy() print("策略执行完成!") \ No newline at end of file