
Эта стратегия объединяет индикаторы ценового канала и MACD, позволяя отслеживать тенденции и судить о перепродаже в течение нескольких временных рамок, что позволяет принимать решения о покупке и продаже. Стратегия одновременно включает в себя стоп-стоп для управления рисками.
Индикатор ценового канала строит ценовой канал на основе средней линии EMA с наивысшей и самой низкой ценой и определяет тенденцию через ценовой прорыв в канале; индикатор MACD определяет тенденцию к полиаэрогенности, выше нулевой оси - многоголовый рынок, ниже - пустой рынок.
Торговые сигналы для этой стратегии исходят из следующих аспектов:
Гистограмма MACD перевернута в красный цвет.
Вход пустой, когда цена близка к нижней части канала и MACD находится ниже нулевой оси
Цена близка к вершине канала и MACD выше нулевой оси
При переходе через нулевую ось MACD Enter многоголовый, при переходе через нулевую ось Enter пустой
Сигнал “выход” исходит из параметра “стоп-стоп”.
Проверка комбинации показателей, чтобы избежать ложных прорывов
Сочетание индикаторов разных временных рамок позволяет более надежно определить направление тенденции
Внедрение механизма сдерживания убытков для эффективного контроля одиночных убытков
Ограниченное пространство для оптимизации параметров, легко переоптимизируемый
Если параметры ценового канала установлены на низком уровне, они могут привести к значительным потерям.
Стоп-стоп будет слишком маленьким и будет иметь большие потери
Решение проблемы:
Используйте метод ходьбы вперед, чтобы избежать оптимизации параметров
Параметры ценового канала настроены на самостоятельные параметры
Введение паузы волатильности для динамической коррекции паузы расстояния
Оптимизация комбинации MACD-параметров
Приспособность к оптимизации ценового канала
Добавление дополнительных условий фильтрации, чтобы избежать ложных прорывов и повысить эффективность
Эта стратегия объединяет преимущества индикатора ценового канала и индикатора 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)