Тенденция в соответствии со стратегией, основанной на перекрестном перемещении скользящих средних

Автор:Чао Чжан, Дата: 2023-10-24 11:02:52
Тэги:

img

Обзор

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

Принципы

  1. Вычислить два скользящих средних, EMA1 и EMA2, с разными периодами.

  2. Определить, пересекает ли EMA1 EMA2, если да, выйти на длинный курс.

  3. Определить, переходит ли EMA1 ниже EMA2, если да, перейти на короткий курс.

  4. Определить, проходит ли цена закрытия через EMA1 в качестве сигнала входа.

  5. Механизм выхода: установить фиксированный стоп-потеря или использовать Donchian Channel для установки стоп-потеря.

Основные функции:

  • ema ((): вычислить экспоненциальную скользящую среднюю
  • перекресток (crossover): определить, пересекается ли EMA1 через EMA2
  • crossunder ((): определить, пересекается ли EMA1 ниже EMA2
  • rising (() /falling ((): определить, растет или падает цена
  • valuewhen(): возвращает различные значения на основе условия

Преимущества

  1. Простая логика, легкая для понимания и реализации.

  2. Используйте тенденцию, следующую за движущимися средними, чтобы эффективно отслеживать тенденции.

  3. Сочетание ценового прорыва за закрытие свечей помогает избежать ложных прорывов.

  4. Гибкое использование различных комбинаций скользящих средних, адаптируемых к различным периодам.

  5. Механизм стоп-лосса контролирует риск.

Риски

  1. Частые "золотые кресты" и "мертвые кресты" во время консолидации рынка приводят к проблемам.

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

  3. Движущиеся средние задерживаются и могут пропустить сигналы обворота в переломных моментах.

  4. Точное определение скользящего среднего наклона необходимо для фильтрации ложных прорывов.

  5. Выбор параметров требует осторожности, ненадлежащая частота или задержка могут повлиять на эффективность стратегии.

Оптимизация

  1. Кроссовка нулевой линии MACD может помочь определить тенденции и фильтровать консолидацию.

  2. Добавить Donchian Channel для динамической линии остановки потери для улучшения фиксированной остановки потери.

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

  4. Оптимизировать комбинации параметров скользящей средней и проверять фактическую производительность различных стратегий периода.

  5. Подумайте о добавлении скользящих средних, чтобы уменьшить задержку.

Заключение

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


/*backtest
start: 2023-09-01 00:00:00
end: 2023-10-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='Mega crypto bot strategy', shorttitle='megacryptobot_Strategy', overlay=true, pyramiding=0, initial_capital=10000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
period = input('720')
ch1 = request.security(syminfo.tickerid, period, open)
ch2 = request.security(syminfo.tickerid, period, close)
longCondition = crossover(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

///////////////////////////////////////////////////////////////////////////////////////////

Больше