Эта стратегия сочетает в себе двойную скользящую среднюю, индекс относительной силы (RSI) и параболический SAR (PSAR) для определения точек переворота цены и принятия соответствующих решений о покупке и продаже.
Стратегия в основном использует следующие технические показатели для определения точек переворота цен:
Двойная скользящая средняя: вычисляется быстрая скользящая средняя (MA быстрая линия) и медленная скользящая средняя (MA медленная линия). Когда быстрая линия пересекает над медленной линией, это указывает на бычий рынок и идет на длинный. Когда быстрая линия пересекает ниже медленной линии, это указывает на медвежий рынок и идет на короткий.
Индикатор RSI: RSI оценивает условия перекупа и перепродажи, рассчитывая среднюю прибыль и средний убыток за закрытие за определенный период времени.
Индикатор PSAR: Параболический SAR указывает направление тренда.
Индикатор ADX: ADX измеряет силу тренда, рассчитывая направленное движение.
Логика сигналов покупки и продажи выглядит следующим образом:
Сигнал покупки: быстрый MA пересекает более медленный MA, RSI ниже 30 (перепроданный), SAR-точки выше цены, ADX выше 20.
Сигнал продажи: быстрый MA пересекается ниже медленного MA, RSI выше 70 (перекупленный), SAR-точки ниже цены, ADX выше 20.
Когда появляется сигнал покупки или продажи, займите позицию с 10% собственного капитала соответственно.
Двойные МА определяют направление основного тренда, при этом RSI и SAR фильтруют ложные сигналы, которые могут точно идентифицировать точки перелома.
Объединение нескольких показателей предотвращает ошибочные сигналы от одного показателя.
Стоп-лосс позволяет избежать чрезмерных рисков.
Простая и понятная логика делает его легким в применении.
Это работает как для восходящего, так и для нисходящего тренда.
У двойных МА может быть ложный прорыв.
Если RSI не настроен правильно, он может генерировать неправильные сигналы.
Приостановить торговлю, когда ADX ниже 20, чтобы избежать обратной торговли на безнаправленных рынках.
Установка строгого стоп-лосса может привести к ненужным потерям. Установка разумного стоп-лосса на основе волатильности рынка.
Высокая частота торговли.
Испытывайте различные периоды MA, чтобы найти оптимальную комбинацию.
Проверьте различные параметры RSI для лучшего определения перекупленности/перепроданности.
Добавьте другие индикаторы, такие как полосы Боллинджера, KDJ, чтобы обогатить логику.
Установите динамический стоп-лосс на основе различных продуктов и рынков.
Добавьте размеры позиций, чтобы лучше следить за тенденциями.
Проверить различные параметры ADX, чтобы найти лучшее значение для определения силы тренда.
Добавить функцию автоматической остановки.
Эта стратегия определяет направление основного тренда с использованием двойных МА и использует RSI, SAR для дополнительной фильтрации сигналов. Она может эффективно определять точки обратного движения после оптимизации параметров и улавливать тенденции вокруг обратных движений. На практике важно управление рисками путем правильного стоп-лосса и постоянной оптимизации параметров. В целом стратегия сочетает в себе индикаторы с четкой логикой и легкой операцией, что делает ее надежной обратной торговой стратегией.
/*backtest start: 2023-10-10 00:00:00 end: 2023-11-09 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //Based on Senpai BO 3 strategy(title="Senpai_Strat_3", shorttitle="Senpai_Strat_3", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100) src = close //psar start = input(0.02) increment = input(0.02) maximum = input(0.2) psar = sar(start, increment, maximum) //ADX Init adxlen = input(30, title="ADX Smoothing") dilen = input(30, title="DI Length") dirmov(len) => up = change(high) down = -change(low) truerange = rma(tr, len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [adx, plus, minus] [sig, up, down] = adx(dilen, adxlen) // BB Init source = close length = input(50, minval=1) mult = input(0.5, title="Mult Factor", minval=0.001, maxval=50) alertLevel=input(0.1) impulseLevel=input(0.75) showRange = input(false, type=bool) //RSI CODE up1 = rma(max(change(src), 0), 14) down1 = rma(-min(change(src), 0), 14) rsi = down1 == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up1 / down1)) //BB CODE basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev bbr = source>upper?(((source-upper)/(upper-lower))/10): source<lower?(((source-lower)/(upper-lower))/10) : 0.05 bbi = bbr - nz(bbr[1]) //////////////////// Algo //if (rsi>50 and n1>n2) //strategy.exit("Close", "Short") // strategy.entry("Long", strategy.long) //if (rsi<50 and n2>n1) //strategy.exit("Close", "Long") // strategy.entry("Short", strategy.short) //col = ma30 > ma50 > ma200 and rsi <=53?lime: ma50 < ma200 and rsi >= 60?red : silver //short1 = sig<18.5 and high>=upper and rsi>=70 and psar<close = 100% //long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close = 100% short1 = sig<18.5 and high>=upper and rsi>=70 and psar<close long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close //Entry long = long1[1] == 0 and long1 == 1 short = short1[1] == 0 and short1 == 1 longclose = long[3] == 1 shortclose = short[3] == 1 strategy.entry("short", strategy.short,qty = 10, when=short) strategy.entry("long", strategy.long,qty=10, when=long) strategy.close("long",when=longclose) strategy.close("short",when=shortclose) ///////////////////// ///PLOT plot(long,"long",color=green,linewidth=1) plot(short,"short",color=red,linewidth=1) plot(longclose,"close",color=blue,linewidth=1) plot(shortclose,"close",color=orange,linewidth=1) //plot(short,"short",color=red,linewidth=1) // //strategy.exit(id="long",qty = 100000,when=longclose) //strategy.exit(id="short",qty = 100000,when=shortclose) //strategy.exit(id="Stop", profit = 20, loss = 100)