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


Дата создания: 2023-11-21 17:00:49 Последнее изменение: 2023-11-21 17:00:49
Копировать: 0 Количество просмотров: 353
1
Подписаться
1166
Подписчики

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

Обзор

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

Принципы

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

  1. Сигнал покупки при прохождении медленной линии на скоростной линии и прохождении MACD-дифференциала на 0
  2. Продается при прохождении медленной линии под скорейшей и 0 при разнице MACD

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

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

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

Эта стратегия имеет следующие преимущества:

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

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

Однако эта стратегия также несет в себе некоторые риски:

  1. Двухлинейный скрещивание легко приводит к созданию ложных сигналов, что может привести к чрезмерной торговле. Можно соответствующим образом изменить параметры средней линии или добавить другие условия фильтрации, чтобы уменьшить ложные сигналы
  2. Невозможность определить колебания в тренде, возможна потеря. Это можно избежать в сочетании с трендовым показателем, таким как ADX
  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