Type/to search
8
Follow
1364
Followers
Пример рисования MACD в версии Python
Discussions
Created 2020-02-27 19:18:17  Updated 2023-10-09 22:50:01
 0
 2982

img

Пример рисования MACD в версии Python

На самом деле, прежде чем создать этот пример кода, я нашел платформу количественной торговли Inventor Strategy Square: https://www.fmz.com/strategy/151972. Уже существует версия JavaScript примера отрисовки индикатора MACD. Однако в ответ на запросы пользователей была написана версия примера на языке Python, которая может служить справочным кодом при разработке и проектировании стратегий.

Код очень простой:

'''backtest start: 2020-01-28 00:00:00 end: 2020-02-26 00:00:00 period: 1d exchanges: [{"eid":"OKEX","currency":"BTC_USDT"}] ''' ChartCfg = { '__isStock': True, 'title': { 'text': 'Python画图' }, 'yAxis': [{ 'title': {'text': 'K线'}, 'style': {'color': '#4572A7'}, 'opposite': False }, { 'title': {'text': '指标轴'}, 'opposite': True }], 'series': [{ 'type': 'candlestick', 'name': '当前周期', 'id': 'primary', 'data': [] }, { 'type': 'line', 'id': 'dif', 'name': 'DIF', "yAxis" : 1, 'data': [] }, { 'type': 'line', 'id': 'dea', 'name': 'DEA', "yAxis" : 1, 'data': [] }, { 'type': 'line', 'id': 'macd', 'name': 'MACD', "yAxis" : 1, 'data': [] }] } def main(): global ChartCfg preTime = 0 chart = Chart(ChartCfg) chart.reset() while True: while True: r = _C(exchange.GetRecords) if len(r) > 50: break # 计算指标 macd = TA.MACD(r) LogStatus(_D(), len(r)) # 画图 for i in range(len(r)): if r[i]["Time"] == preTime: chart.add(0, [r[i]["Time"], r[i]["Open"], r[i]["High"], r[i]["Low"], r[i]["Close"]], -1) chart.add(1, [r[i]["Time"], macd[0][i]], -1) chart.add(2, [r[i]["Time"], macd[1][i]], -1) chart.add(3, [r[i]["Time"], macd[2][i]], -1) elif r[i]["Time"] > preTime: chart.add(0, [r[i]["Time"], r[i]["Open"], r[i]["High"], r[i]["Low"], r[i]["Close"]]) chart.add(1, [r[i]["Time"], macd[0][i]]) chart.add(2, [r[i]["Time"], macd[1][i]]) chart.add(3, [r[i]["Time"], macd[2][i]]) preTime = r[i]["Time"] Sleep(500)

Словарь конфигурации диаграмм ChartCfg

этотChartCfgПеременная словаря хранит информацию о конфигурации диаграммы, например:
Сколько линий на этом графике? (Три индикаторные линии, а именно DIF, DEA, MACD)
Есть ли на этом графике свечи? («тип»: «свеча» означает установку в качестве данных свечи)
Значения MACD относительно небольшие. Если торговая пара BTC_USDT, то при построении графика индикаторы будут сжиматься, что очень неудобно для чтения. Поэтому график необходимо настроить с двумя осями Y. (Таким образом, в «yAxis» есть две конфигурации оси Y: одна — ось индикатора, а другая — ось K-линии)

Загрузка данных

В этом примере стратегии основная функция начинает выполнять инициализацию диаграммы, вызывает функцию Chart, передает конфигурацию диаграммы ChartCfg в качестве параметра и генерирует объект диаграммы chart. Затем он входит в цикл для непрерывного получения данных K-line. Пока количество BAR данных K-line больше 50, индикатор MACD может быть рассчитан (если BAR слишком мало, эффективный индикатор не может быть рассчитан) . Затем вы можете записать данные K-линии и данные индикатора в график.
Чтобы записать данные в диаграмму, используйте метод add объекта диаграммы.
При записи, если последний параметр функции сложения равен -1, значение текущей точки данных будет обновлено. Если -1 не передано, будет добавлена ​​новая точка данных.
При создании нового BAR-диапазона K-line добавляется новая точка данных. При создании нового BAR-диапазона K-line обновляется последний BAR и соответствующий индикатор. (Судя по сравнению временных меток K-line BAR)

Можно напрямую тестировать на исторических данных

img

Вы также можете запустить его в режиме реального времени:
img

Пример адреса политики:
https://www.fmz.com/strategy/187379

Если у вас есть вопросы, спасибо, что оставили сообщение.

Related Recommendations
Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)