Стратегия торговли двойной корпусной скользящей средней

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

img

Обзор

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

Принципы

В основе стратегии торговли двойной скобной скобной средней является двойная скобная скобная средняя (DHMA). DHMA состоит из трех линий: средних, верхних и нижних рельсов, представляющих различные средние цены.

Средний рельс: режим ((modeSwitch, src, len)
Верхняя рельса: корпус[0] Нижняя рельса: HULL[2]

Здесь функция Mode может выбирать между различными вариантами Hull MA, такими как HMA, EHMA или THMA. Src означает источник цены, а len - параметр периода.

Стратегия использует средний рельс DHMA в качестве отсчета для определения ценовых отношений и генерации торговых сигналов:

  • Когда цена пересекает средний рельс, делайте длинный.
  • Когда цена переходит ниже среднего рельса, закрыть позицию.

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

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

Стратегия торговли двойной скользящей средней имеет следующие преимущества:

  1. Использует механизм трех полос вместо одной скользящей средней линии для улучшения эффектов поддержки/сопротивления и отслеживания тренда.

  2. По сравнению с обычными МА, скользящие средние Hull имеют меньшее отставание и лучше реагируют на изменения цен.

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

  4. Логика проста и ясна, легко внедряется, подходит для высокочастотного алгоритмического трейдинга.

  5. Настраиваемые типы и параметры Hull MA для оптимизации для различных продуктов и временных рамок.

Риски

Хотя стратегия имеет много преимуществ, она также несет некоторые риски:

  1. Более высокие показатели могут возникнуть во время бурных рыночных сборов.

  2. Стратегия в основном отслеживает тенденции, менее эффективная в плоские периоды.

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

  4. Частые сигналы могут привести к чрезмерной торговле.

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

Вот некоторые основные аспекты, которые необходимо оптимизировать для стратегии:

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

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

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

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

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

  6. Уточните логику входа, подтвердите вход с помощью шаблонов свечей, чтобы повысить уверенность в входе.

Заключение

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


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

//@version=4
//Basic Hull Ma Pack tinkered by InSilico 
//Converted to Strategy by DashTrader
strategy("Hull Suite Strategy", overlay=true, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0)
//////////////////////////////////////////////////////////////////////
// Testing Start dates
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop
//////////////////////////////////////////////////////////////////////
//INPUT
HAClose = security(heikinashi(syminfo.tickerid), timeframe.period, close)
src = input(close, title="Source")
modeSwitch = input("Hma", title="Hull Variation", options=["Hma", "Thma", "Ehma"])
length = input(55, title="Length(180-200 for floating S/R , 55 for swing entry)")
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)

//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, length)
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)
///< Ending Filler
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)


if HULL[0] > HULL[2] and testPeriod()
    strategy.entry("long", strategy.long)
if HULL[0] < HULL[2] and testPeriod()
    strategy.close("long")

Больше