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()
def quant_stock(stock_number, stock_name, **kwargs): if not pre_sdt_check(stock_number, **kwargs): return real_time = kwargs.get('real_time', False) week_long = kwargs.get('week_long', False) strategy_direction = 'long' strategy_name = 'break_through_%s_%s_%s' % (strategy_direction, kwargs['short_ma'], kwargs['long_ma']) if week_long: strategy_name = 'weeklong_' + strategy_name sdt = SDT.objects(Q(stock_number=stock_number) & Q(today_closing_price__ne=0.0) & Q(date__lte=kwargs['qr_date'])).order_by('-date')[:kwargs['long_ma']+10] if not sdt: return if not real_time: if sdt[0].today_closing_price <= sdt[0].today_average_price: return if real_time: sdt = setup_realtime_sdt(stock_number, sdt, kwargs) if not sdt: return if sdt[0].today_closing_price < sdt[0].today_opening_price: return trading_data = format_trading_data(sdt) df = calculate_ma(DataFrame(trading_data), short_ma, long_ma) today = df.iloc[-1] yestoday = df.iloc[-2] if yestoday['close_price'] < yestoday['long_ma'] and today['close_price'] > today['short_ma']\ and today['close_price'] > today['long_ma']: increase_rate = round((today['close_price'] - yestoday['close_price']) / yestoday['close_price'], 4) * 100 qr = QR( stock_number=stock_number, stock_name=stock_name, date=today.name, strategy_direction=strategy_direction, strategy_name=strategy_name, init_price=today['close_price'], industry_involved=kwargs.get('industry_involved'), increase_rate=increase_rate ) if real_time: return qr if not check_duplicate_strategy(qr): qr.save() return qr return ''
def quant_stock(stock_number, stock_name, **kwargs): real_time = kwargs.get('real_time', False) sdt = SDT.objects( Q(stock_number=stock_number) & Q(today_closing_price__ne=0.0) & Q(date__lte=kwargs['qr_date'])).order_by('-date')[:ema_volume] if len(sdt) < ema_volume - 50: return if float(sdt[0].increase_rate.replace('%', '')) > 9: return if real_time: today_sdt = SDT.objects(date=kwargs['qr_date']) if kwargs['qr_date'] == datetime.date.today() and not today_sdt: today_trading = kwargs.get('today_trading', {}) if not today_trading.get(stock_number): return sdt = list(sdt) sdt.insert(0, today_trading.get(stock_number)) trading_data = format_trading_data(sdt) df = calculate_macd(DataFrame(trading_data), kwargs['short_ema'], kwargs['long_ema'], kwargs['dif_ema']) today_macd = df.iloc[-1] yestoday_macd = df.iloc[-2] strategy_direction = '' if yestoday_macd['macd'] < 0 < today_macd['macd']: strategy_direction = 'long' elif yestoday_macd['macd'] > 0 > today_macd['macd']: strategy_direction = 'short' if strategy_direction: strategy_name = 'macd_%s_%s_%s_%s' % ( strategy_direction, kwargs['short_ema'], kwargs['long_ema'], kwargs['dif_ema']) qr = QR(stock_number=stock_number, stock_name=stock_name, date=today_macd.name, strategy_direction=strategy_direction, strategy_name=strategy_name, init_price=today_macd['close_price']) if real_time and strategy_direction == 'long': return qr 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' strategy_name = 'week_boot_long_%s_%s_%s' % (short_ema, long_ema, dif_ema) end_date = qr_date.strftime('%Y-%m-%d') start_date = (qr_date - datetime.timedelta(days=max(short_ema, long_ema) * 7)).strftime('%Y-%m-%d') trading_data = get_week_trading(stock_number, start_date, end_date) if len(trading_data): return df = calculate_macd(DataFrame(trading_data), short_ema, long_ema, dif_ema) this_week = df.iloc[-1] last_week = df.iloc[-2] recent_period = df.iloc[-20:] recent_dif = recent_period['dif'] # print('dif max:%s' % recent_dif.max()) if recent_dif.max() > 0: return # print("%s last:%s, this:%s" % (stock_number, last_week['dif'], this_week['dif'])) if last_week['dif'] < 0 < this_week['dif']: 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()
def quant_stock(stock_number, stock_name, **kwargs): if not pre_sdt_check(stock_number, **kwargs): return real_time = kwargs.get('real_time', False) sdt = SDT.objects( Q(stock_number=stock_number) & Q(today_closing_price__ne=0.0) & Q(date__lte=kwargs['qr_date'])).order_by('-date')[:ema_volume] if float(sdt[0].increase_rate.replace('%', '')) > 9: return '' if real_time: sdt = setup_realtime_sdt(stock_number, sdt, kwargs) if not sdt: return trading_data = format_trading_data(sdt) df = calculate_macd(DataFrame(trading_data), kwargs['short_ema'], kwargs['long_ema'], kwargs['dif_ema']) today = df.iloc[-1] yestoday = df.iloc[-2] strategy_direction = 'long' if yestoday['dif'] < 0 < today['dif']: strategy_name = 'macddif_%s_%s_%s_%s' % ( strategy_direction, kwargs['short_ema'], kwargs['long_ema'], kwargs['dif_ema']) increase_rate = round( (today['close_price'] - yestoday['close_price']) / yestoday['close_price'], 4) * 100 qr = QR(stock_number=stock_number, stock_name=stock_name, date=today.name, strategy_direction=strategy_direction, strategy_name=strategy_name, init_price=today['close_price'], industry_involved=kwargs.get('industry_involved'), increase_rate=increase_rate) if real_time and strategy_direction == 'long': return qr if not real_time and not check_duplicate_strategy(qr): qr.save() return qr return ''
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_day" sdt = SDT.objects( Q(stock_number=stock_number) & Q(today_closing_price__ne=0.0) & Q(date__lte=qr_date)).order_by('-date')[:ema_volume] trading_data = format_trading_data(sdt) df = calculate_ma(DataFrame(trading_data), short_ma, long_ma) df = calculate_macd(df, short_ema, long_ema, dif_ema) today = df.iloc[-1] yestoday = df.iloc[-2] if yestoday['close_price'] < yestoday['long_ma'] and today['close_price'] > today['short_ma'] \ and today['close_price'] > today['long_ma']: 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: increase_rate = round( (today['close_price'] - yestoday['close_price']) / yestoday['close_price'], 4) * 100 qr = QR(stock_number=stock_number, stock_name=stock_name, date=today.name, strategy_direction='long', strategy_name=strategy_name, init_price=today['close_price'], industry_involved=kwargs.get('industry_involved'), increase_rate=increase_rate) if not check_duplicate_strategy(qr): qr.save() return qr
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' strategy_name = 'month_macd_%s_%s_%s_%s' % (strategy_direction, short_ema, long_ema, dif_ema) end_date = qr_date.strftime('%Y-%m-%d') start_date = (qr_date - datetime.timedelta(days=short_ema * long_ema * 31)).strftime('%Y-%m-%d') trading_data = get_month_trading(stock_number, start_date, end_date) trading_data = trading_data.iloc[-150:] if len(trading_data) < max(short_ema, long_ema): return df = calculate_macd(trading_data, short_ema, long_ema, dif_ema) this_month = df.iloc[-1] last_month = df.iloc[-2] if last_month['macd'] < 0 < this_month['macd']: init_price = this_month['close_price'] increase_rate = round( (this_month['close_price'] - last_month['close_price']) / last_month['close_price'], 4) * 100 qr = QR(stock_number=stock_number, stock_name=stock_name, date=this_month.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): length = kwargs['length'] qr_date = kwargs['qr_date'] real_time = kwargs.get('real_time', False) if not pre_sdt_check(stock_number, **kwargs): return strategy_name = 'new_peak_%s' % length strategy_direction = 'long' sdt = SDT.objects( Q(stock_number=stock_number) & Q(today_closing_price__ne=0.0) & Q(date__lte=qr_date)).order_by('-date')[:length] if len(sdt) < length: return if real_time: sdt = setup_realtime_sdt(stock_number, sdt, kwargs) trading_data = format_trading_data(sdt) if not trading_data: return df = DataFrame(trading_data) today_data = df.iloc[-1] if df['close_price'].max() <= today_data['close_price']: qr = QR(stock_number=stock_number, stock_name=stock_name, date=today_data.date, strategy_direction=strategy_direction, strategy_name=strategy_name, init_price=today_data['close_price'], industry_involved=kwargs.get('industry_involved'), increase_rate=float(sdt[0].increase_rate.replace('%', ''))) if real_time: return qr if not check_duplicate_strategy(qr): qr.save() return qr return
def quant_stock(stock_number, stock_name, **kwargs): qr_date = kwargs['qr_date'] week_long = kwargs.get('week_long', False) strategy_name = 'goup_staying' if week_long: strategy_name = 'weeklong_' + strategy_name sdt = SDT.objects(Q(stock_number=stock_number) & Q(today_closing_price__ne=0.0) & Q(date__lte=qr_date)).order_by('-date')[:quant_count] if len(sdt) < quant_count: return if float(sdt[0].increase_rate.replace('%', '').strip()) > goup_stay: qr = QR( stock_number=stock_number, stock_name=stock_name, date=qr_date, strategy_direction='long', strategy_name=strategy_name, init_price=sdt[0].today_closing_price, industry_involved=kwargs.get('industry_involved'), increase_rate=float(sdt[0].increase_rate.replace('%', '').strip()) ) if not check_duplicate_strategy(qr): qr.save() return qr