示例#1
0
 def yieldbacktest(self, query, start_date, end_date, stock_hold,
                   upper_income, lower_income, period, fall_income,
                   day_buy_stock_num):
     payload = {
         "query": query,
         "start_date": start_date,
         "end_date": end_date,
         "period": period,
         "stock_hold": stock_hold,
         "upper_income": upper_income,
         "lower_income": lower_income,
         "fall_income": fall_income,
         "day_buy_stock_num": day_buy_stock_num
     }
     henxin_v = self.obj_cookie.getHexinVByJson(source='backtest')
     session = Session(update_headers=WENCAI_HEADERS['backtest'],
                       hexin_v=henxin_v)
     r = session.post(WENCAI_CRAWLER_URL['yieldbacktest'], data=payload)
     if r.status_code == 200:
         return YieldBackTest(content=r.json(),
                              cn_col=self.cn_col,
                              query=query,
                              hexin_v=henxin_v,
                              execute_path=self.execute_path,
                              start_date=start_date,
                              end_date=end_date)
     else:
         raise Exception(r.content.decode('utf-8'))
示例#2
0
    def history_detail(self, period, start_date=None, end_date=None):
        if start_date is None:
            start_date = self.start_date

        if end_date is None:
            end_date = self.end_date

        url = WENCAI_CRAWLER_URL['history_detail'].format(
            backtest_id=self.content['id'],
            start_date=start_date,
            end_date=end_date,
            period=period)
        context = Session().get_driver(url, execute_path=self.execute_path)
        context = re.findall('{"result":(.*?),"errorcode":0,"errormsg":""}',
                             context)[0]
        data = json.loads(context)
        data = pd.DataFrame().from_dict(data)
        _ = {
            'stock_code': '股票代码',
            'stock_name': '股票简称',
            "start_date": "起始时间",
            "end_date": "终止时间",
            "start_price": "起始价",
            "end_price": "终止价",
            "change_rate": "区间涨跌幅",
            "stock_market": "股票市场"
        }
        if self.cn_col:
            data = data.rename(columns=_)
        return data
示例#3
0
 def eventbacktest(self, query, index_code, period, start_date, end_date):
     payload = {
         "query": query,
         "start_date": start_date,
         "end_date": end_date,
         "period": period,
         "index_code": index_code
     }
     henxin_v = self.obj_cookie.getHexinVByJson(source='backtest')
     session = Session(update_headers=WENCAI_HEADERS['backtest'],
                       hexin_v=henxin_v)
     r = session.post(WENCAI_CRAWLER_URL['eventbacktest'], data=payload)
     if r.status_code == 200:
         return EventBackTest(content=r.json(), cn_col=self.cn_col)
     else:
         raise Exception(r.content.decode('utf-8'))
示例#4
0
    def backtest(self, query, start_date, end_date, period, benchmark):
        payload = {
            "query": query,
            "start_date": start_date,
            "end_date": end_date,
            "period": period,
            "benchmark": benchmark
        }
        henxin_v = self.obj_cookie.getHexinVByJson(source='backtest')
        session = Session(update_headers=WENCAI_HEADERS['backtest'],
                          hexin_v=henxin_v)
        r = session.post(WENCAI_CRAWLER_URL['backtest'], data=payload)
        if r.status_code == 200:
            return BackTest(content=r.json(),
                            cn_col=self.cn_col,
                            execute_path=self.execute_path,
                            start_date=start_date,
                            end_date=end_date)

        else:
            raise Exception(r.content.decode('utf-8'))
示例#5
0
    def history_pick(self, trade_date, hold_num=1):
        url = WENCAI_CRAWLER_URL['history_pick'].format(trade_date=trade_date,
                                                        hold_num=hold_num,
                                                        query=self.query)
        context = Session().get_driver(url, execute_path=self.execute_path)
        context = re.findall('{"result":(.*?),"errorcode":0,"errormsg":""}',
                             context)[0]
        data = json.loads(context)['stocks']
        data = pd.DataFrame().from_dict(data)

        _ = {
            'change_rate': '涨跌幅',
            'close_price': '当日收盘价(元)',
            'dde': 'dde大单净量(%)',
            "equit_scale": "股本规模",
            "turnover_rate": "换手率",
            "stock_code": "股票代码",
            "stock_market": "股票市场",
            "stock_name": "股票名称",
        }
        if self.cn_col:
            data = data.rename(columns=_)
        return data
示例#6
0
 def __init__(self, cn_col=False, proxies=None, verify=False):
     self.cookies = WencaiCookie()
     self.cn_col = cn_col
     self.session = Session(proxies=proxies, verify=verify)
示例#7
0
class Wencai(object):
    logging.basicConfig(
        level=logging.WARNING,
        format='%(asctime)s [%(levelname)s] %(message)s',
    )

    def __init__(self, cn_col=False, proxies=None, verify=False):
        self.cookies = WencaiCookie()
        self.cn_col = cn_col
        self.session = Session(proxies=proxies, verify=verify)

    def backtest(self, query, start_date, end_date, period, benchmark):
        payload = {
            "query": query,
            "start_date": start_date,
            "end_date": end_date,
            "period": period,
            "benchmark": benchmark
        }

        r = self.session.post_result(source='backtest',
                                     url=WENCAI_CRAWLER_URL['backtest'],
                                     data=payload)
        if r.status_code == 200:
            print(r.json())
            return BackTest(content=r.json(),
                            cn_col=self.cn_col,
                            start_date=start_date,
                            end_date=end_date,
                            session=self.session)

        else:
            raise Exception(r.content.decode('utf-8'))

    def yieldbacktest(self, query, start_date, end_date, stock_hold,
                      upper_income, lower_income, period, fall_income,
                      day_buy_stock_num):
        payload = {
            "query": query,
            "start_date": start_date,
            "end_date": end_date,
            "period": period,
            "stock_hold": stock_hold,
            "upper_income": upper_income,
            "lower_income": lower_income,
            "fall_income": fall_income,
            "day_buy_stock_num": day_buy_stock_num
        }
        r = self.session.post_result(WENCAI_CRAWLER_URL['yieldbacktest'],
                                     data=payload,
                                     add_headers=WENCAI_HEADERS['backtest'],
                                     source='backtest')
        if r.status_code == 200:
            return YieldBackTest(content=r.json(),
                                 cn_col=self.cn_col,
                                 query=query,
                                 start_date=start_date,
                                 end_date=end_date,
                                 session=self.session)
        else:
            raise Exception(r.content.decode('utf-8'))

    def eventbacktest(self, query, index_code, period, start_date, end_date):
        payload = {
            "query": query,
            "start_date": start_date,
            "end_date": end_date,
            "period": period,
            "index_code": index_code
        }

        r = self.session.post_result(WENCAI_CRAWLER_URL['eventbacktest'],
                                     data=payload,
                                     source='eventbacktest')
        if r.status_code == 200:
            return EventBackTest(content=r.json(), cn_col=self.cn_col)
        else:
            raise Exception(r.content.decode('utf-8'))

    def lastjs(self, code):
        r = self.session.get_result(WENCAI_CRAWLER_URL['lastjs'].format(code),
                                    source='lastjs',
                                    add_headers=WENCAI_HEADERS['lastjs'])
        if r.status_code == 200:
            return LastJs(content=r.text, code=code).get_data
        else:
            raise Exception(r.content.decode('utf-8'))

    def search(self, query_string):

        payload = {
            "question":
            query_string,
            "page":
            1,
            "perpage":
            50,
            "log_info":
            '{"input_type": "typewrite"}',
            "source":
            "Ths_iwencai_Xuangu",
            "version":
            2.0,
            "secondary_intent":
            "",
            "query_area":
            "",
            "block_list":
            "",
            "add_info":
            '{"urp": {"scene": 1, "company": 1, "business": 1}, "contentType": "json", "searchInfo": true}'
        }

        r = self.session.post_result(url=WENCAI_CRAWLER_URL['search'],
                                     data=payload,
                                     force_cookies=True)
        result = r.json()['data']['answer'][0]['txt'][0]['content'][
            'components'][0]['data']['datas']

        def _re_str(x: str):
            _re = re.findall('(.*):前复权', x)
            if len(_re) >= 1:
                x = _re[-1]
            check_date = re.search(r"(\d{4}\d{1,2}\d{1,2})", x)
            if check_date is not None:
                return x.replace('[{}]'.format(check_date.group()), '')
            else:
                return x

        data = pd.DataFrame().from_dict(result)
        if not data.empty:
            columns = {i: _re_str(i) for i in data.columns}
            data = data.rename(columns=columns)
            for col in ['market_code', 'code', '关键词资讯', '涨跌幅']:
                if col in data.columns:
                    del data[col]
        return data