Стратегия изменения импульса по четырем показателям

Автор:Чао Чжан, Дата: 2023-11-27 15:51:01
Тэги:

img

Обзор

Эта стратегия использует три основных технических индикатора: скользящую среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю среднюю сред

Логика стратегии

  1. Использовать перекрестки между 4-периодным и 8-периодным EMA для определения динамики цен более быструю 4-периодную EMA для быстрой реакции и более медленную 8-периодную EMA для подтверждения;

  2. При повышении курса EMA, то есть пересечении 4-периодного EMA над 8-периодным EMA, проверяют, чтобы RSI (свыше 65) и CCI (свыше 0) не были перекуплены для подачи длинного сигнала;

  3. При понижении EMA, т.е. пересечении 4-периодного EMA ниже 8-периодного EMA, проверяют, что RSI (ниже 35) и CCI (ниже 0) перепроданы, чтобы дать короткий сигнал;

  4. Установите цены стоп-лосса и прибыли, основанные на расстояниях ввода, как только торговые сигналы запускаются.

В целом, эта стратегия рассматривает среднесрочную тенденцию и краткосрочные уровни перекупленности/перепроданности как относительно стабильные сигналы, в то время как остановка потерь и получение прибыли эффективно ограничивают потери на одну сделку.

Анализ преимуществ

  1. Многочисленные индикаторы смягчают ложные сигналы от отдельных осцилляторов;

  2. EMA определяют основную тенденцию, в то время как RSI и CCI избегают перегретых зон для улучшения показателя выигрыша;

  3. Автоматическая установка стоп-лосса и сбора прибыли ограничивает потери при экстремальных движениях;

  4. По чисто техническому характеру эта стратегия легко реализуется в любой период времени.

Анализ рисков

  1. Основные фундаментальные новости могут перевалить за технические уровни;

  2. Стоп-лосс может быть выведен за счет огромной волатильности призывов к более широким стопам;

  3. Частая торговля приводит к более высоким затратам на транзакции, поэтому лучше всего оставить для высокочастотных алгоритмов.

Возможности для расширения

  1. Включить модели машинного обучения для автоматической корректировки параметров на основе основ;

  2. Создайте адаптивные остановки, реагирующие на волатильность, а не на фиксированные расстояния.

Заключение

Эта многогранная стратегия может обеспечить стабильную среднесрочную прибыль при оптимизированных параметрах, что делает ее доступной технической системой.


/*backtest
start: 2023-11-19 00:00:00
end: 2023-11-26 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SoftKill21

//@version=4


strategy(title="Moving Average Exponential", shorttitle="EMA", overlay=true)


len4 = input(4, minval=1, title="Length_MA4")
src4 = input(close, title="Source")
offset4 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out4 = ema(src4, len4)
plot(out4, title="EMA", color=color.blue, offset=offset4)

len8 = input(8, minval=1, title="Length_MA8")
src8 = input(close, title="Source")
offset8 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out8 = ema(src8, len8)
plot(out8, title="EMA", color=color.blue, offset=offset8)


//rsioma
src = close, len = input(14, minval=1, title="Length")
up = rma(max(change(ema(src, len)), 0), len)
down = rma(-min(change(ema(src, len)), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
//plot(rsi, color=color.blue)
//band1 = hline(80)
//band0 = hline(20)
//fill(band1, band0, color=color.purple, transp=90)
//hline(50, color=color.gray, linestyle=plot.style_line)
sig = ema(rsi, 21)
//plot(sig, color=color.purple)

//woodie
cciTurboLength = input(title="CCI Turbo Length", type=input.integer, defval=6, minval=3, maxval=14)
cci14Length = input(title="CCI 14 Length", type=input.integer, defval=14, minval=7, maxval=20)

source = close

cciTurbo = cci(source, cciTurboLength)
cci14 = cci(source, cci14Length)

last5IsDown = cci14[5] < 0 and cci14[4] < 0 and cci14[3] < 0 and cci14[2] < 0 and cci14[1] < 0
last5IsUp = cci14[5] > 0 and cci14[4] > 0 and cci14[3] > 0 and cci14[2] > 0 and cci14[1] > 0
histogramColor = last5IsUp ? color.green : last5IsDown ? color.red : cci14 < 0 ? color.green : color.red


// Exit Condition
// Exit Condition
a = input(12)*10
b = input(15)*10
c = a*syminfo.mintick
d = b*syminfo.mintick


longCondition = crossover(out4, out8) and (rsi >= 65 and cci14>=0)
shortCondition = crossunder(out4, out8) and (rsi <=35 and cci14<=0)


long_stop_level     = float(na)
long_profit_level1  = float(na)
long_profit_level2  = float(na)
long_even_level     = float(na)

short_stop_level    = float(na)
short_profit_level1 = float(na)
short_profit_level2 = float(na)
short_even_level    = float(na)

long_stop_level     := longCondition  ? close - c : long_stop_level     [1]
long_profit_level1  := longCondition  ? close + d : long_profit_level1  [1]
//long_profit_level2  := longCondition  ? close + d : long_profit_level2  [1]
//long_even_level     := longCondition  ? close + 0 : long_even_level     [1]

short_stop_level    := shortCondition ? close + c : short_stop_level    [1]
short_profit_level1 := shortCondition ? close - d : short_profit_level1 [1]
//short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1]
//short_even_level    := shortCondition ? close + 0 : short_even_level    [1] 


//ha
// === Input ===
//ma1_len = input(1, title="MA 01")
//ma2_len = input(40, title="MA 02")

// === MA 01 Filter ===
//o=ema(open,ma1_len)
//cc=ema(close,ma1_len)
//h=ema(high,ma1_len)
//l=ema(low,ma1_len)

// === HA calculator ===
//ha_t = heikinashi(syminfo.tickerid)
//ha_o = security(ha_t, timeframe.period, o)
//ha_c = security(ha_t, timeframe.period, cc)
//ha_h = security(ha_t, timeframe.period, h)
//ha_l = security(ha_t, timeframe.period, l)

// === MA 02 Filter ===
//o2=ema(ha_o, ma2_len)
//c2=ema(ha_c, ma2_len)
//h2=ema(ha_h, ma2_len)
//l2=ema(ha_l, ma2_len)

// === Color def ===
//ha_col=o2>c2 ? color.red : color.lime

// ===  PLOTITING===
//plotcandle(o2, h2, l2, c2, title="HA Smoothed", color=ha_col)

tp=input(120)
sl=input(96)
    
strategy.entry("long", strategy.long, when = longCondition)
//strategy.close("long", when = o2>c2 , comment="ha_long")
strategy.entry("short", strategy.short , when =shortCondition )
//strategy.close("short", when = o2<=c2 , comment = "ha_short" )

//strategy.close("long",when=long_profit_level1 or long_stop_level  , comment="tp/sl")
//strategy.close("short",when=short_profit_level1 or short_stop_level , comment="tp/sl")

strategy.exit("x_long","long",profit = tp, loss = sl) //when = o2>c2)
strategy.exit("x_short","short",profit = tp, loss = sl) //when = o2<c2)



Больше