def calculate(code_name, data, end_date=None, threshold=20): begin_date = data.iloc[0].date if end_date is not None: if end_date < begin_date: # 该股票在end_date时还未上市 logging.debug("{}在{}时还未上市".format(code_name, end_date)) return False if end_date is not None: mask = (data['date'] <= end_date) data = data.loc[mask] if len(data) < threshold: logging.debug("{0}:样本小于{1}天...\n".format(code_name, threshold)) return False atr_list = tl.ATR(data['high'], data['low'], data['close'], timeperiod=threshold) atr = atr_list.iloc[-1] last_close = data.iloc[-1]['close'] # 头寸规模 position_size = math.floor(BALANCE / 100 / real_atr(atr, 100)) t_shelve = db.ShelvePersistence() t_shelve.save(code_name, last_close, position_size) # last_close, position_size, atr result = ("N:{0}\n" "头寸规模:{1}手\n" "买入价格:{2:0.2f},{3:0.2f},{4:0.2f},{5:0.2f}\n" "退出价格:{6:0.2f}\n\n".format( atr, math.floor(BALANCE / 100 / real_atr(atr, 100)), last_close, last_close + atr, last_close + atr * 2, last_close + atr * 3, last_close - atr * 2)) return result
def check_exit(): t_shelve = db.ShelvePersistence() file = t_shelve.open() for key in file: code_name = file[key]['code_name'] data = utils.read_data(code_name) if turtle_trade.check_exit(code_name, data): notify.notify("{0} 达到退出条件".format(code_name)) logging.info("{0} 达到退出条件".format(code_name)) del file[key] elif turtle_trade.check_stop(code_name, data, file[key]): notify.notify("{0} 达到止损条件".format(code_name)) logging.info("{0} 达到止损条件".format(code_name)) del file[key]
def calculate(code_name, data_history, end_date=None): atr_list = tl.ATR(data_history['high'], data_history['low'], data_history['close'], timeperiod=20) atr = atr_list.iloc[-1] last_close = data_history.iloc[-1]['close'] # 头寸规模 position_size = math.floor(BALANCE / 100 / real_atr(atr, 100)) t_shelve = db.ShelvePersistence() t_shelve.save(code_name, last_close, position_size) # last_close, position_size, atr result = ("N:{0}\n" "头寸规模:{1}手\n" "买入价格:{2:0.2f},{3:0.2f},{4:0.2f},{5:0.2f}\n" "退出价格:{6:0.2f}\n\n".format( atr, math.floor(BALANCE / 100 / real_atr(atr, 100)), last_close, last_close + atr, last_close + atr * 2, last_close + atr * 3, last_close - atr * 2)) return result
# # 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) # print(atr_list) # atr = atr_list[-1] # print(atr) # print(enter.check_volume(stock, data, end_date="2018-01-02")) # import notify # # results = ['300188', '600271'] # msg = '\n'.join("*代码:%s" % ''.join(x) for x in results) # notify.notify(msg) # print(results) # import tushare as ts # # data = ts.get_stock_basics() # print(data) import db t_shelve = db.ShelvePersistence() t_shelve.positions()