def remove(cls, data, n): tdy = dt.date.today() tdy = dt.datetime(tdy.year, tdy.month, tdy.day) aim = trading.trade_period(tdy, n) # ugl = cls.rrads(tdy, n) ugl = BaseData.read_RRADS(stock_code={'$in': data.stock_code.tolist()}) if len(ugl): ugl = ugl[(ugl.last_time >= tdy) & (ugl.last_time <= aim)] # data = pd.merge(data, ugl, on='stock_code', how='left') if len(ugl): print(fontcolor.F_RED + '-' * 80 + fontcolor.END) print(fontcolor.F_RED + '#重大风险提示#' + fontcolor.END) print(fontcolor.F_RED, ugl.loc[:, ['stock_code', 'stock_name', 'last_time']], fontcolor.END) print(fontcolor.F_RED, '时间:', dt.datetime.now(), '备注:近期将公布财务报表', fontcolor.END) print(fontcolor.F_RED + '-' * 80 + fontcolor.END) same = list(data[data.stock_code.isin(ugl.stock_code)].index) data.drop(same, axis=0, inplace=True) return data # import datetime # d = datetime.datetime(2018, 3, 15) # ugly.rrads(d, 5) # from Foxin.model_data_get.SingalData import signaldata # data = signaldata.read_signals(model_from='macd_min30', date='2018-01-31') # # ugly.remove(data, 50) # print('as\tdf\tas\n dssd')
def default_order_close(cls, signal): """ 默认的一个平仓函数,它完成的任务就是接受开仓信号&用于验证这个信号的“未来的”、“历史的” 数据,并将其传递给执行平仓动作的函数或直接在这里实现。总之,这个函数必要返回验证的结果。 :return: """ # 主要适用于中国A股(T+1),或与之交易规则基本一致的市场,其他市场可参考 # 此函数描述了关于如何卖出资产的处理方式 # 由于交易日不是连续的,当天买入后需第二交易日及以后才可以卖出 # 这里最长等待12个休市日,如还未找到交易数据则本次交易收益计算无效 # 为了确保做多与做空保持相同的风控策略,止盈止损系数对换 # 这里的自然日不包括连续休市天数大于最长持有天数的那些天 try: code = signal['code'] date = signal['open_date'] open_price = signal['open_price'] mark = signal['type'] od = datetime.datetime(date.year, date.month, date.day) s = od + datetime.timedelta(days=1) # 买入时间的第二天 for d in range(0, 12, 1): if cls.ntf: e = td.trade_period(od, days=d + cls.model_param['max_pst_days']) # 持有时间按交易日计算 else: e = od + datetime.timedelta(days=d + cls.model_param['max_pst_days']) # 持有时间按自然日计算 e = e + datetime.timedelta(minutes=cls.model_param['max_pst_mins']) try: data = cls.func(code, s, e, cls.kline) except Exception: raise TypeError('User-defined function raise a Exception') if len(data): return cls.close(data, mark, open_price) return e, 1, 404, 0 except Exception as ep: print(ep) return date, 1, 500, 0
def finally_datetime(cls, date, max_pst_days=1, bsi=False): """ 根据开仓时间和最长持有时间计算买出时间,适用于中国A股股票 :param bsi: False表示按自然日计算持有的时间, True表示按交易日计算 :param date: :param max_pst_days: :return: """ try: time = dt.timedelta(hours=14, minutes=55) start = dt.datetime(date.year, date.month, date.day) if bsi: end = trading.trade_period(start, max_pst_days) return end + time else: end = start + dt.timedelta(days=max_pst_days) if trading.is_trade_day(end): return end + time else: # end 不是交易日 if trading.trade_days(start, end) > 0: # 向前推算 for i in range(1, max_pst_days, 1): end = end - dt.timedelta(days=1) if trading.is_trade_day(end): return end + time else: # 向后推算 for i in range(1, 11, 1): end = start + dt.timedelta(days=i) if trading.is_trade_day(end): return end + time return date except Exception as e: ExceptionInfo(e) return date
def usa_order_close(cls, signal): """ 适用于美股融资融券当日冲销账户(要成为这一类用户,账户余额必须大于$25,000), 执行T+0交易规则,不受交割制度困扰(T+3),但可能会受到资金规模困扰,这与券商相关, 外汇也适用于这种类型的平仓 :param signal: :return: """ try: code = signal['code'] od = signal['open_date'] open_price = signal['open_price'] mark = signal['type'] s = od for d in range(0, 12, 1): if cls.ntf: # 持有时间按交易日计算 # 可能存在不合理的情况,因为目前我们不确定美股市场休市的安排 e = td.trade_period(od, days=d + cls.model_param['max_pst_days'], holidays=[]) else: e = od + datetime.timedelta(days=d + cls.model_param['max_pst_days']) # 持有时间按自然日计算 e = e + datetime.timedelta(minutes=cls.model_param['max_pst_mins']) try: data = cls.func(code, s, e, cls.kline) except Exception: raise TypeError('User-defined function raise a Exception') if len(data): data = data[(data.date >= s) & (data.date <= e)] if len(data): return cls.close(data, mark, open_price) return e, 1, 404, 0 except Exception as ep: ExceptionInfo(ep)
def rrads(cls, date, n): """ 财务报表公布前或后n个交易日提请入市注意 :param date: :return: """ try: aim = trading.trade_period(date, n) lt = {'$gte': aim, '$lte': date} if n < 0 else {'$gte': date, '$lte': aim} rds = BaseData.read_RRADS(last_time=lt) return rds.loc[:, ['stock_code', 'stock_name', 'last_time']] except Exception as e: ExceptionInfo(e) return pd.DataFrame()