当前位置:   article > 正文

量化交易常见策略_量化交易策略模拟代码

量化交易策略模拟代码

双均线策略

双均线策略是一种在量化交易中常见的策略,主要用于捕捉趋势的开始和结束。其基本思想是使用两条不同周期的移动平均线(例如短期均线和长期均线),通过观察短期均线与长期均线的交叉情况来决定买入或卖出信号。当短期均线从下向上穿越长期均线时,视为买入信号;相反,当短期均线从上向下穿越长期均线时,视为卖出信号。

下面是一个基于Python的简单双均线策略示例代码,使用的是假设的数据。请注意,真实世界的量化交易策略非常复杂,包括但不限于数据获取、风险管理、成本考虑等多个方面。此代码仅提供教育和学习目的,并且没有考虑交易成本和滑点等因素

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. # 假设数据: 创建一个DataFrame,包含简单的价格数据
  5. dates = pd.date_range('20230101', periods=100)
  6. data = pd.DataFrame(np.random.randn(100).cumsum() + 100, index=dates, columns=['Price'])
  7. # 计算短期和长期移动平均线
  8. short_window = 20
  9. long_window = 50
  10. data['Short_MA'] = data['Price'].rolling(window=short_window, min_periods=1).mean()
  11. data['Long_MA'] = data['Price'].rolling(window=long_window, min_periods=1).mean()
  12. # 生成信号:短期均线上穿长期均线为买入信号(1),下穿为卖出信号(-1)
  13. data['Signal'] = 0
  14. data['Signal'][short_window:] = np.where(data['Short_MA'][short_window:] > data['Long_MA'][short_window:], 1, -1)
  15. # 计算策略收益
  16. data['Positions'] = data['Signal'].diff()
  17. data['Strategy_Return'] = data['Positions'].shift(1) * data['Price'].pct_change()
  18. data['Cumulative_Strategy_Return'] = (1 + data['Strategy_Return']).cumprod()
  19. # 绘制价格和移动平均线
  20. plt.figure(figsize=(14,7))
  21. plt.plot(data['Price'], label='Price', alpha=0.5)
  22. plt.plot(data['Short_MA'], label='Short MA', alpha=0.75)
  23. plt.plot(data['Long_MA'], label='Long MA', alpha=0.75)
  24. plt.plot(data.index[data.Positions == 1], data['Short_MA'][data.Positions == 1], '^', markersize=10, color='g', lw=0, label='Buy Signal')
  25. plt.plot(data.index[data.Positions == -1], data['Short_MA'][data.Positions == -1], 'v', markersize=10, color='r', lw=0, label='Sell Signal')
  26. plt.title('Double Moving Average Strategy')
  27. plt.legend()
  28. plt.show()
  29. # 绘制累计收益曲线
  30. plt.figure(figsize=(14,7))
  31. plt.plot(data['Cumulative_Strategy_Return'], label='Cumulative Strategy Return')
  32. plt.title('Strategy Cumulative Return')
  33. plt.legend()
  34. plt.show()
'
运行

Alpha对冲策略

Alpha对冲策略是一种旨在从股票(或其他资产)的绝对收益中获利,同时通过期货(或其他衍生品)对冲市场风险的策略。这种策略的关键在于识别和投资具有正Alpha(预期收益超过基准收益)的股票,同时利用期货合约对冲掉系统性市场风险,以达到减少投资组合波动的目的。

以下是一个简化的Python示例,展示了如何实现一个基本的Alpha对冲策略。该策略假设你已经选定了一个股票作为Alpha来源,并使用指数期货进行对冲。请注意,这个示例简化了很多实际中需要考虑的因素,比如交易成本、滑点、资本的分配和再平衡周期等。这个代码主要用于教育目的,展示策略的大概框架。

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. # 假设数据:股票和指数的日收益率
  5. dates = pd.date_range('20230101', periods=100)
  6. stock_returns = np.random.randn(100)/100
  7. index_returns = np.random.randn(100)/100
  8. data = pd.DataFrame({'Stock_Returns': stock_returns, 'Index_Returns': index_returns}, index=dates)
  9. # 假设股票的alpha和beta
  10. # Alpha是股票相对于市场的额外收益,Beta是股票对市场变化的敏感度
  11. alpha = 0.0005 # 每日额外收益
  12. beta = 0.8 # 股票和市场收益的相关性
  13. # 计算期货对冲的大小
  14. # 假设每份期货合约完美对冲1单位的市场风险
  15. # 因此,需要的对冲期货合约数量 = 股票数量 * beta
  16. # 这里简化计算,假设股票数量为1
  17. futures_hedge_size = beta
  18. # 计算策略的每日收益
  19. # 策略收益 = 股票的alpha + 股票的beta调整后的市场收益 - 对冲成本
  20. # 这里简化假设对冲成本为0
  21. data['Strategy_Return'] = alpha + beta * data['Index_Returns'] - futures_hedge_size * data['Index_Returns']
  22. # 计算策略的累计收益
  23. data['Cumulative_Return'] = (1 + data['Strategy_Return']).cumprod()
  24. # 绘图展示策略的累计收益
  25. plt.figure(figsize=(14,7))
  26. plt.plot(data['Cumulative_Return'], label='Alpha Hedge Strategy Cumulative Return')
  27. plt.title('Alpha Hedge Strategy Performance')
  28. plt.legend()
  29. plt.show()
'
运行

多因子选股(股票) 量化策略

提供一个具体的多因子选股量化策略的源码可能涉及到复杂的财务分析、编程技能以及对市场的深刻理解。在量化投资中,多因子模型是一种流行的策略,它结合了多个预测股票收益的因素来选股。以下是一个简化的例子,使用Python语言和pandas库来演示如何构建一个基本的多因子选股框架。实际应用中的模型会更加复杂,并且需要根据数据和市场情况进行调整

  1. import pandas as pd
  2. import numpy as np
  3. # 假设这是股票的基础数据,包括股票代码、PE(市盈率)、ROE(净资产收益率)和市值
  4. data = {
  5. 'Stock': ['StockA', 'StockB', 'StockC', 'StockD'],
  6. 'PE': [15, 18, 10, 25],
  7. 'ROE': [0.18, 0.15, 0.20, 0.12],
  8. 'MarketCap': [1e10, 2e10, 1.5e10, 2.5e10]
  9. }
  10. df = pd.DataFrame(data)
  11. # 为了简单起见,我们使用PE, ROE和市值的简单排名作为因子,实际情况下应对因子进行更复杂的处理和标准化
  12. df['PE_Rank'] = df['PE'].rank()
  13. df['ROE_Rank'] = df['ROE'].rank(ascending=False) # ROE越高越好,所以逆序排名
  14. df['MarketCap_Rank'] = df['MarketCap'].rank()
  15. # 综合因子得分,这里简单地取平均,实际应用中可能需要加权等复杂操作
  16. df['Score'] = df[['PE_Rank', 'ROE_Rank', 'MarketCap_Rank']].mean(axis=1)
  17. # 根据得分排序,选出得分最高的股票
  18. top_picks = df.sort_values(by='Score', ascending=False).head(2) # 假设我们只选2只股票
  19. print(top_picks[['Stock', 'Score']])
'
运行

网格交易(期货) 量化策略

网格交易是一种在金融市场上,尤其是在外汇市场上较为常见的交易策略。它不依赖于市场的趋势方向,而是创建一个价格网格,并在价格达到预定的水平时自动买入或卖出。

  1. # 网格交易策略的基本伪代码
  2. # 初始化参数
  3. 网格大小 = 10
  4. 网格数量 = 5
  5. 上一个交易价格 = None
  6. 资金 = 初始资金
  7. 持仓 = 0
  8. # 定义网格
  9. 网格上界 = 当前价格 + (网格大小 * 网格数量 / 2)
  10. 网格下界 = 当前价格 - (网格大小 * 网格数量 / 2)
  11. 价格网格 = range(网格下界, 网格上界, 网格大小)
  12. # 交易逻辑
  13. while True:
  14. 当前价格 = 获取当前市场价格()
  15. # 检查是否触发买入或卖出
  16. for 价格 in 价格网格:
  17. if 当前价格 <= 价格 and 上一个交易价格 != 价格:
  18. # 买入逻辑
  19. if 资金 >= 当前价格:
  20. 买入数量 = 资金 / 当前价格
  21. 执行买入(买入数量, 当前价格)
  22. 资金 -= 当前价格 * 买入数量
  23. 持仓 += 买入数量
  24. 上一个交易价格 = 价格
  25. 打印("执行买入:", 当前价格, "买入数量:", 买入数量)
  26. elif 当前价格 >= 价格 and 上一个交易价格 != 价格:
  27. # 卖出逻辑
  28. if 持仓 > 0:
  29. 卖出数量 = 持仓
  30. 执行卖出(卖出数量, 当前价格)
  31. 资金 += 当前价格 * 卖出数量
  32. 持仓 -= 卖出数量
  33. 上一个交易价格 = 价格
  34. 打印("执行卖出:", 当前价格, "卖出数量:", 卖出数量)
  35. # 可能的休眠以减少频繁查询
  36. 休眠(时间间隔)

在实际应用中,网格交易策略会更加复杂,涉及资金管理、风险控制、滑点处理、交易成本、网格动态调整等多个方面。而且,由于期货市场的高波动性和杠杆效应,网格交易需要谨慎处理以避免巨大亏损。

指数增强策略

指数增强策略是一种旨在通过积极的股票选择,在超越基准指数表现的同时控制相对风险的量化策略。这种策略通常会构建一个与基准指数相似的投资组合,但通过选择预期表现优于指数的个股或通过调整个股权重来争取超额收益。

实现这一策略的关键在于准确预测股票的未来表现,并在保持与基准指数相似特征(如行业分布、市值分布等)的基础上,对那些预计将超越市场的股票进行超配,对那些预计将表现不佳的股票进行低配或不配。

以下是一个简化版的指数增强策略实现,使用Python进行编码。请注意,这个例子使用了虚构的数据,并且很多复杂的实际考虑(如交易成本、滑点、模型预测的实现等)都被省略了。这个代码主要目的是为了展示策略的基本逻辑

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. # 假设的股票池和基准指数权重
  5. stocks = ['Stock_A', 'Stock_B', 'Stock_C', 'Stock_D', 'Stock_E']
  6. index_weights = np.array([0.20, 0.20, 0.20, 0.20, 0.20]) # 假设是等权重指数
  7. # 生成虚构的股票预期收益率,这里简化为随机数
  8. np.random.seed(42)
  9. expected_returns = np.random.rand(len(stocks))
  10. # 构建指数增强组合:通过简单的策略增加预期收益较高的股票的权重
  11. # 注意:实际情况中,股票的预期收益率通常是通过复杂的模型来预测的
  12. enhanced_weights = index_weights * (1 + expected_returns)
  13. enhanced_weights = enhanced_weights / np.sum(enhanced_weights) # 重新归一化以保证总权重为1
  14. # 展示基准指数与指数增强策略的权重
  15. index_vs_enhanced = pd.DataFrame({
  16. 'Stock': stocks,
  17. 'Index_Weights': index_weights,
  18. 'Enhanced_Weights': enhanced_weights
  19. })
  20. print(index_vs_enhanced)
  21. # 假设实际收益率,这里仍然使用随机数来模拟
  22. actual_returns = np.random.rand(len(stocks))
  23. # 计算基准指数与指数增强策略的实际收益
  24. index_return = np.sum(index_weights * actual_returns)
  25. enhanced_return = np.sum(enhanced_weights * actual_returns)
  26. print(f"\n基准指数的实际收益: {index_return:.4f}")
  27. print(f"指数增强策略的实际收益: {enhanced_return:.4f}")
  28. # 这个简化的例子展示了如何通过调整权重来试图提高相对于基准指数的收益。
  29. # 在实际操作中,需要考虑更多的因素,如交易成本、市场影响、滑点、资金管理等。
'
运行

段代码演示了指数增强策略的基本思路:基于对股票未来表现的预测,调整投资组合中各个股票的权重,以期实现超过基准指数的收益。在实践中,指数增强策略的难度在于准确预测股票的未来表现,并且还需要管理交易成本和控制风险。这种策略通常适用于那些能够接受与基准指数有一定跟踪误差,但又希望获得超额收益的投资者

跨期套利(期货) 量化策略

跨期套利是期货市场上的一种常见策略,其目标是利用不同到期日的同一商品之间的价格差异进行套利。这一策略的基本思路是同时买入一个月份的期货合约并卖出另一个月份的期货合约,从而在没有或较少市场风险的情况下获得收益。

请注意,交易策略的开发和执行需要严格遵守当地的法律法规,并且需要有深厚的专业知识和技术能力。以下提供的是一个跨期套利策略的基本伪代码,仅供学习和讨论之用。

  1. # 跨期套利策略的基本伪代码
  2. # 初始化参数
  3. 近月合约代码 = '近月合约'
  4. 远月合约代码 = '远月合约'
  5. 开仓价差阈值 = 10 # 基于历史数据和市场研究得出的开仓阈值
  6. 平仓价差阈值 = 5 # 基于历史数据和市场研究得出的平仓阈值
  7. 持仓量 = 1 # 根据资金管理决定持仓量
  8. # 开始交易逻辑
  9. while True:
  10. # 获取市场数据
  11. 近月合约价格 = 获取市场价格(近月合约代码)
  12. 远月合约价格 = 获取市场价格(远月合约代码)
  13. # 计算价差
  14. 价差 = 近月合约价格 - 远月合约价格
  15. # 如果价差大于开仓价差阈值,则建立套利仓位
  16. if 价差 > 开仓价差阈值 and 没有持仓:
  17. 卖出近月合约(持仓量)
  18. 买入远月合约(持仓量)
  19. 记录开仓价差 = 价差
  20. 持仓状态 = True
  21. # 如果当前持仓且价差回到平仓价差阈值,则平仓套利仓位
  22. elif 持仓状态 and 价差 <= 平仓价差阈值:
  23. 买入近月合约(持仓量)
  24. 卖出远月合约(持仓量)
  25. 记录平仓价差 = 价差
  26. 持仓状态 = False
  27. # 可能的休眠,以减少频繁查询
  28. 休眠(时间间隔)

日内回转交易策略

日内回转交易,又称为日内交易,是一种量化交易策略,它涉及到在同一交易日内买入和卖出同一股票,以期从股票价格的日内波动中获利。这种交易策略要求对市场动态有快速的反应能力,以及对交易数据的实时分析能力。以下是一个简化的日内回转交易量化策略的Python示例,使用基本的移动平均线交叉策略来做出交易决定。这个示例仅用于教育目的,实际的交易策略会更加复杂,并且需要考虑交易成本、滑点等因素。

  1. import pandas as pd
  2. import numpy as np
  3. # 假设df是一个DataFrame,包含了某只股票的分钟级别历史数据
  4. # df中包含的列有: 'datetime'(时间戳), 'close'(收盘价)
  5. # 计算短期和长期移动平均线
  6. short_window = 40
  7. long_window = 100
  8. df['short_mavg'] = df['close'].rolling(window=short_window, min_periods=1).mean()
  9. df['long_mavg'] = df['close'].rolling(window=long_window, min_periods=1).mean()
  10. # 生成信号
  11. # 当短期移动平均线从下向上穿过长期移动平均线,买入信号
  12. # 当短期移动平均线从上向下穿过长期移动平均线,卖出信号
  13. df['signal'] = 0
  14. df['signal'][short_window:] = np.where(df['short_mavg'][short_window:] > df['long_mavg'][short_window:], 1, 0)
  15. # 生成交易指令
  16. df['positions'] = df['signal'].diff()
  17. # 现在df['positions']中1代表买入指令,-1代表卖出指令

此外,日内交易对于交易平台的数据处理能力和执行速度要求极高,因此在实际操作之前,确保你的交易系统能够处理高频数据,并且能够及时执行交易指令

做市商交易策略

做市商交易策略(Market Making)在期货市场上是一种专业策略,目标是通过在买卖盘之间提供流动性来赚取买卖价差(即盘口的买一卖一差价)。这种策略要求非常快速的执行以及对市场深度和价格动态的敏感捕捉能力,通常需要高速的交易系统和算法优化。

以下是一个简化的做市商策略示例,用Python编写。这个例子仅用于展示基本的逻辑框架,并不适合直接应用于实际交易环境,因为实际的做市商策略需要考虑市场的微观结构、交易费用、滑点以及风险管理等众多因素

  1. import numpy as np
  2. import pandas as pd
  3. class SimpleMarketMaker:
  4. def __init__(self, tick_size=0.01, spread=2, quantity=1):
  5. self.tick_size = tick_size # 最小价格变动单位
  6. self.spread = spread * tick_size # 买卖价差
  7. self.quantity = quantity # 每次交易数量
  8. self.mid_price = None # 中间价
  9. self.bid_price = None # 买价
  10. self.ask_price = None # 卖价
  11. def update_quotes(self, mid_price):
  12. """根据最新的中间价更新买卖报价"""
  13. self.mid_price = mid_price
  14. self.bid_price = mid_price - self.spread / 2
  15. self.ask_price = mid_price + self.spread / 2
  16. # 在实际应用中,这里还需要发送买卖报价到交易所
  17. def simulate_trade(self, trade_side):
  18. """模拟成交逻辑"""
  19. if trade_side == 'buy':
  20. execution_price = self.bid_price
  21. print(f"Bought at {execution_price}")
  22. elif trade_side == 'sell':
  23. execution_price = self.ask_price
  24. print(f"Sold at {execution_price}")
  25. else:
  26. print("No trade executed")
  27. def run_strategy(self, market_data):
  28. """运行做市策略
  29. :param market_data: 市场数据,假设包含每个时间点的中间价
  30. """
  31. for mid_price in market_data['MidPrice']:
  32. self.update_quotes(mid_price)
  33. # 这里的交易逻辑非常简化,实际情况需要根据市场深度、订单流等因素决定
  34. # 以下代码仅为示例,实际应用中不会如此简单
  35. if np.random.rand() > 0.5:
  36. self.simulate_trade('buy')
  37. else:
  38. self.simulate_trade('sell')
  39. # 示例市场数据
  40. np.random.seed(42)
  41. market_data = pd.DataFrame({
  42. 'MidPrice': np.random.rand(10) + 100 # 随机生成的中间价
  43. })
  44. # 实例化做市商并运行策略
  45. market_maker = SimpleMarketMaker()
  46. market_maker.run_strategy(market_data)
'
运行

海龟交易法则

海龟交易法则是一种著名的趋势跟踪策略,由著名的期货交易员理查德·丹尼斯(Richard Dennis)和威廉·埃克哈特(William Eckhardt)在1983年创建,并用以训练一批被称作“海龟交易员”的初学者。这种策略的核心思想是利用市场的长期趋势来进行交易。

海龟交易法则包括了一系列的规则,包括如何入市、如何加仓、止损和退出。以下是海龟交易策略的一个简化的伪代码,供你参考。这段伪代码以日线数据为基础,使用了两个突破系统:短期(20日突破)和长期(55日突破)

  1. # 海龟交易策略伪代码
  2. # 初始化参数
  3. 短期突破天数 = 20
  4. 长期突破天数 = 55
  5. ATR天数 = 20 # ATR(平均真实波幅)用于计算止损和头寸规模
  6. 头寸规模系数 = 0.01 # 基于资金量和市场波动性的系数
  7. # 获取历史数据
  8. 历史价格 = 获取历史价格数据(合约代码)
  9. 历史波动性 = 计算ATR(历史价格, ATR天数)
  10. # 计算入市点
  11. 短期突破价 = max(历史价格[-短期突破天数:])
  12. 长期突破价 = max(历史价格[-长期突破天数:])
  13. # 计算出市点
  14. 短期退出价 = min(历史价格[-短期突破天数:])
  15. 长期退出价 = min(历史价格[-长期突破天数:])
  16. # 计算头寸规模
  17. 头寸规模 = 账户权益 * 头寸规模系数 / 历史波动性
  18. # 交易逻辑
  19. if 当前持仓 == 0:
  20. if 当前价格 > 短期突破价:
  21. # 进行买入
  22. 买入头寸(头寸规模)
  23. elif 当前价格 < 长期突破价:
  24. # 进行卖出
  25. 卖出头寸(头寸规模)
  26. if 当前持仓 != 0:
  27. if 当前持仓 > 0 and 当前价格 < 短期退出价:
  28. # 平仓卖出
  29. 卖出全部持仓()
  30. elif 当前持仓 < 0 and 当前价格 > 长期退出价:
  31. # 平仓买入
  32. 买入平仓所有空头持仓()
  33. # 计算止损点
  34. 止损点 = 入市价 - 2 * ATR
  35. # 检查止损
  36. if 当前持仓 > 0 and 当前价格 < 止损点:
  37. # 触发止损卖出
  38. 卖出全部持仓()
  39. elif 当前持仓 < 0 and 当前价格 > 止损点:
  40. # 触发止损买入
  41. 买入平仓所有空头持仓()

实际上,海龟交易系统涵盖了更多的规则,包括如何根据市场波动性调整头寸规模、如何进行风险管理、何时进行加仓等。在实际应用中,每个规则都需要根据具体的交易环境和个人偏好进行调整。

机器学习量化策略

创建一个简单的机器学习量化策略涉及到数据的预处理、特征选择、模型训练和策略回测等步骤。下面的示例使用Python的scikit-learn库实现了一个基于决策树分类器的股票市场方向预测策略。此策略旨在使用过去的股票价格数据来预测未来某一天股票价格的上涨或下跌。请注意,这个示例是非常基础的,真实世界中的量化策略会更加复杂并需要进行严格的测

  1. import numpy as np
  2. import pandas as pd
  3. from sklearn.model_selection import train_test_split
  4. from sklearn.tree import DecisionTreeClassifier
  5. from sklearn.metrics import accuracy_score
  6. # 假设df是包含股票历史数据的DataFrame,其中包括'Close'价格
  7. # 生成目标变量:如果明天的收盘价高于今天,则为1(上涨),否则为0(下跌或不变)
  8. df['Target'] = (df['Close'].shift(-1) > df['Close']).astype(int)
  9. # 创建特征:过去N天的价格变动作为特征
  10. N = 5
  11. for i in range(1, N + 1):
  12. df[f'Lag_{i}'] = df['Close'].shift(i) - df['Close'].shift(i - 1)
  13. # 移除含有NaN的行
  14. df = df.dropna()
  15. # 定义特征和目标变量
  16. X = df[[f'Lag_{i}' for i in range(1, N + 1)]]
  17. y = df['Target']
  18. # 数据集切分
  19. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  20. # 使用决策树分类器
  21. model = DecisionTreeClassifier(max_depth=3)
  22. model.fit(X_train, y_train)
  23. # 预测
  24. predictions = model.predict(X_test)
  25. # 计算准确率
  26. accuracy = accuracy_score(y_test, predictions)
  27. print(f'模型预测准确率: {accuracy:.2f}')
  28. # 这里仅完成了模型训练和测试的简单示例,没有进行策略回测部分。

在实际操作中,你需要考虑更多因素,如特征的选择和工程、模型的选择、超参数的调优、过拟合的防止、模型的评估标准等。此外,策略的回测是检验量化策略有效性的关键步骤,它能帮助你了解策略在历史数据上的表现如何,从而评估其在实际交易中的潜在风险和收益。

行业轮动策略

行业轮动策略是一种投资策略,旨在通过识别并投资于当前或预期将会表现最好的行业来获得超额收益。这种策略基于市场各个行业或板块的表现在不同时间周期内会呈现出轮动的特征。行业轮动策略常常利用宏观经济数据、行业基本面分析、技术分析等多种方法来预测哪些行业可能会成为市场的领跑者。

以下是一个行业轮动策略的基础示例,用Python编写,用于展示策略的核心逻辑。这个示例使用简单的移动平均线(Moving Average,MA)作为买卖信号,用于决定何时进入或退出某个行业股票。请注意,这只是一个非常基础的示例,实际的行业轮动策略会更复杂,需要考虑更多因素,如行业之间的相关性、宏观经济条件、市场情绪等

  1. import numpy as np
  2. import pandas as pd
  3. import yfinance as yf # 导入yfinance库获取股票数据
  4. # 行业轮动策略类
  5. class SectorRotationStrategy:
  6. def __init__(self, tickers, short_window, long_window):
  7. self.tickers = tickers # 股票代码列表
  8. self.short_window = short_window # 短期窗口
  9. self.long_window = long_window # 长期窗口
  10. self.signals = pd.DataFrame() # 信号DataFrame
  11. def fetch_data(self):
  12. """获取股票数据"""
  13. self.data = yf.download(self.tickers, start="2020-01-01", end="2021-01-01")
  14. self.data = self.data['Adj Close'] # 仅使用调整后收盘价
  15. def generate_signals(self):
  16. """生成买卖信号"""
  17. for ticker in self.tickers:
  18. self.signals[ticker + '_short_mavg'] = self.data[ticker].rolling(window=self.short_window, min_periods=1).mean()
  19. self.signals[ticker + '_long_mavg'] = self.data[ticker].rolling(window=self.long_window, min_periods=1).mean()
  20. # 生成信号:当短期均线上穿长期均线时为1(买入信号),下穿时为-1(卖出信号)
  21. self.signals[ticker + '_signal'] = 0
  22. self.signals[ticker + '_signal'][self.short_window:] = np.where(
  23. self.signals[ticker + '_short_mavg'][self.short_window:] > self.signals[ticker + '_long_mavg'][self.short_window:], 1, -1)
  24. # 聚合所有股票的信号,选取信号最强的股票
  25. self.signals['sum'] = self.signals.filter(like='_signal').sum(axis=1)
  26. self.signals['position'] = self.signals['sum'].apply(lambda x: 1 if x > 0 else (-1 if x < 0 else 0))
  27. def backtest_strategy(self):
  28. """策略回测"""
  29. self.fetch_data()
  30. self.generate_signals()
  31. # 这里可以添加回测逻辑,计算策略的表现,如回报率、最大回撤等
  32. # 示例:使用两个不同行业的股票
  33. tickers = ['AAPL', 'XOM'] # 苹果公司和埃克森美孚
  34. strategy = SectorRotationStrategy(tickers, short_window=40, long_window=100)
  35. strategy.backtest_strategy()
  36. # 输出信号查看
  37. print(strategy.signals.head()) # 打印前几行信号数据

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/831768
推荐阅读
相关标签
  

闽ICP备14008679号