quartz学习笔记5:update

简介: quartz学习笔记5:update

#回测框架的核心代码,回测数据

import chardet
from quantify import db,dataApi
import pandas as pd
from pandas import DataFrame
import time
import traceback
db.create_engine(user='root', password='', database='quant', host='127.0.0.1', port=3306)
#导入所有代码进数据库
def input_list_data(buf):
    #buf='SH' or buf='SZ'
    f=open('../data/%s.SNT'%buf,'r')
    str=f.readlines()
    for index,i in enumerate(str):
        if index>1:
            line=i.strip().split('\t')
            try:
                code_name=line[1].decode('GB2312').encode('utf-8')
                code=line[0]+'.%s'%buf
                n = db.update('insert into code_list(code, name , market) values(?, ? ,?)',code , code_name , buf)
                print n
            except Exception as e:
                print e
        #print chardet.detect(code_name)查看编码
    f.close()
def input_stock_data():
    res=db.select('select * from code_list')
    #string_list=[]
    for i in res:
        stock_code=i[u'code'].decode('utf-8')
        stock_num=stock_code.split('.')
        get_sd_csv('20010101','20150814',stock_num[0],'../stock_data/%s.csv'%stock_num[0])
        print stock_num[0]
def get_sd_csv(start,end,stock_num,filename):
    client = dataApi.Client()
    url='/api/market/getMktEqud.csv?field=&beginDate=%s&endDate=%s&secID=&ticker=%s&tradeDate='%(start,end,stock_num)
    code, result = client.getData(url)
    if(code==200):
        file_object = open(filename, 'w')
        file_object.write(result)
        file_object.close( )
        print 'ok'
    else:
        print code
        print result
def input_daily_data():
    res=db.select('select * from code_list')
    #string_list=[]
    for i in res:
        stock_code=i[u'code'].decode('utf-8')
        stock_num=stock_code.split('.')
        stock_data=open_csv('../stock_data/%s.csv'%stock_num[0])
        try:
            for i in range(stock_data.shape[0]):
                only_key='%s+%s'%(stock_data.iloc[i]['secID'],stock_data.iloc[i]['tradeDate'])
                charset=chardet.detect(stock_data.iloc[i]['secShortName'])
                print charset,stock_data.iloc[i]['secShortName'].decode('GB2312')
                n = db.update('insert into daily_data(secID, ticker , secShortName , exchangeCD , tradeDate , preClosePrice , actPreClosePrice ,openPrice , highestPrice , lowestPrice , closePrice , turnoverVol , turnoverValue , dealAmount , turnoverRate , accumAdjFactor ,negMarketValue , marketValue , PE ,PE1, PB, only_key) values(?, ? ,? ,? ,? ,? ,? ,? ,? ,?, ?, ? ,? ,? ,? ,? ,? ,? ,? ,? ,? ,? )',stock_data.iloc[i]['secID'],  str(stock_data.iloc[i]['ticker']) ,stock_data.iloc[i]['secShortName'].decode('GB2312').encode('utf-8'), stock_data.iloc[i]['exchangeCD'] , stock_data.iloc[i]['tradeDate'] , float(stock_data.iloc[i]['preClosePrice']) , float(stock_data.iloc[i]['actPreClosePrice']) ,float(stock_data.iloc[i]['openPrice']) , float(stock_data.iloc[i]['highestPrice']) , float(stock_data.iloc[i]['lowestPrice']) , float(stock_data.iloc[i]['closePrice']) , int(stock_data.iloc[i]['turnoverVol']) , float(stock_data.iloc[i]['turnoverValue']) , int(stock_data.iloc[i]['dealAmount']) , float(stock_data.iloc[i]['turnoverRate']) , float(stock_data.iloc[i]['accumAdjFactor']) , float(stock_data.iloc[i]['negMarketValue']) , float(stock_data.iloc[i]['marketValue']) , float(stock_data.iloc[i]['PE']) , float(stock_data.iloc[i]['PE1']), float(stock_data.iloc[i]['PB']),only_key)
                print n
            print '%s:插入完成'%stock_num[0]
        except Exception as e:
            print e 
            f=open('log.txt','a')
            traceback.print_exc(file=f)   
            f.flush()   
            f.close()   
            #f.write('time:%s,error:%s')%(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),str(e))
            #f.close()
def open_csv(filename):
    try:
        res=pd.read_csv(filename)
        return res
    except Exception as e:
        print e 
def up_data(start,end,stock_num):
    client = dataApi.Client()
    url='/api/market/getMktEqud.csv?field=&beginDate=%s&endDate=%s&secID=&ticker=%s&tradeDate='%(start,end,stock_num)
    code, result = client.getData(url)
    if(code==200):
        return result 
    else:
        print code
def select_updata():
    stock_list=db.select('select * from code_list')
    for i in stock_list:
        stock_code=i[u'code'].decode('utf-8')
        stock_num=stock_code.split('.')
        rs=up_data('20150817', '20150817', stock_num[0])
        if '-1:No Data Returned' in rs:
            print '00'
        else:
            hs=rs.split(',')
            temp=[]
            for index,i in enumerate(hs[20:]):
                if index==0:
                    h=i.replace('PB\n','')
                    temp.append(h.strip('\"'))
                elif index==20:
                    temp.append(i.replace('\n',''))
                else:
                    temp.append(i.strip('\"'))
            if temp[2] :  
                only_key='%s+%s'%(temp[0],temp[4])
                try:
                    n=db.update('insert into daily_data(secID, ticker , secShortName , exchangeCD , tradeDate , preClosePrice , actPreClosePrice ,openPrice , highestPrice , lowestPrice , closePrice , turnoverVol , turnoverValue , dealAmount , turnoverRate , accumAdjFactor ,negMarketValue , marketValue , PE ,PE1, PB, only_key) values(?, ? ,? ,? ,? ,? ,? ,? ,? ,?, ?, ? ,? ,? ,? ,? ,? ,? ,? ,? ,? ,? )',temp[0],  temp[1] ,temp[2].decode('GB18030').encode('utf-8'), temp[3] , temp[4] , float(temp[5]) , float(temp[6]) ,float(temp[7]) , float(temp[8]) , float(temp[9]) , float(temp[10]) , int(temp[11]) , float(temp[12]) , int(temp[13]) , float(temp[14]) , float(temp[15]) , float(temp[16]) , float(temp[17]) , float(temp[18]) , float(temp[19]), float(temp[20]),only_key)
                    print temp[2].decode('GB18030').encode('utf-8'),n
                    f=open('stock_list.txt','a')
                    f.write('%s,%s,%s\n'%(temp[0],temp[1],temp[2].decode('GB18030').encode('utf-8')))
                    f.close()
                except Exception as e:
                    print e
    print 'All stock updata done!'
def auto_updata(day):
    f=open('stock_list.txt','r')
    h=f.readlines()
    f.close()
    for i in h:
        stock_line=i.strip().split(',')
        rs=up_data(day, day, stock_line[1])
        if '-1:No Data Returned' in rs:
            print '00'
        else:
            hs=rs.split(',')
            temp=[]
            for index,i in enumerate(hs[20:]):
                if index==0:
                    h=i.replace('PB\n','')
                    temp.append(h.strip('\"'))
                elif index==20:
                    temp.append(i.replace('\n',''))
                else:
                    temp.append(i.strip('\"'))
                #return temp
            if temp[2] :  
                only_key='%s+%s'%(temp[0],temp[4])
                try:
                    n=db.update('insert into daily_data(secID, ticker , secShortName , exchangeCD , tradeDate , preClosePrice , actPreClosePrice ,openPrice , highestPrice , lowestPrice , closePrice , turnoverVol , turnoverValue , dealAmount , turnoverRate , accumAdjFactor ,negMarketValue , marketValue , PE ,PE1, PB, only_key) values(?, ? ,? ,? ,? ,? ,? ,? ,? ,?, ?, ? ,? ,? ,? ,? ,? ,? ,? ,? ,? ,? )',temp[0],  temp[1] ,temp[2].decode('GB18030').encode('utf-8'), temp[3] , temp[4] , float(temp[5]) , float(temp[6]) ,float(temp[7]) , float(temp[8]) , float(temp[9]) , float(temp[10]) , int(temp[11]) , float(temp[12]) , int(temp[13]) , float(temp[14]) , float(temp[15]) , float(temp[16]) , float(temp[17]) , float(temp[18]) , float(temp[19]), float(temp[20]),only_key)
                    print temp[2].decode('GB18030').encode('utf-8'),n
                except Exception as e:
                    print e
    print 'All stock updata done!'
def getTradeCal(exchangeCD,beginDate,endDate,field):
    client = dataApi.Client()
    url='/api/master/getTradeCal.csv?field=%s&exchangeCD=%s&beginDate=%s&endDate=%s'%(field,exchangeCD,beginDate,endDate)
    code, result = client.getData(url)
    if(code==200):
        return result 
    else:
        print code
today=time.strftime("%Y%m%d",time.localtime())
tradecal=getTradeCal(exchangeCD='XSHG',beginDate=today,endDate=today,field='isOpen')
is_open=tradecal.split('\n')
if is_open[1]=='1':
    auto_updata(today)
    print today
else:
    print "today is not trade day!"
#auto_updata('20150901')
目录
相关文章
|
4月前
|
前端开发 JavaScript Java
踩坑与成长:WordPress、MyBatis-Plus 及前端依赖问题解决记录
在软件开发的道路上,我们总是会遇到各种问题和挑战,这些问题可能是技术的限制,也可能是配置的误差。解决这些问题的过程通常是开发者成长的一部分。今天,我将与大家分享在开发过程中,涉及到 WordPress、MyBatis-Plus 和 前端依赖问题 时,我遇到的一些“坑”以及如何一步步解决它们的经验。
|
Java
【异常】Failed to bind properties under ‘logging.level‘ to java.util.Map<java.lang.String, java.lang.Str
【异常】Failed to bind properties under ‘logging.level‘ to java.util.Map<java.lang.String, java.lang.Str
531 0
|
SQL 关系型数据库 MySQL
check the manual that corresponds to your MySQL server version for the right syntax to use near lin
注意这种一般情况下是语法问题,说明mysql的各种语句还是不够熟练, (1)看表名是不是使用了Mysql的关键字,如果是,请立马改掉; (2)语句给出哪里错误,如我的题目中给出“near”,说明在那附近有问题。 (3)检查mybatis中mapper里sql语句占位符是否写对,我的问题是将#{name}写成了#(name),尴尬。
1105 0
|
Java Apache
JAVA压缩、解压,使用Apache Common Compress包下载链接
JAVA压缩、解压,使用Apache Common Compress包下载链接
394 0
|
10天前
|
数据采集 人工智能 安全