def main(coin_name: str, mm1_name: str, mm2_name: str, start_time: str, end_time: str, slicing_interval: int): Global.configure_default_root_logging(should_log_to_file=False, log_level=logging.INFO) SharedMongoClient.initialize(should_use_localhost_db=False) logging.warning("Nohup conducting -> start_time: %s, end_time: %s" % (start_time, end_time)) # Global.send_to_slack_channel("IYO Initiated!! start_time: %s, end_time: %s" % (prev_time, cur_time)) start_time = Global.convert_local_datetime_to_epoch(start_time, timezone="kr") end_time = Global.convert_local_datetime_to_epoch(end_time, timezone="kr") # draw iyo_config for bal & factor_setting iyo_config = Global.read_sliced_iyo_setting_config(coin_name) logging.critical( "[%s-%s-%s] IYO conducting -> start_time: %s, end_time: %s" % (coin_name.upper(), mm1_name.upper(), mm2_name.upper(), start_time, end_time)) # set settings, bal_fact_settings, factor_settings settings = TradeSettingConfig.get_settings( mm1_name=mm1_name, mm2_name=mm2_name, target_currency=coin_name, start_time=start_time, end_time=end_time, division=iyo_config["division"], depth=iyo_config["depth"], consecution_time=iyo_config["consecution_time"], is_virtual_mm=True) bal_factor_settings = TradeSettingConfig.get_bal_fact_settings( iyo_config["krw_seq_end"], iyo_config["coin_seq_end"]) factor_settings = TradeSettingConfig.get_factor_settings( mm1_name, mm2_name, coin_name, iyo_config["max_trade_coin_end"], iyo_config["threshold_end"], iyo_config["appx_unit_coin_price"]) iyo_result = IntegratedYieldOptimizer.run( settings, bal_factor_settings, factor_settings, is_stat_appender=False, is_slicing_dur=True, slicing_interval=slicing_interval) logging.critical("Final IYO result: %s" % iyo_result) return iyo_result
def launch_oppty_sliced_iyo(self, anal_start_time: int, rewinded_time: int): st_local = Global.convert_epoch_to_local_datetime(rewinded_time, timezone="kr") et_local = Global.convert_epoch_to_local_datetime(anal_start_time, timezone="kr") logging.critical( "[%s-%s-%s] Sliced IYO conducting -> , start_time: %s, end_time: %s" % (self.target_currency.upper(), self.mm1_name.upper(), self.mm2_name.upper(), st_local, et_local)) # draw iyo_config for bal & factor_setting sliced_iyo_config = Global.read_sliced_iyo_setting_config( self.target_currency) # set settings, bal_fact_settings, factor_settings settings = TradeSettingConfig.get_settings( mm1_name=self.mm1_name, mm2_name=self.mm2_name, target_currency=self.target_currency, start_time=rewinded_time, end_time=anal_start_time, division=sliced_iyo_config["division"], depth=sliced_iyo_config["depth"], consecution_time=sliced_iyo_config["consecution_time"], is_virtual_mm=True) bal_factor_settings = TradeSettingConfig.get_bal_fact_settings( sliced_iyo_config["krw_seq_end"], sliced_iyo_config["coin_seq_end"]) factor_settings = TradeSettingConfig.get_factor_settings( self.mm1_name, self.mm2_name, self.target_currency, sliced_iyo_config["max_trade_coin_end"], sliced_iyo_config["threshold_end"], sliced_iyo_config["appx_unit_coin_price"]) try: slicied_iyo_result = IntegratedYieldOptimizer.run( settings, bal_factor_settings, factor_settings, is_stat_appender=False, is_slicing_dur=True, slicing_interval=sliced_iyo_config["slicing_interval"]) # FIXME: type error는 커서 에러때문에... except IndexError or TypeError: slicied_iyo_result = None return slicied_iyo_result
def run_iyo_by_sliced_oppty(coin_name: str, mm1_name: str, mm2_name: str, local_st: str, local_et): start_time = Global.convert_local_datetime_to_epoch(local_st, timezone="kr") end_time = Global.convert_local_datetime_to_epoch(local_et, timezone="kr") # draw iyo_config for bal & factor_setting sliced_iyo_config = Global.read_sliced_iyo_setting_config(coin_name) logging.critical( "[%s-%s-%s] Sliced IYO conducting -> start_time: %s, end_time: %s" % (coin_name.upper(), mm1_name.upper(), mm2_name.upper(), start_time, end_time)) # set settings, bal_fact_settings, factor_settings settings = TradeSettingConfig.get_settings( mm1_name=mm1_name, mm2_name=mm2_name, target_currency=coin_name, start_time=start_time, end_time=end_time, division=sliced_iyo_config["division"], depth=sliced_iyo_config["depth"], consecution_time=sliced_iyo_config["consecution_time"], is_virtual_mm=True) bal_factor_settings = TradeSettingConfig.get_bal_fact_settings( sliced_iyo_config["krw_seq_end"], sliced_iyo_config["coin_seq_end"]) factor_settings = TradeSettingConfig.get_factor_settings( mm1_name, mm2_name, coin_name, sliced_iyo_config["max_trade_coin_end"], sliced_iyo_config["threshold_end"], sliced_iyo_config["appx_unit_coin_price"]) sliced_iyo_list = IntegratedYieldOptimizer.run(settings, bal_factor_settings, factor_settings, is_stat_appender=False, is_slicing_dur=True) logging.critical("Final IYO result: %s" % sliced_iyo_list) return sliced_iyo_list, settings
def __init__(self, target_currency: str, mm1: MarketManager, mm2: MarketManager, is_initiation_mode: bool, is_trading_mode: bool): self.streamer_db = SharedMongoClient.get_streamer_db() self.is_initiation_mode = is_initiation_mode self.is_trading_mode = is_trading_mode self.ocat_final_result = None self.mm1 = mm1 self.mm2 = mm2 self.mm1_name = self.mm1.get_market_name().lower() self.mm2_name = self.mm2.get_market_name().lower() self.mm1_krw_bal = float(self.mm1.balance.get_available_coin("krw")) self.mm2_krw_bal = float(self.mm2.balance.get_available_coin("krw")) self.mm1_coin_bal = float( self.mm1.balance.get_available_coin(target_currency)) self.mm2_coin_bal = float( self.mm2.balance.get_available_coin(target_currency)) self.target_currency = target_currency self.slicing_interval = Global.read_sliced_iyo_setting_config( self.target_currency)["slicing_interval"] self.streamer_start_time = int(time.time()) self.init_s_iyo_rewined_time = int(self.streamer_start_time - self.INITIATION_REWEIND_TIME) self.trading_mode_start_time = None self.trading_mode_s_iyo_rewined_time = None self._settlement_time = None self.cur_exhaust_ctrl_stage = 0 self.init_exhaust_ctrl_currency_bal = None self.cur_exhaust_ctrl_currency_bal = None