基于夏普比率对因子的筛选,以及基于股票期货交易策略对多因子策略的机器学习算法探讨

本文探讨了如何使用Python和点宽网数据进行股票因子筛选,重点在于利用夏普比率评估因子,并构建基于多因子策略的机器学习交易策略。通过机器学习对300家股票的不同因子进行训练,最终得出买卖信号。
摘要由CSDN通过智能技术生成

试论因子的筛选,股票期货策略,以及基于多因子策略的机器学习算法

前言

之前参加泰迪杯的,但又没什么时间,自己又是python新手,量化投资新手,还有不熟悉量化投资软件的使用。做的一塌糊涂。。往后却没有时间参加。
写这个文章,虽然也很糟糕,但也算是提供一种思路吧,便于新手入门的参考吧,也算是自己的一种收获吧。

正文


本文以python3.7上点宽网采用2016-01-01至2018-09-30时期的平台数据,以及回测框架。

股票因子的筛选

因子:能引起股票产生变化的因素,常见的有价值类因子PB,PE等等。。。见链接
因子获取
这里以获取价值类的因子数据为例(那里共有12大类):

# -*- coding: utf-8 -*- ##支持中文输入
from atrader import *  # 导入atrader工具包,点宽回测必须的包
import pandas as pd  # 导入pandas工具包
import os    ###处理文件和目录
因子类名='价值类'
因子类=['NegMktValue','PE','PB','PS','MktValue','PCF','LFLO','LCAP','NLSIZE','ForwardPE','StaticPE','ETOP','CETOP','PEG3Y','PEG5Y','CTOP','TA2EV','ETP5','CTP5']
股票 = pd.DataFrame(get_code_list('hs300', date='2018-09-30'))  ##获取 2018 年 9 月 30 日沪深 300 指数的成分股及权重:
for 序号, 数据 in 股票.iterrows():  ##进入循环
    多个因子 = pd.ExcelWriter("C:\\因子\\%s\\%s_%d_%s.xlsx" % (因子类名,因子类名,序号, 数据['name']))
    isExists=os.path.exists("C:\\因子\\%s\\"%因子类名)
    if not isExists:
        os.makedirs(r"C:\\因子\\%s\\"%因子类名)
    因子数值 = get_factor_by_code(factor_list=因子类,target=数据['code'],
                              begin_date='2016-01-1', end_date='2018-09-30') #这里是获取某个日期范围内的数据
    文件 = pd.DataFrame(data=因子数值)  ##
    文件.to_excel(多个因子, sheet_name=数据['name'], index=False)
    print("已完成第%d个,本企业代码为%s"%(序号,数据['code']))  
    多个因子.save() ###文件保存
print("已完成!!")

其中,利用点宽的函数get_code_list(‘hs300’, date=‘2018-09-30’),数据前几行长这样:
在这里插入图片描述
完成后有300家股票对应的因子数据,第一家平安银行的因子数据前几行长这样:
在这里插入图片描述
因子处理

# -*- coding: utf-8 -*-
from atrader import *
import numpy as np
import pandas as pd
import ffn
各类因子 = ["基础科目与衍生类","质量类","收益风险类","情绪类","成长类","常用技术指标类","动量类","价值类","每股指标类","模式识别类",
        "行业、分析师类","特色技术指标类"]
hs300 = pd.read_excel('G:\\泰迪杯\\\\A\\因子\\hs300.xlsx')
table=pd.DataFrame()
for i, j in hs300.iterrows():
    ##获取时期内单个股票的bar,循环,连续300个股票的bar
    kdata = pd.DataFrame(pd.read_excel('G:\\泰迪杯\\\\A\\bar\\bar_%d_%s.xlsx' % (i, j['name'])))
    dataclose = kdata.close
    datavolume = kdata.volume
    dataopen = kdata.open
    datahigh = kdata.high
    datalow = kdata.low
    dataamount = kdata.amount
    ##数据读入并处理删除整列空值的以及删除日期列-----
    d0 = pd.DataFrame(pd.read_excel('G:\\泰迪杯\\\\A\\因子\\%s\\%s_%d_%s.xlsx' % (各类因子[0], 各类因子[0], i, j['name']))).dropna(
        axis=1, how="all")
    d1 = pd.DataFrame(pd.read_excel('G:\\泰迪杯\\\\A\\因子\\%s\\%s_%d_%s.xlsx' % (各类因子[1], 各类因子[1], i, j['name']))).dropna(
        axis=1, how="all").drop(['date'], axis=1, inplace=False)
    d2 = pd.DataFrame(pd.read_excel('G:\\泰迪杯\\\\A\\因子\\%s\\%s_%d_%s.xlsx' % (各类因子[2], 各类因子[2], i, j['name']))).dropna(
        axis=1, how="all").drop(['date'], axis=1, inplace=False)
    d3 = pd.DataFrame(pd.read_excel('G:\\泰迪杯\\\\A\\因子\\%s\\%s_%d_%s.xlsx' % (各类因子[3], 各类因子[3], i, j['name']))).dropna(
        axis=1, how="all").drop(['date'], axis=1, inplace=False)
    d4 = pd.DataFrame(pd.read_excel('G:\\泰迪杯\\\\A\\因子\\%s\\%s_%d_%s.xlsx' % (各类因子[4], 各类因子[4], i, j['name']))).dropna(
        axis=1, how="all").drop(['date'], axis=1, inplace=False)
    d5 = pd.DataFrame(pd.read_excel('G:\\泰迪杯\\\\A\\因子\\%s\\%s_%d_%s.xlsx' % (各类因子
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值