O recurso está a ser carregado... Carregamento...

Ciclo de tendência de Schaff com estratégia de cruzamento de média móvel dupla

Autora:ChaoZhang, Data: 2023-12-12 17:43:19
Tags:

img

Resumo

Esta estratégia é chamada de Ciclo de Tendência Schaff com Estratégia de Crossover de Média Móvel Dupla. A ideia principal é determinar posições longas e curtas com base no indicador do Ciclo de Tendência Schaff (STC) e crossover de média móvel dupla. Especificamente, quando o STC sai das áreas de sobrecompra ou sobrevenda, o preço está acima da média móvel exponencial rápida e a EMA rápida está acima da EMA lenta, uma posição longa é aberta.

Estratégia lógica

A estratégia baseia-se principalmente em dois indicadores técnicos:

  1. Indicador de tendência: indicador STC para determinar a direção da tendência. O STC inclui a linha do indicador MACD, Estocástico e STC. Uma quebra ascendente da zona 0-25 sinaliza uma tendência de alta, enquanto uma quebra descendente da zona 75-100 sinaliza uma tendência de baixa.

  2. Crossover da média móvel: média móvel simples rápida (período padrão 35) cruza acima/abaixo da SMA lenta (período padrão 200). Um sinal de alta desencadeado quando a SMA rápida cruza acima da SMA lenta. Um sinal de baixa desencadeado no crossover oposto.

A lógica do sinal de negociação é definida do seguinte modo:

  1. Sinais longos: STC quebra acima da linha 25, SMA rápida está acima da SMA lenta e o preço de fechamento está acima da SMA rápida.

  2. Sinais curtos: STC quebra abaixo da linha 75, SMA rápida está abaixo da SMA lenta e o preço de fechamento está abaixo da SMA rápida.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. STC determina a tendência geral, enquanto os MAs duplos geram sinais de entrada específicos.

  2. Períodos de média móvel personalizáveis Os períodos de MA podem ser otimizados para diferentes condições de mercado.

  3. Risco controlado. O STC identifica os níveis de sobrecompra/supervenda para evitar compras de tops e vendas de fundos.

Análise de riscos

Há alguns riscos a considerar:

  1. O potencial de falhas no STC precisa de ser confirmado pela ação do preço.

  2. Mais sinais falsos de cruzes de MA. Requer ajuste de períodos de MA.

  3. Só negocia em uma direcção por vez, limita o espaço para posições abertas, considere permitir negociações bidirecionais.

  4. Nenhum tratamento do risco de spread na negociação de divisas por margem.

Optimização

Os possíveis caminhos de otimização incluem:

  1. Ajustar os parâmetros de sobrecompra/supervenda STC.

  2. Otimizar os períodos de MA para melhorar a fiabilidade do sinal cruzado.

  3. Adicione filtros adicionais como Bandas de Bollinger para reduzir falsos negócios de ruptura.

  4. Implementar uma lógica comercial bidirecional para aumentar a capacidade.

  5. Adicionar a lógica de stop loss para controlar a perda por negociação.

Conclusão

Em resumo, esta estratégia combina indicadores de cruzamento de tendência e média móvel para determinar a direção da tendência e o momento das entradas. Com controles de risco adequados, pode alcançar bons retornos. A lógica direta torna fácil de entender e otimizar em diferentes condições de mercado, bem adequada para iniciantes.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Shaff Trend Cycle coded by Alex Orekhov (everget)
// Strategy and its additional conditions provided by greenmask
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("STC", shorttitle="STC")

fastLength = input(title="MACD Fast Length", type=input.integer, defval=23)
slowLength = input(title="MACD Slow Length", type=input.integer, defval=50)
cycleLength = input(title="Cycle Length", type=input.integer, defval=10)
d1Length = input(title="1st %D Length", type=input.integer, defval=3)
d2Length = input(title="2nd %D Length", type=input.integer, defval=3)
src = close
highlightBreakouts = input(title="Highlight Breakouts ?", type=input.bool, defval=true)

macd = ema(src, fastLength) - ema(src, slowLength)
k = nz(fixnan(stoch(macd, macd, macd, cycleLength)))
d = ema(k, d1Length)
kd = nz(fixnan(stoch(d, d, d, cycleLength)))
stc = ema(kd, d2Length)
stc := 	stc > 100 ? 100 : stc < 0 ? 0 : stc
stcColor = not highlightBreakouts ? (stc > stc[1] ? color.green : color.red) : #ff3013
stcPlot = plot(stc, title="STC", color=stcColor, transp=0)
upper = 75
lower = 25
transparent = color.new(color.white, 100)
upperLevel = plot(upper, title="Upper", color=color.gray)
hline(50, title="Middle", linestyle=hline.style_dotted)
lowerLevel = plot(lower, title="Lower", color=color.gray)

fill(upperLevel, lowerLevel, color=#f9cb9c, transp=90)

upperFillColor = stc > upper and highlightBreakouts ? color.green : transparent
lowerFillColor = stc < lower and highlightBreakouts ? color.red : transparent

fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
targetvalue = input(title="Target/stop", type=input.integer, defval=400)

ma1length = input(title="SMA1", type=input.integer, defval=35)
ma2length = input(title="SMA2", type=input.integer, defval=200)
ma1 = ema(close,ma1length)
ma2 = ema(close,ma2length)

bullbuy = crossover(stc, lower) and ma1>ma2 and close>ma1
bearsell = crossunder(stc, upper) and ma1<ma2 and close<ma1

if (bullbuy)
    strategy.entry("Riposte", strategy.long, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

if (bearsell)
    strategy.entry("Riposte", strategy.short, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

//plotshape(bullbuy,  title= "Purple", location=location.belowbar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
//plotshape(bearsell,  title= "Purple", location=location.abovebar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
















Mais.