Advertisement

股票python量化交易013-周期买卖策略

阅读量:
  • 前言

假如想每周四买入股票,每周一卖出股票,这种策略怎么用代码实现?

  • NumPy库

NumPy是一个功能强大且被广泛使用的Python库,在多维数组运算方面具有卓越性能。这个术语由'Numerical'和'Python'两个词组合而成,并专为数值计算提供支持。它通过提供丰富的函数集合和操作工具帮助开发者高效完成数值计算任务,在数据分析与机器学习等领域的应用非常广泛。

  • 实现
复制代码
 def week_period_strategy():

    
     '''
    
     周期买卖股票策略,比如
    
     每周四买进,
    
     每周一卖出,
    
     买入信号1 ,卖出信号-1
    
     :return: 买卖信号表
    
     '''
    
     data = st.get_csv_price(code, None, None, None)
    
     data['weekday'] = pd.to_datetime(data.index).weekday
    
     data['buy_signal'] = np.where(data['weekday'] == 3, 1, 0)
    
     data['sell_signal'] = np.where(data['weekday'] == 0, -1, 0)
    
     # 模拟碰到节假日特殊情况,可能会出现2天连续买入或者卖出的情况,周四买入,周五也买入,周一卖出,周二也卖出
    
     data['buy_signal'] = np.where((data['weekday'] == 3) | (data['weekday'] == 4), 1, 0)
    
     data['sell_signal'] = np.where((data['weekday'] == 0) | (data['weekday'] == 1), -1, 0)
    
     # 处理上面模拟的特殊情况:如连续2个1,把下面的1不显示买入信号1,设置为0,上一个设置为1,
    
     # 还有如果不是连续2个1的情况,我们则保留原数据,是1为1,是0保留0,卖出也同理
    
     data['buy_signal'] = np.where((data['buy_signal'] == 1) & (data["buy_signal"].shift(1) == 1), 0, data['buy_signal'])
    
     data['sell_signal'] = np.where((data['sell_signal'] == -1) & (data["sell_signal"].shift(1) == -1), 0, data['sell_signal'])
    
     # 把buy_signal和sell_signal 2个信号组合成一个买入信号,这样比较直观
    
     data['signal'] = data['buy_signal'] + data['sell_signal']
    
     print(data[:18][['close', 'weekday', 'buy_signal', 'sell_signal','signal']])
    
     return data

打印结果:

复制代码
 date   close weekday buy_signal sell_signal signal

    
 2020-07-16 82.92 3 1 0 1
    
 2020-07-17 77.06 4 0 0 0
    
 2020-07-20 79.17 0 0 -1 -1
    
 2020-07-21 78.63 1 0 0 0
    
 2020-07-22 79.57 2 0 0 0
    
 2020-07-23 78.78 3 1 0 1
    
 2020-07-24 71.95 4 0 0 0
    
 2020-07-27 70.82 0 0 -1 -1
    
 2020-07-28 72.56 1 0 0 0
    
 2020-07-29 75.07 2 0 0 0
    
 2020-07-30 75.69 3 1 0 1
    
 2020-07-31 82.21 4 0 0 0
    
 2020-08-03 84.00 0 0 -1 -1
    
 2020-08-04 81.08 1 0 0 0
    
 2020-08-05 83.00 2 0 0 0
    
 2020-08-06 84.82 3 1 0 1
    
 2020-08-07 80.47 4 0 0 0
    
 2020-08-10 77.89 0 0 -1 -1

全部评论 (0)

还没有任何评论哟~