Este artigo irá apresentar-lhe uma estratégia de negociação de moeda digital chamada de estratégia de integração de várias estratégias. Esta estratégia integra os benefícios de várias estratégias individuais para construir uma combinação de várias estratégias, com o objetivo de obter maior estabilidade e diversidade.
Esta estratégia integra quatro estratégias de negociação quantitativa comuns, incluindo:
Estratégia de ruptura de corredor: construir um canal de alta e baixa de acordo com o preço máximo e mínimo de um determinado ciclo e fazer mais vazio quando o preço quebra o canal.
Estratégia de dinâmica: julgar a dinâmica de acordo com a direção da mudança de preço em um determinado período, fazer mais quando o preço aumenta e acelera, e fazer zero quando a queda acelera.
Estratégia MACD: estabelecer posições de hipoteca excessivas com base em forquilhas de ouro e forquilhas mortas na linha média rápida e lenta.
A estratégia de Haramiformations: determinar a possível reversão futura do preço através da identificação de uma determinada curva, negociando perto do ponto de viragem.
Cada uma dessas estratégias tem suas vantagens e, quando combinadas, podem gerar ganhos mais estáveis.
A estratégia de ruptura de canal pode capturar a tendência do mercado; a estratégia de dinâmica pode rastrear a tendência de curto prazo em tempo real; a estratégia MACD pode descobrir os pontos de reversão de tendência de médio prazo; a estratégia Harami pode julgar os pontos de reversão críticos.
Integrando-os dentro de uma estratégia, é possível caçar perdas em situações de tendência e abrir posições de contra-mão perto dos pontos de inflexão. Ao mesmo tempo, a dispersão de risco entre as diferentes estratégias também é possível.
Claro, há alguns pontos negativos nessa combinação de estratégias:
A estratégia é muito complexa, os parâmetros são difíceis de ajustar
Algumas estratégias podem estar em conflito
Aumento da frequência e do custo das transações
A resposta pode ser pior do que uma única estratégia
Portanto, os usuários devem estar atentos à dificuldade de ajuste de parâmetros, testar a interação entre os conflitos, controlar a frequência de negociação e fazer um bom teste de retorno para garantir sua estabilidade a longo prazo.
Em geral, este sistema de negociação quantitativa de integração de várias estratégias, pode obter um portfólio de negociação muito rico, o desempenho em grandes tendências também é muito bom. Ele combina os benefícios de diferentes estratégias, pode obter um lucro positivo mais estável no longo prazo.
/*backtest
start: 2023-09-07 00:00:00
end: 2023-09-14 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//Channel breakout
strategy("all_strategy", overlay=true)
length = input(title="Length", minval=1, maxval=1000, defval=5)
upBound = highest(high, length)
downBound = lowest(low, length)
if (not na(close[length]))
strategy.entry("ChBrkLE", strategy.long, stop=upBound + syminfo.mintick, comment="ChBrkLE")
strategy.entry("ChBrkSE", strategy.short, stop=downBound - syminfo.mintick, comment="ChBrkSE")
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)
//Momentum
length1 = input(12)
price = close
momentum(seria, length) =>
mom = seria - seria[length1]
mom
mom0 = momentum(price, length1)
mom1 = momentum( mom0, 1)
if (mom0 > 0 and mom1 > 0)
strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
strategy.cancel("MomSE")
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)
//MACD Strategy
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
if (crossover(delta, 0))
strategy.entry("MacdLE", strategy.long, comment="MacdLE")
if (crossunder(delta, 0))
strategy.entry("MacdSE", strategy.short, comment="MacdSE")
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)
//Harami
pctDw = input(60,minval=0,maxval=90,title="Doji, Min % of Range of Candle for Wicks")
pipMin= input(0,minval=0,title="Doji, Previous Candle Min Pip Body Size")
sname=input(true,title="Show Price Action Bar Names")
cbar = input(false,title="Highlight Harami & Doji Bars")
sHm = input(false,title="Show Only Harami Style Doji's")
setalm = input(true, title="Generate Alert for Harami & Doji Bars")
uha =input(true, title="Use Heikin Ashi Candles for Calculations")
bars = input(3,minval=1,maxval=3,step=1, title="Doji, Number of Lookback Bars")
//
// Use only Heikinashi Candles for all calculations
srcclose = uha ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close
srcopen = uha ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open
srchigh = uha ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high
srclow = uha ?security(heikinashi(syminfo.tickerid), timeframe.period, low) : low
//
pip = syminfo.mintick
range = srchigh - srclow
// Calculate Doji/Harami Candles
pctCDw = (pctDw/2) * 0.01
pctCDb = (100-pctDw) * 0.01
//Lookback Candles for bulls or bears
lbBull = bars==1? srcopen[1]>srcclose[1]: bars==2? (srcopen[1]>srcclose[1] and srcopen[2]>srcclose[2]): bars==3?(srcopen[1]>srcclose[1] and srcopen[2]>srcclose[2] and srcopen[3]>srcclose[3]):false
lbBear = bars==1? srcopen[1]<srcclose[1]: bars==2? (srcopen[1]<srcclose[1] and srcopen[2]<srcclose[2]): bars==3?(srcopen[1]<srcclose[1] and srcopen[2]<srcclose[2] and srcopen[3]<srcclose[3]):false
//Lookback Candle Size only if mininum size is > 0
lbSize = pipMin==0? true : bars==1 ? (abs(srcopen[1]-srcclose[1])>pipMin*pip) :
bars==2 ? (abs(srcopen[1]-srcclose[1])>pipMin*pip and abs(srcopen[2]-srcclose[2])>pipMin*pip) :
bars==3 ? (abs(srcopen[1]-srcclose[1])>pipMin*pip and abs(srcopen[2]-srcclose[2])>pipMin*pip and abs(srcopen[3]-srcclose[3])>pipMin*pip) :
false
dojiBu = (srcopen[1] >= max(srcclose,srcopen) and srcclose[1]<=min(srcclose,srcopen)) and lbSize and
(abs(srcclose-srcopen)<range*pctCDb and (srchigh-max(srcclose,srcopen))>(pctCDw*range) and (min(srcclose,srcopen)-srclow)>(pctCDw*range))? 1 : 0
dojiBe = (srcclose[1] >= max(srcclose,srcopen) and srcopen[1]<=min(srcclose,srcopen)) and lbSize and
(abs(srcclose-srcopen)<range*pctCDb and (srchigh-max(srcclose,srcopen))>(pctCDw*range) and (min(srcclose,srcopen)-srclow)>(pctCDw*range))? 1 : 0
haramiBull = (srcopen<=srcclose or (max(srcclose,srcopen)-min(srcclose,srcopen))<pip*0.5) and lbBull and dojiBu
haramiBear = (srcopen>=srcclose or (max(srcclose,srcopen)-min(srcclose,srcopen))<pip*0.5) and lbBear and dojiBe
dojiBull = not sHm and not haramiBull and not haramiBear and lbBull and dojiBu
dojiBear = not sHm and not haramiBull and not haramiBear and lbBear and dojiBe
//
plotshape(haramiBear and sname?srchigh:na,title="Bearish Harami",text='Bearish\nHarami',color=red, style=shape.arrowdown,location=location.abovebar)
plotshape(haramiBear and cbar?max(srcopen,srcclose):na,title="Bear Colour Harami",color=red, style=shape.circle,location=location.absolute,size=size.normal)
//
plotshape(haramiBull and sname?srclow:na,title="Bullish Harami",text='Bullish\nHarami',color=green, style=shape.arrowup,location=location.belowbar)
plotshape(haramiBull and cbar?max(srcopen,srcclose):na,title="Bull Colour Harami",color=green, style=shape.circle,location=location.absolute,size=size.normal)
//
plotshape(dojiBear and sname?srchigh:na,title="Bearish Doji",text='Bearish\nDoji',color=fuchsia, style=shape.arrowdown,location=location.abovebar)
plotshape(dojiBear and cbar?max(srcopen,srcclose):na,title="Bear Colour Doji",color=fuchsia, style=shape.circle,location=location.absolute,size=size.normal)
//
plotshape(dojiBull and sname?srclow:na,title="Bullish Doji",text='Bullish\nDoji',color=aqua, style=shape.arrowup,location=location.belowbar)
plotshape(dojiBull and cbar?max(srcopen,srcclose):na,title="Bull Colour Doji",color=aqua, style=shape.circle,location=location.absolute,size=size.normal)
// Only Alert harami Doji's
bcolor = haramiBull ? 1 : haramiBear ? 2 : dojiBull ? 3 : dojiBear ? 4 : 0
baralert = setalm and bcolor>0
alertcondition(baralert,title="PACDOJI Alert",message="PACDOJI Alert")
//
plotshape(na(baralert[1])?na:baralert[1], transp=0,style=shape.circle,location=location.bottom, offset=-1,title="Bar Alert Confirmed",
color=bcolor[1]==1 ? green : bcolor[1]==2? red : bcolor[1]==3? aqua : bcolor[1]==4? fuchsia : na)
//EOF