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

Автор:Чао Чжан, Дата: 2023-11-21 17:00:49
Тэги:

img

Обзор

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

Принципы

Стратегия сначала рассчитывает быструю линию (EMA с 12 периодами), медленную линию (EMA с 26 периодами) и разницу MACD. Затем она определяет длинные и короткие сигналы на основе скрещивания быстрых и медленных линий, а также положительное/отрицательное значение разницы MACD:

  1. Когда быстрая линия пересекает медленную линию (золотой крест), а разница MACD пересекает 0, это сигнал покупки.
  2. Когда быстрая линия пересекается ниже медленной линии (смертный крест) и разница MACD пересекается ниже 0, это сигнал продажи.

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

Кроме того, на графике изображены формы стрелок, которые указывают на сигналы покупки и продажи.

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

Преимущества этой стратегии включают:

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

Риски и решения

Некоторые риски этой стратегии:

  1. Кроссоверы могут генерировать ложные сигналы и вызывать чрезмерную торговлю.
  2. Невозможно различить диапазоны в тренде, что потенциально может привести к потерям.
  3. Фиксированные правила не могут адаптироваться к изменяющимся рынкам.

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

Некоторые способы улучшения стратегии:

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

Резюме

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


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

//@version=3
//Daniels stolen code
strategy(shorttitle="Daniels Stolen Code", title="Daniels Stolen Code", overlay=true, calc_on_order_fills=true, pyramiding=0)

//Define MACD Variables
fast = 12, slow = 26
fastMACD = ema(hlc3, fast)
slowMACD = ema(hlc3, slow)
macd = fastMACD - slowMACD
signal = sma(macd, 9)
hist = macd - signal
currMacd = hist[0]
prevMacd = hist[1]
currPrice = hl2[0]
prevPrice = hl2[1]

buy = currPrice > prevPrice and currMacd > prevMacd
sell = currPrice < prevPrice and currMacd < prevMacd
neutral = (currPrice < prevPrice and currMacd > prevMacd) or (currPrice > prevPrice and currMacd < prevMacd)
//Plot Arrows

timetobuy = buy==1 and (sell[1]==1 or (neutral[1]==1 and sell[2]==1) or (neutral[1]==1 and neutral[2]==1 and sell[3]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and sell[4]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and sell[5]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and neutral[5]==1 and sell[6]==1))
timetosell = sell==1 and (buy[1]==1 or (neutral[1]==1 and buy[2]==1) or (neutral[1]==1 and neutral[2]==1 and buy[3]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and buy[4]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and buy[5]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and neutral[5]==1 and buy[6]==1))

plotshape(timetobuy, color=blue, location=location.belowbar, style=shape.arrowup)
plotshape(timetosell, color=red, location=location.abovebar, style=shape.arrowdown)
//plotshape(neutral, color=black, location=location.belowbar, style=shape.circle)


//Test Strategy
// strategy.entry("long", true, 1, when = timetobuy and time > timestamp(2017, 01, 01, 01, 01)) // buy by market if current open great then previous high
// strategy.close("long", when = timetosell and time > timestamp(2017, 01, 01, 01, 01))

strategy.order("buy", true, 1, when=timetobuy==1 and time > timestamp(2019, 01, 01, 01, 01))
strategy.order("sell", false, 1, when=timetosell==1 and time > timestamp(2019, 01, 01, 01, 01))



// strategy.entry(id = "Short", long = false, when = enterShort())
// strategy.close(id = "Short", when = exitShort())

//strategy.entry("long", true, 1, when = open > high[1]) // enter long by market if current open great then previous high
// strategy.exit("exit", "long", profit = 10, loss = 5) // ge

Больше