第25月第7天 聚宽 svm

1.

# 克隆自聚宽文章:https://www.joinquant.com/post/2709
# 标题:基于SVM的机器学习策略
# 作者:走得很慢的海龟

import math
import numpy as np
#from sklearn import preprocessing, cross_validation, svm
from sklearn import preprocessing, svm
import matplotlib.pyplot as plt
from matplotlib import style
import sklearn
import time
from datetime import datetime
import cPickle as pickle

def initialize(context):
    g.train=True

# year_date is for get_fundamentals
def train_data(year_date, index_date):
    Valuation=[]
    price=[]
    status=[]
    SZ1=get_index_stocks(‘399008.XSHE‘, date=index_date)
    SZ2=get_index_stocks(‘399012.XSHE‘, date=index_date)
    SH=get_index_stocks(‘399905.XSHE‘, date=index_date)
    tem_index=SZ1+SZ2+SH
    unix_30d=60*60*24*30
    unix_weekend=60*60*24*3

    q=query(
    income.code, income.pubDate, income.total_operating_revenue,
    income.total_operating_cost, income.administration_expense,
    income.operating_profit, income.non_operating_revenue,
    income.total_profit, income.net_profit, income.basic_eps,
    income.diluted_eps, income.total_composite_income
    ).filter(
    valuation.code.in_(tem_index))

    incm = get_fundamentals(q, statDate=year_date)
    date=incm[‘pubDate‘]
    index=incm[‘code‘]

    q=query(
    indicator
    ).filter(
    valuation.code.in_(index))
    indictor=get_fundamentals(q, statDate=year_date)
    del(indictor[‘code‘], indictor[‘statDate‘], indictor[‘pubDate‘])

    for each in range(0,len(date)):
        q=query(
        valuation.pe_ratio, valuation.pb_ratio, valuation.circulating_market_cap
        ).filter(
        valuation.code==(index[each]))
        each_valuation=get_fundamentals(q, date=date[each])

        date_stamp = datetime.strptime(date[each], ‘%Y-%m-%d‘)
        unix=time.mktime(date_stamp.timetuple())
        unix_30_late=unix+unix_30d

        Valuation.append(each_valuation.iloc[0].tolist())

        p1=get_price(index[each], start_date=date[each],
        end_date=date[each], frequency=‘daily‘, fields=‘close‘)

        if not p1.empty:
            pass
        else:
            p1_weekend=datetime.fromtimestamp(unix-unix_weekend).strftime(‘%Y-%m-%d‘)
            p1=get_price(index[each], start_date=p1_weekend,
            end_date=p1_weekend, frequency=‘daily‘, fields=‘close‘)

        p1_30d=datetime.fromtimestamp(unix_30_late).strftime(‘%Y-%m-%d‘)
        p2=get_price(index[each], start_date=p1_30d,
        end_date=p1_30d, frequency=‘daily‘, fields=‘close‘)

        if not p2.empty:
            pass
        else:
            date_stamp2 = datetime.strptime(p1_30d, ‘%Y-%m-%d‘)
            unix2=time.mktime(date_stamp2.timetuple())
            unix2_weekend=unix2-unix_weekend
            p2_weekend=datetime.fromtimestamp(unix2_weekend).strftime(‘%Y-%m-%d‘)
            p2=get_price(index[each], start_date=p2_weekend,
            end_date=p2_weekend, frequency=‘daily‘, fields=‘close‘)

        dif =  p2.values / p1.values

        if dif > 1.1:
            s=1
        else:
            s=0
        status.append(s)

        price.append(p1.iloc[0].tolist())

    Valuation=pd.DataFrame(Valuation, columns=[‘pe‘,‘pb‘,‘cir_mkt_cap‘])
    price=pd.DataFrame(price, columns=[‘price‘])
    status=pd.DataFrame(status, columns=[‘status‘])
    df=pd.concat([incm,Valuation,price,indictor,status], axis=1)

    del(df[‘pubDate‘], df[‘statDate.1‘], df[‘code‘])
    #y=df[‘status‘].values.tolist()
    #df=np.random.permutation(df)
    #del(df[‘status‘], df[‘code‘])
    #X=np.array(df.replace(‘NaN‘, 9999).values.tolist())
    #X=preprocessing.scale(X)
    return df

def fundamental(index):
    Valuation=[]
    price=[]
    status=[]

    q=query(
    income.total_operating_revenue,
    income.total_operating_cost, income.administration_expense,
    income.operating_profit, income.non_operating_revenue,
    income.total_profit, income.net_profit, income.basic_eps,
    income.diluted_eps, income.total_composite_income
    ).filter(
    valuation.code.in_(index))
    incm = get_fundamentals(q)

    q=query(
    valuation.pe_ratio, valuation.pb_ratio, valuation.circulating_market_cap
    ).filter(
    valuation.code.in_(index))
    Valuation=get_fundamentals(q)#.values.tolist()

    q=query(
    indicator
    ).filter(
    valuation.code.in_(index))
    indictor=get_fundamentals(q)#.values.tolist()
    index2=indictor[‘code‘]
    del(indictor[‘code‘], indictor[‘statDate‘], indictor[‘pubDate‘], indictor[‘day‘])

    for each in index2:
        p=attribute_history(each, 1, unit=‘1d‘, fields=[‘close‘], skip_paused=True)
        price.append(p.iloc[0].tolist())

    price=pd.DataFrame(price, columns=[‘price‘])
    df=pd.concat([incm,Valuation,price,indictor], axis=1)
    X=np.array(df.replace(‘NaN‘, 9999).values.tolist())

    X=preprocessing.scale(X)
    return X, index2

def handle_data(context, data):
    if g.train:
        index_date=str(‘2014-03-01‘)
        df1=train_data(str(‘2014q1‘),index_date)
        df2=train_data(str(‘2014q2‘),index_date)
        df3=train_data(str(‘2014q3‘),index_date)
        df4=train_data(str(‘2014q4‘),index_date)
        df=pd.concat([df1,df2,df3,df4], axis=0)
        df.iloc[np.random.permutation(len(df))]
        y=df[‘status‘].values.tolist()
        del(df[‘status‘])
        log.info("<===== shape of training dataset @ %s", str(df.shape))
        X=np.array(df.replace(‘NaN‘, 9999).values.tolist())

        X=preprocessing.scale(X)

        clf = svm.SVC(kernel=str("linear"), C=1.0)
        clf.fit(X, y)

        filename = "temp.pkl"
        pickle_file = open(filename, ‘wb‘)
        pickle.dump(clf, pickle_file)
        pickle_file.close()
        g.train=False

    filename = "temp.pkl"
    pickle_file = open(filename, ‘rb‘)
    clf = pickle.load(pickle_file)

    year=context.current_dt.year
    month=context.current_dt.month
    day=context.current_dt.day
    index_date=str(year)+‘-‘+str(month)+‘-‘+str(day)

    SZ1=get_index_stocks(‘399008.XSHE‘, date=index_date)
    SZ2=get_index_stocks(‘399012.XSHE‘, date=index_date)
    SH=get_index_stocks(‘399905.XSHE‘, date=index_date)
    index=SZ1+SZ2+SH

    X, index2=fundamental(index)

    for each in range(0, len(index2)):
        if clf.predict(X[each].reshape(1,X.shape[1]))[0] == 1 and index2[each] not in context.portfolio.positions.keys():
            log.info("===================Buying:", index2[each])
            order_target_value(index2[each], context.portfolio.cash/5)
        if clf.predict(X[each].reshape(1,X.shape[1]))[0] == 0 and index2[each] in context.portfolio.positions.keys():
            log.info("<<<<<<<<<<<<<<<<<<Holding:", context.portfolio.positions.keys())
            log.info("-------------------selling:", index2[each])
            order_target(index2[each], 0)

# 止损

    if context.portfolio.positions:
        for stock in context.portfolio.positions.keys():
            cur_price = data[stock].close
            position=context.portfolio.positions[stock]
            if cur_price > position.avg_cost * (1 + 0.5) or cur_price < position.avg_cost * (1 - 0.2):
                order_target(stock, 0)
                log.info("<<<<<<<<<<<", stock, "%s lose:", 1-cur_price/position.avg_cost)

  https://www.joinquant.com/

https://zhuanlan.zhihu.com/p/24649311

原文地址:https://www.cnblogs.com/javastart/p/9751775.html

时间: 2024-11-09 10:26:10

第25月第7天 聚宽 svm的相关文章

熟悉框架_聚宽

熟悉聚宽框架使用 简单策略说明: 基准:以沪深300成分股作为基准 建仓标准:选取沪深300成分股中低价股票买入(股价<4元) 止盈标准:当收益率>=25%时卖出持仓股票止盈 止损标准:当收益率<=-10%时卖出持仓股票止损 代码: # 导入函数库 from jqdata import * # 初始化函数 def initialize(context): # 设置基准 set_benchmark('000300.XSHG') # 动态复权 set_option('use_real_pri

第25月第4天 djangochinaorg项目记录01

#------------------------------ 1. djangochinaorg项目 https://github.com/DjangoChinaOrg/Django-China-API https://github.com/DjangoChinaOrg/Django-China-FE 2.vue proxyTable proxyTable: { '/proxy': { target: 'http://localhost:8000', changeOrigin: true, p

第25月第6天 李宏毅 深度学习

1.李宏毅 https://www.bilibili.com/video/av20544709/?p=3 http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html 2.文刀 神经网络 https://space.bilibili.com/311648538/#/channel/detail?cid=48663 原文地址:https://www.cnblogs.com/javastart/p/9746710.html

第25月第11天 deeplearning.ai

1.网易云课堂 深度学习工程师 点击进入课程地址(英文)(收费) 点击进入课程地址(中文)(免费) 第一门 神经网络和深度学习 第二门 改善神经网络 第三门 结构化机器学习项目 第四门 卷积神经网络 第五门 序列模型 原文地址:https://www.cnblogs.com/javastart/p/9770403.html

第25月第26天 dispatch_group

1. dispatch_group_enter(group); dispatch_group_leave(group); dispatch_group_notify(group1, queue1,block); 在这种组合下,根据任务是同步.异步又分为两种,这两种组合的执行代码与运行结果如下: 第一种:同步任务时 dispatch_queue_t queue2 = dispatch_queue_create("dispatchGroupMethod2.queue2", DISPATCH

聚宽jointquant写策略常用的函数

#初始化的一些东西 set_benchmark('000300.XSHG') set_option('use_real_price', True) set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, close_today_commission=0, min_commission=5), type='stock') df = attribute

day32 Python与金融量化分析(二)

第一部分:金融与量化投资 股票: 股票是股份公司发给出资人的一种凭证,股票的持有者就是股份公司的股东. 股票的面值与市值 面值表示票面金额 市值表示市场价值 上市/IPO: 企业通过证券交易所公开向社会增发股票以募集资金 股票的作用: 出资证明.证明股东身份.对公司经营发表意见 公司分红.交易获利 股票的分类 股票按业绩分类: 蓝筹股:资本雄厚.信誉优良的公司的股票 绩优股:业绩优良公司的股票 ST股:特别处理股票,连续两年亏损或每股净资产低于股票面值 股票按上市地区分类: A股:中国大陆上市,

海龟交易法操作商品期货

上了三个小象学院的量化交易网课,是时候写点东西了.按照进阶课的内容,先把宋战江老师第一课针对商品期货的海龟交易法写一下,他是在TB上写的,我想将代码改到聚宽上. 先上聚宽搜商品期货数据的信息,看到有个帖子直接给出了海龟交易法,由于第一次用聚宽,先逐字敲一下代码 1 # 克隆自聚宽文章:https://www.joinquant.com/post/9184 2 # 标题:商品期货策略——海龟交易法 3 # 作者:ScintiGimcki 4 5 # 导入函数库 6 import jqdata 7

揭秘中国商品期货市场的9大重要因子

https://blog.csdn.net/Quant_/article/details/89360501 一.简介本文对中国商品期货投资进行了迄今为止最全面的研究.首次记录了中国独特的政策对于期货市场的影响.从已有文献中我们总结出 12 种不同的系统性风险溢价因子.我们发现,无论是在强流动性品种的市场还是随机选取的投资品种市场上,比起单边做多的传统期货策略,动量和期限结构因子都带来了具有统计意义的明显收益.被我们所观察到的收益并不能完全被市场风险,宏观经济形势.期货品种特异风险.市场情绪.交易