Стратегия хеджирования высокой частоты на основе цвета штрихов MACD и линейной регрессии

Автор:Чао Чжан, Дата: 2023-10-27 10:42:54
Тэги:

img

Обзор

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

Логика стратегии

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

  1. Цвет полоски MACD как индикатор оценки тренда. Когда цвет полоски MACD зеленый, это указывает на восходящую тенденцию, поэтому не следует размещать короткие ордера. Когда полоска MACD красная, это указывает на нисходящую тенденцию, поэтому не следует размещать длинные ордера.

  2. Линейная регрессия как ключевой индикатор торгового сигнала. Идите длинный, когда цена пересекает линию линейной регрессии, и идти короткий, когда цена пересекает ниже линии.

  3. PAC Channel формируется EMA высоких, низких и близких цен для определения направления линии линейной регрессии.

  4. Закрыть позиции, когда цена пересекает эту линию.

Логика торговых сигналов:

Длинный сигнал: линейная регрессия пересекает нижнюю полосу PAC И линейная регрессия наклонена вверх И MACD-бар не красный.

Краткий сигнал: линейная регрессия пересекается ниже верхней полосы PAC И линейная регрессия наклонена вниз И стойка MACD не зеленая.

Сигнал выхода: цены пересекаются ниже EMA 89.

Эта стратегия сочетает в себе суждение о тенденциях и ключевые уровни цен для достижения высокочастотного хеджирования.

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

  1. Цвет полоски MACD помогает определить основной тренд и избегает торговли против тренда.

  2. Линейная регрессия гладка и фильтрует шум.

  3. Канал EMA четко определяет тенденцию "бычье" и "медвежье".

  4. Стоп-лосс должен быть разумно настроен на максимальную прибыль.

  5. Высокая частота торговли делает его подходящим для алгоритмической торговли.

  6. Достигает хеджирования сделок и может получать прибыль на рынках с диапазоном.

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

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

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

  3. Высокая частота торговли означает, что затраты на транзакции могут быть значительными.

  4. MACD имеет некоторое отставание и может пропустить краткосрочные обратные тенденции.

  5. Также каналы EMA нуждаются в постоянной оптимизации для адаптации к изменяющимся рыночным условиям.

Руководство по оптимизации

  1. Настройка линейной регрессии и параметров канала, чтобы лучше соответствовать различным приборам.

  2. Расширить диапазон стоп-лосса при сохранении соотношения прибыли/риска выше 1.

  3. Оптимизируйте параметры MACD, чтобы получить больше краткосрочных сигналов.

  4. Попробуйте использовать другие индикаторы для замены линейной регрессии, такие как полосы Боллинджера.

  5. Добавьте размеры позиций, чтобы избежать чрезмерных односторонних потерь.

  6. Включите другие индикаторы, такие как RSI, чтобы отфильтровать некоторые торговые сигналы.

Заключение

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


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

//@version=2
// strategy("Sonic R + Linear Reg + Kumo Cloud + Barcolor MACD", overlay=true,default_qty_value=10000,initial_capital=200,currency=currency.USD, pyramiding=1)
EMA = input(defval=89, title="EMA Signal")
HiLoLen     = input(34, minval=2,title="High Low channel Length")
pacC        = ema(close,HiLoLen)
pacL        = ema(low,HiLoLen)
pacH        = ema(high,HiLoLen)
DODGERBLUE = #1E90FFFF
// Plot the Price Action Channel (PAC) base on EMA high,low and close//
L=plot(pacL, color=DODGERBLUE, linewidth=1, title="High PAC EMA",transp=90)
H=plot(pacH, color=DODGERBLUE, linewidth=1, title="Low PAC EMA",transp=90)
C=plot(pacC, color=DODGERBLUE, linewidth=2, title="Close PAC EMA",transp=80)
//Moving Average//
signalMA =ema(close,EMA)
plot(signalMA,title="EMA Signal",color=black,linewidth=3,style=line)
linereg = linreg(close, EMA, 0)
plot(linereg, color = orange, title = "Linear Regression Curve", style = line, linewidth = 1)
//////ICHIMOKU/////////
conversionPeriods = input(9),
basePeriods = input(26, minval=1, title="Base Line")
laggingSpan2Periods = input(52, minval=1, title="Lagging Span"),
displacement = input(26, minval=1)
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine) 
leadLine2 = donchian(laggingSpan2Periods-1)
p1 = plot(leadLine1, offset = displacement-1, color=gray,title="Senkou span A", transp=90)
p2 = plot(leadLine2, offset = displacement-1, color=gray, title="Senkou span B", transp=90)
fill(p1, p2, color = leadLine1 > leadLine2 ? green : red, title="Kumo Cloud")
///////////////// MACD BARCOLOR /////////////////////
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 )
///////////// SIGNAL ///////////////
conbuy = iff(crossover(linereg,pacL) and rising(linereg,5), 1,
	     iff(crossover(linereg,pacH) or (crossunder(linereg,pacL) and pacL<signalMA), -1, nz(conbuy[1], 0)))
consell = iff(crossunder(linereg,pacH) and falling(linereg,5), 1,
	     iff(crossunder(linereg,pacL) or (crossover(linereg,pacH) and pacH>signalMA), -1, nz(consell[1], 0)))
golong= conbuy==1 and close>open and open<pacH and close>linereg and hisdown!=1
goshort= consell==1 and close<open and open>pacL and close<linereg and hisup!=1
if(golong)
    strategy.entry("Buy",strategy.long)
if(goshort)
    strategy.entry("Sell",strategy.short)
closelong= conbuy==-1
closeshort=consell==-1
if(closelong)
    strategy.close("Buy")
if(closeshort)
    strategy.close("Sell")
 ////////////// TP and SL//.
//SL = input(defval=200.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) 

Больше