TrumpBollingerEMEstratégia de Candlestick

Autora:ChaoZhang, Data: 2023-10-07 15:30:27
Tags:

Resumo

Esta estratégia utiliza Bandas de Bollinger, EMA e padrões de velas para negociação de jogos de azar de duas linhas, pertencentes a estratégias de negociação de curto prazo.

Princípios

A estratégia consiste nas seguintes partes:

  1. Bandeiras de Bollinger Gerencie trilhos superiores e inferiores com base no preço de fechamento e no desvio padrão.

  2. EMA Calcular a média móvel exponencial de 21 dias e gerar sinais de negociação quando o preço cruza a EMA.

  3. Padrões de candelabro Identificar pontos de reversão de preços, tais como cobertura de nuvens escuras inferior e padrão de perfuração superior para desencadear negociações.

  4. Jogos de azar de duas linhas Vá longo e curto simultaneamente com base em sinais de Bollinger, crossover EMA e padrões de velas.

A lógica é:

Use Bandas de Bollinger para identificar pontos de reversão potenciais, vá curto no trilho superior e longo no trilho inferior. Calcule a EMA de 21 dias e vá longo na cruz de ouro, vá curto na cruz da morte. Também use padrões de velas para identificar reversões, vá longo na nuvem escura inferior e curto no piercing superior. Combine todos os três sinais para tomar decisões finais de negociação de duas direções.

A estratégia integra múltiplos sinais de confirmação para melhorar a eficiência das decisões de negociação.

Análise das vantagens

As principais vantagens desta estratégia são:

  1. Melhor precisão com confirmação de sinais múltiplos

Usar Bollinger, EMA e candlestick juntos aumenta a precisão validando sinais. Isso ajuda a evitar sinais falsos e negócios errados.

  1. Reacção atempada e detecção de reversões

Os sinais combinados identificam rapidamente pontos de reversão potenciais para negociação oportuna antes que as reversões se estendam.

  1. Maior rendibilidade com negociações de duas linhas

A detenção de posições longas e curtas beneficia de grandes movimentos em ambas as direcções, o que reduz os riscos em mercados unidirecionais.

  1. Flexibilidade para a negociação a curto prazo

O Bollinger e o EMA de curto prazo permitem captar movimentos de curto prazo, adequados para negociações frequentes e para responder a flutuações de alta frequência.

  1. Directamente utilizáveis e simples de operar

O código de estratégia completo torna-o diretamente utilizável para negociação ao vivo.

Análise de riscos

Os riscos potenciais são:

  1. Possíveis perdas de parada consecutivas

A Whipsaw dos sinais Bollinger, EMA e candlestick pode causar stop loss consecutivos. Ajuste os parâmetros para garantir uma stop loss razoável.

  1. Riscos mais elevados na negociação de duas linhas

A retenção de posições longas e curtas pode amplificar as perdas. É necessário capital suficiente para suportar os riscos.

  1. Monitoramento rigoroso necessário para a negociação a curto prazo

A frequência de negociação a curto prazo requer um acompanhamento atento do mercado.

  1. Espaço de otimização limitado

O Bollinger e a EMA têm um espaço de otimização relativamente pequeno.

  1. Padrões comuns de candelabro podem não ser claros

Parte da estratégia baseia-se em sinais de candelabro que às vezes podem não ser claros.

Orientações de otimização

A estratégia pode ser melhorada nos seguintes aspectos:

  1. Integrar mais sinais de indicador

Adicionando outros indicadores como o KD, o MACD diversifica as fontes de sinal e melhora a precisão das decisões.

  1. Incorporar aprendizado de máquina

Usar algoritmos de ML para analisar dados históricos e aumentar ou substituir alguns sinais de indicador para reduzir a intervenção manual.

  1. Otimizar o stop profit/loss

Introduzir um stop profit adaptativo baseado no desempenho e um trailing stop loss para reduzir o risco.

  1. Melhorar a gestão dos riscos

Otimizar a alocação de capital, o dimensionamento das posições e as estratégias de controlo de riscos em função das condições do mercado.

  1. Backtesting quantitativo e otimização

Utilize backtesting e negociação de papel para otimizar repetidamente os parâmetros e ajudar as decisões de negociação ao vivo.

  1. Negociação automatizada

Parametrizar a estratégia com base nos resultados dos backtests e incorporá-la ao sistema de negociação automatizado para execução em mãos livres.

Conclusão

Esta estratégia integra os sinais de Bollinger, EMA e candlestick para validação múltipla. A negociação de duas linhas melhora ainda mais a lucratividade. Com resposta rápida, é adequada para negociação frequente de curto prazo.


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

//@version=4
//Design by MrPhu in August,10,2018
strategy("TrumpShipper_Long_Short V26", overlay=true)
filterFractals = input(true, title=" Follow Code #Trump On/Off")
dt = 0.0001
confidence=(request.security(syminfo.tickerid, 'D', close)-request.security(syminfo.tickerid, 'D', close[1]))/request.security(syminfo.tickerid, 'D', close[1])
prediction = confidence > dt ? true : confidence < -dt ? false : prediction[1]

if (prediction)
    strategy.exit("Close", "Short ")
    strategy.entry("Long ", strategy.long)

if (not prediction)
    strategy.exit("Close", "Long ")
    strategy.entry("Short ", strategy.short)
///////////Bollinger Band///////////////
length = 20
crc = close, title="Source"
mult = 2.0
basis = sma(crc, length)
dev = mult * stdev(crc, length)
upper = basis + dev
lower = basis - dev
spanColor = prediction ? green : red, transp=90

p1 = plot(upper, title="Short", style=line, linewidth=1, color=spanColor)
p2 = plot(lower, title="Long", style=line, linewidth=1, color=spanColor)

fill(p1, p2, color=spanColor, transp=90, title="Fill")

/////////////
Optional_TimeFrame = 'D'

M_HIGH = request.security(syminfo.tickerid, Optional_TimeFrame, high)
M_OPEN = request.security(syminfo.tickerid, Optional_TimeFrame, open)
M_LOW = request.security(syminfo.tickerid, Optional_TimeFrame, low)

H_RANGE = M_HIGH-M_OPEN
L_RANGE = M_OPEN-M_LOW

H_236 = M_HIGH - H_RANGE * 0.236
H_382 = M_HIGH - H_RANGE * 0.382
H_500 = M_HIGH - H_RANGE * 0.500
H_618 = M_HIGH - H_RANGE * 0.618
H_764 = M_HIGH - H_RANGE * 0.764

L_236 = M_LOW + L_RANGE * 0.236
L_382 = M_LOW + L_RANGE * 0.382
L_500 = M_LOW + L_RANGE * 0.500
L_618 = M_LOW + L_RANGE * 0.618
L_764 = M_LOW + L_RANGE * 0.764

pl1=plot(M_HIGH, color=M_HIGH != M_HIGH[1] ?na:black, style=line, linewidth=1, transp=80)

pl2=plot(H_236, color=H_236 != H_236[1] ?na:gray, style=line, linewidth=1, transp=80)
pl3=plot(H_382, color=H_382 != H_382[1] ?na:black, style=line, linewidth=1, transp=80)
pl4=plot(H_500, color=H_500 != H_500[1] ?na:red, style=line, linewidth=1, transp=80)
pl5=plot(H_618, color=H_618 != H_618[1] ?na:gray, style=line, linewidth=1, transp=80)
pl6=plot(H_764, color=H_764 != H_764[1] ?na:gray, style=line, linewidth=1, transp=80)

pl7=plot(M_OPEN, color=M_OPEN != M_OPEN[1] ?na:blue, style=line, linewidth=2)

pl8=plot(L_236, color=L_236 != L_236[1] ?na:gray, style=line, linewidth=1, transp=80)
pl9=plot(L_382, color=L_382 != L_382[1] ?na:black, style=line, linewidth=1, transp=80)
pl10=plot(L_500, color=L_500 != L_500[1] ?na:red, style=line, linewidth=1, transp=80)
pl11=plot(L_618, color=L_618 != L_618[1] ?na:black, style=line, linewidth=1, transp=80)
pl12=plot(L_764, color=L_764 != L_764[1] ?na:gray, style=line, linewidth=1, transp=80)

pl13=plot(M_LOW, color=M_LOW != M_LOW[1] ?na:black, style=line, linewidth=1, transp=80)

SHOW_MA = false
MA_SRC = hlc3
MA_LENGTH = 21

_MA = ema(MA_SRC, MA_LENGTH)
pl14=plot(not SHOW_MA ? na : _MA, color=teal, linewidth=2)

SHOW_SIGNALS = true

BUYX(_F) => cross(_F, MA_SRC) and rising(_MA, 1)
SELX(_F) => cross(_F, MA_SRC) and falling(_MA, 1)

SEL_SIGNAL = SELX(H_236) or SELX(H_382) or SELX(H_500) or SELX(H_618) or SELX(H_764) or SELX(L_236) or SELX(L_382) or SELX(L_500) or SELX(L_618) or SELX(H_764)

BUY_SIGNAL = BUYX(H_236) or BUYX(H_382) or BUYX(H_500) or BUYX(H_618) or BUYX(H_764) or BUYX(L_236) or BUYX(L_382) or BUYX(L_500) or BUYX(L_618) or BUYX(H_764)

//================= Chart 30m =================/////
//Jurij
h_left = 10
h_right = 10
//barCount = nz(barCount[1]) + 1
//check history and realtime PTZ
h_left_low = lowest(h_left)
h_left_high = highest(h_left)
newlow = low <= h_left_low
newhigh = high >= h_left_high
central_bar_low = low[h_right + 1]
central_bar_high = high[h_right + 1]
full_zone_low = lowest(h_left + h_right + 1)
full_zone_high = highest(h_left + h_right + 1)
central_bar_is_highest = central_bar_high >= full_zone_high
central_bar_is_lowest = central_bar_low <= full_zone_low
plotchar(central_bar_is_highest ? -1 : 0, offset=-h_right-1 ,color=red, text="Top")
plotchar(central_bar_is_lowest ? 1 : 0, offset=-h_right-1 ,location=location.belowbar, color=green, text="Bottom")

Mais.