深圳哪家券商支持量化交易系统?如何使用python量化回测多只股票?
发布时间:2024-5-20 13:41阅读:148
要使用Python进行量化回测多只股票,你可以按照以下步骤进行操作:
导入所需的库:
import pandas as pd
import numpy as np
import baostock as bs
import tushare as ts
import talib
import matplotlib.pyplot as plt
设置股票池:
stock_list = ['000001.SZ', '000002.SZ', '600000.SH'] # 设置股票代码列表
获取股票数据:
def get_stock_data(stock_code, start_date, end_date):
# 使用baostock获取股票数据
lg = bs.login()
rs = bs.query_history_k_data_plus(stock_code,
"date,code,open,high,low,close,volume",
start_date=start_date, end_date=end_date,
frequency="d", adjustflag="3")
data_list = []
while rs.next():
data_list.append(rs.get_row_data())
bs.logout()
# 将数据转换为DataFrame格式
df = pd.DataFrame(data_list, columns=rs.fields)
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
df.sort_index(ascending=True, inplace=True)
df['close'] = df['close'].astype(float)
return df
# 获取股票数据
start_date = '2021-01-01'
end_date = '2021-12-31'
stock_data = {}
for stock_code in stock_list:
stock_data[stock_code] = get_stock_data(stock_code, start_date, end_date)
定义策略函数:
def strategy(df):
# 在这里编写你的策略逻辑
# 返回一个包含买入和卖出信号的DataFrame,如:
# df['buy_signal'] = ...
# df['sell_signal'] = ...
return df
回测策略:
def backtest(stock_data):
portfolio_value = 1000000 # 设置初始投资金额
positions = {}
cash = portfolio_value
portfolio_values = []
for stock_code, df in stock_data.items():
df = strategy(df) # 对每只股票应用策略
df['position'] = 0 # 初始化仓位列
# 根据买入信号和卖出信号进行交易
for i in range(len(df)):
if df['buy_signal'].iloc[i] == 1:
# 买入股票
shares = cash / df['close'].iloc[i]
positions[stock_code] = shares
cash -= shares * df['close'].iloc[i]
df['position'].iloc[i] = shares
elif df['sell_signal'].iloc[i] == 1:
# 卖出股票
shares = positions[stock_code]
cash += shares * df['close'].iloc[i]
positions.pop(stock_code)
df['position'].iloc[i] = -shares
# 计算投资组合价值
df['portfolio_value'] = df['position'] * df['close']
df['cash'] = cash
df['total_value'] = df['portfolio_value'] + df['cash']
portfolio_values.append(df['total_value'])
# 合并所有股票的投资组合价值
portfolio_values = pd.concat(portfolio_values, axis=1)
portfolio_values.columns = stock_list
portfolio_values['total_value'] = portfolio_values.sum(axis=1)
return portfolio_values
# 进行回测
portfolio_values = backtest(stock_data)
绘制回测结果:
# 绘制投资组合价值曲线
plt.plot(portfolio_values['total_value'])
plt.xlabel('Date')
plt.ylabel('Portfolio Value')
plt.title('Backtest Result')
plt.show()
以上是一个简单的示例,你可以根据自己的需求对策略函数进行修改和优化,增加其他指标、止损止盈条件等。同时,你也可以使用其他量化回测框架,如vnpy、jqdata等。


温馨提示:投资有风险,选择需谨慎。
-
2025年五一假期股市休市安排来了,连休5天,这些事情提前规划!
2025-04-24 15:31
-
2025年五一国债逆回购操作攻略,6天收益轻松拿!
2025-04-24 15:31
-
2025年证券公司新客理财哪家高?(附理财收益计算器)
2025-04-24 15:31