import numpy as np def buy_BTFD(name, data, range_days, cand_window, marker_key='close_n', thresh_max=-10, thresh_min=1, buy_callback=None): N = len(data['index']) key = 'BTFD' buy_list = {'index' : np.array([None]*N), key : np.array([None]*N)} cand = None do_buy = False for n in range(N-range_days, N): vmax = data['Qmax'][n] vmin = data['Qmin'][n] trend = data['macd_fdd'][n] index = data['index'][n] value = data[marker_key][n] if vmin <= thresh_min: if vmax <= thresh_max: cand = n if trend >= 0: do_buy = True print ("{}: Buy on {} at {:0.2f}".format(name, index, value)) cand = None if cand is not None: if n - cand <= cand_window: if trend >= 0: do_buy = True former = data[marker_key][cand] print("{}: Delayed buy on {} at {:0.2f} ({:0.2f})".format(name, index, value, former-value)) cand = None else: cand = None if do_buy: do_buy = False buy_list['index'][n] = index buy_list[key][n] = value if buy_callback is not None: buy_callback({'name': name, 'item': {'value': value, 'date': index}}) return buy_list