原创 +1银贝 [策略篇]炸板策略优化,年化收益108%,年化收益回撤比3.6

小小的夏天 2023-8-20 430

一、前言

在上一篇中[策略篇]股票炸板+资金流策略_年化收益_ 88.42% 最大回撤 _-29.20%, (df['收盘价'] > df['13日均线'])其实是犯了新手经常出现的错误,应该是: (df['收盘价_复权'] > df['13日均线']),在计算均线时无论用的前复权或者后复权,对结果不会有影响。

二、描述

事件名称:炸板策略

最大持股数:2(多个票发生事件,根据排序选最前的两个票)

持有周期:2天(事件发生后下个交易日早盘买进,次日尾盘卖出)

资金份数:2份

回测时间周期:2009-01-01至2023-08-04

排序因子:中户资金买入占比

排序方向:False(降序)

三、策略代码

3.1、事件生成代码

import pandas as pd
from datetime import datetime
from multiprocessing import cpu_count
from joblib import Parallel, delayed
from program.Config import *
from program.Function import *
from tqdm import tqdm
import warnings
from program.计算涨跌停价格 import *
warnings.filterwarnings("ignore")
import warnings

warnings.filterwarnings('ignore')
pd.set_option('max_rows', None)  # 显示最多行数
pd.set_option('max_columns', None)  # 显示最多列数
pd.set_option('expand_frame_repr', False)  # 当列太多时显示不清楚
pd.set_option('display.unicode.east_asian_width', True)  # 设置输出右对齐
# *************************************************** 调参数 ***************************************************
# stock_data_path = os.path.join(root_path, 'data/trade_data/stock/')  # 确认股票数据路径
stock_data_path = 'G:\\股票数据\\股票历史全息日线数据\\' # 确认股票数据路径
cols = ['散户资金买入额', '中户资金买入额', '大户资金买入额', '机构资金买入额',
        '散户资金卖出额', '中户资金卖出额', '大户资金卖出额', '机构资金卖出额']
colsB = ['散户资金买入额', '中户资金买入额', '大户资金买入额', '机构资金买入额']
colsS = ['散户资金卖出额', '中户资金卖出额', '大户资金卖出额', '机构资金卖出额']


# *************************************************** 调参数 ***************************************************
def cal_money_flow_event_each_stock(code):
    path = stock_data_path + '%s.csv' % code  # 读入股票数据
    print(code)
    df = pd.read_csv(path, skiprows=1, parse_dates=['交易日期'], encoding='gbk')
    df.sort_values('交易日期', inplace=True)
    df['涨跌幅'] = df['收盘价'] / df['前收盘价'] - 1
    df['复权因子'] = (df['收盘价'] / df['前收盘价']).cumprod()
    df['收盘价_复权'] = df['复权因子'] * (df.iloc[0]['收盘价'] / df.iloc[0]['复权因子'])
    df['最低价_复权'] = df['最低价'] / df['收盘价'] * df['收盘价_复权']
    df['最高价_复权'] = df['最高价'] / df['收盘价'] * df['收盘价_复权']

    df['上市至今交易天数'] = df.index + 1  # 计算上市天数,并删除上市天数不足一年的股票
    df = df[df['上市至今交易天数'] > 250]

    if df.empty:
        return pd.DataFrame()
    df.dropna(subset=[*cols, '成交额'], how='all', inplace=True, axis=0)
    #
    df[cols] *= 10000
    df['买入额与成交占比'] = np.array(df[colsB]).sum(axis=1) / df['成交额']
    df['卖出额与成交占比'] = np.array(df[colsS]).sum(axis=1) / df['成交额']


    df['中户买入占比'] = df['中户资金买入额'] / df['成交额']
    df['大户买入占比'] = df['大户资金买入额'] / df['成交额']
    df['散户卖出占比'] = df['散户资金卖出额'] / df['成交额']

    df['中户大户资金占比'] = df['中户买入占比'] + df['大户买入占比']
    df['换手率'] = df['成交额'] / df['流通市值']
    df['13日均线'] = df['收盘价_复权'].rolling(13).mean()
    df['次日开盘价'] = df['开盘价'].shift(-1)
    df['次日开盘涨跌幅'] = df['次日开盘价'] / df['收盘价'] - 1  # 为之后开盘买入做好准备
    df['换手率'] = df['成交额'] / df['流通市值']
    df['上一日成交量'] = df['成交量'].shift(1)
    df['量比'] = df['成交量'] / df['上一日成交量'].rolling(5).mean()

    # 计算涨跌停价格
    df = cal_if_zhangting_with_st(df)

    # 筛选事件
    df['event_资金流_1'] = None
    df.loc[((df['最高价'] >= df['涨停价']))
           & (df['收盘价'] < df['涨停价'])
           & ((df['中户资金买入额'] + df['大户资金买入额']) / df['成交额'] >= 

本主题为课程学员专享,成为股票量化投资课程学员后可免费阅读

成为学员
最新回复 ( 0条评论 )


官方微信
码力十足学量化
Powered by Xiuno BBS 4.0.7

官方微信