Beispiel #1
0
from binance_api import Binance

bot = Binance(API_KEY='****', API_SECRET='****')

get_json = bot.futuresExchangeInfo()
key_sym = get_json['symbols']
symb_list = []
for i in key_sym:
    symb_list.append(i['symbol'])
# c = b[0]['symbol']\
symb_list.sort()


# список по буквам
def alphab_lists(letter):
    alph_list = []
    for i in symb_list:
        if i.startswith(letter):
            alph_list.append(i)
    return alph_list


# ticker list
def tickers_list(symb_list):
    get_json = bot.futuresExchangeInfo()
    key_sym = get_json['symbols']
    # symb_list = []
    for i in key_sym:
        symb_list.append(i['symbol'])
    symb_list.sort()
    return symb_list
Beispiel #2
0
def trade(init_settings: dict, file: str, bot: Binance, number: int):
    """Запускаем процесс трейлинга (по сути торгов) с заданными параметрами"""

    multiplier = -1 if init_settings['strategy'] == "Long" else 1

    # Получаем настройки пар с биржи
    symbols = bot.futuresExchangeInfo()['symbols']
    step_sizes = {symbol['symbol']: symbol for symbol in symbols}
    for symbol in symbols:
        for f in symbol['filters']:
            if f['filterType'] == 'LOT_SIZE':
                step_sizes[symbol['symbol']] = float(f['stepSize'])

    start_rate_bid, start_rate_ask = rates_market_info(init_settings, bot)

    timer = set_timer(init_settings['working_time'])

    while timer > datetime.now():
        try:
            bid, ask = rates_market_info(init_settings, bot)

            # Если играем на повышение, то ориентируемся на цены, по которым продают, иначе на цены, по которым покупают
            curr_rate = bid if init_settings['strategy'] == "Long" else ask

            # Если цена больше или равна установленному шагу и обратная сделка в процессе, доливаем с указанным
            # коэффициентом
            if init_settings['refund_flag'] and curr_rate >= init_settings['start_rate'] + \
                    (init_settings['start_rate'] * init_settings['grid_step'] / 100):
                init_settings['amount'], init_settings['start_rate'] = \
                    grid_step_set(init_settings['amount'], init_settings['coefficient'],
                                  init_settings['start_rate'], init_settings['grid_step'])

            if init_settings['stop_loss_fixed'] == 0:
                init_settings['stop_loss_fixed'] = (curr_rate / 100) * (
                    init_settings['stop_loss_perc'] * multiplier + 100)

            logging.info(
                f"Bot#{number}: Текущие курсы {init_settings['symbol']} bid {bid:0.8f}, ask {ask:0.8f}, выбрана {curr_rate:0.8f} "
                f"stop_loss {init_settings['stop_loss_fixed']:0.8f}")

            # Считаем, каким был бы stop-loss, если применить к нему %
            curr_rate_applied = (curr_rate / 100) * (
                init_settings['stop_loss_perc'] * multiplier + 100)

            if init_settings['strategy'] == "Long":
                # Выбрана стратегия Long, пытаемся продать монеты как можно выгоднее
                write_to_file(file, f"{curr_rate:0.8f}",
                              f"{init_settings['stop_loss_fixed']:0.8f}")
                if curr_rate > init_settings['stop_loss_fixed']:
                    logging.info(
                        f"Bot#{number}: Текущая цена выше цены Stop-Loss")
                    if curr_rate_applied > init_settings['stop_loss_fixed']:
                        logging.info(
                            f"Bot#{number}: Пора изменять stop-loss, новое значение {curr_rate_applied:0.8f}"
                        )
                        init_settings['stop_loss_fixed'] = curr_rate_applied
                else:
                    # Текущая цена ниже или равна stop loss, продажа по рынку
                    profit_check = start_rate_bid - curr_rate - (curr_rate *
                                                                 0.0002)
                    if profit_check > 0 or (profit_check <= 0 and
                                            init_settings['no_profit_flag']):
                        res = create_order("SELL", init_settings, bot)
                        logging.info(
                            f'Bot#{number}: Результат создания ордера', res)
                        if 'orderId' in res:
                            # Создание ордера прошло успешно, выход
                            logging.info(
                                f"Bot#{number}: Сделка по паре {res['symbol']} {init_settings['strategy']} "
                                f"успешно закрыта по цене {res['price']}")
                            init_settings['count_fails'] = 0
                            break
                    else:
                        # Запускаем сделку в обратную сторону, согласно стратегии
                        init_settings, timer = refunding_try(
                            init_settings, curr_rate)

            else:
                write_to_file(file, f"{curr_rate:0.8f}",
                              f"{init_settings['stop_loss_fixed']:0.8f}")
                # Выбрана стратегия Short, пытаемся купить монеты как можно выгоднее
                if curr_rate < init_settings['stop_loss_fixed']:
                    logging.info(f"Bot#{number}: Текущая цена ниже stop-loss")
                    if curr_rate_applied < init_settings['stop_loss_fixed']:
                        logging.info(
                            f"Bot#{number}: Пора изменять stop-loss, новое значение {curr_rate_applied:0.8f}"
                        )
                        init_settings['stop_loss_fixed'] = curr_rate_applied
                else:
                    # Цена поднялась выше Stop-Loss, Покупка по рынку
                    quantity = math.floor(
                        (init_settings['amount'] / curr_rate) *
                        (1 / step_sizes[init_settings['symbol']])) / (
                            1 / step_sizes[init_settings['symbol']])
                    logging.info(
                        f"Bot#{number}: Цена поднялась выше Stop-Loss, Покупка по рынку, "
                        f"кол-во монет {quantity:0.8f}")
                    profit_check = start_rate_ask - curr_rate - (curr_rate *
                                                                 0.0002)
                    if profit_check > 0 or (profit_check <= 0 and
                                            init_settings['no_profit_flag']):
                        res = create_order("BUY", init_settings, bot)
                        logging.info(
                            f"Bot#{number}: Результат создания ордера", res)
                        if 'orderId' in res:
                            # Создание ордера прошло успешно, выход
                            logging.info(
                                f"Bot#{number}: Сделка по паре {res['symbol']} {init_settings['strategy']} "
                                f"успешно закрыта по цене {res['price']}")
                            init_settings['count_fails'] = 0
                            break
                    else:
                        # Запускаем сделку в обратную сторону, согласно стратегии
                        init_settings, timer = refunding_try(
                            init_settings, curr_rate)

        except Exception as e:
            logging.error(e)
        time.sleep(0.5)