def test_talib_ATR(self): # # code_name = ('300623', '捷捷微电') # code_name = ('600145', '*ST新亿') # code_name = ('601700', '风范股份') # code_name = ('000725', '京东方A') # code_name = ('002157', '正邦科技') code_name = ('300663', '科蓝软件') end = '2020-12-30' data = utils.read_data(code_name) print(data.head()) result = enter.check_volume(code_name, data, end_date=end) print("\nlow atr check {0}'s result: {1}".format(code_name, result)) rolling_window = 21 moving_average = 20 average_true_range = ATR(data.high.values[-rolling_window:], data.low.values[-rolling_window:], data.close.values[-rolling_window:], timeperiod=moving_average) print("*" * 50) print(data['high'].values) print("*" * 50) print(average_true_range) print("*" * 10)
def end_date_filter(code_name): stock = code_name[0] name = code_name[1] data = utils.read_data(stock, name) if data is None: return False return \ enter.check_ma(stock, data, end_date=end_date) \ and enter.check_max_price(stock, data, end_date=end_date) \ and enter.check_volume(code_name, data, end_date=end_date)
def end_date_filter(code_name): stock = code_name[0] data = utils.read_data(code_name) result = enter.check_ma(stock, data, end_date=end_date) \ and enter.check_volume(stock, data, end_date=end_date) if result: message = turtle_trade.calculate(code_name, data) logging.info("{0} {1}".format(code_name, message)) notify.notify("{0} {1}".format(code_name, message)) return result
def check(code_name, data, end_date=None, threshold=60): origin_data = data if len(data) < 250: logging.info("{0}:样本小于250天...\n".format(code_name)) return data['ma60'] = pd.Series(tl.MA(data['close'].values, 60), index=data.index.values) begin_date = data.iloc[0].date if end_date is not None: if end_date < begin_date: # 该股票在end_date时还未上市 logging.info("{}在{}时还未上市".format(code_name, end_date)) return False if end_date is not None: mask = (data['date'] <= end_date) data = data.loc[mask] data = data.tail(n=threshold) breakthrough_row = None for index, row in data.iterrows(): if row['open'] < row['ma60'] <= row['close']: if enter.check_volume(code_name, origin_data, row['date'], threshold): breakthrough_row = row if breakthrough_row is None: return False data_front = data.loc[(data['date'] < breakthrough_row['date'])] data_end = data.loc[(data['date'] >= breakthrough_row['date'])] for index, row in data_front.iterrows(): if not (-0.05 < (row['ma60'] - row['close']) / row['ma60'] < 0.2): return False logging.info("股票{0} 突破日期:{1}".format(code_name, breakthrough_row['date'])) return True
# # average_true_range = average_true_range_list[-1] # settings.init() # code_name = ('300623', '捷捷微电') # code_name = ('600145', '*ST新亿') # code_name = ('601700', '风范股份') # code_name = ('000725', '京东方A') code_name = ('002157', '正邦科技') # code_name = ('300663', '科蓝软件') # end = '2017-09-26' end = '2019-02-15' data = utils.read_data(code_name) # print(data) result = enter.check_volume(code_name, data, end_date=end) print("low atr check {0}'s result: {1}".format(code_name, result)) # # rolling_window = 21 # moving_average = 20 # # average_true_range = ATR( # data.high.values[-rolling_window:], # data.low.values[-rolling_window:], # data.close.values[-rolling_window:], # timeperiod=moving_average # ) # print(data['high'].values) # # print(average_true_range)