Esempio n. 1
0
    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')
Esempio n. 2
0
 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
Esempio n. 3
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
Esempio n. 4
0
 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)
Esempio n. 5
0
 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()