Как стать автором
Обновить

Комментарии 30

Судя по комментам в коде, его писал chatGPT =)

Код от начала и до конца (и даже все комментарии) написаны мной лично

    # if current candlestick closed
    if datetime.now().minute % 5 == 0:
        # get latest price for the symbol
        latest_price = client.futures_symbol_ticker(symbol=symbol)['price']
        latest_price = float(latest_price)
        prices.append(latest_price)

Вот это условие будет в течение 60 секунд добавлять цены в массив и запрашивать клиентский API, и еще, нужно проверять не текущее время суток, а время изменения цены, иначе, предположим, если рынок "замрет" на час, массив будет наполнен протухшими ценами

Да, Вы абсолютно правы, сейчас исправлю. Пытался упростить код, но допустил глупую ошибку :)

UPD: исправлено, спасибо за Ваше замечание!

лучше запрашивать готовые чарты, очень много мелочей нужно учитывать, например, бар может открыться с опозданием на несколько минут, или на несколько минут раньше закрыться, или вообще может быть пропуск бара.
более правильный подход - запросить снапшот баров, подписаться на асинхронные обновления и дополнять снапшот, тогда у вас будет всегда актуальный набор данных

Да, это правда, это можно сделать с помощью функции Klines, описанной в первой части статьи, однако Binance (по крайней мере по моему опыту) крайне редко ломает свечи

Судя по стилю речи этот комментарий писал chatGPT =)

У вас очень много бесполезного дублирования кода.

'%Y-%m-%d %H:%M'

Прекрасно выносится в константы. Это удобно, расположено в одном месте.

prices[-2] < bollinger_band_high_values[-2] and prices[-1] > bollinger_band_high_values[-1]

Вот эти чудовища с индексами. Получите их один раз из своих контейнеров перед условиями. Аналогично со вторыми с конца.

Четыре функции вверху, которых на самом деле одна с разными параметрами. Ну или две. Исследуйте partial из functools или просто тупо через равно уберите дублирование кода :)

Я не очень вникал в предметную область, но недостаточно ли собирать за одну итерацию цикла текущее время? :)


Так же, ваш код не готов к ошибкам. Что будет если binance приляжет на секунду или запрос от вашего client будет неудачным? Наверняка будет выброшено исключение, которые остановит эту программу. И ее придется запустить заново ручками.

В тексте указано, что для простоты функции дублированы, поскольку открыть шорт и закрыть лонг для рынка фьючерсов -- это одно и то же (на этот счет даже написан комментарий, возможно, в первой части статьи). В то же время обработка всех исключений и ошибок сделает код более объемным и трудным для понимания. Задача сделать код оптимальным по количеству символов также не стояла :) Зато, надеюсь, некоторые дублирования помогут читателю лучше понять суть алгоритма

Ну помогут. Его будут тупо копировать :)

А зачем, если бинанс не для россии?

В целом, биржи используют очень похожие API, поэтому перепрофилировать код для работы с другой биржей не должно быть очень сложно :)

Профилирование -- это про другое ;) от вашего кода была бы польза, если бы алгоритм этот был отделен от всей мишуры. Вот это был бы прорыв, самолёты бы начали строить быстрее и все такое :) а сейчас...

Смотря, в чем измерять)

В дополнительных манях в месяц)

Красота торговых роботов в том, что они предоставляют безграничный простор для творчества, поэтому успех алгоритма зависит от Вас :)

Автоматизированная рулетка.

Я не очень сообразителен, поэтому мне в своё время понадобилось что-то около недели знакомства с предметом, чтобы понять, что весь этот "технический анализ" - это попытка увидеть будущее, основываясь на графиках прошлого. Причем ладно бы был известен список факторов, влияющих на результат, и их можно было бы как-то мониторить, но там результат зависит от буквально всего. Лично я бы предпочёл иметь в друзьях не самого крутого "технического аналитика", а любимого сыночку верхних работников ЦБ. В первом случае ты пытаешься угадать будущее, во втором - ты его знаешь.

Вы во многом правы) Технический анализ -- это действительно "предсказание" будущего на основе некоторых статистик из прошлого (в нашем случае -- скользящего среднего и отклонения). Весь технический анализ держится примерно на том, что рынок ведет себя "согласно некоторому паттерну", который и может описываться правилами технического анализа. И иногда это правда, поскольку, если углубиться в теорию случайных процессов, первое что Вы увидите -- это (скорее всего), что цена актива (P_t) не стационарный процесс, а значит не имеет свойства "отката" (mean-reverting property). Однако локально (на этом и держится тех анализ), возможно, это и имеет место быть...
Но, на моем опыте, техническому анализу очень мешают всплески волатильности (и резкие движения (скачки) цены), которые ведут к значительным потерям. По поводу предсказания всплесков волатильности можете посмотреть мой репозиторий с моделью)
https://github.com/AlexanderShulzhenko/Short-term-Volatility-Prediction

Репориторий с любой прекрасной моделью не говорит ни о чем. Значение имеет только одно - насколько он лучше рынка по прибыли.

Так я и не утверждал ничего с помощью репозитория. Единственный посыл был в том, что "вот можно пытаться предсказывать всплески волатильности с помощью каких-то признаков"

Технический анализ — это как производство вакцин по гороскопам клеток (китайского хомячка), на которых их производят. Давайте так. Либо строим МТС на основании понятных эффектов, стоящих на неэффективностях цен, либо строим некоторый ML-пайплайн, с определённой достоверностью извлекающий эти незффективности. Оба подхода рабочие, и продолжат ими оставаться. Ни пересечение MA, ни чистый Боллинджер, не являются продуктивными идеями, приносящими прибыль на практически любом известном инструменте. Это глупый фольклор. Разве что в бытность FTX это могло бы работать, когда там воротили они такие потоки, что грех было бы не торговать против них. С другой стороны, Z-преобразование (ассоциировано с полосами Болинджера, хотя конечно Z-преобразование — это ко временам Гаусса, когда оно так ещё не называлось), безусловно, является рабочей лошадкой многих МТС-сборок (не люблю я их называть роботами, это наименование бесперспективно испорчено рынком псвевдо mt-роботов).

Не могу не согласиться полностью, назвав это до кучи гаданием на кофейной гуще. Не в смысле примененной теории, а в смысле конечного результата.

Уверен, что большинство проф.трейдеров имеют все эти анализы нв 10 порядков круче, глубже и ширше, но где-то читал про исследование о том, что половина проф.трейдеров имеют итоговый процент роста их фондов меньше среднего по рынку (брать случайные акции или по индексу) - что и должно быть - если кто-то выигрывает, то только за счёт того, что кто-то проигрывает.

Так вся биржевая торговля - игра с нулевой суммой. Особенно - бинарные опционы, их в части европейских государств признали просто азартной игрой. Все пытаются именно что выиграть у остальных. При этом тратя кучу ресурсов на, фактически, перераспределенние ресурсов. Меня в том числе и это оттолкнуло от всей биржевой торговли, потому что никакой пользы обществу ты не приносишь этой деятельностью. Да и себе тоже, по большому счёту. Стал богаче (конкретно ты - ой, вряд ли), отобрав у другого такого же лудомана. Просто жажда наживы и всё. Поэтому вокруг этой темы куча инфоцыган, у которых в ЦА, судя по картинкам и текстам в ТГ, аудитория подросткового и чуть выше возраста, так как истории успешного успеха у каждого второго на фото - "с пачками деняк в салоне бэхи". Для лудоманов постарше предлагают Баффета, сдабривая это книжками тех единиц, которые пришли к успеху. Те сотни и тысячи, чьи деньги успешным единицам перетекли в результате "торговли", увы, книг не написали.

Чисто технически вся эта "торговля" - задача интересная, к тому же азарт наживы подогревает интерес. Но лично я, узнав про суть всей движухи, по этическим причинам заниматься этой гадостью не буду. Для меня деньги "пахнут". Потому я неконкурентоспособный и сознательно выбрал проигрыш в эволюционной борьбе.

А почему бы не использовать talib для вычисления тех же полос боллинджера? Одна строчка и готово

Спасибо что упомянули talib, хотел написать об этой библиотеке в следующей части. Конечно, можно использовать talib для простоты, однако, я хотел показать именно техническую сторону вычисления индикаторов

А как этот API решает вопросы контроля? В коде есть магические команды, типа: client.futures_create_order

Но, это же деньги. Значит контроль должен быть. И по своему опыту, говоря о любых скриптах такого рода, первое о чем надо говорить - это не стратегии, а том как это все заставить работать постоянно, с восстановлением состояния после падений, контролем исполнения команд и т.д. И это будет большая часть кода. Но постоянно вижу скрипты где этот вопрос вообще не разбирается, а есть только алгоритмы принятия решений. Хотя они по большей части бессмысленны.

Александр, вопрос про moving average crossover. Я сейчас хочу реализовать эту стратегию у себя для учебных целей. У вас описаны в ней только условия входа в лонг и шорт. А условий выхода нет. Не могли бы добавить или дать референс где описаны все 4 кейса?

Здравствуйте! Стратегия в классическом виде неплохо описана тут: https://www.researchgate.net/publication/370888513_Simple_Moving_Average_SMA_Crossover_Strategy_with_Buy_Sell_Indicator

Если вкратце, то есть две версии стратегии: "trend following" и "reversed". Они абсолютно зеркальны. Если мы говорим о "trend following" стратегии, то обычно:
1) открывают шорт, когда короткая скользящая средняя пересекает длинную сверху вниз;
2) закрывают шорт и открывают лонг когда короткая скользящая средняя пересекает длинную снизу вверх;
3) закрывают лонг, соответсвенно, когда открывается шорт (когда короткая скользящая средняя пересекает длинную сверху вниз).

То есть момент закрытия одной позиции совпадает с открытием противоположной.
(Reversed стратегия меняет местами шорт и лонг.)

Боже, какой мрак. Сколько лет вижу, а одно и то же. И в 2098 году студенты богами забытых университетов в странах третьего мира будут продолжать писать всякие глупости. Всегда постфактум можно подобрать хорошие параметры. Так подбери их до ?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории