Стратегия многовременной торговли на основе ценовых каналов и MACD


Дата создания: 2023-12-08 15:15:37 Последнее изменение: 2023-12-08 15:15:37
Копировать: 0 Количество просмотров: 616
1
Подписаться
1621
Подписчики

Стратегия многовременной торговли на основе ценовых каналов и MACD

Обзор

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

Стратегический принцип

Индикатор ценового канала строит ценовой канал на основе средней линии EMA с наивысшей и самой низкой ценой и определяет тенденцию через ценовой прорыв в канале; индикатор MACD определяет тенденцию к полиаэрогенности, выше нулевой оси - многоголовый рынок, ниже - пустой рынок.

Торговые сигналы для этой стратегии исходят из следующих аспектов:

  1. Гистограмма MACD перевернута в красный цвет.

  2. Вход пустой, когда цена близка к нижней части канала и MACD находится ниже нулевой оси

  3. Цена близка к вершине канала и MACD выше нулевой оси

  4. При переходе через нулевую ось MACD Enter многоголовый, при переходе через нулевую ось Enter пустой

Сигнал “выход” исходит из параметра “стоп-стоп”.

Стратегические преимущества

  1. Проверка комбинации показателей, чтобы избежать ложных прорывов

  2. Сочетание индикаторов разных временных рамок позволяет более надежно определить направление тенденции

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

Стратегический риск

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

  2. Если параметры ценового канала установлены на низком уровне, они могут привести к значительным потерям.

  3. Стоп-стоп будет слишком маленьким и будет иметь большие потери

Решение проблемы:

  1. Используйте метод ходьбы вперед, чтобы избежать оптимизации параметров

  2. Параметры ценового канала настроены на самостоятельные параметры

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

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

  1. Оптимизация комбинации MACD-параметров

  2. Приспособность к оптимизации ценового канала

  3. Добавление дополнительных условий фильтрации, чтобы избежать ложных прорывов и повысить эффективность

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Sonic R + Barcolor MACD", overlay=true)
HiLoLen     = input(34, minval=2,title="High Low channel Length")
pacL        = ema(low,HiLoLen)
pacH        = ema(high,HiLoLen)
// Plot the Price Action Channel (PAC) base on EMA high,low and close//
L=plot(pacL, color=yellow, linewidth=1, title="High PAC EMA",transp=0)
H=plot(pacH, color=yellow, linewidth=1, title="Low PAC EMA",transp=0)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
hisup= iff(delta>delta[1] and delta>0, 1,
	     iff(delta<delta[1], -1, nz(hisup[1], 0)))
hisdown = iff(delta<delta[1] and delta<0, 1,
	     iff(delta>delta[1], -1, nz(hisdown[1], 0)))
barcolor(hisup==1 and MACD>0 ? lime: hisdown==1 and MACD<0 ? red : blue )
//SR
PeriodLookBack = input(34)
xHighest = highest(PeriodLookBack)
xLowest = lowest(PeriodLookBack)
Trend= close>xHighest[1] ? 1: close< xLowest[1]?-1 : nz(Trend[1],0)
// Strategy//
conbuy= hisdown==1 or MACD<0 ? 1: hisup[5]==1 and MACD[5]>0 ?-1 : nz(conbuy[1],0)
gobuy= conbuy==1 and close-open<2*(pacH-pacL) and high-close<(pacH-pacL)/2 and hisup==1 and MACD>0 and close-pacH<1.5*(pacH-pacL) and close>open and high-close<close-open and close>pacH
consell= hisup==1 or MACD>0 ?1 : hisdown[5]==1 and MACD[5]<0 ?-1 : nz(consell[1],0)
gosell= consell==1 and open-close<2*(pacH-pacL) and close-low<(pacH-pacL)/2 and hisdown==1 and MACD<0 and pacL-close<1.5*(pacH-pacL) and close<open and close-low<open-close and close<pacL
if(gobuy)
    strategy.entry("Buy",strategy.long)
if(gosell)
    strategy.entry("Sell",strategy.short)
//if(Trend==-1 and close<pacL)
//    strategy.close("Buy")
//if(Trend==1 and close>pacH)
//    strategy.close("Sell")
 ////////////// TP and SL//
SL = input(defval=100.00, title="Stop Loss Point", type=float, step=1)
rr= input(defval=0.1,title="Reward/Risk",type=float)
useTPandSL = input(defval = false, title = "Use exit order strategy?")
Stop = SL
Take=SL*rr
Q = 100
if(useTPandSL)
    strategy.exit("Out Long", "Buy", qty_percent=Q, profit= Take, loss=Stop)
    strategy.exit("Out Short", "Sell", qty_percent=Q, profit= Take, loss=Stop)