Эта стратегия основана на индикаторе двойного обратного импульса для торговли. Он рассчитывает индекс обратного импульса в течение определенного периода времени с использованием самой высокой цены, самой низкой цены и цены закрытия, и генерирует торговые сигналы, когда индекс отступает вниз от зоны перекупленности или отступает вверх от зоны перепроданности. Он также устанавливает механизм остановки потерь.
Основным показателем этой стратегии является индекс стохастического импульса (SMI).
$$SMI = \frac{Close-(HH+LL)/2}{AVGDIFF/2}*100$$
где HH - самая высокая цена за последние N дней, LL - самая низкая цена за последние N дней, N определяется параметром a; AVGDIFF - скользящая средняя за M дней HH-LL, M определяется параметром b.
SMI показывает характеристику переворота цен. Когда цена акции приближается к самой высокой точке за последние N дней, SMI приближается к 100, что указывает на перекупку акции; когда она приближается к самой низкой точке за последние N дней, SMI приближается к -100, что указывает на перепродажу. Сигналы покупки/продажи генерируются, когда SMI переворачивается вниз с уровня 100 или переворачивается вверх с уровня -100.
Стратегия использует в качестве торговой линии среднемесячную скользящую среднюю SMA SMI. Когда SMI отступает вниз от зоны перекупленности и прорывается ниже SMA, генерируется сигнал покупки. Когда SMI отступает вверх от зоны перепроданности и прорывается выше SMA, генерируется сигнал продажи.
Кроме того, стратегия оценивает перерыв тела свечи для остановки потери.
Преимущества этой стратегии:
Используя принцип перехода цены, он может генерировать торговые сигналы в точках перехода и захватывать возможности перехода.
SMI сочетает в себе самую высокую цену, самую низкую цену и цену закрытия для оценки условий перекупа и перепродажи, создавая более надежные сигналы.
С выходом тела свечей, он может выйти из позиций вовремя и эффективно контролировать риски.
Стратегия имеет несколько параметров и легко внедряется и оптимизируется.
Эта стратегия также сопряжена с некоторыми рисками:
Торговля реверсией затрудняется определить точное время успешных реверсий и может привести к многочисленным потерям до того, как будет зафиксировано изменение тренда.
Ошибочное суждение о точках переворота может привести к увеличению потерь.
Стойкость тела может быть слишком чувствительной, с высокой вероятностью попадания в ловушку.
Решения:
Оптимизировать параметры SMI для корректировки частоты обратной торговли.
Объедините другие показатели, чтобы определить время отмены.
Настраивайте размер тела, чтобы не быть слишком чувствительным.
Стратегия может быть оптимизирована в следующих аспектах:
Оптимизировать параметры a и b SMI для корректировки чувствительности захвата отклонений.
Добавить другие показатели для оценки, чтобы избежать упущения основных направлений тренда, например скользящих средних, показателей волатильности и т.д.
Добавьте больше методов остановки потери, чтобы не быть слишком чувствительными или нечувствительными, например, отслеживание остановки потери, кривая остановки потери и т. Д.
Включить модели машинного обучения для оценки вероятности успеха реверсии, избегая неудачных реверсионных сделок.
В заключение, это двунаправленная торговая стратегия, основанная на индексе обратного импульса SMI. Преимущество заключается в том, чтобы захватить больше краткосрочных торговых возможностей, используя перелом цен и генерируя сигналы в точках перелома. Но есть также типичные риски перелома торговли. Для предотвращения усиленных потерь необходима настройка параметров и оптимизация стоп-лосса. В целом эта стратегия подходит для инвесторов, заинтересованных в переломе торговли, но должна включать другие индикаторы и строгую стоп-лосс для контроля рисков.
/*backtest start: 2023-11-01 00:00:00 end: 2023-11-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Stochastic Strategy v1.0", shorttitle = "Stochastic str 1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") a = input(5, "Percent K Length") b = input(3, "Percent D Length") limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit") fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Stochastic Momentum Index ll = lowest (low, a) hh = highest (high, a) diff = hh - ll rdiff = close - (hh+ll)/2 avgrel = ema(ema(rdiff,b),b) avgdiff = ema(ema(diff,b),b) SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0 SMIsignal = ema(SMI,b) //Lines plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index") plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line") plot(limit, color = black, title = "Over Bought") plot(-1 * limit, color = black, title = "Over Sold") plot(0, color = blue, title = "Zero Line") //Body body = abs(close - open) abody = sma(body, 10) //Signals up = SMIsignal < -1 * limit and close < open dn = SMIsignal > limit and close > open exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2 //Trading lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] if up if strategy.position_size < 0 strategy.close_all() strategy.entry("Bottom", strategy.long, needlong == false ? 0 : lot) if dn if strategy.position_size > 0 strategy.close_all() strategy.entry("Top", strategy.short, needshort == false ? 0 : lot) if exit strategy.close_all()