Вы здесь

Как утроить доходность биткоина, используя для этого математику, алгоритмы и Python

С помощью алгоритма «золотой линии» я делаю ценовые прогнозы для Bitcoin, Ripple, Ethereum и Dogecoin. В эту статью я закину полный код на языке Python.

Как утроить доходность биткоина, используя для этого математику, алгоритмы и Python

Эта статья будет немного отличаться от того, что я обычно пишу. Те, кто давно следит за мной на Medium или Youtube, уже знакомы с моими прогнозами.

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

Прежде чем мы начнем

В прошлый раз мы отрабатывали известный математический метод на S&P 500 (индекс фондовой биржи США) и выяснили, насколько точна и потрясающа теория линий Боллинджера, когда дело касается трейдинга на рынке США.

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

Однако после повторного тестирования я заметил, что вышеупомянутая теория Джона Боллинджера не совсем точна в отношении прогнозирования поведения криптовалют.

По этой причине и возник вирусный алгоритм «Золотой крест против Креста смерти».

Я тестировал его в течение нескольких недель, и вот к чему я пришел.

Прежде чем мы перейдем к скриптам кодирования для проведения «живого» теста, давайте немного уйдем в теорию и выясним, как выявляются торговые сигналы.

«Золотой крест» и «Крест смерти»

Люди с финансовым образованием знают, что индикаторы «Золотой крест» (графический паттерн, который представляет собой пересечение краткосрочной и долгосрочной скользящих средних снизу вверх) и «Крест смерти» (прямая противоположность золотого креста: данный чарт предполагает краткосрочную скользящую среднюю которая пересекает долгосрочную скользящую среднюю сверху вниз – прим.) являются производными от скользящих средних, также называемыми перекрестными индикаторами.

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

0_BU3r3RqslfgktiJf.png

В приведенной выше формуле n соответствует количеству используемых периодов.

Идея будет состоять в объединении двух скользящих средних (краткосрочной и долгосрочной), чтобы вывести криптовалютный тренд. Сигналы на покупку или продажу поступят, когда краткосрочная скользящая средняя превысит или повторит долгосрочную скользящую среднюю.

Говоря языком математики, если вы выберете краткосрочную скользящую среднюю с 5 периодами и долгосрочную скользящую среднюю с 20 периодами, мы получим сигнал на покупку, следуя приведенным ниже условиям:

1_44zh4yHfpEH80-WVoYgJoA.png

где MA(5) и MA(20) четко равны:

1_B3YLGIz2r8K7rgo-jT6GdA.png

1_aXy6UGKGpk5lXj_swO8Ddw.png

CPrice соответствует значению цены закрытия (на момент выхода статьи эта цена составляет 49 670 $ за биткоин), а t –определенный период времени. Дополнительные пояснения можно найти в обучающем видео в конце этой статьи.

Эти перекрестные индикаторы являются лишь частью уравнения, которое помогает определить глобальный тренд изучаемой криптовалюты. Эти ПИ (перекрестные индикаторы) обычно используются трейдерами и фондами по всему миру для определения уровней поддержки, сопротивления, стопов и целей, а также для понимания основного тренда.

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

Если вы хотите параллельно начать кодировать, вам необходимо заранее установить некоторые конфигурации и пакеты.

Кроме того, если вы слишком нетерпеливы и хотите знать, как быстро применить на практике эту стратегию, вы можете сразу перейти к просмотру видео в конце этой статьи. Я применяю эту стратегию вживую, и вы можете сами посмотреть на результат.

Я записал объяснение теории, кода и дал дополнительные советы по разработке. Вы можете применить эти знания дома самостоятельно.

Необходимые условия

Прежде всего, перед началом работы и для отслеживания процесса вам нужно установить на свой компьютер версию Python3 и следующие пакеты:

  • Pandas
  • NumPy
  • Yfinance
  • Plotly (Не обязательно, но пригодится для построения графиков)

Если какой-либо из этих пакетов еще не установлен, вы можете использовать команду pip, как показано ниже.

pip install yfinance
pip install plotly

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

Данные и моделирование

После подтверждение установки вышеуказанных пакетов мы можем перейти к обработке данных.
Модель данных будет включать в себя 3 отдельных этапа.

1_uFmnUy0W8PvGOjWNSHDzHA.png

Во-первых мы будем запрашивать данные об интересующей нас криптовалюте в реальном времени с помощью API Yahoo Finance.

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

В-третьих, мы вживую построим график и проверим, насколько точны наши сигналы.

В этой статье я не буду слишком сильно вдаваться в подробности касательно кода и API (для этого есть отдельная статья).

Python: Как получить данные о рынке в режиме реального времени (задержка менее 0,1 секунды).

Теперь, когда у нас есть четкий план для нашей модели, мы можем приступить к кодированию!

Если у вас уже был опыт работы с Python, вы можете перейти ко второму шагу. Первый шаг будет заключаться в импорте пакетов.

Шаг 1: Скачайте необходимые пакеты

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

Для импорта ранее установленных пакетов используйте следующие строки кода:

# Raw Package
import numpy as np
import pandas as pd
#Data Source
import yfinance as yf
#Data viz
import plotly.graph_objs as go

Это командные строки для импорта numpy, pandas, finance и plotly.

По завершении этого шага можно переходить к следующему.

Теперь, когда библиотеки загружены, мы можем импортировать данные о нашей криптовалюте.

Шаг 2: Запросите актуальные рыночные данные

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

Вариантов криптовалют может быть больше, также как и фиатных валют.

Например, если вы приехали из Индии или Канады, вы можете использовать INR или CAD (они обе подойдут); ну или если вам понадобятся данные о Ripple или Ethereum.

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

А теперь давайте вернемся к нашей структуре API.

Yahoo Finance API потребуется три обязательных параметра в указанном ниже порядке:

  • Tickers (1) Тикеры (1)
  • Start date + End date or Period (2) Дата начала + Дата окончания, или Период (2)
  • Interval (3) Интервал (3)

В нашем случае тикером (параметр 1) будет пара BTC-USD. Также для этого примера мы в качестве периода выберем 7 последних дней (параметр 2) и установим интервал (параметр 3) в 90 минут.

Чтобы вызвать необходимые вам данные, вам придется использовать следующую конструкцию:

0_O9y7mtaqTFXPp2zg.png

Выше описана структура для получения интересующих нас данных.

Прежде чем продолжить, я немного подробнее расскажу о третьем параметре (интервале).

Быстрый поиск возможных интервалов

Я приведу для вас краткий обзор различных вариантов интервалов, которые вы можете настроить с помощью Yahoo Finance API.

Ниже приведен полный список возможных интервалов, которые могут потребоваться:

0_aG-4bjqG-MHCvmz-.png

Выше перечислены интервалы, которые можно выбрать.

Теперь, когда мы задали все три параметра, давайте выполним запрос и проверим выходные данные:

data = yf.download(tickers='BTC-USD',period = '8d', interval = '90m')

С помощи вышеуказанной строки мы запросим BTC-USD для API Yahoo Finance.

А вот выходные данные, которые вы должны получить:

1_uxIfdaLu8BIfLqlWYm5fWQ.png

Выходные данные о рынке с интервалом в 90 минут

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

Если вам нужна более подробная информация, вы можете перейти по ссылке.

Шаг 3. Разверните свой алгоритм

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

Нам нужно будет вычислить следующие поля:

  • MA(5)
  • MA(20)

Для этого мы будем использовать функцию rolling, встроенную в Python, чтобы получить среднее значение n последних периодов. Что касается MA(5), то мы будем применять нашу стратегию в течение 5 последних 90 минут. Это означает, что мы рассчитаем среднюю цену закрытия за последние 7 часов и 30 минут (5 раз по 90 минут).

1_B3YLGIz2r8K7rgo-jT6GdA.png

Для MA(20) мы также будем использовать функцию rolling, но вместо вычисления 5 последних 90-минутных периодов мы рассчитаем среднее значение 20 последних периодов.

А теперь давайте опишем это на языке Python:

#Moving average using Python Rolling function
data['MA5'] = data['Close'].rolling(5).mean()
data['MA20'] = data['Close'].rolling(20).mean()

Строка выше использует функцию Python rolling для получения скользящей средней.

Приведенный выше код после выполнения создаст 2 новых столбца для вашего фрейма данных, как показано ниже:

1_X0DhztcTmIEjxnSDcKvhYg.png

Теперь, когда вы определили нужные вам диапазоны, должно появиться 2 дополнительных столбца.

Вот теперь мы можем развернуть свою стратегию и протестировать ее.

Постройте живой график

Последнее, что мы должны сделать, это создать график данных и проверить, можем ли мы предсказать поведение рынка. Я записал эту часть в видео ниже:

Это видео представляет собой пошаговое руководство по кодированию стратегии Золотого Креста.

Вуаля! Мы сделали это.

Если вы не можете запустить видео, посмотрите конечный результат и внимательно прочтите мои комментарии. Вот пример того, что вы должны получить в конечном счете.

На графике ниже я выделил зеленым цветом благоприятный прогноз, а черным - неблагоприятный.

1_nEo8kZOnHqFvYPASWCWGJw.png

Предположительные выходные данные с сигналами на покупку и продажу

Кроме того, я загрузил полный скрипт на Python, описанный в видео выше, и теперь вы можете использовать его дома:

# Raw Package
import numpy as np
import pandas as pd
#Data Source
import yfinance as yf
#Data viz
import plotly.graph_objs as go
#Importing market data
data = yf.download(tickers='BTC-USD',period = '8d', interval = '90m')
#Adding Moving average calculated field
data['MA5'] = data['Close'].rolling(5).mean()
data['MA20'] = data['Close'].rolling(20).mean()
#declare figure
fig = go.Figure()
#Candlestick
fig.add_trace(go.Candlestick(x=data.index,
                open=data['Open'],
                high=data['High'],
                low=data['Low'],
                close=data['Close'], name = 'market data'))
#Add Moving average on the graph
fig.add_trace(go.Scatter(x=data.index, y= data['MA20'],line=dict(color='blue', width=1.5), name = 'Long Term MA'))
fig.add_trace(go.Scatter(x=data.index, y= data['MA5'],line=dict(color='orange', width=1.5), name = 'Short Term MA'))
#Updating X axis and graph
# X-Axes
fig.update_xaxes(
    rangeslider_visible=True,
    rangeselector=dict(
        buttons=list([
            dict(count=3, label="3d", step="days", stepmode="backward"),
            dict(count=5, label="5d", step="days", stepmode="backward"),
            dict(count=7, label="WTD", step="days", stepmode="todate"),
            dict(step="all")
        ])
    )
)
#Show
fig.show()

Финальные мысли

Даже если не все сделки удается сделать идеальными (иногда мы можем не вовремя входить или выходить из рынка), стратегия золотого креста оказалась полезной в плане увеличения прибыли в тот период, когда биткоин был стабильным.
Быстро сделав нужные расчеты и заплатив за проскальзывание ордера своему личному брокеру, мы бы получили доходность 7,1% за неделю, когда биткоин стабильно торговался на уровне 1,7% за тот же период.

Было очень интересно потестить концепцию сопротивления и поддержки вживую. Эту тему я очень часто обсуждаю со своими коллегами и друзьями, а апробирование ее на реальном примере еще более информативно.

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

Не стесняйтесь задавать вопросы. Я постараюсь на все ответить.

Спасибо за внимание.

Успехов в кодировании!

Саджид

Категория: 
Tutorial
1
Ваша оценка: Нет Средняя: 1 (1 оценка)
19920 / 0
Аватар пользователя Serg Demin
Публикацию добавил: Serg Demin
Дата публикации: чт, 05/20/2021 - 10:44

Что еще почитать: