Esempio n. 1
0
def quant_stock(stock_number, stock_name, **kwargs):
    qr_date = kwargs['qr_date']
    if not pre_sdt_check(stock_number, **kwargs):
        return

    strategy_name = "depart_long_week"
    last_trade_date = qr_date + datetime.timedelta(days=7)
    swt = SWT.objects(
        Q(stock_number=stock_number)
        & Q(last_trade_date__lte=last_trade_date)).order_by(
            '-last_trade_date')[:ema_volume]
    use_ad_price, swt = is_ad_price(stock_number, qr_date, swt)
    if not swt:
        return

    trading_data = format_trading_data(swt, use_ad_price)
    df = calculate_macd(DataFrame(trading_data), short_ema, long_ema, dif_ema)
    df = calculate_ma(df, short_ma, long_ma)
    this_week = df.iloc[-1]
    last_week = df.iloc[-2]

    if last_week['close_price'] < last_week['long_ma'] and this_week['close_price'] > this_week['short_ma']\
       and this_week['close_price'] > this_week['long_ma']:
        if use_ad_price:
            init_price = swt[0].weekly_close_price
        else:
            init_price = this_week['close_price']

        increase_rate = round(
            (this_week['close_price'] - last_week['close_price']) /
            last_week['close_price'], 4) * 100

        short_point = -1
        for i in range(1, len(df)):
            if df.iloc[-i].diff_ma > 0:
                short_point = i
                break

        # if short_point < period:
        #     return

        if df.iloc[-short_point:].macd.sum() > 0:
            # print(stock_number)
            # pd.set_option('display.max_columns', 500)
            # pd.set_option('display.width', 1000)
            # print(df.iloc[-short_point:])

            qr = QR(stock_number=stock_number,
                    stock_name=stock_name,
                    date=qr_date,
                    strategy_direction='long',
                    strategy_name=strategy_name,
                    init_price=init_price,
                    industry_involved=kwargs.get('industry_involved'),
                    increase_rate=increase_rate)
            if not check_duplicate_strategy(qr):
                qr.save()
                return qr
Esempio n. 2
0
def quant_stock(stock_number, stock_name, **kwargs):
    short_ma = kwargs['short_ma']
    long_ma = kwargs['long_ma']
    qr_date = kwargs['qr_date']
    if not pre_sdt_check(stock_number, **kwargs):
        return

    if short_ma < long_ma:
        strategy_direction = 'long'
        quant_count = long_ma + 5
    else:
        strategy_direction = 'short'
        quant_count = short_ma + 5
    strategy_name = 'week_through_%s_%s_%s' % (strategy_direction, short_ma,
                                               long_ma)

    last_trade_date = qr_date + datetime.timedelta(days=7)
    swt = SWT.objects(
        Q(stock_number=stock_number)
        & Q(last_trade_date__lte=last_trade_date)).order_by(
            '-last_trade_date')[:quant_count]

    use_ad_price, swt = is_ad_price(stock_number, qr_date, swt)
    if not swt:
        return

    trading_data = format_trading_data(swt, use_ad_price)
    # end_date = qr_date.strftime('%Y-%m-%d')
    # start_date = (qr_date - datetime.timedelta(days=max(short_ma, long_ma) * 7)).strftime('%Y-%m-%d')
    # trading_data = get_week_trading(stock_number, start_date, end_date)
    df = calculate_ma(DataFrame(trading_data), short_ma, long_ma)
    this_week = df.iloc[-1]
    last_week = df.iloc[-2]

    if last_week['close_price'] < last_week['long_ma'] and this_week['close_price'] > this_week['short_ma']\
       and this_week['close_price'] > this_week['long_ma']:
        if use_ad_price:
            init_price = swt[0].weekly_close_price
        else:
            init_price = this_week['close_price']

        increase_rate = round(
            (this_week['close_price'] - last_week['close_price']) /
            last_week['close_price'], 4) * 100
        qr = QR(stock_number=stock_number,
                stock_name=stock_name,
                date=qr_date,
                strategy_direction=strategy_direction,
                strategy_name=strategy_name,
                init_price=init_price,
                industry_involved=kwargs.get('industry_involved'),
                increase_rate=increase_rate)
        if not check_duplicate_strategy(qr):
            qr.save()
            return qr
    return
def quant_stock(stock_number, stock_name, **kwargs):
    short_ma = kwargs['short_ma']
    long_ma = kwargs['long_ma']
    qr_date = kwargs['qr_date']
    if not pre_sdt_check(stock_number, **kwargs):
        return

    if short_ma < long_ma:
        strategy_direction = 'long'
        quant_count = long_ma + 5
    else:
        strategy_direction = 'short'
        quant_count = short_ma + 5
    strategy_name = 'maweek_%s_%s_%s' % (strategy_direction, short_ma, long_ma)

    swt = SWT.objects(
        Q(stock_number=stock_number)
        & Q(last_trade_date__lte=qr_date)).order_by(
            '-last_trade_date')[:quant_count]
    if not swt:
        return

    use_ad_price, swt = is_ad_price(stock_number, qr_date, swt)
    if not swt:
        return

    trading_data = format_trading_data(swt, use_ad_price)
    df = calculate_ma(DataFrame(trading_data), short_ma, long_ma)
    this_week = df.iloc[-1]
    last_week = df.iloc[-2]

    if this_week['diff_ma'] > 0 > last_week['diff_ma']:
        if use_ad_price:
            init_price = swt[0].weekly_close_price
        else:
            init_price = this_week['close_price']

        increase_rate = round(
            (this_week['close_price'] - last_week['close_price']) /
            last_week['close_price'], 4) * 100
        qr = QR(stock_number=stock_number,
                stock_name=stock_name,
                date=this_week.name,
                strategy_direction=strategy_direction,
                strategy_name=strategy_name,
                init_price=init_price,
                industry_involved=kwargs.get('industry_involved'),
                increase_rate=increase_rate)
        if not check_duplicate_strategy(qr):
            qr.save()
            return qr
    return
def quant_stock(stock_number, stock_name, **kwargs):
    short_ema = kwargs['short_ema']
    long_ema = kwargs['long_ema']
    dif_ema = kwargs['dif_ema']
    qr_date = kwargs['qr_date']
    if not pre_sdt_check(stock_number, **kwargs):
        return

    strategy_direction = 'long'
    quant_count = 150

    strategy_name = 'week_macd_%s_%s_%s_%s' % (strategy_direction, short_ema,
                                               long_ema, dif_ema)

    last_trade_date = qr_date + datetime.timedelta(days=7)
    swt = SWT.objects(
        Q(stock_number=stock_number)
        & Q(last_trade_date__lte=last_trade_date)).order_by(
            '-last_trade_date')[:quant_count]

    use_ad_price, swt = is_ad_price(stock_number, qr_date, swt)
    if not swt:
        return

    trading_data = format_trading_data(swt, use_ad_price)
    df = calculate_macd(DataFrame(trading_data), short_ema, long_ema, dif_ema)
    this_week = df.iloc[-1]
    last_week = df.iloc[-2]

    if last_week['macd'] < 0 < this_week['macd']:
        if use_ad_price:
            init_price = swt[0].weekly_close_price
        else:
            init_price = this_week['close_price']

        increase_rate = round(
            (this_week['close_price'] - last_week['close_price']) /
            last_week['close_price'], 4) * 100
        qr = QR(stock_number=stock_number,
                stock_name=stock_name,
                date=qr_date,
                strategy_direction=strategy_direction,
                strategy_name=strategy_name,
                init_price=init_price,
                industry_involved=kwargs.get('industry_involved'),
                increase_rate=increase_rate)
        if not check_duplicate_strategy(qr):
            qr.save()