def __init__(self, capi, logger, storage, conf=None, **params): self.storage = storage self.capi = capi self.conf = conf self.logger = logger self.params = params #ввод параметров #параметры передаваемые при вызове функции имеют приоритет #перед параметрами заданными в файле конфигурации #имя стратегии self.name = Lib.set_param(self, key='name', default_value=self.name) #id сессии self.session_id = Lib.set_param(self, key='session_id', default_value='0') #время хранения данных тикера в сутках self.store_time = Lib.set_param(self, key='store_time', param_type='int', default_value='30') self.prefix = self.name
def __init__(self, capi, logger, storage, conf=None, **params): self.storage = storage self.capi = capi self.conf = conf self.logger = logger self.params = params #ввод параметров #параметры передаваемые при вызове функции имеют приоритет #перед параметрами заданными в файле конфигурации #с какой валютной парой работаем self.pair = Lib.set_param(self, key='pair', default_value='BTC_USD') #id сессии self.session_id = Lib.set_param(self, key='session_id', default_value='0') # имя стратегии self.name = Lib.set_param(self, key='name', default_value=self.session_id + '->' + self.name) self.prefix = capi.name + ' ' + self.name
def search_profit_chains_and_exchange(self): # максимальная длина цепочки max_chain_len = Lib.set_param(self, key='max_chain_len', default_value=4, param_type='int') # лимит использования средств для обмена limit = Lib.set_param(self, key='limit', default_value=10.0, param_type='float') # валюта на входе цепочки start_currency = Lib.set_param(self, key='start_currency', default_value='USD') # производить ли обмен do_exchange = Lib.set_param(self, key='do_exchange', default_value=0, param_type='int') # получаем текущий баланс по стартовой валюте current_balance = self.capi.balance(start_currency) # записываем изменения баланса в базу Lib.save_change_balance2(self, start_currency, current_balance) start_amount = min(limit, current_balance) try: chains = self.capi.search_exchains(start_currency, max_chain_len) except Exception, ex: self.logger.info('Error while search_exchains: %s' % ex) raise Exception('Error while search_exchains: %s' % ex)
def run(self): self.logger.info('-' * 40, self.prefix) self.logger.info('Run strategy %s' % self.name, self.prefix) #минимальный объем торгов криптовалюты min_volume = Lib.set_param(self, key='min_volume', default_value=10.0, param_type='float') profit_pairs = self.get_profit_pairs() pairs = self.select_pairs(profit_pairs, min_volume) self.logger.info( 'Pairs for trading: %s' % str(map(lambda e: e['pair'], pairs)), self.prefix) #pprint(pairs) # сохраняем балансы в базу для сбора статистики balance_usd = self.capi.balance_full_usd() if self.capi.name == 'poloniex': self.save_change_balance('USDT', balance_usd) else: self.save_change_balance('USD', balance_usd) for pair in pairs: flip = flip3.Strategy(self.capi, self.logger, self.storage, self.conf, pair=pair['pair']) flip.run()
def __init__(self, capi, logger, storage, conf=None, **params): self.storage = storage self.capi = capi self.conf = conf self.logger = logger self.params = params #ввод параметров #параметры передаваемые при вызове функции имеют приоритет #перед параметрами заданными в файле конфигурации #список валютных пар для работы self.pairs = Lib.set_param(self, key='pairs', default_value='BTC_USD') self.pairs = map(lambda s: s.strip(), self.pairs.split(',')) #минимальный профит при выставлении ордера не по верху стакана self.min_profit = Lib.set_param(self, key='min_profit', default_value=0.001, param_type='float') #id сессии self.session_id = Lib.set_param(self, key='session_id', default_value='0') # имя стратегии self.name = Lib.set_param(self, key='name', default_value=self.session_id + '->' + self.name) self.prefix = capi.name + ' ' + self.name # флаг остановки торгов self.stop_trade = Lib.set_param(self, key='stop_trade', default_value=0, param_type='int') #время жизни ордеров sell в часах self.sell_order_ttl = Lib.set_param(self, key='sell_order_ttl', default_value=8760, param_type='int') # лимиты для ордеров по каждой паре self.order_limits = Lib.set_param(self, key='order_limits', default_value=None) try: self.order_limits = json.loads(self.order_limits) self.pairs = self.order_limits.keys() except Exception, ex: self.logger.error('Error parse param "order_limits": %s' % ex, self.prefix)
def __init__(self, capi, logger, storage, conf=None, **params): self.storage = storage self.capi = capi self.conf = conf self.logger = logger self.params = params #ввод параметров #параметры передаваемые при вызове функции имеют приоритет #перед параметрами заданными в файле конфигурации #с какой валютной парой работаем self.pair = Lib.set_param(self, key='pair', default_value='BTC_USD') #имя стратегии self.name = Lib.set_param(self, key='name', default_value=self.name) #режим обмена self.mode = Lib.set_param(self, key='mode', default_value=0, param_type='int') #минимальный профит при выставлении ордера не по верху стакана self.min_profit = Lib.set_param(self, key='min_profit', default_value=0.005, param_type='float') #id сессии self.session_id = Lib.set_param(self, key='session_id', default_value='0') #лимит использования депозита по второй валюте в паре self.limit = Lib.set_param(self, key='limit', default_value=1000000000.0, param_type='float') self.prefix = capi.name + ' ' + self.name
def __init__(self, capi, logger, storage, conf=None, **params): self.storage = storage self.capi = capi self.conf = conf self.logger = logger self.params = params self.prefix = self.name #ввод параметров #id сессии self.session_id = Lib.set_param(self, key='session_id', default_value='0') self.order_limits = Lib.set_param(self, key='order_limits', default_value=None) try: self.order_limits = json.loads(self.order_limits) #pprint(self.order_limits) self.pairs = self.order_limits.keys() #pprint(self.pairs) except Exception, ex: print 'Error parse param "order_limits": %s' % ex
class Strategy: capi = None logger = None storage = None conf = None params = None pair = None name = 'unknown' mode = 0 session_id = 'default' min_profit = 0.005 limit = 1000000000.0 #префикс для логгера prefix = '' def __init__(self, capi, logger, storage, conf=None, **params): self.storage = storage self.capi = capi self.conf = conf self.logger = logger self.params = params self.prefix = self.name #ввод параметров #id сессии self.session_id = Lib.set_param(self, key='session_id', default_value='0') self.order_limits = Lib.set_param(self, key='order_limits', default_value=None) try: self.order_limits = json.loads(self.order_limits) #pprint(self.order_limits) self.pairs = self.order_limits.keys() #pprint(self.pairs) except Exception, ex: print 'Error parse param "order_limits": %s' % ex self.limits = Lib.set_param(self, key='limits', default_value=None) try: self.limits = json.loads(self.limits) #pprint(self.limits) except Exception, ex: print 'Error parse param "limits": %s' % ex
def run(self): #флаг что поиск цепочки и обмен нужно повторять в случае успешного поиска do_repeat = Lib.set_param(self, key='do_repeat', default_value=0, param_type='int') repeat = True while repeat: try: repeat = False result = self.search_profit_chains_and_exchange() except Exception, ex: self.logger.info( 'Error in search_profit_chains_and_exchange(): %s' % ex) break else: if result and do_repeat > 0: self.logger.info( 'Repeat search profit chains and exchange', self.prefix) repeat = True
def __init__(self, capi, logger, storage, conf=None, **params): self.storage = storage self.capi = capi self.conf = conf self.logger = logger self.params = params #ввод параметров #параметры передаваемые при вызове функции имеют приоритет #перед параметрами заданными в файле конфигурации #с какой валютной парой работаем self.pair = Lib.set_param(self, key='pair', default_value='BTC_USD') #минимальный профит при выставлении ордера не по верху стакана self.min_profit = Lib.set_param(self, key='min_profit', default_value=0.005, param_type='float') #id сессии self.session_id = Lib.set_param(self, key='session_id', default_value='0') # имя стратегии self.name = Lib.set_param(self, key='name', default_value=self.session_id + '->' + self.name) #лимит использования депозита по второй валюте в паре self.limit = Lib.set_param(self, key='limit', default_value=1000000000.0, param_type='float') #валюта которую нельзя выставлять на продажу (hold), может быть не одна self.hold_currency = Lib.set_param(self, key='hold_currency', default_value=None) if self.hold_currency is not None: self.hold_currency = map(lambda s: s.strip(), self.hold_currency.split(',')) self.prefix = capi.name + ' ' + self.name
def __init__(self, capi, logger, storage, conf=None, **params): self.storage = storage self.capi = capi self.conf = conf self.logger = logger self.params = params #ввод параметров #параметры передаваемые при вызове функции имеют приоритет #перед параметрами заданными в файле конфигурации #с какой валютной парой работаем self.pair = Lib.set_param(self, key='pair', default_value='BTC_USD') #имя стратегии self.name = Lib.set_param(self, key='name', default_value=self.name) #id сессии self.session_id = Lib.set_param(self, key='session_id', default_value='0') self.session_id += ('-' + self.pair) #лимит использования депозита self.limit = Lib.set_param(self, key='limit', default_value=1000000000.0, param_type='float') self.prefix = capi.name + ' ' + self.name #отступ цены вниз от верха стакана в процентах self.margin_down_percent = Lib.set_param(self, key='margin_down_percent', default_value=3, param_type='float') #объем ордеров от верха стакана в единицах второй валюты, после которого будем ставитить ордер self.margin_down_volume = Lib.set_param(self, key='margin_down_volume', default_value=10, param_type='float')