В этот раз повторим на Python индикатор KST (Know Sure Thing), созданный Мартином Прингом. Если вы подписаны на StockCharts.com, то вы получаете платную рассылку обзоров рынка от Джона Мэрфи и Мартина Принга. Принг в своих анализах постоянно ссылается на свой индикатор KST. И у него всегда всё складно и точно совпадает.
Я же в бессонных поисках граалей решил повторить индикатор KST и провести коротенький анализ за предыдущие 14 лет.
Также покрутим ROC (Rate-of-Change) и попробуем выжать из него ещё немного идей. Но всё по порядку.
Индикатор KST (Know Sure Thing) (пер. Знать наверняка) был представлен в далёком 1992 году и активно используется автором по сей день. Состоит KST из четырёх индикаторов ROC разных периодов, сглаженных простой скользящей средней. Конечное значение получается суммированием полученных величин, умноженных на свои веса. Чем больше период ROC, тем больше вес. Сигнальная линия получается сглаживанием KST 9-дневной скользящей средней. Формула:
На графике это выглядит так:
Невооруженным глазом видно, что к таким резким движениям цены данный индикатор не подходит.
Протестируем индикатор KST и другие вариации на тему ROC:
Общие условия тестов:
Код условий:
# KST prices = data.history(context.asset, ['close'], 400, '1d') kst, kst_signal = get_kst(prices, [10, 15, 20, 30], [10, 10, 10, 15], 9) allow = 0. <= kst[-1] # ... # KST histogram allow = 0. <= (kst - kst_signal)[-1] # ... # ROC(5) by SMA(200) roc_sma = talib.SMA(talib.ROC(prices.close, timeperiod=5), timeperiod=200) allow = 0. <= roc_sma[-1] # ... def get_kst(df, roc, sma, signal): kst = None for i, v in enumerate(roc): data = talib.SMA(talib.ROC(df.close, timeperiod=v), timeperiod=sma[i]) if kst is None: kst = data * (i + 1) else: kst += data * (i + 1) return kst, talib.SMA(kst, timeperiod=signal)
Результаты на Quantopian:
Как видим, для SPY лидером остаётся пересечение SMA(50) и SMA(200).
Эти же стратегии проверим в Jupyter без тестов, лишь расчётом. Так как это быстро, проверим другие ETF на основные индексы и секторы.
Тесты показали, что KST работает хуже SMA(50) и SMA(200). Приятно удивил приличными результатами ROC(5), усреднённый за 200 дней. Все стратегии плохо себя проявляют в коррекциях за последние годы, когда идёт резкое падение и быстрый откуп. Все сглаженные индикаторы дают сигнал на продажу, когда актив уже растёт.
В комментариях пишите ваши вопросы по тестам и коду. Предлагайте, как можно вести портфель с минимальным количеством ребалансировок и своевременной реакцией на падение.
Александр Румянцев
Автор на Quantrum.me
Telegram-канал: @quantiki
Интересуетесь алготрейдингом на Python? Присоединяйтесь к команде.
Исходные коды на Quantrum.me