Анализ скользящих Z-Score в торговле акциями

Эволюция ASML.AS цен на акции в сочетании с скользящими Z-оценками за 30, 60 и 90-дневные периоды. Зеленые и красные маркеры выделяют потенциальные точки покупки и продажи соответственно на основе пороговых значений Z-Score.

1. Введение

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

Представьте себе, что вы можете определить, когда акция может быть перекуплена или перепродана, просто взглянув на ее прошлые цены и волатильность. Это именно то, что может предложить Z-Score, и в этой статье мы собираемся глубоко погрузиться в то, как Python — мощный инструмент анализа данных — может быть использован для расчета и интерпретации Z-Score для торговли акциями.

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

2. Погружение в Z-баллы

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

Представьте себе колоколообразную кривую, представляющую нормальное распределение. Большинство цен на акции (при условии, что они нормально распределены, что является большим предположением и часто не имеет места в реальной торговле) будут лежать примерно посередине. Те, которые лежат в хвосте, за пределами определенного Z-Score (например, 1,5 или -1,5), вызывают у нас интерес.

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

Где:

  • Z — это Z-оценка.
  • X — значение точки данных.
  • μ — среднее значение данных.
  • σ — стандартное отклонение.

Анализируя цены на акции через призму Z-Scores, трейдеры могут определить потенциальные возможности покупки / продажи. Z-оценка, значительно превышающая 1,5, может указывать на то, что акции переоценены по сравнению со средним историческим значением, тогда как Z-оценка, значительно ниже -1,5, может указывать на обратное.

3. Подготовка почвы с библиотеками и данными

Прежде чем погружаться на глубину, важно вооружиться правильными инструментами. Импортируя соответствующие библиотеки Python, такие как yfinance для получения биржевых данных и matplotlib для визуализации, мы обеспечиваем плавный старт.import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt

4. Получение биржевых данных и предварительная настройка

Чтобы оценить аномалии запасов, мы сосредотачиваемся на конкретной акции — для демонстрационных целей мы выбрали «ASML.AS». Затем мы извлекаем исторические данные об акциях, используя библиотеку yfinance.tickerSymbol = «ASML.AS»
tickerData = yf.Ticker(tickerSymbol)
tickerDf = tickerData.history(period=’1d’, start=’2020-1-1′, end=’2023-12-25′)

5. Расчет Z-оценки

В основе нашего анализа лежит формула Z-Score, которая помогает оценить, насколько «выключена» цена акции по отношению к ее истории. Мы вычисляем это для нескольких скользящих периодов, чтобы зафиксировать краткосрочные и долгосрочные аномалии.rolling_mean = close_prices.rolling(window=period).mean()
rolling_std = close_prices.rolling(window=period).std()
z_scores = (close_prices — rolling_mean) / rolling_std

6. Визуализация отклонений с помощью сигналов

Построив скользящие Z-баллы рядом с ценой акций, мы получаем представление о том, когда акции ведут себя «нормально», а когда они могут быть выбросами. Эта визуальная подсказка, особенно области с Z-показателями выше ±1,5, может быть полезной для трейдеров. Не стесняйтесь изменять порог Z-оценки.import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt

# Constants
Z_THRESH = 2
PERIODS = [30, 60, 90]
TICKER_SYMBOL = «ASML.AS»
START_DATE = ‘2020-1-1’
END_DATE = ‘2023-12-25’

def fetch_data(ticker_symbol, start_date, end_date):
«»»Fetches historical data for a given ticker symbol.»»»
ticker_data = yf.Ticker(ticker_symbol)
return ticker_data.history(period=’1d’, start=start_date, end=end_date)

def calculate_z_scores(close_prices, periods):
«»»Calculates Z-scores for given periods.»»»
z_scores_dict = {}
for period in periods:
# Calculate the rolling mean for the given period
rolling_mean = close_prices.rolling(window=period).mean()
# Calculate the rolling standard deviation for the given period
rolling_std = close_prices.rolling(window=period).std()
# Compute the Z-scores for the close prices
z_scores = (close_prices — rolling_mean) / rolling_std
# Store the Z-scores in the dictionary with the period as the key
z_scores_dict[period] = z_scores
return z_scores_dict

def plot_data(close_prices, z_scores_data):
«»»Plots close prices and z-scores.»»»

# Create subplots for close prices and Z-scores
fig, (ax1, ax2) = plt.subplots(2, sharex=True, figsize=(20, 8))

# Plot the close prices on the first subplot
ax1.plot(close_prices.index, close_prices, label=’Close Prices’)
for period, z_scores in z_scores_data.items():
# Plot the Z-scores on the second subplot for each period
ax2.plot(z_scores.index, z_scores, label=f’Z-Scores {period} days’, alpha=0.7)
# If the period is the first in the list, plot buy/sell signals on the first subplot
if period == PERIODS[0]:
buy_signals = (z_scores < -Z_THRESH)
sell_signals = (z_scores > Z_THRESH)
ax1.plot(close_prices[buy_signals].index, close_prices[buy_signals], ‘o’, color=’g’, label=’Buy Signal’)
ax1.plot(close_prices[sell_signals].index, close_prices[sell_signals], ‘o’, color=’r’, label=’Sell Signal’)
# Set the y-label and legend for the close prices subplot
ax1.set_ylabel(‘Close Prices’)
ax1.legend(loc=»upper left»)
ax1.grid(True)

# Draw horizontal lines indicating the Z-score thresholds on the Z-scores subplot
ax2.axhline(-Z_THRESH, color=’red’, linestyle=’—‘)
ax2.axhline(Z_THRESH, color=’red’, linestyle=’—‘)
# Set the y-label and legend for the Z-scores subplot
ax2.set_ylabel(‘Z-Scores’)
ax2.legend(loc=»upper left»)
ax2.grid(True)

# Set the main title for the entire plot
plt.suptitle(f'{TICKER_SYMBOL} Close Prices and Z-Scores {Z_THRESH} Treshold’)
# Display the plots
plt.show()

# Fetch the historical data for the ticker symbol
ticker_data = fetch_data(TICKER_SYMBOL, START_DATE, END_DATE)

# Calculate Z-scores for the specified periods
z_scores_data = calculate_z_scores(ticker_data[‘Close’], PERIODS)

# Plot the close prices and Z-scores
plot_data(ticker_data[‘Close’], z_scores_data)

Эволюция ASML.AS цен на акции в сочетании с скользящими Z-оценками за 30, 60 и 90-дневные периоды. Зеленые и красные маркеры выделяют потенциальные точки покупки и продажи соответственно на основе пороговых значений Z-Score.

7. Заключение

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

Источник