Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
    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)
Exemple #4
0
    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()
Exemple #5
0
    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)
Exemple #6
0
    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
Exemple #7
0
    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
Exemple #8
0
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
Exemple #9
0
 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
Exemple #10
0
    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
Exemple #11
0
    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')