Estratégia de média móvel dupla

Autora:ChaoZhang, Data: 2024-02-21 14:43:26
Tags:

img

Resumo

Esta estratégia usa médias móveis duplas para formar um canal e capturar a direção da tendência. Os sinais de negociação são gerados quando o preço atravessa o canal. O indicador RSI também é incorporado para filtrar falhas.

Estratégia lógica

A estratégia emprega duas médias móveis de comprimento 5, uma calculada a partir do preço mais alto e a outra a partir do preço mais baixo, para formar um canal de preços.

Para evitar falhas, o indicador RSI é adicionado para medir os níveis de sobrecompra/supervenda.

Além disso, a estratégia é negociada apenas durante a sessão de Londres (3h - 11h), com um máximo de 5 ordens por dia e uma perda máxima de 2% de capital por dia.

Análise das vantagens

Apanha a tendência

O canal MA duplo pode detectar efetivamente a direção da tendência do preço.

Reduzir o falso escape

O uso do filtro RSI sobrecomprado/supervendido reduz alguns falsos sinais de ruptura causados pela flutuação dos preços.

Controle eficaz dos riscos

A perda diária máxima de 2% também define a tolerância ao risco.

Análise de riscos

Falsos saques com volatilidade

Os parâmetros podem ser otimizados e mais filtros adicionados para reduzir esse risco.

Risco fixo SL/TP

Usar pips fixos para SL/TP corre o risco de parar/perder lucro em um mercado volátil.

Risco limitado de sessão de negociação

A abertura de posições apenas durante sessões fixas corre o risco de perder negociações potenciais em outras horas.

Orientações de otimização

Ajuste de parâmetros

Otimizar parâmetros como comprimento MA, números RSI, pontos fixos SL/TP etc. para encontrar a melhor combinação.

Filtros adicionais

Adicionar mais indicadores ou condições para verificar os sinais, por exemplo maior volume, largura BB reduzida, etc., para evitar falhas.

SL/TP dinâmico

Utilize stop loss/take profit baseado em percentagem ou dinâmico em vez de pips fixos para lidar melhor com movimentos unilaterais do mercado.

Revisão manual

Reveja manualmente os sinais, ou só entre em fuga confirmada para evitar ser preso.

Conclusão

A estratégia é bastante simples e prática em geral, usando canal duplo de MA para determinar tendência e RSI para filtrar falhas. A gestão de risco através de horas de negociação e limite de perda também define a tolerância ao risco. Ainda há muito espaço para melhorias, por exemplo, ajuste de parâmetros, melhor mecanismo SL / TP etc.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-16 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SoftKill21
//@version=4
strategy(title="Moving Average", shorttitle="MA", overlay=true)
timeinrange(res, sess) => time(res, sess) != 0
len = input(5, minval=1, title="Length")
src = input(high, title="Source")
offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out = sma(src, len)
plot(out, color=color.white, title="MA", offset=offset)

len2 = input(5, minval=1, title="Length")
src2 = input(low, title="Source")
offset2 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out2 = sma(src2, len2)
plot(out2, color=color.white, title="MA", offset=offset2)

length = input( 5 )
overSold = input( 10 )
overBought = input( 80 )
price = input(close, title="Source RSI")

vrsi = rsi(price, length)

longcond= close > out and close > out2 and vrsi > overBought
shortcont = close < out and close < out2 and vrsi < overSold
tp=input(150,title="tp")
sl=input(80,title="sl")


strategy.entry("long",1,when=longcond)
//strategy.close("long",when= close < out2)
strategy.exit("long_exit","long",profit=tp,loss=sl)

strategy.entry("short",1,when=shortcont)
//strategy.close("short",when=close >out)
strategy.exit("short_exit","short",profit=tp,loss=sl)

// maxOrder = input(6, title="max trades per day")
// maxRisk = input(2,type=input.float, title="maxrisk per day")
// strategy.risk.max_intraday_filled_orders(maxOrder)

// strategy.risk.max_intraday_loss(maxRisk, strategy.percent_of_equity)


// strategy.close_all(when =not timeinrange(timeframe.period, "0300-1100"))






Mais.