コード例 #1
0
ファイル: indexAnalysis.py プロジェクト: hbwzhsh/stockPy
def getIndexChangeRate(startDate,endDate):    
    df_result = DataFrame()
    df = ts.get_hist_data('sh',start =startDate,end = endDate ).reset_index()
    df['gap'] = df['high'] - df['low']
    df['gap_rate'] = df['gap']/df['close']*100
    df['mkt'] = 'sh'
    df_result = df_result.append(df)
    
    df = ts.get_hist_data('sz',start =startDate,end = endDate ).reset_index()
    df['gap'] = df['high'] - df['low']
    df['gap_rate'] = df['gap']/df['close']*100
    df['mkt'] = 'sz'
    df_result = df_result.append(df)
    
    df = ts.get_hist_data('zxb',start =startDate,end = endDate ).reset_index()
    df['gap'] = df['high'] - df['low']
    df['gap_rate'] = df['gap']/df['close']*100
    df['mkt'] = 'zxb'
    df_result = df_result.append(df)
    
    df = ts.get_hist_data('cyb',start =startDate,end = endDate ).reset_index()
    df['gap'] = df['high'] - df['low']
    df['gap_rate'] = df['gap']/df['close']*100
    df['mkt'] = 'cyb'
    df_result = df_result.append(df)
    
    fileName = r'D:\stock\index_changeRate_' +startDate+'_' + endDate + '.csv'
    df_result = df_result.loc[:,['date','mkt','close','volume','price_change','p_change','gap','gap_rate']]
    df_result = df_result.sort_index(by='date',ascending=False)
    df_result.to_csv(fileName,index = False)
コード例 #2
0
ファイル: stl_playground.py プロジェクト: leevits/Stellar
def dataframe2csv_test():

    '''
    问题描述:
    dataframe存csv后, 再从csv里面读到dataframe里面, 多一列序号...

    试验发现:
    对于通过调用pd.read_csv('xxx.csv')返回dataframe, 会自动增加一列序号

    解决办法:
    调用read_csv时使用index_col参数设置当前第一列为index, 就不会再增加索引列了.
    pd.read_csv('xxx.csv', index_col=0)
    '''
    df1 = tushare.get_hist_data('600004', start='2016-07-18', end='2016-07-19')
    print('----------------- df1 -----------------')
    print(df1)
    df1.to_csv('result.csv')

    df2 = tushare.get_hist_data('600004', start='2016-07-20', end='2016-07-21')
    print('----------------- df2 -----------------')
    print(df2)

    old_data = pd.read_csv('result.csv', index_col=0)
    print(old_data)
    old_data.to_csv('result.csv')

    df3 = df2.append(old_data)
    print('----------------- df3 -----------------')
    print(df3)

    df3.to_csv('result.csv')
コード例 #3
0
ファイル: dailyToMysql.py プロジェクト: kenshin1027/mypython
def download_dailydata():
    start = clock()
    today = strftime("%Y-%m-%d")
    with open(PATH_ALL_CODE, 'r') as csv_file:
        spam_reader = reader(csv_file, delimiter=' ', quotechar='|')
        for row in spam_reader:
            #df = ts.get_hist_data(row[0][2:8], start='2016-03-31', end='2016-03-31')
            df = ts.get_hist_data(row[0][2:8], today)
            stockcode = pd.DataFrame(row[0], index=df.index, columns= (['stockcode']))
            df.insert(0, 'stockcode', stockcode)
            del df['price_change']
            del df['ma20']
            del df['v_ma20']
            df.to_sql('dailydata', ENGINE, if_exists='append')
    csv_file.close()

    index_list = ['sz399001','sz399006']
    for i in range(0, len(index_list)):
        df = ts.get_hist_data(index_list[i][2:8],today)
        stockcode = pd.DataFrame(index_list[i], index=df.index, columns= (['stockcode']))
        df.insert(0, 'stockcode', stockcode)
        del df['price_change']
        del df['ma20']
        del df['v_ma20']
        df.to_sql('index', ENGINE, if_exists='append')
    end = clock()
    print 'download data costs %d seconds' % (end - start)
コード例 #4
0
ファイル: dataProvider.py プロジェクト: aslucky/StockHelper
 def get_data_by_count(self, stock_code, trade_date, count, kline_type, dataPath=None, dataType=None):
     """
     获取到指定日期的count根k线数据,通达信目前只支持日线数据
     :param stock_code:
     :param trade_date: 指定日期的数据
     :param count:
     :param kline_type: 数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D
     :param dataPath: 数据路径
     :param dataType: 数据类型, 0 通达信数据
     :return: dataframe 从小到大日期排序
     """
     # 获取count日内的k线数据
     holidays = (count / 5) * 3
     startDate = trade_date + datetime.timedelta(days=-(count + holidays))
     try:
         spy = ts.get_hist_data(stock_code, start=startDate.strftime("%Y-%m-%d"),
                                end=trade_date.strftime("%Y-%m-%d"),
                                ktype=kline_type)
         for i in range(4):
             if len(spy) < count:
                 holidays *= 2
                 startDate = trade_date + datetime.timedelta(days=-(count + holidays))
                 spy = ts.get_hist_data(stock_code, start=startDate.strftime("%Y-%m-%d"),
                                        end=trade_date.strftime("%Y-%m-%d"),
                                        ktype=kline_type)
             else:
                 break
     except (RuntimeError, TypeError, NameError, IOError, ValueError):
         return []
     return spy[:count].sort_index()
コード例 #5
0
def do_it(code,basics):
	stock_code = code
	num4days = 60
	now,yestoday,end_day,workday = get_days(num4days)
	stock = get_basics_info(code,basics)

	try:
		df = ts.get_hist_data(stock_code,start=str(end_day),end=str(yestoday))
		df_sh = ts.get_hist_data('sh',start=str(end_day),end=str(yestoday))
	except:
		print('timeout!')
		sys.exit(1)

	#p_trend,p_sh_trend = get_p_trend(df,df_sh)
	p,p_sh,p_p,p_sh_p = get_p_trend(df,df_sh)
	count = p - p_sh
	persent = p/count *100
	if p_sh < p and count >=15:
	#if p_sh < p:
		msg_list = list()
		for key in ['name','industry','pe']:
			msg_list.append(str(stock[key]))
		msg = '\t'.join(msg_list)
		num_msg = 'num(code/sh)\t'+get_color("%.2f" % p)+'\t'+get_color("%.2f" % p_sh)
		persent_str = 'persent(code/sh)\t'+get_color("%.2f" % p_p)+'\t'+get_color("%.2f" % p_sh_p)
		persent_msg = num_msg+'\t'+ persent_str
		print(persent_msg+'\t'+stock_code+'\t'+msg)
コード例 #6
0
ファイル: utils.py プロジェクト: lmcloveruby/IWANTYOURMONEY
def init_day_data(start=None):
    SjLshqD.objects.all().delete()
    stocks = SjGpJb.objects.order_by('dm').all()
    t1 = datetime.now()
    for basic in stocks:
        print('fetch stock: %s\'s data ' % basic.dm)
        if start is None:
            df = ts.get_hist_data(basic.dm, ktype='D')
        else:
            df = ts.get_hist_data(basic.dm, start=start, ktype='D')

        if df is not None and not df.empty:
            records = df.to_records()
            pattern = '%Y-%m-%d'
            for record in records:
                sj = str_utils.to_timezone(record['date'], pattern)
                data = SjLshqD.objects.get_or_create(gpjb=basic, sj=sj)[0]
                data.kpj = record['open']
                data.spj = record['close']
                data.zgj = record['high']
                data.zdj = record['low']
                data.cjl = record['volume']
                data.zde = record['price_change']
                data.zdf = record['p_change']
                data.jj5 = record['ma5']
                data.jj10 = record['ma10']
                data.jj20 = record['ma20']
                data.jl5 = record['v_ma5']
                data.jl10 = record['v_ma10']
                data.jl20 = record['v_ma20']
                data.hsl = record['turnover']
                data.save()

    t2 = datetime.now()
    print('init_day_data use totaol\' time: %s' % (t2 - t1).total_seconds())
コード例 #7
0
def _DP(datapath, sid, ktype):
    '''
        获取不同种类的大盘指数函数
        20160720    改一下,保存临时文件
    :param datapath:
    :param zs:
    :param ktypes:
    :return:
    '''

    # for fn in os.listdir(datapath):
    # if fn.find()
    # for id in zs:
    timestemp = datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')
    ffn = os.path.join(datapath, sid + '_' + ktype + '.csv')
    if os.path.isfile(ffn):
        oldps = pandas.read_csv(ffn, index_col='date')
        # start = datetime.strftime(datetime.strptime(oldps.index.max(), '%Y-%m-%d') + timedelta(days=1), '%Y-%m-%d')
        start = datetime.strptime(oldps.index.max().split(' ')[0], '%Y-%m-%d') + timedelta(days=1)
        # 判断现有数据的时间
        if (start - datetime.now()).days >= 0:
            pass
        else:
            tmpffn = ffn + '.bak.csv'
            toSaveData = tushare.get_hist_data(code=sid, ktype=ktype, start=datetime.strftime(start, '%Y-%m-%d'))
            # toSaveData['p_change_level'] = numpy.nan
            # toSaveData['volume_level'] = numpy.nan
            toSaveData.to_csv(tmpffn.lower())
    else:
        tmpffn = ffn
        toSaveData = tushare.get_hist_data(code=sid, ktype=ktype)
        # toSaveData['p_change_level'] = numpy.nan
        # toSaveData['volume_level'] = numpy.nan
        toSaveData.to_csv(ffn.lower())
コード例 #8
0
ファイル: dataSource_k.py プロジェクト: lili10000/quant
    def getHistKData(self, code, start, end, ktype):
        '''
        历史K线
        '''
        print 'getHistKData work'

        if len(start) == 0 or len(end) == 0 :   
            df = ts.get_hist_data(code)
            ktype = 'D'

        elif len(start) == 0 :
            df = ts.get_hist_data(code, start, end)
            
        elif cmp(ktype, 'D') == 0 or \
             cmp(ktype, 'W') == 0 or \
             cmp(ktype, 'M') == 0 or \
             cmp(ktype, '5') == 0 or \
             cmp(ktype, '15') == 0 or \
             cmp(ktype, '30') == 0 or \
             cmp(ktype, '60') == 0 :

            df = ts.get_hist_data(code, start, end, ktype)
            
        else:
            print 'input error'
            return

        df.to_csv(self.__filename)

        
        self.__write2DB(ktype, code)
コード例 #9
0
ファイル: datafetch3.py プロジェクト: hecomlilong/basic
    def get_hist_data(self,code = '600848', start = 0, end = 0, ktype = 'D', option = 'append'):
    #option = 'replace','fail','append'
    #code:股票代码,即6位数字代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板)
    #start:开始日期,格式YYYY-MM-DD
    #end:结束日期,格式YYYY-MM-DD
    #ktype:数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D
    #retry_count:当网络异常后重试次数,默认为3
    #pause:重试时停顿秒数,默认为0
        if(start != 0 and end != 0):
            df = ts.get_hist_data(code,start=start,end=end,ktype=ktype)
        else:
            df = ts.get_hist_data(code,ktype=ktype)
        #cnx = self.conn.getCNX()
        #df.to_sql("hist_data_"+ktype,cnx,flavor='mysql',if_exists=option,index=False)
        #print df.values
        #for tt in df.values:
        #    print tt
        #    for i in range(len(tt)):
        #        print tt[i]
        #date = datetime.datetime.strptime(start, "%Y-%m-%d")
        #curdate = date + datetime.timedelta(days=dd)
        #print d
        #print date
        #return

        for j in range(len(df.values)):
            date = df.index[j]
            tt = df.values[j]
            sqlPre = "insert into "+"hist_data_"+ktype+" (`code`, `date`, `open`, `high`, `close`, `low`, `volume`, `price_change`, `p_change`, `ma5`, `ma10`, `ma20`, `v_ma5`, `v_ma10`, `v_ma20`, `turnover`) VALUES ('"+code+"','"+date+"',"
            for i in range(len(tt)):
                sqlPre += "'"+tt[i].astype("str")+"',"
            sqlPre = sqlPre[:(len(sqlPre)-1)] + ")"
            self.conn.execute(sqlPre)
            #break
        print "get_hist_data executed"
コード例 #10
0
ファイル: emacount.py プロジェクト: johnsonhongyi/pyQuant
def get_ts_start_date(stock, datelen, type=None):
    '''
    :param stock: code
    :param datelen: date lenth
    :param type: day or week
    :return:start_date
    '''

    datelen = int(datelen)
    # start_date=get_day_of_day(datelen)
    # print start_date,stock
    if type != None:
        df = ts.get_hist_data(stock,start=get_day_of_day(datelen*3),ktype=type)
    else:
        df = ts.get_hist_data(stock,start=get_day_of_day(datelen*3))
    # day_t=get_today()
    # if day_t in df.index:
    #     # print "daynow"
    #     df=df.drop(day_t)
    if df.empty:
        print ("data err,pls check dataframe")
    else:
        # print df['open'].count()
        if df['open'].count() < datelen:
            start_date = (df.index)[-1]
            # print start_date
        else:
            start_date = (df.index)[datelen - 1]
    return start_date
コード例 #11
0
ファイル: emacount.py プロジェクト: johnsonhongyi/pyQuant
def getdata_ema_trend_silent(stock, datelenth, type=None):
    # if datalen == '10':
    #     print ("datalen not 10")
    # else:
    #     print ("len:",datalen)
    # df = ts.get_tick_data(stock)
    start_date = get_ts_start_date(stock, datelenth, type)
    # print ("\nstart: %s  stock: %s" %(start_date[-5:],stock))
    if type != None:
        df = ts.get_hist_data(stock, start=start_date, ktype=type)
    else:
        df = ts.get_hist_data(stock, start=start_date)
    # countnum = df['open'].count()
    # print ('countnum:',countnum)
    # open_p=df['open'].mean()
    # low_p=df['open'].mean()
    # close_p=df['close'].mean()
    # print ("open_p:",open_p)
    # print  ("close_p:",close_p)
    # real_df=ts.get_realtime_quotes(stock)
    # real_o=(real_df['open'])[0]
    # real_c=(real_df['price'])[0]
    # real_perc=(real_df['pre_close'])[0]
    # print ("open:%s  lastc:%s nowp:%s"%(real_o,real_perc,real_c))
    return df
コード例 #12
0
def getLast3YearsData(datapath, sid):
    '''

    :param datapath:
    :param sid:
    :return:
    '''
    tushare.get_hist_data(sid).to_csv(os.path.join(datapath, sid + '.csv').lower())
コード例 #13
0
def do_it(code,basics,yestoday,end_day,day_list):
	stock_basics_dict = {}
	stock_basics_dict[code] = get_basics_info(code,basics)

	try:
		df = ts.get_hist_data(code,start=str(end_day),end=str(yestoday))
		df_sh = ts.get_hist_data('sh',start=str(end_day),end=str(yestoday))
	except:
		print('timeout!')
		sys.exit(1)

	price_dict = {}
	sh_price_dict = {}
	day_count = 0
	p_change_sum = 0
	sh_p_change_sum = 0
	date = df.index.values[0]
	for day in df.index.values:
		try:
			price_dict[code] = get_price_info(code,df,day_count)
			data_list_dict,num25 = get_data_list(df,day_list,day_count)
			if num25 <25:
				break
			p_change = price_dict[code]['p_change']
			#persent = rules(df,day_list,data_list_dict,p_change)

			sh_price_dict = get_price_info('sh',df_sh,day_count)
			sh_data_list_dict,num25 = get_data_list(df_sh,day_list,day_count)
			sh_p_change = sh_price_dict['p_change']
			#sh_persent = rules(df_sh,day_list,sh_data_list_dict,sh_p_change)
			
		except:
			break

		if p_change >0:
			p_change_sum +=1
		else:
			p_change_sum -=1
		
		if sh_p_change >0:		
			sh_p_change_sum +=1
		else:
			sh_p_change_sum -=1

		day_count +=1

	persent = p_change_sum/day_count *100
	#print(str(persent),str(p_change_sum),str(sh_p_change_sum),str(day_count))
	#if (persent >= 4 and persent <= 7) and p_change_sum >0 and day_count >=60:
	if p_change_sum >0 and persent >= 15 and day_count >=60:
		head_msg = code+'\t'+stock_basics_dict[code]['name']
		mid_msg = date + '\t'+'close\t'+("%.2f" % price_dict[code]['close'])
		end_msg = '市盈率\t'+stock_basics_dict[code]['pe']+'\t'+stock_basics_dict[code]['industry']
		p_msg = 'stock/sh\t'+get_color(str(p_change_sum))+'\t'+get_color(str(sh_p_change_sum))+'\tpersent\t'+get_color("%.2f" % persent)
		day_msg = 'days\t'+get_color(str(day_count))
		print(Fore.RED+mid_msg+'\t'+p_msg+'\t'+day_msg+'\t'+Fore.YELLOW+head_msg+'\t'+Fore.CYAN+end_msg)
コード例 #14
0
ファイル: 7.py プロジェクト: June-Wang/github4python
def do_it(stock_code,num4days,day_list):
	now = datetime.date.today()
	yestoday = now - datetime.timedelta(days=1)
	end_day = now - datetime.timedelta(days=num4days+day_list[-1]+10)
	workday = pd.bdate_range(start=str(end_day),end=str(yestoday))

	try:
		df = ts.get_hist_data(stock_code,start=str(end_day),end=str(yestoday))
		df_sh = ts.get_hist_data('sh',start=str(end_day),end=str(yestoday))
	except:
		print('timeout!')
		sys.exit(1)

	days = len(workday.date)
	p_change_sum = 0
	sh_p_change_sum = 0
	count = 0

	for i in range(days-1,day_list[-1]+10,-1):
		my_str = ''
		date_today = str(workday.date[i])
		date_yestoday = str(workday.date[i-1])
		#print(date_today,date_yestoday,date_today)

		try:
			price_open = df[df.index == date_today].open[0]
		except:
			continue

		if price_open != price_open:
			continue

		info_para_list = [df,date_today,workday,day_list,i]
		price_info_list = get_info(info_para_list) #获取股票信息
		color,persent = color4rules(date_today,price_info_list)

		info_para_list = [df_sh,date_today,workday,day_list,i]
		sh_info_list = get_info(info_para_list)
		color_sh,persent_sh = color4rules(date_today,sh_info_list)

		color4output(date_today,price_info_list,sh_info_list,color,persent,persent_sh)

		price_open,price_min,price_max,p_change,p_change_list,day_data = price_info_list
		sh_open,sh_min,sh_max,sh_p_change,sh_p_change_list,day_data_sh = sh_info_list
		if p_change >=0:
			p_change_sum +=1
		else:
			p_change_sum -=1
		if sh_p_change>=0:
			sh_p_change_sum +=1
		else:
			sh_p_change_sum -=1
	print('code:\t'+get_color(str(p_change_sum))+'\t'+'sh:\t'+get_color(str(sh_p_change_sum)))
コード例 #15
0
ファイル: get_pd_history.py プロジェクト: EricDHS/stock
 def run(self):
     print "Starting " + self.name
     while True:
         code = get_code()
         if not code:
             return
         try:
             end = datetime.date.today()
             start = datetime.date.today() - datetime.timedelta(days=200)
             ts.get_hist_data(code, start='%s' % (start), end='%s' % (end)).to_csv('pd_5days/%s.csv' % (code))
         except:
             print 'something wrong with code: %s' % (code)
コード例 #16
0
def crawl_data_00():
	today = getToday()

	for f_code in xrange(1,100):
		num_str = "%06d" % f_code
		code_str = str(num_str)

		data_t = ts.get_hist_data(code_str,start=today,end=today)
		
		if( data_t is not None):
			yield code_str
			ts.get_hist_data(code_str)
コード例 #17
0
ファイル: buy_nb.py プロジェクト: June-Wang/github4python
def do_it(code, basics):

    stock_name = str(basics[basics.index == code][["name"]].values[0][0])
    stock_code = code

    num4days = 200
    now = datetime.date.today()
    yestoday = now - datetime.timedelta(days=1)
    end_day = now - datetime.timedelta(days=num4days)
    workday = pd.bdate_range(start=str(end_day), end=str(yestoday))

    try:
        df = ts.get_hist_data(stock_code, start=str(end_day), end=str(yestoday))
        df_sh = ts.get_hist_data("sh", start=str(end_day), end=str(yestoday))
    except:
        print("timeout!")
        sys.exit(1)

    days = len(workday.date)

    for i in range(days - 1, days - 2, -1):
        my_str = ""
        date_today = str(workday.date[i])
        date_yestoday = str(workday.date[i - 1])

        try:
            price_open = df[df.index == date_today].open[0]
            # yestoday_price_open = df[df.index == date_yestoday].open[0]
        except:
            continue

        if price_open != price_open:
            continue

        info_para_list = [df, date_today, workday, day_list, i]
        price_info_list = get_info(info_para_list)  # 获取股票信息
        color, persent = color4rules(date_today, price_info_list)

        info_para_list = [df_sh, date_today, workday, day_list, i]
        sh_info_list = get_info(info_para_list)
        color_sh, persent_sh = color4rules(date_today, sh_info_list)

        if color != "no":
            stock_industry = str(basics[basics.index == code][["industry"]].values[0][0])  # 行业
            stock_area = str(basics[basics.index == code][["area"]].values[0][0])  # 区域
            stock_pe = str(basics[basics.index == code][["pe"]].values[0][0])  # 市盈率
            stock_pb = str(basics[basics.index == code][["pb"]].values[0][0])  # 市净率

            stock_basics_list = [stock_code, stock_name, stock_industry, stock_area, stock_pe, stock_pb]
            color4output(date_today, stock_basics_list, price_info_list, sh_info_list, color, persent, persent_sh)
コード例 #18
0
ファイル: stockClose.py プロジェクト: ryh95/pyspider-stock
def getStockClose(stockCode):
    client = MongoClient()
    db = client[stockCode+'eastmoney']

    # Todo:fix the time
    dates = ts.get_hist_data(stockCode,start = '2014-03-13',end  = '2016-03-10').index.tolist()
    prices = ts.get_hist_data(stockCode,start = '2014-03-13',end  = '2016-03-10')['close'].tolist()

    for i in range(len(dates)):
        result =  db.price.insert_one({
        "close" : prices[i],
        "create_date" : dates[i]
     })
        print result.inserted_id
コード例 #19
0
ファイル: data_to_mongy.py プロジェクト: aboluo67/ichinascope
def sync_stock_minutes_history():
	'''
	stock minutes history
	'''
	today_str = datetime.datetime.now().strftime(u'%Y-%m-%d')
	yesterday_str = datetime.date.fromordinal(datetime.date.today().toordinal()-1).strftime(u'%Y-%m-%d')
	for k in stocklist:
		df = ts.get_hist_data(code=k, start=yesterday_str, end=today_str, ktype='5')
		DataFrameToMongo(df, MongoClient(mongourl)['stoinfo']['history_5min'], ['__index__'], k)
		df = ts.get_hist_data(code=k, start=yesterday_str, end=today_str, ktype='15')
		DataFrameToMongo(df, MongoClient(mongourl)['stoinfo']['history_15min'], ['__index__'], k)
		df = ts.get_hist_data(code=k, start=yesterday_str, end=today_str, ktype='30')
		DataFrameToMongo(df, MongoClient(mongourl)['stoinfo']['history_30min'], ['__index__'], k)
		df = ts.get_hist_data(code=k, start=yesterday_str, end=today_str, ktype='60')
		DataFrameToMongo(df, MongoClient(mongourl)['stoinfo']['history_60min'], ['__index__'], k)
コード例 #20
0
ファイル: utils.py プロジェクト: lmcloveruby/IWANTYOURMONEY
def fetch_day_data2file(start='2016-01-01'):
    stocks = SjGpJb.objects.order_by('dm').all()
    t1 = datetime.now()
    for basic in stocks:
        print('fetch stock: %s\'s data to file' % basic.dm)
        if start is None:
            df = ts.get_hist_data(basic.dm, ktype='D')
        else:
            df = ts.get_hist_data(basic.dm, start=start, ktype='D')

        if df is not None and not df.empty:
            df.to_csv('/Users/lmclinux/code/IWANTYOURMONEY/data-files/%s.csv' %basic.ggid)

    t2 = datetime.now()
    print('init_day_data2file use totaol\' time: %s' % (t2 - t1).total_seconds())
コード例 #21
0
ファイル: short_sale.py プロジェクト: pubpro/outsourcepro
def detect_saling_stocks():
	global saling_stocks, request_date, last_request_date
	# get request date
	tm_wday = time.localtime(time.time()).tm_wday
	tm_hour = time.localtime(time.time()).tm_hour
	if tm_hour < 15:
		today = datetime.date.today()
		oneday = datetime.timedelta(days=1)
		now = today - oneday
	else:
		now = datetime.date.today()
	if tm_wday == 5:
		delta = datetime.timedelta(days=-1)
		last_date = now + delta
		request_date = last_date.strftime("%Y-%m-%d")
	elif tm_wday == 6:
		delta = datetime.timedelta(days=-2)
		last_date = now + delta
		request_date = last_date.strftime("%Y-%m-%d")		
	else:
		request_date = now.strftime("%Y-%m-%d")

	#request_date = "2017-01-04"	
	yesterday = datetime.timedelta(days=2)
	yesterday_date = now - yesterday
	weekday = yesterday_date.weekday()
	if weekday == 5:
		delta = datetime.timedelta(days=-1)
		last_date = yesterday_date + delta
		last_request_date = last_date.strftime("%Y-%m-%d")
	elif weekday == 6:
		delta = datetime.timedelta(days=-2)
		last_date = yesterday_date + delta
		last_request_date = last_date.strftime("%Y-%m-%d")		
	else:
		last_request_date = yesterday_date.strftime("%Y-%m-%d")

	#last_request_date = "2016-12-30"
	for stock_code in stocks:
		curr_stock = ts.get_hist_data(stock_code, start=request_date,end=request_date)
		last_stock = ts.get_hist_data(stock_code, start=last_request_date,end=last_request_date)
		# if stock ma5 < ma10, sale it
		if curr_stock["ma5"][0] < curr_stock["ma10"][0]:
			saling_stocks.append(stock_code)
			continue
		if (curr_stock["ma5"][0] - last_stock["ma5"][0]) / last_stock["ma5"][0] * 100 < fixed_down_rate:
			saling_stocks.append(stock_code)
			continue
コード例 #22
0
def main():
    now = time.strftime("%Y-%m-%d")
    # print(now)
    token = '60517739976b768e07823056c6f9cb0fee33ed55a1709b3eaa14a76c6a1b7a56'
    sb = StockBox()
    # sb.looper(id)
    id = '300333'
    # sb.realtime(id)
    sb.base_function("300333")
    # pandas_test=Pandas_test()
    # pandas_test.test_function()
    # sb.longhuban('2016-04-05')
    # sb.getNews()
    # sb.fund()
    # sb.get_stock_chengfeng()
    # sb.date_store()
    # sb.profit_test()
    # sb.daily_longhu()

    # 获取历史数据 近3年的数据
    history = ts.get_hist_data(id)

    print(u"历史3年的数据")

    print(history.head(10))

    history_all = ts.get_h_data(id, '20015101', '20160101')

    print(u'所有的历史数据')
    print(history_all)
コード例 #23
0
def ver_hammer(code, begin):
    """Function to recognise if the chart fits the revers hammer
    criteria: before today ,the line is in decrease curve,high 6% more than low,
    and open is 2% more than low, and close is less than 1% above the low.
    :param code: stock's code string
    :param begin: beginning date
    :return:    True if the stock satisfies the criterion, or else False
    """
    global count
    # print 'Processing %s (%s) ... ' % (code, count)
    count += 1
    data = ts.get_hist_data(code, ktype='60', start=begin)  # ktype-minute candlestick
    nor = len(data.index)
    if nor < 4:
        return False
    
    x = data.loc[data.index[0],["open","close","high","low"]]
    y = data.close

    if y[1] < y[2] <y[3] \
            and x.high / x.low > 1.1 \
            and x.close / x.low < 1.01 \
            and x.open / x.close < 1.03:
        return True

    return False
コード例 #24
0
ファイル: main.py プロジェクト: saiksy/stock-1
def get_stock_price(code, include_realtime_price):
    """
    获取个股股价
    :param code: 股票代码
    :param include_realtime_price: 是否含实时股价
    :return:
    """

    # 获取历史股价
    df = ts.get_hist_data(code)
    df = df[['close']]
    df['date'] = df.index

    if include_realtime_price:
        df_today = ts.get_today_all()
        df_code = df_today[df_today['code']==code]
        df_code = df_code[['trade']]
        df_code['date'] = GetNowDate()
        df_code.rename(columns={'trade': 'close'}, inplace=True)
        df = pd.concat([df, df_code], ignore_index=True)

    df.sort(columns='date', inplace=True)
    df = df.drop_duplicates(['date'])
    df.index = range(len(df))
    print '\n'
    # print df.head()
    print df.tail()
    return df
コード例 #25
0
ファイル: data.py プロジェクト: alpha2z/quantdigger
 def load_tushare_bars(self, pcontract, dt_start, dt_end):
     import tushare as ts
     print "load stock data with tushare... (start=%s,end=%s)" % (dt_start, dt_end)
     if(pcontract.period._type == 'Minute' ):
         data = tick2period(pcontract.contract.code,
                            str(pcontract.period)[:-3].replace('.',''),
                            start=dt_start,
                            end=dt_end)
     elif(pcontract.period._type == 'Second' ):
         data = tick2period(pcontract.contract.code,
                            str(pcontract.period)[:-5].replace('.',''),
                            start=dt_start,
                            end=dt_end)
     else:
             
         #日线直接调用
         data = ts.get_hist_data(pcontract.contract.code,
                                 start=dt_start,
                                 end=dt_end)
         data.open = data.open.astype(float)
         data.close = data.close.astype(float)
         data.high = data.high.astype(float)
         data.low = data.low.astype(float)
         ## @todo bug: data.volume 里面有浮点值!
         data.volume = data.volume.astype(float)
         data.index.names = ['datetime']
         data.index = pd.to_datetime(data.index)
         return data
コード例 #26
0
def getAllSellSignalStocksToday():

    stockList = getCandidateFromNetwork()
    stockInfoList = []
    buffer = []

    endDate = time.strftime("%Y-%m-%d")
    startDate = (date.today() - timedelta(days=40)).strftime("%Y-%m-%d")

    for stock in stockList:
        data = ts.get_hist_data(stock, start=startDate, end=endDate)
        array = (data.values)[-10:]

        min = 10000
        for i in range(0, len(array)-1):
            if array[i][2] < min:
                min = array[i][2]

        if len(array) > 8 and array[len(array)-1][2] < min and array[len(array)-1][2] < array[len(array)-1][8]:
            stockInfo = StockInfo(stock, array[len(array)-1][2], array[len(array)-1][8], array)
            stockInfo.speak()
            stockInfoList.append(stockInfo)

    stockInfoList.sort(lambda s1, s2: cmp(s1.b, s2.b))
    for stockInfo in stockInfoList:
        buffer.append(stockInfo.speak())

    ls = os.linesep
    #fobj = open('stockDataBuySignal.txt', 'w')
    fobj = open('stockDataSellSignalBreakDown.txt', 'w')
    fobj.writelines(['%s%s' %(x, ls) for x in buffer])
    fobj.close()

    return stockInfoList
コード例 #27
0
def stock_filter(code, begin):
    """
    Function to decide whether a stock meets the criteria: 1) close price over ma[60] 2) first
     time 3) for 2 percent. To approximate, use ma5 in 15 minutes level to replace average
     in 60 minutes level. A stock will be counted only if its close price is over ma[60] for the
     first time in 20 consecutive 15-minute intervals, and the price is high than ma[60] by 2%.
    :param code: stock's code string
    :param begin: beginning date
    :return: True if the stock satisfies the criterion, or else False
    """
    global count
    # print 'Processing %s (%s) ... ' % (code, count)
    count += 1
    data = ts.get_hist_data(code, ktype='30', start=begin)  # ktype-minute candlestick data
    # 有效突破 ma5: 超过 ma5 两个百分点
    data['chm'] = (data['close'] - 1.02 * data['ma10']) > 0
    nor = len(data.index)   # number of records
    if nor < 20:    # some stock may have no enough records due to IPO or suspension
        return False
    # 若最后一期未能有效突破 ma5 或在过去 19 期内已经有效突破 ma5 则滤掉
    if (not data['chm'][0]) \
       or any(data['chm'][1:20]):
        return False

    return True
コード例 #28
0
def plot_test2():
    fig = matplotlib.pyplot.gcf()
    df = ts.get_hist_data('600415', start='2015-04-01', end='2015-06-18')
    with pd.plot_params.use('x_compat', True):
        df.high.plot(color='r', figsize=(10, 4), grid='on')
        df.low.plot(color='b', figsize=(10, 4), grid='on')
        fig.savefig('graph.png')
コード例 #29
0
def exception_test():
    # 遇到一些停牌的

    stockid = '002316'
    df = ts.get_hist_data(stockid, start='20160601', end='20160701')
    if df.empty:
        print("empty")
コード例 #30
0
ファイル: storing_test.py プロジェクト: wzjwhtur/tushare
def hdf():
    df = ts.get_hist_data('000875')
    #     df.to_hdf('c:/day/store.h5','table')

    store = HDFStore('c:/day/store.h5')
    store['000875'] = df
    store.close()
コード例 #31
0
#!/usr/bin/env python3
#coding=utf-8
import matplotlib.pyplot as plt
import tushare as ts
from pandas import DataFrame
import pandas as pd
import numpy as np
import math

df = ts.get_hist_data('000651')
print(df)
print(type(df.index[0]))
fig = plt.figure()
gree_test = DataFrame(df, columns=["open", "close", "high"])
data_2019 = gree_test["close"].sort_index(ascending=True)
data_2019.cumsum()
data_2019.plot()
plt.show()
コード例 #32
0
ファイル: download.py プロジェクト: tima-Git/stock_work
 def down_period(self, stock, start=None, end=None):
     raw_data = ts.get_hist_data(stock, start, end)
     return raw_data
コード例 #33
0
import pandas as pd
pd.set_option('display.width', 1000)
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)

# sz50 = ts.get_sz50s()

# sz50 = ts.get_hs300s()

sz50 = ts.get_zz500s()

codes = sz50['code']
# print codes

for s in codes:
    data = ts.get_hist_data(s, start="2018-10-11", end="2018-10-12")

    try:
        _data = data.loc['2018-10-11']
    except:
        continue

    # print _data
    # 放量并且下跌5个点
    if ((_data['volume'] - _data['v_ma5']) /
            _data['v_ma5']) >= 0.5 and _data['p_change'] <= -5:
        try:
            __data = data.loc['2018-10-12']
            print "fang", _data['p_change'], s, __data['p_change']
        except:
            continue
コード例 #34
0
def load_daily_data(session, begin_code="000000"):
    engine = session.get_bind()

    log_file = (os.getcwd() + os.sep + "logs" + os.sep +
                "load_daily_%s.log") % (dt.datetime.now().strftime('%Y-%m-%d'))
    logger = get_logger(log_file, 'daily_load')

    logger.info('Daily load begin')
    logger.info("##########################################")

    # 获得上市公司的基本数据
    code_list = get_all_code_basic(session,
                                   begin_code)  #load_comp_basic(session)
    #code_list = code_list[code_list.index >= begin_code]

    # 添加上证深证指数
    s = pd.DataFrame(['sh', 'sz'], columns=["code"])
    code_list = code_list.append(s, ignore_index=True)

    # 获得数据库中所有股票的max date
    max_date_sql = "select code,max(date)  as max_date from stock.stock_hist group by code"

    # max_date_sql ="select code,max(date) as max_date from stock_hist group by code"
    max_date_df = pd.read_sql(max_date_sql,
                              engine,
                              columns=['code', 'max_date'])

    # 获得所有股票历史信息
    for index in code_list.index:
        row = code_list.iloc[index]
        logger.info(("Load data of code : %s ") % (row.code))
        logger.info(("Time to market : {timeToMarket} ").format(
            timeToMarket=row.timeToMarket))

        if (not row.timeToMarket) and (row.code not in ('sh', 'sz')):
            logger.info(("Code : %s has not yet listed ") % (row.code))
            continue

        try:
            print(row.code)
            max_date = max_date_df[max_date_df.code ==
                                   row.code].max_date.values[0]
            max_date = max_date if isinstance(max_date, dt.date) or isinstance(
                max_date, dt.datetime) else dt.datetime.strptime(
                    max_date, "%Y-%m-%d")
        except Exception as e:
            logger.info(("Code : %s has no history data ") % (row.code))
            max_date = dt.date(1900, 1, 1)

        next_date_py = max_date + dt.timedelta(days=1)
        next_date_str = next_date_py.strftime('%Y-%m-%d')

        # 从Tushare中拿数据
        one_stock = ts.get_hist_data(row.code, start=next_date_str)
        logger.info(("Max date in existing DW is : %s ") % (next_date_str))

        try:
            if row.code in ('sh', 'sz'):
                one_stock['turnover'] = 0
            one_stock['date'] = one_stock.index
            logger.info(("Code : %s has %d rows need to be inserted") %
                        (row.code, one_stock.index.size))
        except Exception as e:
            logger.error(("Code : %s has something wrong from date %s ") %
                         (row.code, next_date_str))
            break

        one_stock = one_stock.reset_index(drop=True)
        one_stock.insert(0, 'code', row.code, allow_duplicates=True)

        try:
            one_stock.to_sql('stock_hist',
                             engine,
                             index=False,
                             schema='stock',
                             if_exists='append')
            logger.info(("Code : %s updated successfully ") % (row.code))
            logger.info("##########################################")
        except Exception as e:
            logger.error(("Code : %s has something wrong for inserting %s ") %
                         (row.code, next_date_str))
            break
        finally:
            session.close()
コード例 #35
0
ファイル: tf-lstm-stock.py プロジェクト: marswei/quantrader
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Activation

from matplotlib.dates import DateFormatter, WeekdayLocator, DayLocator, MONDAY, YEARLY
#import matplotlib
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.pylab import date2num
import datetime
import numpy as np
from pandas import DataFrame
from numpy import row_stack, column_stack
import pandas

df = ts.get_hist_data('601857', start='2016-06-15', end='2018-01-12')
dd = df[['open', 'high', 'low', 'close']]

#print(dd.values.shape[0])

dd1 = dd.sort_index()

dd2 = dd1.values.flatten()

dd3 = pandas.DataFrame(dd1['close'])


def load_data(df, sequence_length=10, split=0.8):

    #df = pd.read_csv(file_name, sep=',', usecols=[1])
    #data_all = np.array(df).astype(float)
コード例 #36
0
# -*- coding: utf-8 -*-
"""
@author: Daniel
@contact: [email protected]
@file: dataframe_learn.py
@time: 2017/7/24 17:09
"""
import tushare as ts
import pandas as pd

stockdata = ts.get_hist_data('000001')
print(stockdata.close)
コード例 #37
0
ファイル: analysislib.py プロジェクト: fswzb/pyQuant-2
        operate = operate + 4
    elif (df.iat[(dflen - 2), 18] >= 50 and df.iat[(dflen - 1), 18] < 50) or (
                    df.iat[(dflen - 2), 19] >= 50 and df.iat[(dflen - 1), 19] < 50):
        operate = operate - 4

    # RSI掉头向下为卖出讯号,RSI掉头向上为买入信号
    if df.iat[(dflen - 1), 7] >= df.iat[(dflen - 1), 8] and df.iat[(dflen - 1), 8] >= df.iat[(dflen - 1), 9]:  # K线上涨
        if (slowrealMA5[MAlen - 1] <= slowrealMA10[MAlen - 1] and slowrealMA10[MAlen - 1] <= slowrealMA20[MAlen - 1]) or \
                (fastrealMA5[MAlen - 1] <= fastrealMA10[MAlen - 1] and fastrealMA10[MAlen - 1] <= fastrealMA20[
                        MAlen - 1]):  # RSI下降
            operate = operate - 1
    elif df.iat[(dflen - 1), 7] <= df.iat[(dflen - 1), 8] and df.iat[(dflen - 1), 8] <= df.iat[(dflen - 1), 9]:  # K线下降
        if (slowrealMA5[MAlen - 1] >= slowrealMA10[MAlen - 1] and slowrealMA10[MAlen - 1] >= slowrealMA20[MAlen - 1]) or \
                (fastrealMA5[MAlen - 1] >= fastrealMA10[MAlen - 1] and fastrealMA10[MAlen - 1] >= fastrealMA20[
                        MAlen - 1]):  # RSI上涨
            operate = operate + 1

    # 慢速线与快速线比较观察,若两线同向上,升势较强;若两线同向下,跌势较强;若快速线上穿慢速线为买入信号;若快速线下穿慢速线为卖出信号
    if df.iat[(dflen - 1), 19] > df.iat[(dflen - 1), 18] and df.iat[(dflen - 2), 19] <= df.iat[(dflen - 2), 18]:
        operate = operate + 10
    elif df.iat[(dflen - 1), 19] < df.iat[(dflen - 1), 18] and df.iat[(dflen - 2), 19] >= df.iat[(dflen - 2), 18]:
        operate = operate - 10
    return (df, operate)

if __name__ == '__main__':
    df=ts.get_hist_data('601198')
    db = get_BBANDS_Status(df)
    print db[:1]
    db = get_KDJ_Status(db)
    print db[:1]
コード例 #38
0
import scipy.stats as scs
import matplotlib.pyplot as plt
import scipy.optimize as sco
'''
PART TWO:均值-方差投资组合理论
'''
#选取几只感兴趣的股票
#000001中国平安  002230科大讯飞  000002万科A   000651格力电器
'''
a=int(input("请输入a股票编目:"))
b=int(input("请输入b股票编目:"))
c=int(input("请输入c股票编目:"))
d=int(input("请输入d股票编目:"))
'''
stock = ['002230', '000001', '000002', '000651']
data1 = ts.get_hist_data(stock[0], start='2017-02-01', end='2018-02-01')
data2 = ts.get_hist_data(stock[1], start='2017-02-01', end='2018-02-01')
data3 = ts.get_hist_data(stock[2], start='2017-02-01', end='2018-02-01')
data4 = ts.get_hist_data(stock[3], start='2017-02-01', end='2018-02-01')
#将所有股票信息的收盘价整合成一个dataframe
df = pd.concat(
    [data1['close'], data2['close'], data3['close'], data4['close']], axis=1)
print(df)
#修改列名
df.columns = stock
#显示股价走势,比较一下几种股票的情况。规范起点为100
(df / df.ix[0] * 100).plot(figsize=(8, 4))
#每年252个交易日,用每日收益得到年化收益。
#计算投资资产的协方差是构建资产组合过程的核心部分。运用pandas内置方法生产协方差矩阵。
returns = np.log(df / df.shift(1))
print(returns)
コード例 #39
0
ファイル: getKdateSummary.py プロジェクト: flychao4837/agtros
def getTradeSummary(stock="", start="", end=""):
    if bool(stock):
        print start
        print end
        jsonFile = os.path.join(config.dataRootKData, stock, "daySummary.json")
        data = ts.get_hist_data(stock, start=start, end=end)
        if str(type(data)) == "<class 'pandas.core.frame.DataFrame'>":
            data.to_json(jsonFile, orient='index', force_ascii=False)
        else:
            print stock + " is Not DataFrame"
            pass
        # ts.get_hist_data('600848', ktype='W')  # 获取周k线数据
        jsonFile = os.path.join(config.dataRootDailyTotal, stock,
                                "weekSummary.json")
        data = ts.get_hist_data(stock, start=start, end=end, ktype='W')
        if str(type(data)) == "<class 'pandas.core.frame.DataFrame'>":
            data.to_json(jsonFile, orient='index', force_ascii=False)
        else:
            print stock + " is Not DataFrame"
            pass
        # ts.get_hist_data('600848', ktype='M')  # 获取月k线数据
        jsonFile = os.path.join(config.dataRootDailyTotal, stock,
                                "monthSummary.json")
        data = ts.get_hist_data(stock, start=start, end=end, ktype='M')
        if str(type(data)) == "<class 'pandas.core.frame.DataFrame'>":
            data.to_json(jsonFile, orient='index', force_ascii=False)
        else:
            print stock + " is Not DataFrame"
            pass
        # ts.get_hist_data('600848', ktype='5')  # 获取5分钟k线数据
        jsonFile = os.path.join(config.dataRootDailyTotal, stock,
                                "5minSummary.json")
        data = ts.get_hist_data(stock, start=start, end=end, ktype='5')
        if str(type(data)) == "<class 'pandas.core.frame.DataFrame'>":
            data.to_json(jsonFile, orient='index', force_ascii=False)
        else:
            print stock + " is Not DataFrame"
            pass
        # ts.get_hist_data('600848', ktype='15')  # 获取15分钟k线数据
        jsonFile = os.path.join(config.dataRootDailyTotal, stock,
                                "15minSummary.json")
        data = ts.get_hist_data(stock, start=start, end=end, ktype='15')
        if str(type(data)) == "<class 'pandas.core.frame.DataFrame'>":
            data.to_json(jsonFile, orient='index', force_ascii=False)
        else:
            print stock + " is Not DataFrame"
            pass
        # ts.get_hist_data('600848', ktype='30')  # 获取30分钟k线数据
        jsonFile = os.path.join(config.dataRootDailyTotal, stock,
                                "30minSummary.json")
        data = ts.get_hist_data(stock, start=start, end=end, ktype='30')
        if str(type(data)) == "<class 'pandas.core.frame.DataFrame'>":
            data.to_json(jsonFile, orient='index', force_ascii=False)
        else:
            print stock + " is Not DataFrame"
            pass
        # ts.get_hist_data('600848', ktype='60')  # 获取60分钟k线数据
        jsonFile = os.path.join(config.dataRootDailyTotal, stock,
                                "60minSummary.json")
        data = ts.get_hist_data(stock, start=start, end=end, ktype='60')
        if str(type(data)) == "<class 'pandas.core.frame.DataFrame'>":
            data.to_json(jsonFile, orient='index', force_ascii=False)
        else:
            print stock + " is Not DataFrame"
            pass

    else:
        return {'errcode': -1, 'errmsg': 'need stockCode'}
コード例 #40
0
import os
import datetime
from datetime import datetime
import tushare as ts
import numpy as np

# 最后合并的数据出错,需要进一步整理
# 需要有一个可以方便显示数据拆线图的工具
DataFile = 'd:\\StockFile\\AllCompanyCode.csv'
TestFile = 'D:\\StockFile\\StockData_D_Pro'
OriginalDay = '19910101'
StockDatapath = 'd:\\StockFile\\StockData_D_h1991'
StockDatapathW = 'd:\\StockFile\\StockData_W_h'
StockDatapathM = 'd:\\StockFile\\StockData_M_h'

if __name__ == "__main__":


# 下载保存上证指数数据
StockData = ts.get_hist_data('sh')
StockData.sort_index().T.to_csv('d://StockFile//sh.csv')
#########################################################################################################








コード例 #41
0
import tushare as ts

df = ts.get_hist_data('000875')
# 直接保存
df.to_csv('csv/000875_1.csv')

# 选择保存
df.to_csv('csv/000875_2.csv', columns=['open', 'high', 'low', 'close'])
コード例 #42
0
ファイル: dataService.py プロジェクト: freemoses/tpro
    def update_MinuteBar(self, vtSymbol, freq, ctype):
        """
        更新某一合约分钟级K线数据
         param: "freq" - '5M', '30M', '60M'
                "ctype" - 'CS':股票、'INDX':指数、'Future':期货、'ETF'
        return: False - 更新失败、 True - 更新成功
        """
        if self._active:
            db = self._dbClient[DataBaseMap[freq]]
            cl = db[vtSymbol]

            last = cl.find_one(sort=[('datetime', DESCENDING)])

            if last:
                start = self.nextTradeDay(last['date'])
                start = start[:4] + '-' + start[4:6] + '-' + start[6:]
            else:
                start = '2018-01-01'

            end = date.today() if datetime.today().time() > time(
                17, 0) else date.today() - timedelta(1)
            end = end.strftime('%Y-%m-%d')

            msg_1 = '下载 {0} {1} 分钟更新数据,开始时间: {2}'.format(
                vtSymbol, freq[:-1], start)
            msg_2 = '初次下载 {} 分钟级数据,耗时可能较长,请耐心等待...'.format(vtSymbol)
            msg = msg_1 if start != '2018-01-01' else msg_2
            self.writeLog(msg)

            if start <= end:
                code, _ = vtSymbol.split('.')
                df = ts.get_hist_data(code,
                                      start=start,
                                      end=end,
                                      ktype=freq[:-1])

                if df is None or df.empty:
                    self.writeLog('未能获取 {0} {1}分钟更新数据'.format(
                        vtSymbol, freq[:-1]))
                    return

                df.sort_index(inplace=True)
                df.reset_index(inplace=True)

                df['ts_code'] = vtSymbol
                df['insttype'] = ctype
                df['trade_date'], df['time'] = df.date.apply(
                    lambda x: x.split(' '))
                df['trade_date'] = df.trade_date.apply(
                    lambda x: x.replace('-', ''))
                df['time'] = df.time.apply(lambda x: x.replace(':', ''))
                df.rename(columns={
                    'volume': 'vol',
                    'price_change': 'change',
                    'p_change': 'pct_chg'
                },
                          inplace=True)

                # 更新到数据库
                cl.ensure_index([('datetime', ASCENDING)], unique=True)

                blist = []  # 暂存bar的列表

                for ix, row in df.iterrows():
                    bar = self.generateBar(row)
                    blist.append(bar)

                if blist:
                    cl.insert_many(blist)
コード例 #43
0
ファイル: k_line.py プロジェクト: Zeroxus/lovely-python
from matplotlib.pylab import date2num
import datetime
import matplotlib.pyplot as plt
import matplotlib.finance as mpf
import tushare as ts

# 对tushare获取到的数据转换成candlestick_ohlc()方法可读取的格式
data_list = []
hist_data = ts.get_hist_data('601558')
for dates, row in hist_data.iterrows():
    # 将时间转换为数字
    date_time = datetime.datetime.strptime(dates, '%Y-%m-%d')
    t = date2num(date_time)
    open, high, low, close = row[:4]
    datas = (t, open, high, low, close)
    data_list.append(datas)

# 创建子图
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2)
# 设置X轴刻度为日期时间
ax.xaxis_date()
plt.xticks(rotation=45)
plt.yticks()
plt.title("股票代码:601558两年K线图")
plt.xlabel("时间")
plt.ylabel("股价(元)")
mpf.candlestick_ohlc(ax, data_list, width=1.5, colorup='r', colordown='green')
# plt.grid()
plt.show()
コード例 #44
0
import tushare as ts
import xlrd

#银华日利数据来自tushare,gc001数据来自通联数据

#策略:每日开盘买入银华日利,收盘前卖出,如果逆回购利率高,选择一日逆回购,否则进入天天宝

#一日逆回购GC001,手续费0.001% 当逆回购利率大于4.745时选择逆回购
#券商货基使用每万元1.2,约年化4.4% 无手续费
#国金比较好

file = 'D:\\PythonStudy\\gc001.xls'
data = ts.get_hist_data('511880')

workbook = xlrd.open_workbook(file)
#sheet_names=workbook.sheet_names()

sheet0 = workbook.sheet_by_name('Sheet0')
cols = sheet0.col_values(1)[4:254]
#date = sheet0.col_values(0)
cols2 = cols.copy()

for i in range(250):
    if cols[i] <= 4.745:
        cols2.remove(cols[i])

#银华日利部分
rate = data.apply(lambda x: x[2] / x[0], axis=1)
r = 1
for i in range(250):
    r *= rate[i]
コード例 #45
0
pandas.set_option('display.max_rows', None)
# 设置value的显示长度为100,默认为50
pandas.set_option('max_colwidth', 100)
# 用来正常显示中文标签
pyplot.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
pyplot.rcParams['axes.unicode_minus'] = False

if __name__ == '__main__':
    # 设置分析的股票的时间段
    begin_time = '2019-11-01'
    end_time = '2020-11-01'
    # 设置编号
    code = "000001"
    # 获取到目前为止3年的历史数据
    stock = tushare.get_hist_data(code, start=begin_time, end=end_time)
    """
        get_hist_data这个接口只能获取近3年的日线数据
        适合搭配均线数据进行选股和分析
    """
    # 将数据按照日期排序
    stock = stock.sort_index(0)
    """
        sort_index()默认根据行标签对所有行排序
        或根据列标签对所有列排序
        或根据指定某列或某几列对行排序。
    """
    # 生成pickle文件
    stock.to_pickle("stock_data_000001.pickle")
    """
        to_pickle()可以生成pickle文件对数据进行永久储存
コード例 #46
0
import re
import pymysql
import tushare as ts

nonedata = 0
emptystable = 0
with open('stocklist.txt', 'r', encoding='utf-8') as f:
    for i in f:
        tem = [t for t in re.split("\,|\\n", i) if t]
        data = ts.get_hist_data(tem[-1], start='2018-01-01', end='2018-12-31')
        try:
            if len(data.index) == 0:
                emptystable += 1
                print(tem[-1], 'is an empty table')
        except Exception as e:
            nonedata += 1
            print(tem[-1], 'is none')
print("total nonedata", nonedata)
print("total emptystable", emptystable)
print("total invalid", nonedata + emptystable)
コード例 #47
0
ファイル: gui_test.py プロジェクト: Stone305585/tushare
root.title("实时监控")

list_sente  = Listbox(root, width=30)
list_chongda = Listbox(root, width=30)
list_haixia = Listbox(root, width=30)
label_sente = Label(text='森特', highlightcolor='black')
label_chongda = Label(text='崇达', highlightcolor='black')
label_haixia = Label(text='海峡', highlightcolor='black')

# 将小部件放置到主窗口中
label_sente.pack()
list_sente.pack()

label_haixia.pack()
list_haixia.pack()

label_chongda.pack()
list_chongda.pack()

df_hist_sente = ts.get_hist_data(code=sente, start='2017-03-20')
ma5_sente = float(df_hist_sente.ix[0, 'ma5'])

# # 启动刷新列表
t1 = threading.Thread(target=refresh_data,args=())
t1.start()

# 进入消息循环
root.mainloop()


コード例 #48
0
ファイル: t.py プロジェクト: rainly/pyproject
import tushare as ts

# df = ts.get_index()

df = ts.get_hist_data('159928')
df.to_csv('159928.csv')
print(df.columns.values)
print(df[['p_change', 'close', 'high']])

# df=ts.get_hist_data('159931',start='2018-01-05',end='2019-02-25')
# df.to_csv('159931.csv')
# print(df.columns.values )
# print(df[['p_change','close','high']])
コード例 #49
0
ファイル: get_hist_data.py プロジェクト: github188/Everything
import tushare as ts

ts.get_hist_data('600770')
コード例 #50
0
 def updateStockData(self):
     self.data = ts.get_hist_data(self.code).sort_index()
コード例 #51
0
#__author:"LIN SHIH-WAI"
#date:  2017/11/11
import tushare as ts
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

f = open(r'代码.txt', 'r+', encoding='utf-8')
k = f.read()
c = k.split('\n')

# df=ts.get_hist_data('600000',ktype='D',start='2017-01-01',end='2017-11-11')
# df=df.loc[:,'close']
dict1 = {}
for i in c:
    z = ts.get_hist_data(i, ktype='D', start='2017-08-01', end='2017-11-1')
    z = z.loc[:, 'close']
    dict1.setdefault(i, z)
df = pd.DataFrame(dict1)
df.to_excel('提取的收盘价.xlsx')
df = df.dropna(axis=0, how='any')  #任何有确实数据就删掉行
# df.to_excel('对缺失数据已经处理完毕.xlsx')
# returns = np.log(df/df.shift(1))#求出每日的收益
# long=len(c)
#
# dfm=returns.mean()
# dfv=returns.var()
# df2=pd.DataFrame([dfm,dfv],index=['期望','方差'])
# print(df2)
# df2=df2.T
# df2.to_excel('第二个组合的方差和期望.xlsx')
コード例 #52
0
class StockBrowser(QtWidgets.QWidget):

    industryData = np.loadtxt('industry.txt', str, delimiter=',')
    code = industryData[0, 0]
    data = ts.get_hist_data(code=code).sort_index()

    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.initUI()
        self.setupConnection()

    #Functions:
    def initUI(self):
        self.searchLineEdit = SearchLineEdit()
        self.stockList = QtWidgets.QListWidget()
        self.fillStockList()
        self.stockKLine = pg.PlotWidget()
        self.plotKLine()
        self.analyseBtn = QtWidgets.QPushButton('Analyse')
        self.analyseText = QtWidgets.QTextEdit()

        self.leftLayout = QtWidgets.QVBoxLayout()
        self.leftLayout.addWidget(self.searchLineEdit)
        self.leftLayout.addWidget(self.stockList)

        self.middleLayout = QtWidgets.QVBoxLayout()
        self.middleLayout.addWidget(self.analyseBtn)
        self.middleLayout.addWidget(self.stockKLine)
        self.middleLayout.addWidget(self.analyseText)

        self.mainLayout = QtWidgets.QHBoxLayout(self)
        self.mainLayout.addLayout(self.leftLayout)
        self.mainLayout.addLayout(self.middleLayout)
        self.mainLayout.setStretchFactor(self.leftLayout, 3)
        self.mainLayout.setStretchFactor(self.middleLayout, 7)

    def fillStockList(self):
        for stock in self.industryData:
            self.stockList.addItem(stock[0] + '\t' + stock[1] + '\t' +
                                   stock[2])

    def updateStockData(self):
        self.data = ts.get_hist_data(self.code).sort_index()

    def setupConnection(self):
        self.searchLineEdit.textChanged.connect(self.searchStockList)
        self.stockList.itemDoubleClicked.connect(self.stockFocusChanged)
        self.moveSlot = pg.SignalProxy(self.stockKLine.scene().sigMouseMoved,
                                       rateLimit=60,
                                       slot=self.printSlot)
        self.analyseBtn.clicked.connect(self.recommend)

    def recommend(self):
        self.codeRec, self.codeLimUp = ChooseStock.recommend()
        tempTotal = self.stockList.count()
        for i in range(tempTotal):
            tempText = self.stockList.item(i).text()
            tempNum = tempText[0:6]
            for j in self.codeRec:
                if tempNum == j:
                    self.stockList.item(i).setBackground(
                        QtGui.QColor('deepskyblue'))
                    break
            for j in self.codeLimUp:
                if tempNum == j:
                    self.stockList.item(i).setBackground(
                        QtGui.QColor('tomato'))
                    break
        print('analyse over')

    def matchRate(self, searchContent):
        matchRateList = []
        for stock in self.industryData:
            count = 0
            for info in stock:
                if searchContent in info:
                    count += len(searchContent)
            matchRateList.append([str(count), stock])
        return matchRateList

    def getMatchRate(self, matchRateList):
        return matchRateList[0]

    def plotKLine(self):
        yMin = self.data['low'].min()
        yMax = self.data['high'].max()
        xMax = len(self.data['open'])
        dataList = []
        index = 0
        for date, row in self.data.iterrows():
            openPrice, highPrice, closePrice, lowPrice = row[:4]
            OCLH = (index, openPrice, closePrice, lowPrice, highPrice)
            dataList.append(OCLH)
            index += 1
        self.axisDict = dict(enumerate(self.data.index))
        axis = [(i, list(self.data.index)[i])
                for i in range(0, len(self.data.index), 3)]
        self.stockKLine.getAxis("bottom").setTicks(
            [axis, self.axisDict.items()])
        self.stockKLine.plotItem.clear()
        item = CandlestickItem(dataList)
        self.stockKLine.addItem(item)
        self.stockKLine.showGrid(x=True, y=True)
        self.stockKLine.setYRange(yMin, yMax)
        self.stockKLine.setXRange(0, xMax)
        self.stockKLine.setLabel(axis='left', text='Price')
        self.stockKLine.setLabel(axis='bottom', text='Date')
        self.label = pg.TextItem()
        self.stockKLine.addItem(self.label)

        self.vLine = pg.InfiniteLine(angle=90, movable=False)
        self.hLine = pg.InfiniteLine(angle=0, movable=False)
        self.stockKLine.addItem(self.vLine)
        self.stockKLine.addItem(self.hLine)

    #Slots:
    def searchStockList(self):
        searchContent = self.searchLineEdit.text()
        matchRateList = self.matchRate(searchContent)
        matchRateList.sort(key=self.getMatchRate, reverse=True)
        self.stockList.clear()
        for stock in matchRateList:
            info = stock[1]
            self.stockList.addItem(info[0] + '\t' + info[1] + '\t' + info[2])

    def stockFocusChanged(self, item):
        stock = item.text()
        stock = stock.split('\t')
        self.code = stock[0]
        self.updateStockData()
        self.updateStockText()
        self.plotKLine()

    def updateStockText(self):
        self.stockPreText = StockChoose_hist_data.parse(self.code)
        self.analyseText.setPlainText(self.stockPreText)

    def printSlot(self, event=None):
        pos = event[0]
        if self.stockKLine.sceneBoundingRect().contains(pos):
            mousePoint = self.stockKLine.plotItem.vb.mapSceneToView(pos)
            index = float(mousePoint.x())
            index = round(index)
            pos_y = int(mousePoint.y())
            if -1 < index < len(self.data.index):
                self.label.setHtml(
                    "<p style='color:white'><strong>Date: {0}</strong></p><p style='color:white'>Open: {1}</p><p style='color:white'>Close: {2}</p><p style='color:white'>High: <span style='color:red;'>{3}</span></p><p style='color:white'>Low: <span style='color:green;'>{4}</span></p>"
                    .format(self.axisDict[index], self.data['open'][index],
                            self.data['close'][index],
                            self.data['high'][index], self.data['low'][index]))
                self.label.setPos(mousePoint.x(), mousePoint.y())
            self.vLine.setPos(mousePoint.x())
            self.hLine.setPos(mousePoint.y())
コード例 #53
0
import tushare as ts

data = ts.get_hist_data('300274')

xinshougu = ts.xsg_data()

yugao = ts.forecast_data(2019, 1)

aa = ts.get_profit_data(2018, 4)
コード例 #54
0
ファイル: price.py プロジェクト: actionfocus/pytrain
 def get_start_price(self,stockcode):
     df_start=ts.get_hist_data(stockcode,start='2017-06-30',end='2017-06-30')
     print df_start
     return df_start
コード例 #55
0
def get_history_data(code):
    return ts.get_hist_data(code)
コード例 #56
0
ファイル: hmm.py プロジェクト: matrixleon18/SHUFE
# -*- coding: utf-8 -*-

import tushare as ts
import numpy as np
import matplotlib.pyplot as plt
from hmmlearn.hmm import GaussianHMM

colors = ['blue', 'red', 'green', 'black', 'orange', 'yellow']

data = ts.get_hist_data('600000', start='2019-01-08')

print(data.columns)

open = data['open'].values
high = data['high'].values
low = data['low'].values
close = data['close'].values
volume = data['volume'].values
ma5 = data['ma5'].values
ma10 = data['ma10'].values
ma20 = data['ma20'].values
vma5 = data['v_ma5'].values
vma10 = data['v_ma10'].values
vma20 = data['v_ma20'].values

dates = np.array([i for i in range(data.shape[0])])

diff = np.diff(close)

dates = dates[1:]
open = open[1:]
コード例 #57
0
from sklearn import cluster, covariance, manifold

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong']  # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

hs300 = ts.get_hs300s()
hs300_name = hs300.name

hs300_code = hs300.code
#print(hs300_code)
df_hs300 = pd.DataFrame()
names = []
for i in range(298):
    #    try:
    df = ts.get_hist_data(hs300_code[i], start='2017-07-23', end='2018-07-23')
    #print(str(hs300_code[i])+':'+str(df.shape))
    #print(df)
    if df.shape == (245, 13):
        df_hs300[str(hs300_code[i])] = df['price_change']
        names.append(hs300_name[i])
#    except:
#        print('出现未知错误')
names = np.array(names)
variation = np.array(df_hs300)
#print(variation)
#print(df_hs300)
X = variation.copy()
X /= X.std(axis=0)
edge_model = covariance.GraphLassoCV()  #构建稀疏协方差逆矩阵
edge_model.fit(X)
コード例 #58
0
#!/usr/bin/env python
# encoding: utf-8
# @Time    : 2019/3/25 1:59 PM

__author__ = 'Miracle'

import tushare as ts

df = ts.get_hist_data('000651', ktype='5')  #获取5分钟k线数据
df.to_csv('./data/格力电器_000651_20190322.csv')

df = ts.get_hist_data('601318', ktype='5')  #获取5分钟k线数据
df.to_csv('./data/中国平安_601318_20190322.csv')
コード例 #59
0
import tushare as ts


# # 获取个股历史交易记录
t = ts.get_hist_data('600848',start='2016-11-28 13:00:00',ktype='5') #一次性获取全部日k线数据
print(t)

# # 获取历史复权数据
# h = ts.get_h_data('600000',start='2017-01-01')
# print(h)
#
# # 一次性获取最近一个日交易日所有股票的交易数据
# td = ts.get_today_all()
# print(td)
#
#
# # 获取分笔数据
# df = ts.get_tick_data('600848',date='2014-01-09')
# print(df)
#
#
# # 获取实时分笔数据
# df = ts.get_realtime_quotes('000581') #Single stock symbol
# print(df)
#
#
# # 当日历史分笔
# df = ts.get_today_ticks('601333')
#
#
# # 大盘指数行情列表
コード例 #60
0
        #adjusts=np.dot(train_inputs.T,alpha*error*sigmoid_derivative(outputs))
        #adjusts=np.dot(train_inputs.T,alpha*error*relu_gradient(outputs))
        #adjusts=np.dot(train_inputs.T,alpha*error*leakrelu_gradient(outputs,0.0001))
        #print(adjusts)
        weights[0] -= weights_derivative_one
        weights[1] -= weights_derivative_two
    return weights


#数据获取
stockcode = '601668'
start_str = '2017-06-08'
end_str = '2019-08-09'
starttime = datetime.datetime.strptime(start_str, '%Y-%m-%d')
endtime = datetime.datetime.strptime(end_str, '%Y-%m-%d')
df = ts.get_hist_data(stockcode, start=start_str, end=end_str)
date_list = []
date_list.append(starttime)
#temp=df.index
#print(df.index[:-1])
while starttime < endtime:
    starttime += datetime.timedelta(days=+1)
    date_list.append(starttime)
#print(date_list)
#insertalltotable(df,stockcode)
#close_price_list=DBDataNet.query_for_table("StockClose")
#stock_date_list=DBDataNet.query_for_table("StockDate")
recordData = DBDataNet.query_table_code(603993)
#print(recordData)
record_list = []
result_list = []