def main(coin_name: str, mm1_name: str, mm2_name: str): Global.configure_default_root_logging(should_log_to_file=False, log_level=logging.INFO) SharedMongoClient.initialize(should_use_localhost_db=False) start_time = Global.convert_local_datetime_to_epoch("2018.08.20 09:00:00", timezone="kr") end_time = Global.convert_local_datetime_to_epoch("2018.08.20 13:00:00", timezone="kr") iyo_config = Global.read_iyo_setting_config(coin_name) # set settings // fix manually if you need to 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"]) ibo_result = InitialBalanceOptimizer.run(settings, bal_factor_settings) print(ibo_result)
def main(target_currency: str, mm1_name: str, mm2_name: str, st_local: str, et_local: str): Global.configure_default_root_logging(should_log_to_file=False) SharedMongoClient.initialize(should_use_localhost_db=False) start_time = Global.convert_local_datetime_to_epoch(st_local, timezone="kr") end_time = Global.convert_local_datetime_to_epoch(et_local, timezone="kr") mm1_taker_fee = Global.read_market_fee(mm1_name, True) mm1_maker_fee = Global.read_market_fee(mm1_name, False) mm2_taker_fee = Global.read_market_fee(mm2_name, True) mm2_maker_fee = Global.read_market_fee(mm2_name, False) mm1_market = getattr(Market, "VIRTUAL_%s" % mm1_name.upper()) mm2_market = getattr(Market, "VIRTUAL_%s" % mm2_name.upper()) bal_setting = { 'mm1': { 'krw_balance': 0, 'coin_balance': 0.04475666666666667 }, 'mm2': { 'krw_balance': 333333.3333333333, 'coin_balance': 0.0 } } initial_setting_dict = { 'max_trading_coin': 0.005, 'min_trading_coin': 0, 'new': { 'threshold': 0, 'factor': 1 }, 'rev': { 'threshold': 0, 'factor': 1 } } mm1 = VirtualMarketManager(mm1_market, mm1_taker_fee, mm1_maker_fee, bal_setting["mm1"]["krw_balance"], bal_setting["mm1"]["coin_balance"], target_currency, True) mm2 = VirtualMarketManager(mm2_market, mm2_taker_fee, mm2_maker_fee, bal_setting["mm2"]["krw_balance"], bal_setting["mm2"]["coin_balance"], target_currency, True) mm1_col = SharedMongoClient.get_target_col(mm1_market, target_currency) mm2_col = SharedMongoClient.get_target_col(mm2_market, target_currency) mm1_data_cursor, mm2_data_cursor = SharedMongoClient.get_data_from_db( mm1_col, mm2_col, start_time, end_time) RfabBacktester(mm1, mm2, target_currency).run(mm1_data_cursor, mm2_data_cursor, initial_setting_dict, is_running_in_optimizer=False)
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 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 get_publish_epoch_date_set(self): pub_local_date_set \ = [datetime.combine(date.today(), datetime.strptime(pub_time, "%H:%M:%S").time()).strftime("%Y.%m.%d %H:%M:%S %z") for pub_time in self.publishing_time_set] return [ Global.convert_local_datetime_to_epoch(str(pub_local_date), timezone="kr") for pub_local_date in pub_local_date_set ]
import logging from config.global_conf import Global from config.shared_mongo_client import SharedMongoClient from optimizer.integrated_yield_optimizer import IYOStatAppender Global.configure_default_root_logging(should_log_to_file=False, log_level=logging.INFO) SharedMongoClient.initialize(should_use_localhost_db=True) start_time = Global.convert_local_datetime_to_epoch("2018.07.24 11:00:00", timezone="kr") end_time = Global.convert_local_datetime_to_epoch("2018.07.24 12:00:00", timezone="kr") db_client = SharedMongoClient.instance() iyo_col = db_client["statistics"]["iyo"] iyo_cur = iyo_col.find({ "settings.start_time": { "$gte": start_time, "$lte": end_time}}).sort([("start_time", 1)]) for iyo_data in iyo_cur: logging.critical("Now starting: %s" % Global.convert_epoch_to_local_datetime(iyo_data["settings"]["start_time"])) stat_result = IYOStatAppender.run(iyo_data=iyo_data) # append this stat dict to the current IYO_data db_client["statistics"]["iyo"].update( {'_id': iyo_data['_id']}, { '$set': { 'stat': stat_result }}, upsert=False, multi=False) logging.critical("Appended Stat result to target IYO_data at MongoDB")
from config.global_conf import Global from collector.db_to_csv import DbToCsv db_to_csv = DbToCsv(False) start_time = Global.convert_local_datetime_to_epoch("2018.05.21 09:00:00", timezone="kr") end_time = Global.convert_local_datetime_to_epoch("2018.05.22 09:00:00", timezone="kr") """Get Orderbook""" # db_to_csv.save_processed_info("coinone", "eth", start_time, end_time) # db_to_csv.save_processed_info("korbit", "eth", start_time, end_time) """Get Ticker""" # db_to_csv.save_ticker_as_csv("coinone", "eth", start_time, end_time) # db_to_csv.save_ticker_as_csv("korbit", "eth", start_time, end_time) """Get VWAP mid price""" # db_to_csv.save_mid_vwap_mid_price("coinone", "eth", start_time, end_time, 5) # db_to_csv.save_mid_vwap_mid_price("korbit", "eth", start_time, end_time, 5) """Get filled orders""" # db_to_csv.save_filled_orders_as_csv("coinone", "eth", start_time, end_time) # db_to_csv.save_filled_orders_as_csv("korbit", "eth", start_time * 1000, end_time * 1000) """Get Orderbook with indexed price & amount""" # db_to_csv.save_orderbook_index("coinone", "eth", start_time, end_time, 5) # db_to_csv.save_orderbook_index("korbit", "eth", start_time * 1000, end_time * 1000, 5) """Get OTS infos from MongoDB assumming all spreads that are 'gte 0' be traded""" db_to_csv.rfab2_ots_to_csv("coinone", "gopax", 0.001, 0.00075, "bch", start_time, end_time, 3)
def main(coin_name: str, init_time: str, final_time: str): Global.configure_default_root_logging(should_log_to_file=False, log_level=logging.INFO) SharedMongoClient.initialize(should_use_localhost_db=False) db_client = SharedMongoClient.instance() time_list = make_time_list(init_time, final_time) prev_time = None for cur_time in time_list: if prev_time is None: prev_time = cur_time continue logging.warning("Nohup conducting -> start_time: %s, end_time: %s" % (prev_time, cur_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(prev_time, timezone="kr") end_time = Global.convert_local_datetime_to_epoch(cur_time, timezone="kr") # draw iyo_config for bal & factor_setting iyo_config = Global.read_iyo_setting_config(coin_name) # FIXME: 빗썸 등등 거래소 생긴 날부터는 밑에 주석 쓰기 # rfab_combi_list = Global.get_rfab_combination_list(coin_name) rfab_combi_list = list(it.combinations(["okcoin", "coinnest"], 2)) for _combi in rfab_combi_list: logging.critical( "[%s-%s-%s] IYO conducting -> start_time: %s, end_time: %s" % (coin_name.upper(), str(_combi[0]).upper(), str( _combi[1]).upper(), start_time, end_time)) # set settings, bal_fact_settings, factor_settings settings = TradeSettingConfig.get_settings( mm1_name=_combi[0], mm2_name=_combi[1], 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( _combi[0], _combi[1], 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) # finally save to mongoDB if len(iyo_result) > 0: db_client["statistics"]["iyo"].insert_many(iyo_result) else: logging.critical( "There was no oppty!! Skipping to next combination!") continue logging.warning("Nohup done, now conducting next time set!!") prev_time = cur_time
from config.global_conf import Global from config.shared_mongo_client import SharedMongoClient from temp.arbbot_ideas.stat_arb_bot import StatArbBot import logging Global.configure_default_root_logging(log_level=logging.CRITICAL, should_log_to_file=True) # SharedMongoClient.COINONE_DB_NAME = "coinone_180402" # SharedMongoClient.KORBIT_DB_NAME = "korbit_180402" SharedMongoClient.KORBIT_DB_NAME = "korbit" SharedMongoClient.COINONE_DB_NAME = "coinone" SharedMongoClient.initialize(should_use_localhost_db=False) # start_time = Global.convert_local_datetime_to_epoch("2018.03.25 00:00:00", timezone="kr") # end_time = Global.convert_local_datetime_to_epoch("2018.03.30 00:00:00", timezone="kr") start_time = Global.convert_local_datetime_to_epoch("2018.04.06 10:00:00", timezone="kr") end_time = Global.convert_local_datetime_to_epoch("2018.04.06 22:00:00", timezone="kr") COIN_UNIT = (0.1,) TARGET_SPREAD_STACK_HOUR = (18, 21, 24, 27) Z_SCORE_SIGMA_PROB = (0.9,) for coin_unit in COIN_UNIT: for stack_hour in TARGET_SPREAD_STACK_HOUR: for z_prob in Z_SCORE_SIGMA_PROB: logging.critical("------------------------------------------------------") logging.critical("coin unit: %.2f, stack_hour: %d, z_score: %d%%" % (coin_unit, stack_hour, z_prob * 100)) StatArbBot.COIN_TRADING_UNIT = coin_unit StatArbBot.TARGET_SPREAD_STACK_HOUR = stack_hour StatArbBot.Z_SCORE_SIGMA = Global.get_z_score_for_probability(z_prob) StatArbBot(should_db_logging=False, is_backtesting=True, start_time=start_time, end_time=end_time).run()
import logging from config.shared_mongo_client import SharedMongoClient from config.db_fixer import DbFixer from config.global_conf import Global Global.configure_default_root_logging(should_log_to_file=False, log_level=logging.INFO) SharedMongoClient.initialize(should_use_localhost_db=False) start_time = Global.convert_local_datetime_to_epoch("2018.09.08 12:00:00", timezone="kr") end_time = Global.convert_local_datetime_to_epoch("2018.09.09 01:10:00", timezone="kr") DbFixer.add_missing_item_with_plain_copy_prev("bithumb", "xrp_orderbook", "okcoin", "xrp_orderbook", start_time, end_time) # DbFixer.fill_empty_orderbook_entry("bithumb", "xrp_orderbook", start_time, end_time) # DbFixer.update_rq_diff_by_control_db("coinone", "bch_orderbook", "gopax", "bch_orderbook", # start_time, end_time) """IYO 돌릴때 사용하는 것들""" # DbFixer.check_empty_data_by_rq_time("okcoin", "xrp_orderbook", start_time, end_time) # DbFixer.match_request_time_in_orderbook_entry("bithumb", "okcoin", "xrp_orderbook", start_time, end_time)
from collector.rfab_ledger_to_xlsx import RFABLedgerXLSX from config.global_conf import Global from config.shared_mongo_client import SharedMongoClient SharedMongoClient.initialize(should_use_localhost_db=False) start_time = Global.convert_local_datetime_to_epoch("2018.10.06 14:00:00", timezone="kr") end_time = Global.convert_local_datetime_to_epoch("2018.10.06 18:45:00", timezone="kr") RFABLedgerXLSX("eos", "coinone", "gopax", start_time, end_time, is_test=False).run()