对tushare的MA数据进行处理

    def multiple_head_stable_rise_up(self):
        """
        当多头市场进入稳定上升时期,10MA、20MA、60MA向右上方推升,且三线多头排列(排列顺序自上而下分别为10MA、20MA、60MA),略呈平行状。
        :return:
        """
        condition = 0
        slope = []
        for i in range(len(self.MA_data) - 1):
            if self.MA_data['ma' + str(self.long)][i + 1] > self.MA_data['ma' + str(self.long)][i]:
                if self.MA_data['ma' + str(self.middle)][i + 1] > self.MA_data['ma' + str(self.middle)][i]:
                    if self.MA_data['ma' + str(self.short)][i + 1] > self.MA_data['ma' + str(self.short)][i]:
                        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,这是一个比较复杂的任务,需要进行以下几个步骤: 1. 数据获取和处理:使用Tushare API获取中证1000指数和上证50指数的历史数据,对数据进行清洗和处理,得到每日收盘价,并计算两个指数的比值。 2. 特征工程:根据比值数据,构建一些特征,如过去一段时间的平均值、标准差、斜率等。 3. 模型训练:选择一个适当的机器学习模型,如线性回归、决策树、随机森林等,进行模型训练。 4. 参数调优:使用交叉验证等方法,调整模型的参数,提高模型的预测能力。 5. 回测检验:使用历史数据进行回测,计算交易收益和最大回撤等指标,评估模型的性能。 6. 结果可视化:将收益和最大回撤等指标以日期为横坐标,绘制成图表,便于观察和分析。 下面是Python代码示例,仅供参考: ```python import tushare as ts import pandas as pd import numpy as np from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error import matplotlib.pyplot as plt # 获取中证1000指数和上证50指数的历史数据 hs300 = ts.get_k_data('hs300') zz1000 = ts.get_k_data('zz1000') # 整理数据 hs300.index = pd.to_datetime(hs300['date']) hs300 = hs300[['close']] zz1000.index = pd.to_datetime(zz1000['date']) zz1000 = zz1000[['close']] data = pd.concat([hs300, zz1000], axis=1, join='inner') data.columns = ['hs300', 'zz1000'] data['ratio'] = data['hs300'] / data['zz1000'] # 构建特征 data['ma5'] = data['ratio'].rolling(window=5).mean() data['ma10'] = data['ratio'].rolling(window=10).mean() data['ma20'] = data['ratio'].rolling(window=20).mean() data['std5'] = data['ratio'].rolling(window=5).std() data['std10'] = data['ratio'].rolling(window=10).std() data['std20'] = data['ratio'].rolling(window=20).std() data['diff'] = data['ratio'].diff() data['diff_ma5'] = data['diff'].rolling(window=5).mean() data['diff_std5'] = data['diff'].rolling(window=5).std() # 特征选择 features = ['ma5', 'ma10', 'ma20', 'std5', 'std10', 'std20', 'diff_ma5', 'diff_std5'] X = data[features] y = data['ratio'] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 模型训练 model = LinearRegression() model.fit(X_train, y_train) # 模型预测 y_pred = model.predict(X_test) # 评估模型 mse = mean_squared_error(y_test, y_pred) print('Mean squared error: %.2f' % mse) # 回测检验 data['signal'] = np.where(model.predict(X[features]) > 1.1, -1, 1) data['pnl'] = data['signal'] * data['diff'] data['cum_pnl'] = data['pnl'].cumsum() data['max_drawdown'] = data['cum_pnl'].cummax() - data['cum_pnl'] data.plot(y=['cum_pnl', 'max_drawdown']) plt.show() ``` 这段代码使用了线性回归模型,选择了一些比值的特征进行训练。回测检验使用了简单的交易策略,当比值预测值超过1.1时,认为中证1000指数相对于上证50指数过高,应该卖出;当比值预测值低于0.9时,认为中证1000指数相对于上证50指数过低,应该买入。最后,将收益和最大回撤等指标以日期为横坐标绘制成图表,方便观察和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝不闻道,夕不可死

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值