Стратегия Samsuga SuperTrend MACD

Автор:Чао Чжан, Дата: 2024-03-11 11:24:20
Тэги:

img

Обзор

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

Принцип стратегии

  1. Используйте функцию ta.supertrend для расчета индикатора SuperTrend с параметрами периода ATR и коэффициентом множителя.
  2. Определить длинный/короткий тренд на основе изменений направления индикатора SuperTrend. Когда направление меняется от большего чем 0 до меньшего или равного 0, он считается восходящим; в противном случае он считается нисходящим.
  3. Используйте функцию request.security для получения значений индикатора MACD на 30-минутный временной интервал, включая линию MACD, линию сигнала и гистограмму.
  4. При восходящем тренде, если гистограмма MACD больше 0, открыть длинную позицию и закрыть любую предыдущую короткую позицию.
  5. При нисходящем тренде, если гистограмма MACD меньше 0, открыть короткую позицию и закрыть любую предыдущую длинную позицию.

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

  1. Сочетает в себе индикаторы тренда и импульса, что позволяет ему хорошо адаптироваться к различным рыночным условиям.
  2. Использует более длительный индикатор MACD в качестве вспомогательного условия, который может эффективно отфильтровать некоторые ложные сигналы.
  3. Логика стратегии проста и понятна, легко понять и реализовать, подходит для обучения новичков.
  4. Параметры стратегии регулируемы и могут быть оптимизированы для различных рынков и инструментов.

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

  1. Стратегия может генерировать частые торговые сигналы на нестабильных рынках, что приводит к высокой частоте торговли и снижению затрат.
  2. Индикатор SuperTrend чувствителен к параметрам, и различные значения параметров могут давать разные результаты.
  3. Индикатор MACD может отличаться от цены, что приводит к ошибочным торговым сигналам.
  4. В стратегии отсутствуют меры стоп-лосса, которые могут подвергать ее большему риску во время слабой непрерывности тренда или неожиданных событий.

Направление оптимизации

  1. Для улучшения надежности сигнала следует рассмотреть возможность добавления дополнительных условий фильтрации, таких как прорыв цены через важные уровни поддержки/сопротивления, изменения объема торгов и т.д.
  2. Для неуравновешенных рынков следует использовать более короткий индикатор MACD или другие индикаторы, подходящие для рынков с ограниченным диапазоном, для определения тенденции.
  3. Включить меры стоп-лосса, такие как стоп-лосс с фиксированной точкой, стоп-лосс с последующей точкой и т.д., чтобы контролировать максимальный риск на одну сделку.
  4. Оптимизировать параметры для различных рынков и инструментов, чтобы найти наиболее подходящие комбинации параметров.

Заключение

Сочетая индикатор SuperTrend и индикатор MACD, эта стратегия улавливает небольшие тенденции, учитывая также непрерывность тренда, что делает ее относительно всеобъемлющей и сбалансированной стратегией. Силы стратегии заключаются в ее четкой логике, простоте понимания и реализации и использовании более длительного временного рамок индикатора MACD в качестве вспомогательного условия для эффективного фильтрации ложных сигналов. Однако стратегия также имеет некоторые риски, такие как потенциал для частой торговли на нестабильных рынках, чувствительность к параметрам и отсутствие мер стоп-лосса.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Samsuga supertrend", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)


atrPeriod = input.int(7,    "ATR Length", minval = 1)
factor =    input.float(1.0, "Factor",     minval = 0.01, step = 0.01)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

supertrend := barstate.isfirst ? na : supertrend
upTrend =    plot(direction <= 0 ? supertrend : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend =  plot(direction <= 0 ? na : supertrend, "Down Trend", color = color.red,   style = plot.style_linebr)
bodyMiddle = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)
longcondition = direction[1] > direction 
shortCondition = direction[1] < direction 

macdp1 = 3
macdp2=10
macdp3=6

[macdLine, signalLine, histLine] =request.security(symbol = syminfo.tickerid, timeframe = "30",expression = ta.macd(close,macdp1,macdp2,macdp3),lookahead=barmerge.lookahead_on)
// plot(macdLine,   title = "MACD",   color = #2962FF)
// plot(signalLine, title = "Signal", color = #FF6D00)
// 8, 21, 5
// 8,13,9
// 12,26,9
//  1--> 3, 17, 5
// 3, 10, 16
// log.info(str.tostring(syminfo.tickerid)+str.tostring(histLine[0]))
//  /////////----------------METHOD 1-----------------////////////////
// if(longcondition)
//     if(strategy.opentrades>0)
//         strategy.close("Long","Prev Exit", immediately = true)
//     if( histLine[0] > 0.1)
//         strategy.entry(id= "Long", direction=strategy.long,  comment = "update long")

    
// else if(shortCondition and strategy.openprofit<=0.1) 
//     strategy.close("Long",comment = "Close",immediately = true)
//  /////////----------------METHOD 2-----------------////////////////
// if(longcondition)
//     if(histLine[0] > 0)
//         strategy.entry(id= "Long", direction=strategy.long,  comment = "update long" )
//         strategy.exit("Long", loss = close*0.2)


    
// else if(shortCondition ) 
//     strategy.close("Long",comment = "Close",immediately = true)
//  /////////----------------METHOD 3-----------------////////////////
// log.info(str.tostring(syminfo.tickerid)+str.tostring(histLine[0]))
if(longcondition)
    if(histLine[0] > 0)    
        strategy.close("Short",comment = "E-S", alert_message = "E-S",disable_alert = true)
        strategy.entry(id= "Long", direction=strategy.long,  comment = "L",alert_message = "L")
else if(shortCondition) 
    if(histLine[0] < 0)    
        strategy.close("Long",comment = "E-L",alert_message = "E-L",disable_alert = true)
        strategy.entry(id= "Short", direction=strategy.short,  comment = "S",alert_message = "S")

Больше