Example #1
0
def day_year3():
    """
    获取三年内的交易天数
    :return: 三年内的交易天数
    """

    # 判断到最近一个交易日
    d_end = today_get()
    while 1:
        rs = bs.query_trade_dates(start_date=d_end, end_date=d_end)
        data_list = []
        while (rs.error_code == '0') & rs.next():
            # 获取一条记录,将记录合并在一起
            data_list.append(rs.get_row_data())
        if data_list[0][1] == '1':
            break
        else:
            day_change = datetime.timedelta(days=1)
            d_end = d_end - day_change

    # 获取今天和一周前日期
    d_start = year3_get(d_end)

    # 获取交易日信息
    rs = bs.query_trade_dates(start_date=d_start, end_date=d_end)
    # print('query_trade_dates respond error_code:' + rs.error_code)
    # print('query_trade_dates respond  error_msg:' + rs.error_msg)

    # 打印结果集
    data_list = []
    while (rs.error_code == '0') & rs.next():
        # 获取一条记录,将记录合并在一起
        data_list.append(rs.get_row_data())

    # 获取一会走交易日数
    i = 0
    number_trade_day = 0
    for data in data_list:
        if data_list[i][1] == '1':
            number_trade_day += 1
        i += 1
    # 判断一周前是不是交易日
    if data_list[0][1] == '0':
        number_trade_day += 1

    # 消除baostock交易日计算错误
    number_trade_day += 3

    return number_trade_day
Example #2
0
def init_trade_date():
	settings.init()

	# 登陆系统 ####
	lg = bs.login()
	# 显示登陆返回信息
	print('login respond error_code:' + lg.error_code)
	print('login respond  error_msg:' + lg.error_msg)

	# 获取交易日信息 ####
	rs = bs.query_trade_dates(start_date=settings.START_DATE, end_date=settings.END_DATE)
	print('query_trade_dates respond error_code:' + rs.error_code)
	print('query_trade_dates respond  error_msg:' + rs.error_msg)

	# 打印结果集 ####
	data_list = []
	while (rs.error_code == '0') & rs.next():
		# 获取一条记录,将记录合并在一起
		data_list.append(rs.get_row_data())
	result = pd.DataFrame(data_list, columns=rs.fields)

	# 结果集输出到csv文件 ####
	result.to_csv(settings.STOCKS_DATE, encoding="utf-8", index=False, header=True)
	print(result)
	# 登出系统 ####
	bs.logout()
Example #3
0
def get_his_trade_date(start_date="2018-01-27", end_date="2019-05-01"):
    #### 登陆系统 ####
    lg = bs.login(user_id="anonymous", password="******")
    # 显示登陆返回信息
    print('login respond error_code:'+lg.error_code)
    print('login respond  error_msg:'+lg.error_msg)

    #### 获取交易日信息 ####
    rs = bs.query_trade_dates(start_date=start_date, end_date=end_date)
    print('query_trade_dates respond error_code:'+rs.error_code)
    print('query_trade_dates respond  error_msg:'+rs.error_msg)

    #### 打印结果集 ####
    data_list = []
    while (rs.error_code == '0') & rs.next():
        # 获取一条记录,将记录合并在一起
        data_list.append(rs.get_row_data())
    result = pd.DataFrame(data_list, columns=rs.fields)

    #### 登出系统 ####
    bs.logout()

    #### 结果集输出到csv文件 ####
    #result.to_csv("/data/trade_datas.csv", encoding="gbk", index=False)
    return result
Example #4
0
def prepare_fetch_data():
    # 获取当前年/季度
    current_date = datetime.date.today().strftime('%Y-%m-%d')
    current_year = datetime.date.today().year
    current_month = datetime.date.today().month
    current_quarter = (current_month - 1) // 3 + 1

    hour = datetime.datetime.now().hour
    # baostock data maybe not update right after the trade market close.
    if hour < 20:
        dd = datetime.date.today() + datetime.timedelta(-1)
        current_date = dd.strftime('%Y-%m-%d')

    # 计算最后一个交易日时间
    start_date = "2006-01-01"
    data_list = []
    bs.login()
    rs = bs.query_trade_dates(start_date=start_date, end_date=current_date)
    while (rs.error_code == '0') & rs.next():
        data_list.append(rs.get_row_data())
    bs.logout()
    lasttradedate = current_date
    for i in range(len(data_list) - 1, -1, -1):
        if data_list[i][1] == '1':
            lasttradedate = data_list[i][0]
            break

    print('start query day:' + start_date + ', last query data:' + lasttradedate)

    bs.login()
    stock_rs = bs.query_all_stock(day=lasttradedate)
    stock_df = stock_rs.get_data()
    bs.logout()

    return stock_df, current_year, current_quarter
Example #5
0
def query_trade_dates(start_date, end_date):
    """
    交易日查询:query_trade_dates()
    方法说明:查询股票交易日信息信息,可以通过参数设置获取起止年份数据,提供2014-2018年数据。 
    返回类型:pandas的DataFrame类型。
    """
    #### 登陆系统 ####
    lg = bs.login()
    # 显示登陆返回信息
    #print('login respond error_code:'+lg.error_code)
    #print('login respond  error_msg:'+lg.error_msg)

    #### 获取交易日信息 ####
    rs = bs.query_trade_dates(start_date=start_date, end_date=end_date)
    #print('query_trade_dates respond error_code:'+rs.error_code)
    #print('query_trade_dates respond  error_msg:'+rs.error_msg)

    #### 打印结果集 ####
    data_list = []
    while (rs.error_code == '0') & rs.next():
        # 获取一条记录,将记录合并在一起
        data_list.append(rs.get_row_data())
    result = pd.DataFrame(data_list, columns=rs.fields)

    #### 结果集输出到csv文件 ####
    result.to_csv(path + "trade_dates.csv", encoding="gbk", index=False)

    #### 登出系统 ####
    bs.logout()
    return
Example #6
0
def getTradeDays(start_date, end_date):
    tradeDays = bs.query_trade_dates(start_date, end_date)
    # print('query_trade_dates respond error_code:'+tradeDays.error_code)
    # print('query_trade_dates respond  error_msg:'+tradeDays.error_msg)
    tradeDays_data_list = []
    while (tradeDays.error_code == '0') & tradeDays.next():
        tradeDays_data_list.append(tradeDays.get_row_data())
    return pd.DataFrame(tradeDays_data_list, columns=tradeDays.fields)
Example #7
0
def download_trade_cal():
    filename = FILE_PATH + 'trade_cal.csv'
    rs = bs.query_trade_dates()
    data_list = []
    while (rs.error_code == '0') & rs.next():
        data_list.append(rs.get_row_data())
    result = pd.DataFrame(data_list, columns=rs.fields)
    result.to_csv(filename, encoding="gbk", index=False)
    return result
Example #8
0
 def query_trade_dates(self, start_date = None, end_date = None):
     '''
     start_date:开始日期,为空时默认为2015-01-01。
     end_date:结束日期,为空时默认为当前日期。
     '''
     rs = bs.query_trade_dates(start_date=start_date, end_date=end_date)
     self.log('query_trade_dates respond  error_msg:', rs)
     data_list = []
     while (rs.error_code == '0') & rs.next():
         # 获取一条记录,将记录合并在一起
         data_list.append(rs.get_row_data())
     result = pd.DataFrame(data_list, columns=rs.fields)
     return result
Example #9
0
 def record(self, entity, start, end, size, timestamps):
     df = pd.DataFrame()
     dates = query_trade_dates(start_date=start).get_data()
     dates = dates[dates.is_trading_day == '1']
     self.logger.info(f'add dates:{dates}')
     df['timestamp'] = pd.to_datetime(dates['calendar_date'])
     df['id'] = [to_time_str(date) for date in dates['calendar_date']]
     df['entity_id'] = 'stock_sz_000001'
     df_to_db(df=df,
              data_schema=self.data_schema,
              provider=self.provider,
              force_update=self.force_update)
     logout()
Example #10
0
    def get_trading_time(self, s_time, e_time):
        rs = bs.query_trade_dates(start_date=s_time, end_date=e_time)
        # print('query_trade_dates respond error_code:' + rs.error_code)
        print('query_trade_dates respond  error_msg:' + rs.error_msg)

        #### 打印结果集 ####
        data_list = []
        while (rs.error_code == '0') & rs.next():
            # 获取一条记录,将记录合并在一起
            data_list.append(rs.get_row_data())
        result = pd.DataFrame(data_list, columns=rs.fields)
        result.columns = ['date', 'is_trading_day']
        # print(result)
        return result
Example #11
0
 def collector(self) -> Iterable[pd.Timestamp]:
     lg = bs.login()
     if lg.error_code != "0":
         raise ValueError(f"login respond error_msg: {lg.error_msg}")
     rs = bs.query_trade_dates(
         start_date=self._format_datetime(self.start_date), end_date=self._format_datetime(self.end_date)
     )
     if rs.error_code != "0":
         raise ValueError(f"query_trade_dates respond error_msg: {rs.error_msg}")
     data_list = []
     while (rs.error_code == "0") & rs.next():
         data_list.append(rs.get_row_data())
     calendar = pd.DataFrame(data_list, columns=rs.fields)
     calendar["is_trading_day"] = calendar["is_trading_day"].astype(int)
     return pd.to_datetime(calendar[calendar["is_trading_day"] == 1]["calendar_date"]).to_list()
Example #12
0
def tradedate():
    '''
    获取最近交易日
    '''
    import datetime
    import time
    yestoday30=(datetime.date.today() + datetime.timedelta(-10)).strftime("%Y-%m-%d") 
    today=time.strftime('%Y-%m-%d',time.localtime(time.time()))

    rs = bs.query_trade_dates(start_date=yestoday30, end_date=today)
    data_list = []
    while (rs.error_code == '0') & rs.next():
        data_list.append(rs.get_row_data())
    result = pd.DataFrame(data_list, columns=rs.fields)
    result=result.loc[result.is_trading_day=='1','calendar_date'].values[-2]
    return result
Example #13
0
def trading_orlast(date):
    rs = bs.query_trade_dates(start_date=date, end_date=date)
    data_list = []
    while (rs.error_code == '0') & rs.next():
        data_list.append(rs.get_row_data())
    result = pd.DataFrame(data_list, columns=rs.fields)
    if result.iloc[0]['is_trading_day'] == '1':
        return date
    else:
        year = int(date[:4])
        month = int(date[5:7])
        day = int(date[8:])
        dt = datetime.date(year, month, day)
        dt = dt - datetime.timedelta(days=1)
        dt = dt.strftime('%Y-%m-%d')
        return trading_orlast(dt)
Example #14
0
def get_trade_dates(start_date, end_date=today, is_trading_day=1):
    # 获取交易日信息
    rs = bs.query_trade_dates(start_date=start_date, end_date=end_date)
    if rs.error_code != '0':
        print('query_trade_dates respond error_code::' + rs.error_msg)
        login()
        return get_trade_dates(start_date, end_date)

    # 打印结果集
    data_list = []
    while (rs.error_code == '0') & rs.next():
        # 获取一条记录,将记录合并在一起
        data_list.append(rs.get_row_data())
    result = pd.DataFrame(data_list, columns=rs.fields)
    result['is_trading_day'] = pd.to_numeric(result['is_trading_day'])
    result = result[result['is_trading_day'] == is_trading_day]
    return result
Example #15
0
def get_trade_dates(start_date, end_date):
    lg = bs.login()
    # 显示登陆返回信息
    print('login respond error_code:' + lg.error_code)
    print('login respond  error_msg:' + lg.error_msg)

    #### 获取交易日信息 ####
    rs = bs.query_trade_dates(start_date, end_date)
    print('query_trade_dates respond error_code:' + rs.error_code)
    print('query_trade_dates respond  error_msg:' + rs.error_msg)

    #### 打印结果集 ####
    data_list = []
    while (rs.error_code == '0') & rs.next():
        # 获取一条记录,将记录合并在一起
        data_list.append(rs.get_row_data())
    result = pd.DataFrame(data_list, columns=rs.fields)
    bs.logout()
    return result
Example #16
0
def future_calendar_collector(qlib_dir: [str, Path], freq: str = "day"):
    """get future calendar

    Parameters
    ----------
    qlib_dir: str or Path
        qlib data directory
    freq: str
        value from ["day", "1min"], by default day
    """
    qlib_dir = Path(qlib_dir).expanduser().resolve()
    if not qlib_dir.exists():
        raise FileNotFoundError(str(qlib_dir))

    lg = bs.login()
    if lg.error_code != "0":
        logger.error(f"login error: {lg.error_msg}")
        return
    # read daily calendar
    daily_calendar = read_calendar_from_qlib(qlib_dir)
    end_year = pd.Timestamp.now().year
    if daily_calendar.empty:
        start_year = pd.Timestamp.now().year
    else:
        start_year = pd.Timestamp(daily_calendar.iloc[-1, 0]).year
    rs = bs.query_trade_dates(start_date=pd.Timestamp(f"{start_year}-01-01"),
                              end_date=f"{end_year}-12-31")
    data_list = []
    while (rs.error_code == "0") & rs.next():
        _row_data = rs.get_row_data()
        if int(_row_data[1]) == 1:
            data_list.append(_row_data[0])
    data_list = sorted(data_list)
    date_list = generate_qlib_calendar(data_list, freq=freq)
    date_list = sorted(
        set(daily_calendar.loc[:, 0].values.tolist() + date_list))
    write_calendar_to_qlib(qlib_dir, date_list, freq=freq)
    bs.logout()
    logger.info(
        f"get trading dates success: {start_year}-01-01 to {end_year}-12-31")
Example #17
0
def latestTradeDate():
    customLogin()
#     set_trace()
    rs = bs.query_trade_dates(start_date=date.today().replace(day=1), end_date = date.today())
    if rs.error_code != '0':
        raise RuntimeError("交易日api调用失败了:" + rs.error_code)
    tradeDates = []
    while (rs.error_code == '0') & rs.next():
        row = rs.get_row_data()
        if row[1] == "1":
            tradeDates.append(row[0])
#     set_trace()
    if len(tradeDates) == 0:
        raise RuntimeError("取不到最新的交易日")
    now = datetime.now()
    set_trace()
    tradeDatesCount = len(tradeDates)
    ## 因为baoStock的日K数据更新时间是 17:30, 所以如果在18点前启动,可能取不到当天数据,交易日向前推一天
    if (now.hour < 18 and tradeDatesCount > 1):
        return tradeDates[tradeDatesCount - 2]
    else:
        return tradeDates[len(tradeDates) - 1]
Example #18
0
def getLatestTradeDay(inDate):
    tmp = inDate.split('-')
    if tmp[1] == '01':
        date1 = str(int(tmp[0]) - 1) + '-12-' + tmp[2]
    else:
        month = int(tmp[1]) - 1
        if month < 10:
            month = '0' + str(month)
        else:
            month = str(month)
        date1 = tmp[0] + '-' + month + '-' + tmp[2]
    rs = bs.query_trade_dates(start_date=date1, end_date=inDate)
    if rs.error_code != '0':
        print('从指定日期返回最近一个交易日: %s' % rs.error_msg)
    data_list = []
    while (rs.error_code == '0') & rs.next():
        data_list.append(rs.get_row_data())
    data_list.pop()
    data_list.reverse()
    for i in data_list:
        if i[1] == '1':
            return i[0]
Example #19
0
    def query_trade_dates(start_date=None, end_date=None):
        """
        交易日查询
        方法说明:通过API接口获取股票交易日信息,可以通过参数设置获取起止年份数据,提供上交所1990-今年数据。 返回类型:pandas的DataFrame类型。
        :param start_date:开始日期,为空时默认为2015-01-01。
        :param end_date:结束日期,为空时默认为当前日期。
        """
        lg = bs.login()
        if lg.error_code != '0':
            logger.error('login respond  error_msg:' + lg.error_msg)

        rs = bs.query_trade_dates(start_date=start_date, end_date=end_date)
        if rs.error_code != '0':
            logger.error('query_trade_dates respond  error_msg:' +
                         rs.error_msg)

        data_list = []
        while (rs.error_code == '0') & rs.next():
            data_list.append(rs.get_row_data())
        result = pd.DataFrame(data_list, columns=rs.fields)

        bs.logout()
        return result
Example #20
0
def init_trade_date():
    # 登陆系统 ####
    lg = bs.login()
    # 显示登陆返回信息
    print('login respond error_code:' + lg.error_code)
    print('login respond  error_msg:' + lg.error_msg)

    # 获取交易日信息 ####
    st = ConfigUtils.get_stock("START_DATE")
    et = ConfigUtils.get_stock("END_DATE")
    print(st, et)
    rs = bs.query_trade_dates(start_date=st, end_date=et)
    print('query_trade_dates respond error_code:' + rs.error_code)
    print('query_trade_dates respond  error_msg:' + rs.error_msg)

    # 打印结果集 ####
    data_list = []
    while (rs.error_code == '0') & rs.next():
        # 获取一条记录,将记录合并在一起
        data_list.append(rs.get_row_data())
    result = pd.DataFrame(data_list, columns=rs.fields)
    result.to_csv(ConfigUtils.get_stock("STOCKS_DATE"), index=False)
    # 结果集输出到csv文件 ####import ujson
    bs.logout()
Example #21
0
import baostock as bs
import pandas as pd

def today():
    import datetime
    print (datetime.datetime.now().strftime("%Y-%m-%d"))
    
#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond  error_msg:'+lg.error_msg)

#### 获取交易日信息 ####
rs = bs.query_trade_dates(start_date="2000-01-01", end_date=today())
print('query_trade_dates respond error_code:'+rs.error_code)
print('query_trade_dates respond  error_msg:'+rs.error_msg)

#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
    # 获取一条记录,将记录合并在一起
    data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)

result.to_csv("/home/toby/data/datasource/baostock/trade_dates.csv", encoding="gbk", index=False )
# print(result)

#### 登出系统 ####
bs.logout()
if __name__ == '__main__':

    createDB.createDB()

    current_date = datetime.date.today().strftime('%Y-%m-%d')
    hour = datetime.datetime.now().hour
    #baostock data maybe not update right after the trade market close.
    if hour < 20:
        dd = datetime.date.today() + datetime.timedelta(-1)
        current_date = dd.strftime('%Y-%m-%d')

    start_date = "2017-01-01"

    data_list = []
    bs.login()
    rs = bs.query_trade_dates(start_date=start_date, end_date=current_date)
    while (rs.error_code == '0') & rs.next():
        data_list.append(rs.get_row_data())
    bs.logout()
    lastTradeDate = current_date
    for i in range(len(data_list) - 1, -1, -1):
        if data_list[i][1] == '1':
            lastTradeDate = data_list[i][0]
            break

    if start_date <= lastTradeDate:
        print("start to refresh all stock")
        parse_stock_data.refresh_all_stock(lastTradeDate)
        print("start to refresh all stock day K")
        parse_stock_data.refresh_all_stock_day_k(start_date, lastTradeDate)
        print("start to calculate sh")
Example #23
0
 def _bao_get_trade_days(start_date=None, end_date=None):
     k_rs = bs.query_trade_dates(start_date=start_date, end_date=end_date)
     return k_rs.get_data()
Example #24
0
    else:
        return False


# 返回每年交易日数据框
lg = bs.login()
trading_log = pd.DataFrame()
for year in range(2010, 2021):
    date_ori1 = '{}-01-01'.format(year)
    date1 = trading_ornext(date_ori1)
    if year != 2020:
        date_ori2 = '{}-12-31'.format(year)
        date2 = trading_orlast(date_ori2)
    else:
        date2 = '2020-03-31'
    rs2 = bs.query_trade_dates(start_date=date1, end_date=date2)
    data_list = []
    while (rs2.error_code == '0') & rs2.next():
        data_list.append(rs2.get_row_data())
    result2 = pd.DataFrame(data_list, columns=rs2.fields)
    trading_date = result2[result2['is_trading_day'] == '1']['calendar_date']
    df = trading_date.to_frame()
    trading_log = pd.concat([trading_log, df], axis=0)
trading_log = trading_log.reset_index(drop=True)
trading_log['capital'] = None



#获取大盘数据
from openpyxl import load_workbook
Example #25
0
 def trade_dates(self, start_date, end_date):
     self.getStockInstance()
     rs = bs.query_trade_dates(start_date, end_date)
     self._test_rs(rs)
     return rs
Example #26
0
    return lszhibiao


lg = bs.login()
if datetime.datetime.now().hour >= 17:
    nowday = datetime.datetime.now().date()
else:
    nowday = datetime.datetime.now().date() - datetime.timedelta(days=1)
newday = models.Jiaoyiday.objects.last().date
print('最新数据为', newday, '今天是', nowday, '准备开始更新')
if newday >= nowday:
    togmail.send('*****@*****.**', '股票更新报错',
                 f'最新日期是{newday},现在需要更新的日期是{nowday},不需要更新,直接退出')
    raise Exception(f'最新日期是{newday},现在需要更新的日期是{nowday},不需要更新,直接退出')

rs = bs.query_trade_dates(start_date=str(newday), end_date=str(nowday))
date_list = []
while (rs.error_code == '0') & rs.next():
    date_list.append(rs.get_row_data())

for daylist in date_list[1:]:
    if daylist[1] == '1':
        newday = daylist[0]
        print(newday, '是交易日,开始更新。。。')
        zhibiaodf = zhibiao(newday)
        c = models.Jiaoyiday(date=newday, isover=False)
        c.save()
        n = 0
        gupiaolist = models.Gupiaolist.objects.all()
        tiaoguolist = []
        for ii in gupiaolist:
Example #27
0
# -*- coding: utf-8 -*-
# @File  : get_trading_calender.py
# @Author: Lizi
# @Date  : 2021/4/13

import baostock as bs
import pandas as pd

#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:' + lg.error_code)
print('login respond  error_msg:' + lg.error_msg)

#### 获取交易日信息 ####
rs = bs.query_trade_dates(start_date="2020-01-01", end_date="2022-01-01")
print('query_trade_dates respond error_code:' + rs.error_code)
print('query_trade_dates respond  error_msg:' + rs.error_msg)

#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
    # 获取一条记录,将记录合并在一起
    data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)

#### 结果集输出到csv文件 ####
result.to_csv("../trade_datas.csv", encoding="gbk", index=False)
print(result)

#### 登出系统 ####
Example #28
0
def computeAllRSIDataIntegrate(period, specifiedDateStr, includeST):
    BaoStockUtil.customLogin()
    specifiedDate = datetime.datetime.strptime(specifiedDateStr, "%Y-%m-%d")
    today = datetime.date.today()
    #如果把时间设成未来,自动调成今天
    if specifiedDate > datetime.datetime.today():
        specifiedDate = datetime.date.today()
    #避免跨年问题,直接从去年开始取
    startDate = specifiedDate - datetime.timedelta(days=365)
    #取交易日列表,用作倒推周期使用
    rs = bs.query_trade_dates(start_date=datetime.datetime.strftime(
        startDate, "%Y-%m-%d"),
                              end_date=specifiedDate)
    BaoStockUtil.customLogout()
    if rs.error_code != '0':
        raise RuntimeError("交易日api调用失败了:" + rs.error_code)
    tradeDates = []
    while (rs.error_code == '0') & rs.next():
        row = rs.get_row_data()
        if row[1] == "1":
            tradeDates.append(row[0])
    if len(tradeDates) == 0:
        raise RuntimeError("取不到最新的交易日")

    #若期望计算的日期比库里RSI最新日期还晚,数据不全待补齐
    rsiLatestDate = findLatestRSIDate(period)
    rsiLatestDateStr = datetime.datetime.strftime(rsiLatestDate, "%Y-%m-%d")
    if rsiLatestDate < specifiedDate:
        raise RuntimeError(specifiedDateStr + " 的 " + period +
                           " RSI的数据不存在,待补齐数据")

    #找到指定日期以及rsi存量数据最近日期在交易日周期的序号
    specifiedDateIndex = tradeDates.index(specifiedDateStr)

    if specifiedDateIndex == -1:
        raise RuntimeError(specifiedDateStr + " 可能不是交易日")
    daysBefore = computeRSIDataStartTradeDateRange(period, specifiedDateStr)
    startDateIndex = specifiedDateIndex - daysBefore

    #起始日期index负数,说明rsi数据不够
    if startDateIndex < 0:
        raise RuntimeError(period + " rsi数据不够")

    startDateStr = tradeDates[startDateIndex]
    print("compute rsi tradeDates from ", startDateStr, "to", specifiedDateStr)

    processCount = 0
    failCount = 0
    startDateIndex = -1
    dictStocks = KlineService.allStocks()
    klineDataFrame = KlineService.readAllStockKline(period, specifiedDateStr,
                                                    specifiedDateStr)
    klineDataFrame = klineDataFrame.set_index("code")
    klineDict = klineDataFrame.to_dict('index')
    jobTotal = len(dictStocks)
    rsiValueArrs = []
    for i in range(0, 6):
        rsiValueArrs.append([])

    for key, stock in dictStocks.items():
        processCount = processCount + 1
        #指数没有分钟线,跳过指数的RSI分钟线计算
        if period.endswith("m") and stock.stockType != 1:
            continue
        #如果不计算ST,跳过
        if not includeST and stock["isST"]:
            continue
        #退市股就不要算了
        if "退" in stock["name"]:
            continue
        #科创板不达门槛没法买,不看
        if key.startswith("sh.68"):
            continue
        try:
            rsiDF = readRSI(period, key, startDateStr, specifiedDateStr)
            rsiCount = len(rsiDF)
            if rsiCount < INTEGRATE_CALC_RANGE:
                raise RuntimeError("积分计算节点不够")
            rsiValueArrs[0].append(key)
            rsiValueArrs[1].append(stock["name"])
            rsiValueArrs[2].append(klineDict[key]["closePrice"])
            #取最近的数据用于计算积分
            rsiValueArrs[3].append(
                rsiDF["rsi_6"][rsiCount - INTEGRATE_CALC_RANGE:rsiCount])
            rsiValueArrs[4].append(
                rsiDF["rsi_12"][rsiCount - INTEGRATE_CALC_RANGE:rsiCount])
            rsiValueArrs[5].append(
                rsiDF["rsi_24"][rsiCount - INTEGRATE_CALC_RANGE:rsiCount])
        except BaseException as e:
            failCount = failCount + 1
            print("compute rsi integrate " + key + " error:" + str(e))
        if processCount % 100 == 0 and processCount > 0:
            print("compute rsi integrate process:", processCount, " of ",
                  jobTotal, " failed:", failCount)

    rsi6Arr = np.array(rsiValueArrs[3]).reshape(-1, INTEGRATE_CALC_RANGE)
    rsi6InteArr = integrateValues(rsi6Arr)
    rsi12Arr = np.array(rsiValueArrs[4]).reshape(-1, INTEGRATE_CALC_RANGE)
    rsi12InteArr = integrateValues(rsi12Arr)
    rsi24Arr = np.array(rsiValueArrs[5]).reshape(-1, INTEGRATE_CALC_RANGE)
    rsi24InteArr = integrateValues(rsi24Arr)

    rsiInteDF = pd.DataFrame()
    rsiInteDF["code"] = rsiValueArrs[0]
    rsiInteDF["name"] = rsiValueArrs[1]
    rsiInteDF["closePrice"] = rsiValueArrs[2]
    rsiInteDF["rsi_inte_6"] = rsi6InteArr
    rsiInteDF["rsi_inte_12"] = rsi12InteArr
    rsiInteDF["rsi_inte_24"] = rsi24InteArr

    return rsiInteDF
Example #29
0
import sys
import baostock as bs
import pandas as pd

lg = bs.login()
rs = bs.query_trade_dates(start_date=sys.argv[1], end_date=sys.argv[2])
data_list = []
while (rs.error_code == '0') & rs.next():
    data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
print(result.to_json(orient='records'))
bs.logout()
Example #30
0
import baostock as bs
import pandas as pd

#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:' + lg.error_code)
print('login respond  error_msg:' + lg.error_msg)

#### 获取交易日信息 ####
rs = bs.query_trade_dates(start_date="2017-01-01", end_date="2017-06-30")
print('query_trade_dates respond error_code:' + rs.error_code)
print('query_trade_dates respond  error_msg:' + rs.error_msg)

#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
    # 获取一条记录,将记录合并在一起
    data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)

#### 结果集输出到csv文件 ####
result.to_csv("D:\\trade_datas.csv", encoding="gbk", index=False)
print(result)

#### 登出系统 ####
bs.logout()