Обучающая статья: Анализ финансовых данных с помощью Python (SMA и MACD)
В этой статье мы разберем, как использовать Python для анализа финансовых данных. Мы построим графики цен, добавим простые скользящие средние (SMA) и индикатор MACD (Moving Average Convergence Divergence). Все шаги будут описаны подробно, чтобы даже новички могли понять, как это работает.
1. Установка библиотек
Для выполнения анализа вам понадобятся следующие библиотеки:
- matplotlib — для построения графиков.
- pandas — для работы с табличными данными.
- numpy — для математических операций.
Установите их с помощью команды:
- pip install matplotlib pandas numpy
Скопировать код 2. Генерация данных
Для начала создадим тестовые данные, которые будут имитировать рынок с восходящим трендом. В реальных задачах вы будете использовать данные из источников, таких как API бирж или CSV-файлы.
- import matplotlib.pyplot as plt
- import pandas as pd
- import numpy as np
- # Генерация данных для имитации трендового рынка
- np.random.seed(42) # Фиксация случайности для воспроизводимости
- dates = pd.date_range(start="2024-01-01", periods=100) # Даты
- prices = np.cumsum(np.random.normal(loc=0.5, scale=1.0, size=100)) + 100 # Рост цен
- # Создание DataFrame
- data = pd.DataFrame({
- 'Date': dates,
- 'Price': prices
- })
Скопировать кодЗдесь: - pd.date_range создаёт диапазон дат.
- np.cumsum суммирует случайные значения, чтобы создать эффект тренда.
3. Вычисление индикаторовПростые скользящие средние (SMA) и MACD — это популярные инструменты технического анализа.
Скользящие средние (SMA)Скользящие средние показывают усреднённое значение цены за определённый период:
- # Простые скользящие средние
- data['SMA_20'] = data['Price'].rolling(window=20).mean() # SMA за 20 дней
- data['SMA_50'] = data['Price'].rolling(window=50).mean() # SMA за 50 дней
Скопировать код MACDИндикатор MACD показывает разницу между двумя экспоненциальными скользящими средними (EMA):
- # Вычисление MACD
- dema_12 = data['Price'].ewm(span=12, adjust=False).mean()
- dema_26 = data['Price'].ewm(span=26, adjust=False).mean()
- data['MACD'] = ema_12 - ema_26 # Разница между EMA (MACD линия)
- data['Signal_Line'] = data['MACD'].ewm(span=9, adjust=False).mean() # Сигнальная линия
Скопировать кодЗдесь: - ewm — экспоненциальное скользящее среднее.
- MACD рассчитывается как разница между EMA с периодами 12 и 26.
- Сигнальная линия — EMA от MACD с периодом 9.
4. Построение графиковТеперь визуализируем наши данные, включая скользящие средние и MACD.
График цен и SMA
- plt.figure(figsize=(12, 8))
- # График цен с SMA
- plt.subplot(2, 1, 1)
- plt.plot(data['Date'], data['Price'], label='Price', color='blue', linewidth=2)
- plt.plot(data['Date'], data['SMA_20'], label='20-Day SMA', color='orange', linestyle='--')
- plt.plot(data['Date'], data['SMA_50'], label='50-Day SMA', color='green', linestyle='--')
- plt.title("Price with Moving Averages (Trend Indicators)")
- plt.xlabel("Date")
- plt.ylabel("Price")
- plt.legend(loc='upper left')
- plt.grid()
Скопировать код График MACD
- # График MACD
- plt.subplot(2, 1, 2)
- plt.plot(data['Date'], data['MACD'], label='MACD', color='purple', linewidth=1.5)
- plt.plot(data['Date'], data['Signal_Line'], label='Signal Line', color='red', linestyle='--')
- plt.axhline(0, color='black', linestyle='--', linewidth=0.8)
- plt.title("MACD Indicator")
- plt.xlabel("Date")
- plt.ylabel("Value")
- plt.legend(loc='upper left')
- plt.grid()
- # Отображение графиков
- plt.tight_layout()
- plt.show()
Скопировать код 5. Интерпретация результатов- SMA:
- Когда короткая SMA (20 дней) пересекает длинную SMA (50 дней) снизу вверх, это может быть сигналом покупки.
- Обратное пересечение может быть сигналом продажи.
- MACD:
- Когда MACD пересекает сигнальную линию вверх, это бычий сигнал.
- Когда MACD пересекает сигнальную линию вниз, это медвежий сигнал.
- Линия 0 служит базовым уровнем для анализа.
6. ЗаключениеТеперь вы знаете, как:
- Создать данные и визуализировать их.
- Рассчитать SMA и MACD.
- Построить графики для анализа.
Этот простой проект можно расширить, добавив другие индикаторы, такие как RSI или Bollinger Bands. Если у вас есть вопросы или предложения, оставьте комментарий на нашем форуме!
И помните: программирование — это весело, особенно когда оно помогает заработать! 😉
Скачать исходный код: SmaMacdAnalysis.py
|