Перейти к публикации
Форум ботоводов

Andrei22

Members
  • Публикации

    42
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    7

Последний раз Andrei22 выиграл 23 мая

Публикации Andrei22 были самыми популярными!

Репутация

8 Neutral

Посетители профиля

Блок посетителей профиля отключен и не будет отображаться другим пользователям

  1. Для начала по дружески ключи поменяй, а то вся страна их уже увидела )))
  2. Andrei22

    Бот для Yobit

    создай бат файл там же где лежит бот, например start.bat внутрь: @ECHO OFF TIMEOUT /T 30 MODE 120,20 title Yobit bot ))) setlocal set PYTHONPATH=./ python ./yobit_perc.py endlocal pause далее, ПКМ создать ярлык (ярлык это ссылка на этот бат файл) далее ПКМ на Пуск -> выполнить -> пишешь shell:startup (откроется папка автозагрузки) далее ПКМ на ярлык - > копировать -> вставить в папку автозагрузки звук проверь что диск с ))) и есть ли этот wave там: import winsound soundfile = "c:/Windows/Media/chimes.wav" winsound.PlaySound(soundfile, winsound.SND_FILENAME | winsound.SND_ASYNC)
  3. спс, что то не подумал в документацию по request заглянуть ))) А это точно так? status_code насколько я понял ошибки по протоколу http вернет типа (200, 304, 404, 500 и т.п.), а бинанс свои ошибки создает 429, -2013 (причем минус 2013), - 2011 и т.д А вот бинансные -2013, -2011 таким способом не увидеть?
  4. Делаю так: # Получаем по ордеру последнюю информацию по бирже stock_order_data = bot.orderInfo(symbol=orders_info[order]['order_pair'], orderId=order) # проверка запроса на предупреждение бана check = stock_order_data for i in check: if i == 'code': code_error = int(check["code"]) if code_error == 429: time.sleep(3) Интересует как убедиться что bot.orderInfo не возвращает 429. А еще лучше чтоб это прописать в файл binance.api ко всем запросам не обязательно orderinfo и там делать проверку, а в самом main файле уже не проверять.
  5. ))) Все равно Андрей у тебя не правильно, обрати внимание именно на каких цифрах не правильно считает в первом посту Попробуй print(adjust_to_step(0.58,0.01000000)) и вернет 0.57
  6. Трёхногий арбитраж ))) Я только в танках знаю трехногих раков ))) По сути:У Андрея тут в блогах уже готовые есть https://bablofil.ru/inner-arbitrage/ и это https://bablofil.ru/vnutrenniy-arbitraj-chast-2/
  7. Andrei22

    Частота запросов

    вебсокеты
  8. # Ф-ция, которая приводит любое число к числу, кратному шагу, указанному биржей # Если передать параметр increase=True то округление произойдет к следующему шагу def adjust_to_step(value, step, increase=False): return ((int(value * 100000000) - int(value * 100000000) % int( float(step) * 100000000)) / 100000000)+(float(step) if increase else 0) если пара BNBUSDT, ее CURR_LIMITS['filters'][2]['stepSize'] получит с биржи 0.01000000 если settings['amount'] дать цифру 0.58 (settings['amount']=0.58) quantity = adjust_to_step(settings['amount'], CURR_LIMITS['filters'][2]['stepSize']) quantity будет равна 0.57 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! пол дня голову ломал, решение нашел только такое: перед вызовом функции adjust_to_step сделать settings['amount'] = float(settings['amount'] + 0.00000001) а далее уже quantity = adjust_to_step(settings['amount'], CURR_LIMITS['filters'][2]['stepSize']) Проблемные цифры нашел только 0.57, 0.58, 1.13 ))) Та же проблема если округлять так: ticks = {} for filt in CURR_LIMITS['filters']: if filt['filterType'] == 'LOT_SIZE': ticks[pair] = filt['stepSize'].find('1') - 1 break quantity = settings['amount'] order_quantity = math.floor(quantity * 10 ** ticks[pair]) / float(10 ** ticks[pair]) *************************** settings['amount'] = float(settings['amount'] + 0.00000001) - спасает
  9. Я как бэктестер ))) Нашел одинаковое условие в 1.0.7 версии: if macd[-1] > macdsignal[-1] and macdhist[-1] > 0: # Линия макд выше сигнальной и на гистограмме они выше нуля Тут или комментарий неправильно написан или условие. Условие между and всегда одинаковое, когда линия макд больше сигнальной то гистограмма всегда больше 0. А если коммент написан как задумывалось то должно быть так: if macd[-1] > macdsignal[-1] and macd[-1] > 0 and macdsignal[-1] > 0:
  10. у меня так работает: local_time = int(time.time()) restart_time = local_time + 82800 # 23 часа (82800 сек) def on_message(ws, message): global restart_time if 'e' in socket_data: ....... if 's' in socket_data: ......... local_time = int(time.time()) if local_time > restart_time: print("время рестарта") time.sleep(30) local_time = int(time.time()) restart_time = local_time + 82800 def on_error(ws, error): print(error) def on_close(ws): print("### closed ###") def on_open(ws): print("### connected ###") if __name__ == "__main__": ws = websocket.WebSocketApp( "wss:............. on_message=on_message, on_error=on_error, on_close=on_close) ws.on_open = on_open while True: try: ws.run_forever() except: pass
  11. Что то новая залитая версия идентичная старой ) Уже сравнение сделал файлов и по размеру и содержимому. Не вижу что изменилось )))
  12. Напишу тут про синхронизацию ))) Все равно не работает синхронизация времени как написано в "Бот для бинанса с индикаторами". Я что то не до понимаю )) if __name__ == "__main__": sync_time(bot, log, False, limits) t1 = threading.Thread(target=main_flow) t2 = threading.Thread(target=sync_time, args=(bot, log, True, limits)) threads = [t1, t2] for t in threads: t.start() for t in threads: t.join() этот блок кода создаст второй поток и запустит функцию sync_time передав туда limits для определения серверного времени в функции же включится цикл и limits то ему передастся только один раз при включении !! Или я не прав? def sync_time(bot, log, pause, limits): while True: try: # Получаем ограничения торгов по всем парам с биржи local_time = int(time.time()) server_time = int(limits['serverTime']) // 1000 # Бесконечный цикл программы shift_seconds = server_time - local_time if local_time + shift_seconds != server_time: bot.set_shift_seconds(shift_seconds) получается что когда пройдет таймаут if pause: time.sleep(10000) цикл начнется заново, local_time возьмет через time.time(), а вот server_time то останется прежним !!! shift_second станет -10000 и условие ниже никогда не выполнится. Голову сломал как второй поток берет заново время биржи. 2 вопроса: Может где то в main потоке надо как то передавать повторно в поток 2 limits? Или в функции где if pause после time.sleep брать новый limits?
  13. Andrei22

    Стакан Бинанса

    Спасибо Андрей, я не дождался ответа и начал делать в пятый раз прям точь в точь дословно как написано в инструкции, теперь я убедился что там каждое слово важно и его последовательность ))). Делать буфер стал словарем в словаре где ключ это номер события {1:{msg....}}, {2:{msg....}}.. так я смог удалять и не принимать не нужные u. Проблема не описаннная в пункте 6, если интернет пропадет/зависнет или счетчик u не тот прилетит или собьется то больше обновляться не будет, пришлось отлавливать очередность u и снимать слепок заново если что ))
  14. Биржа то какая? На бинансе вроде нет состояния выполнен/не выполнен https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md
×
×
  • Создать...