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 = 'dif_day_%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_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
def quant_stock(stock_number, stock_name, **kwargs): week_long = kwargs.get('week_long', False) 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']) df = calculate_ma(df, kwargs['short_ma'], kwargs['long_ma']) today = df.iloc[-1] yestoday = df.iloc[-2] if short_ma <= long_ma: strategy_direction = 'long' else: strategy_direction = 'short' strategy_name = 'ma_macd_%s_%s_%s' % (strategy_direction, short_ma, long_ma) if week_long: strategy_name = 'weeklong_' + strategy_name if today['diff_ma'] > 0 > yestoday['diff_ma']: increase_rate = round((today['close_price'] - yestoday['close_price']) / yestoday['close_price'], 4) * 100 qr = '' if strategy_direction == 'long': if today['macd'] > 0 > today['dif'] and today['dea'] < 0: 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 ) elif strategy_direction == 'short': if today['macd'] < 0 < today['dif'] and today['dea'] > 0: 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 isinstance(qr, QR): 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']) df = calculate_ma(df, kwargs['short_ma'], kwargs['long_ma']) today_analysis = df.iloc[-1] yestoday_analysis = df.iloc[-2] if short_ma <= long_ma: strategy_direction = 'long' else: strategy_direction = 'short' strategy_name = 'ma_macd_%s_%s_%s' % (strategy_direction, short_ma, long_ma) if today_analysis['diff_ma'] > 0 > yestoday_analysis['diff_ma']: qr = '' if strategy_direction == 'long': if today_analysis['macd'] > 0 > today_analysis['dif'] and today_analysis['dea'] < 0: qr = QR( stock_number=stock_number, stock_name=stock_name, date=today_analysis.name, strategy_direction=strategy_direction, strategy_name=strategy_name, init_price=today_analysis['close_price'] ) elif strategy_direction == 'short': if today_analysis['macd'] < 0 < today_analysis['dif'] and today_analysis['dea'] > 0: qr = QR( stock_number=stock_number, stock_name=stock_name, date=today_analysis.name, strategy_direction=strategy_direction, strategy_name=strategy_name, init_price=today_analysis['close_price'] ) if isinstance(qr, QR): if real_time: return qr if not check_duplicate_strategy(qr): qr.save() return qr return ''
def quant_stock(stock_number, stock_name, **kwargs): 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 trading_data = format_trading_data(sdt) df = calculate_ma(DataFrame(trading_data), kwargs['short_ma'], kwargs['long_ma']) df = calculate_macd(df, kwargs['short_ema'], kwargs['long_ema'], kwargs['dif_ema']) today = df.iloc[-1] yestoday = df.iloc[-2]
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): 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): 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