Стратегия перекрестного перемещения среднего движущегося корпуса

Автор:Чао Чжан, Дата: 2024-03-22 14:57:10
Тэги:

img

Обзор

Эта стратегия основана на перекрестных сигналах Hull Moving Average (HMA). Hull Moving Average - это технический индикатор, разработанный Аланом Халлом, который направлен на сокращение отставания традиционных скользящих средних.

Принцип

  1. Расчет скользящей средней корпуса (HMA)

HMA рассчитывается следующим образом:

  • Во-первых, вычислить средневзвешенную скользящую среднюю (WMA) цены с периодом половины входного параметра length
  • Затем вычислить WMA предыдущей WMA с периодом length
  • Используйте формулу: HMA = 2 * WMA ((длина/2) - WMA ((длина)
  • Вычислить WMA выше результата снова с периодом корня квадратного length получить окончательный HMA
  1. Создание торговых сигналов
  • Когда цена закрытия пересекает HMA, генерируется сигнал покупки.
  • Когда цена закрытия пересекает HMA, генерируется сигнал продажи.
  1. Исполнение сделок на основе сигналов
  • Сигнал покупки: Открыть длинную позицию
  • Сигнал продажи: Открыть короткую позицию

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

  1. По сравнению с простой скользящей средней и взвешенной скользящей средней, скользящая средняя Hull имеет меньшее отставание, поэтому она может быстрее реагировать на изменения цен, улучшая реакцию стратегии.

  2. Используя перекресток двух HMA с разными периодами для генерации сигналов, можно эффективно отфильтровать много шума и ложных сигналов, повышая надежность сигналов.

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

Риски

  1. Движущаяся средняя Hull является отстающим показателем, который может генерировать ложные сигналы на ранних стадиях переворота тренда.

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

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

Руководство по оптимизации

  1. В качестве фильтров следует рассмотреть возможность введения других технических показателей или фундаментальных факторов, таких как объем торговли, индикаторы тренда и т.д., для дальнейшего подтверждения достоверности перекрестных сигналов HMA.

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

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

  4. Принимая во внимание тенденции на рынке, путем внедрения индикаторов для оценки тенденций на рынке можно торговать на трендовых рынках и избегать боковых рынков.

Резюме

Стратегия Hull Moving Average Crossover - это простая и удобная в использовании стратегия торговли. Благодаря быстрому реагированию HMA, она может своевременно отслеживать изменения цены. Однако, как и все стратегии, она также имеет свои ограничения, и на ее производительность будут влиять типы рынка и выбор параметров. В практическом применении она может быть объединена с другими методами анализа для дальнейшего подтверждения сигналов. В то же время разумные меры контроля риска, такие как стоп-лосс и взят-прибыль, управление позициями и т. д., также являются незаменимыми частями для стабильной работы стратегии.


/*backtest
start: 2023-03-16 00:00:00
end: 2024-03-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Basic Hull Ma Pack tinkered by InSilico 
strategy("RKTD BETA - Hull Suite by InSilico", overlay=true)

//INPUT
src = input(close, title="Source")
modeSwitch = input("Ehma", title="Hull Variation", options=["Hma", "Thma", "Ehma"])
length = input(200, title="Length(180-200 for floating S/R , 55 for swing entry)")
lengthMult = input(1.0, title="Length multiplier (Used to view higher timeframes with straight band)")

useHtf = input(false, title="Show Hull MA from X timeframe? (good for scalping)")
htf = input("240", title="Higher timeframe", type=input.resolution)

switchColor = input(true, "Color Hull according to trend?")
candleCol = input(false,title="Color candles based on Hull's Trend?")
visualSwitch  = input(true, title="Show as a Band?")
thicknesSwitch = input(1, title="Line Thickness")
transpSwitch = input(40, title="Band Transparency",step=5)

// Alert Messages
longAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "long", "orderType": "market", "close":true}'
shortAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "short", "orderType": "market", "close":true}'

//FUNCTIONS
//HMA
HMA(_src, _length) =>  wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>  ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length)))
//THMA    
THMA(_src, _length) =>  wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - wma(_src, _length), _length)
    
//SWITCH
Mode(modeSwitch, src, len) =>
      modeSwitch == "Hma"  ? HMA(src, len) :
      modeSwitch == "Ehma" ? EHMA(src, len) : 
      modeSwitch == "Thma" ? THMA(src, len/2) : na

//OUT
_hull = Mode(modeSwitch, src, int(length * lengthMult))
HULL = useHtf ? security(syminfo.ticker, htf, _hull) : _hull
MHULL = HULL[0]
SHULL = HULL[2]

//COLOR
hullColor = switchColor ? (HULL > HULL[2] ? #00ff00 : #ff0000) : #ff9800

//PLOT
///< Frame
Fi1 = plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(visualSwitch ? SHULL : na, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
alertcondition(crossover(MHULL, SHULL), title="Hull trending up.", message="Hull trending up.")
alertcondition(crossover(SHULL, MHULL), title="Hull trending down.", message="Hull trending down.")
///< Ending Filler
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)

// Define Buy and Sell Conditions based on crossovers
buyCondition = crossover(MHULL, SHULL)
sellCondition = crossunder(MHULL, SHULL)

// Plotting the Hull Moving Average (HMA)
plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch)
plot(SHULL, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=transpSwitch)
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)

// Execute Strategy based on Buy and Sell Conditions
strategy.entry("Buy", strategy.long, when=buyCondition, alert_message=longAlertMessage)
strategy.entry("Sell", strategy.short, when=sellCondition, alert_message=shortAlertMessage)

// Additional elements like bar coloring remain unchanged
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)


Больше