def output_feeds(instrument: str, st: datetime, et: datetime, short_win: int, long_win: int, ema_period: int, save_dir: str) -> pd.DataFrame: """ Output ohlc price feeds to csv for strategy back testing :param instrument: ccy_pair :param st: start date :param et: end date :param short_win: :param long_win: :param ema_period: :param save_dir: :return: """ pd_h1 = read_price_df(instrument=instrument, granularity='H1', start=st, end=et) pd_h1[f'last_{long_win}_high'] = pd_h1['high'].rolling(window=long_win * 24).max() pd_h1[f'last_{short_win}_high'] = pd_h1['high'].rolling(window=short_win * 24).max() pd_h1[f'last_{long_win}_low'] = pd_h1['low'].rolling(window=long_win * 24).min() pd_h1[f'last_{short_win}_low'] = pd_h1['low'].rolling(window=short_win * 24).min() pd_h1.to_csv(f'{save_dir}/{instrument.lower()}_h1.csv') pd_d = read_price_df(instrument=instrument, granularity='D', start=st, end=et) pd_d[f'last_{long_win}_high'] = pd_d['high'].rolling(window=long_win).max() pd_d[f'last_{short_win}_high'] = pd_d['high'].rolling( window=short_win).max() pd_d[f'last_{long_win}_low'] = pd_d['low'].rolling(window=long_win).min() pd_d[f'last_{short_win}_low'] = pd_d['low'].rolling(window=short_win).min() pd_d['atr'] = TA.ATR(pd_d, period=14) pd_d['adx'] = TA.ADX(pd_d, period=14) pd_d['rsi'] = TA.RSI(pd_d, period=14) pd_d[f'ema_{ema_period}'] = TA.EMA(pd_d, period=ema_period) pd_d.to_csv(f'{save_dir}/{instrument.lower()}_d.csv') pd_h1.reset_index(level=0, inplace=True) pd_merged = pd_h1.apply(partial(enrich, pd_d, ema_period), axis=1).set_index('time') logger.info(pd_merged.info()) pd_merged.to_csv(f"{save_dir}/{instrument.lower()}_h1_enrich.csv") logger.info(f'output feeds complete for [{instrument}]!') return pd_merged
def output_feeds(instrument: str, short_win: int, long_win: int, ema_period: int, save_dir: str, st: datetime, et: datetime = None) -> pd.DataFrame: """ Output daily ohlc price feeds to csv :param instrument: ccy_pair :param st: start date :param et: end date :param short_win: :param long_win: :param ema_period: :param save_dir: :return: """ pd_d = read_price_df(instrument=instrument, granularity='D', start=st, end=et) pd_d[f'last_{long_win}_high'] = pd_d['high'].rolling(window=long_win).max() pd_d[f'last_{short_win}_high'] = pd_d['high'].rolling( window=short_win).max() pd_d[f'last_{long_win}_low'] = pd_d['low'].rolling(window=long_win).min() pd_d[f'last_{short_win}_low'] = pd_d['low'].rolling(window=short_win).min() pd_d['atr'] = TA.ATR(pd_d, period=14) pd_d['adx'] = TA.ADX(pd_d, period=14) pd_d['rsi'] = TA.RSI(pd_d, period=14) pd_d[f'ema_{ema_period}'] = TA.EMA(pd_d, period=ema_period) pd_d.to_csv(f'{save_dir}/{instrument.lower()}_d.csv') logger.info(f'output feeds complete for [{instrument}]!') return pd_d