Кодирование и представление линейно-взвешенной скользящей средней.
Скользящие средние бывают самых разных форм и форм, и у каждого типа есть свои преимущества и ограничения. В этой статье мы обсудим менее распространенный тип, называемый линейно-взвешенной скользящей средней.
Я только что опубликовал новую книгу после успеха моей предыдущей «Новые технические индикаторы на Python». Он содержит более полное описание и добавление структурированных торговых стратегий со страницей GitHub, посвященной постоянно обновляемому коду. Если вы считаете, что это вас заинтересует, перейдите по ссылке ниже или, если вы предпочитаете купить версию в формате PDF, вы можете связаться со мной через LinkedIn.
Концепция скользящих средних
Скользящие средние помогают нам подтверждать тренд и управлять им. Они являются наиболее известными техническими индикаторами, и это связано с их простотой и их проверенной репутацией по добавлению ценности к анализу. Мы можем использовать их для поиска уровней поддержки и сопротивления, стопов и целей, а также для понимания основного тренда. Такая универсальность делает их незаменимым инструментом в нашем торговом арсенале.
Как следует из названия, это ваше простое простое средство, которое используется повсюду в статистике и практически в любой другой части нашей жизни. Это просто общие значения наблюдений, разделенные на количество наблюдений. С математической точки зрения это можно записать как:
Мы видим, что скользящая средняя обеспечивает достойные динамические уровни поддержки и сопротивления, откуда мы можем разместить наши ордера в случае, если рынок там пойдет вниз. Код скользящей средней можно записать следующим образом:
# The function to add a number of columns inside an array def adder(Data, times): for i in range(1, times + 1): new_col = np.zeros((len(Data), 1), dtype = float) Data = np.append(Data, new_col, axis = 1) return Data # The function to delete a number of columns starting from an index def deleter(Data, index, times): for i in range(1, times + 1): Data = np.delete(Data, index, axis = 1) return Data # The function to delete a number of rows from the beginning def jump(Data, jump): Data = Data[jump:, ] return Data # Example of adding 3 empty columns to an array my_ohlc_array = adder(my_ohlc_array, 3) # Example of deleting the 2 columns after the column indexed at 3 my_ohlc_array = deleter(my_ohlc_array, 3, 2) # Example of deleting the first 20 rows my_ohlc_array = jump(my_ohlc_array, 20) # Remember, OHLC is an abbreviation of Open, High, Low, and Close and it refers to the standard historical data file
Ниже указано, что функция скользящего среднего будет вызываться в массиве с именем my_data для периода ретроспективного анализа 200, в столбце с индексом 3 (цены закрытия в массиве OHLC). Затем значения скользящего среднего будут помещены в столбец с индексом 4, который мы добавили с помощью функции сумматора.
my_data = ma(my_data, 200, 3, 4)
Если вы хотите поддержать меня и статьи, которые я регулярно публикую, рассмотрите возможность подписки на мой ЕЖЕДНЕВНЫЙ информационный бюллетень (доступен бесплатный план) по приведенной ниже ссылке. В нем есть некоторые из моих статей о Medium, другие торговые стратегии и уроки программирования, связанные с исследованиями и анализом. Оформив подписку, вы можете рассчитывать на 5–7 статей в неделю. Это поможет мне продолжать делиться своими исследованиями. Спасибо!
Создание линейно-взвешенной скользящей средней
Линейно-взвешенное скользящее среднее, также называемое взвешенным скользящим средним, представляет собой простое скользящее среднее, которое придает больший вес последним данным. Самое последнее наблюдение имеет наибольший вес, а каждое предшествующее имеет постепенно убывающий вес.
Интуитивно понятно, что у него меньшее запаздывание, чем у других скользящих средних, но оно также используется меньше всего, и, следовательно, то, что он получает от сокращения запаздывания, теряет популярность. С математической точки зрения это можно записать как:
По сути, если у нас есть набор данных, состоящий из двух чисел [1, 2], и мы хотим вычислить линейное средневзвешенное значение, то мы сделаем следующее:
- (2 x 2) + (1 x 1) = 5
- 5 / 3 = 1.66
Это предполагает, что временной ряд с номером 2 является самым последним наблюдением.
import numpy as np def lwma(Data, lookback): weighted = [] for i in range(len(Data)): try: total = np.arange(1, lookback + 1, 1) matrix = Data[i - lookback + 1: i + 1, 3:4] matrix = np.ndarray.flatten(matrix) matrix = total * matrix wma = (matrix.sum()) / (total.sum()) weighted = np.append(weighted, wma) except ValueError: pass Data = Data[lookback - 1:, ] weighted = np.reshape(weighted, (-1, 1)) Data = np.concatenate((Data, weighted), axis = 1) return Data # For this function to work, you need to have an OHLC array composed of the four usual columns, then you can use the below syntax to get a data array with the weighted moving average using the lookback you need my_ohlc_data = lwma(my_ohlc_data, 20)
- Основная сила: быстрое реагирование, так как учитывает последние значения.
- Основная слабость: Не очень отслеживаемый и не очень эффективный для определения уровней поддержки и сопротивления.
Если вас также интересуют другие технические индикаторы и использование Python для создания стратегий, то мой бестселлер по техническим индикаторам может вас заинтересовать:
Заключение
Не забывайте всегда проводить тесты на исторических данных. Вы всегда должны верить, что другие люди неправы. Мои индикаторы и стиль торговли могут работать на меня, но может не на вас.
Я твердо убежден, что нельзя кормить с ложечки. Я научился на практике, а не копируя. Вы должны понять идею, функцию, интуицию, условия стратегии, а затем разработать (даже лучше) одну из них самостоятельно, чтобы вы протестировали и улучшили ее, прежде чем принимать решение о том, чтобы применить ее вживую или отказаться от нее. Мой выбор в пользу отказа от предоставления конкретных результатов тестирования на истории должен побудить читателя лучше изучить стратегию и больше работать над ней.
Medium - это центр множества интересных чтений. Я прочитал много статей, прежде чем решил начать писать. Рассмотрите возможность присоединения к Medium!
Подводя итог, можно ли сказать, что стратегии, которые я предлагаю, реалистичны? Да, но только путем оптимизации среды (надежный алгоритм, низкие затраты, честный брокер, надлежащее управление рисками и управление заказами). Предусмотрены ли стратегии исключительно для торговли? Нет, это нужно для стимулирования мозгового штурма и получения новых торговых идей, поскольку мы все устали слышать о перепроданности RSI как о причине для открытия короткой позиции или о преодолении сопротивления как о причине идти долго. Я пытаюсь представить новую область под названием «Объективный технический анализ», в которой мы используем достоверные данные для оценки наших методов, а не полагаемся на устаревшие классические методы.