Example #1
0
def get_random_price(price,
                     code='rb1905',
                     tradingDay='20181119',
                     mu=0,
                     sigma=0.2,
                     theta=0.15,
                     dt=1e-2,
                     ifprint=False,
                     weight=0.1,
                     callback=None):
    ou_noise = OrnsteinUhlenbeckActionNoise(mu=np.array(mu))

    data = []
    tick_pickle = {
        'InstrumentID':
        str(code),
        'UpdateTime':
        '',
        'UpdateMillisec':
        '',
        'LastPrice':
        '',
        'Volume':
        0,
        'TradingDay':
        tradingDay,
        'ActionDay':
        QA_util_date_str2int(
            QA_util_get_last_day(QA_util_date_int2str(tradingDay)))
    }

    for item in time_index:
        x = str(item).split()[2]
        if '.' in x:
            tick_pickle['UpdateMillisec'] = 500
        else:
            tick_pickle['UpdateMillisec'] = 0

        tick_pickle['UpdateTime'] = x.split('.')[0]
        if item.seconds >= 75600:
            tick_pickle['ActionDay'] = QA_util_date_str2int(
                QA_util_get_last_day(
                    QA_util_date_int2str(tick_pickle['TradingDay'])))
        else:
            tick_pickle['ActionDay'] = tick_pickle['TradingDay']
        tick_pickle['Volume'] += random.randint(50, 5000)
        tick_pickle['LastPrice'] = (ou_noise() + 1) * \
                                   weight * price + (1 - weight) * price
        data.append(copy.deepcopy(tick_pickle))
        if ifprint:
            print(tick_pickle)
        if callback is not None:
            callback(tick_pickle)
    return pd.DataFrame(data)
Example #2
0
    def get(self):
        """[summary]

        /fetcher

        http://localhost:8010/marketdata/fetcher?code=RB1905&market=future_cn&end=2018-12-01&gap=20&frequence=15min

        http://localhost:8010/marketdata/fetcher?code=000001&market=stock_cn&end=2018-12-01&gap=20&frequence=15min
        http://localhost:8010/marketdata/fetcher?code=000001,000002&market=stock_cn&end=2018-12-01&gap=20&frequence=realtime&source=tdx

        一个统一了多市场的多周期数据接口

        param:
            code
            market
            end
            gap
            frequence

        TODO:
            source

        """

        code = self.get_argument('code', '000001')
        market = self.get_argument('market', MARKET_TYPE.STOCK_CN)
        end = self.get_argument('end', str(datetime.date.today))
        gap = self.get_argument('gap', 50)
        frequence = self.get_argument('frequence', FREQUENCE.FIFTEEN_MIN)
        start = self.get_argument(
            'start', QA_util_get_last_day(QA_util_get_real_date(end),
                                          int(gap)))
        source = self.get_argument('source', DATASOURCE.MONGO)

        if len(code) > 6:
            try:
                code = code.split(',')
                print(code)
            except:
                code = code
        #print(code, start, end, frequence, market)
        res = QA_quotation(code,
                           start,
                           end,
                           frequence,
                           market,
                           source=source,
                           output=OUTPUT_FORMAT.DATASTRUCT)

        return self.write({'status': 200, 'result': res.to_json()})
    def __init__(self, code, start, end):
        super().__init__()
        self.frequence = FREQUENCE.DAY
        self.market_type = MARKET_TYPE.STOCK_CN
        self.backtest_stock_code = code
        start = QA_util_get_last_day(
            QA_util_get_real_date(start, trade_date_sse, -1), 100)
        self.stock_day_data = QAQuery_Advance.QA_fetch_stock_day_adv(
            self.backtest_stock_code, start, end)
        self.stock_day_data_qfq = self.stock_day_data.to_qfq()

        # print(self.stock_day_data)
        self.stock_bollinger_bands = QA_indicator_BOLL(
            self.stock_day_data_qfq())
        # print(len(self.stock_bollinger_bands))
        # print(self.stock_bollinger_bands)

        self.current_state = 0
Example #4
0
def get_random_price(price,
                     code='rb1905',
                     tradingDay='20181119',
                     mu=0,
                     sigma=0.2,
                     theta=0.15,
                     dt=1e-2,
                     ifprint=False,
                     weight=0.1,
                     market_type=None):
    ou_noise = OrnsteinUhlenbeckActionNoise(mu=np.array(mu))

    data = []
    tick_pickle = {
        'InstrumentID':
        str(code),
        'UpdateTime':
        '',
        'UpdateMillisec':
        '',
        'LastPrice':
        '',
        'Volume':
        0,
        'TradingDay':
        tradingDay,
        'ActionDay':
        QA_util_date_str2int(
            QA_util_get_last_day(QA_util_date_int2str(tradingDay)))
    }

    if market_type is None:
        market_type = MARKET_TYPE.FUTURE_CN if re.search(
            r'[a-zA-z]+', code) else MARKET_TYPE.STOCK_CN

    if market_type == MARKET_TYPE.FUTURE_CN:
        time_index = time_index_future
    else:
        time_index = time_index_stock

    for item in time_index:
        x = str(item).split()[2]
        if '.' in x:
            tick_pickle['UpdateMillisec'] = 500
        else:
            tick_pickle['UpdateMillisec'] = 0

        tick_pickle['UpdateTime'] = x.split('.')[0]
        if (item.seconds >= 75600) & (market_type == MARKET_TYPE.FUTURE_CN):
            tick_pickle['ActionDay'] = QA_util_date_str2int(
                QA_util_get_last_day(
                    QA_util_date_int2str(tick_pickle['TradingDay'])))
        else:
            tick_pickle['ActionDay'] = tick_pickle['TradingDay']
        tick_pickle['Volume'] += random.randint(50, 5000)
        tick_pickle['LastPrice'] = (ou_noise()+1) * \
            weight*price + (1-weight)*price
        data.append(copy.deepcopy(tick_pickle))
        if ifprint:
            print(tick_pickle)
    return pd.DataFrame(data)