Esta estratégia é chamada de
Os principais indicadores desta estratégia são as linhas médias móveis rápidas e lentas.
Especificamente, o parâmetro da linha média móvel rápida é definido em 24 períodos e o parâmetro da linha média móvel lenta é definido em 100 períodos. Quando a linha média móvel rápida cruza acima da linha média móvel lenta de baixo, isso indica que os preços estão entrando em uma tendência ascendente, e a estratégia emitirá um sinal de compra neste momento. Quando a linha média móvel rápida cruza abaixo da linha média móvel lenta de cima, isso indica que os preços estão entrando em uma tendência descendente, e a estratégia emitirá um sinal de venda neste momento.
Ao julgar a direcção cruzada das linhas médias móveis rápidas e lentas, as alterações da tendência dos preços podem ser efetivamente captadas para ajudar a tomar decisões de compra e venda.
Esta estratégia tem as seguintes vantagens:
O princípio é simples e fácil de compreender, fácil de implementar.
Os parâmetros das médias móveis rápidas e lentas podem ser ajustados de acordo com as condições reais, tornando a estratégia mais flexível.
Forte capacidade de capturar mudanças de tendência. Crossovers de média móvel dupla são frequentemente usados para capturar pontos de virada quando os preços passam da consolidação para a tendência.
As médias móveis duplas podem ser utilizadas para identificar os intervalos de consolidação e evitar a abertura repetida de posições durante as consolidações.
Há também alguns riscos com esta estratégia:
Como indicadores de rastreamento de tendências, os sinais de cruzamento de médias móveis duplas geralmente estão atrasados por um certo período, o que pode levar a um certo grau de custo de oportunidade.
É fácil produzir sinais falsos em mercados oscilantes. As médias móveis duplas funcionam melhor quando os preços mostram uma tendência clara. Mas em mercados oscilantes, elas tendem a produzir sinais falsos frequentes.
Se os parâmetros da média móvel rápida e lenta forem definidos de forma incorreta, isso afetará a sensibilidade para capturar cruzamento de tendências.
Soluções correspondentes:
Reduzir adequadamente o período da média móvel para aumentar a sensibilidade dos sinais cruzados.
Adicionar indicadores de volatilidade ou volume para filtragem para reduzir as transações inválidas em mercados oscilantes.
Optimização de parâmetros para encontrar as melhores combinações de parâmetros.
A estratégia pode ser otimizada nos seguintes aspectos:
Usar indicadores técnicos de média móvel mais avançados, como a média móvel ponderada linear, para substituir a média móvel simples, para melhorar a capacidade de acompanhamento e de previsão dos indicadores.
Adicionar mais indicadores auxiliares, tais como indicadores de volume e volatilidade para filtragem conjunta, para reduzir sinais inválidos.
Otimizar os parâmetros da média móvel rápida e lenta para melhorar a adaptabilidade dos parâmetros.
Após a estratégia entrar no mercado, os pontos de stop loss e trailing stop loss podem ser projetados para controlar perdas individuais.
As novas tecnologias, como a aprendizagem profunda, podem ser utilizadas para identificar padrões de preços mais complexos para ajudar os crossovers da média móvel a tomar decisões de compra e venda, a fim de obter melhores resultados.
Em geral, esta estratégia é relativamente clássica e simples. Determina as tendências de preços com base em indicadores de média móvel dupla para descobrir oportunidades quando os preços se movem de consolidação para tendência. As vantagens são lógica clara e simplicidade, adequado para rastrear mercados de tendência. Mas também há algumas falhas como o atraso do sinal que precisam ser melhorados através de ajuste de parâmetros e otimização para aumentar a estabilidade e eficiência da estratégia.
/*backtest start: 2024-01-21 00:00:00 end: 2024-02-20 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Pine Script Tutorial Example Strategy 1', overlay=true, initial_capital=100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity) //OBV src = close obv = ta.cum(math.sign(ta.change(src)) * volume) ma(source, length, type) => switch type "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing") smoothingLength = input.int(title = "Length", defval = 20, minval = 1, maxval = 100, group="Smoothing") Limit = input.float(title = "Limit", defval = 1, minval = 0.1, maxval = 10, group="Smoothing") smoothingLine_ma = ma(obv,smoothingLength, typeMA) obv_diff = (obv-smoothingLine_ma)*100/obv //PVT var cumVolp = 0. cumVolp += nz(volume) if barstate.islast and cumVolp == 0 runtime.error("No volume is provided by the data vendor.") srcp = close vt = ta.cum(ta.change(srcp)/srcp[1]*volume) smoothingLine_map = ma(vt,smoothingLength, typeMA) pvt_diff = (vt-smoothingLine_map)*100/vt // plot(obv_diff+close+100 ,title="OBV_DIFF", color = color.rgb(255, 118, 54)) // plot(pvt_diff+close+80 ,title="PVT_DIFF", color = color.rgb(223, 61, 255)) indicator = (pvt_diff+obv_diff)/2 goLongCondition1 = ta.crossover(indicator,Limit) timePeriod = time >= timestamp(syminfo.timezone, 2023,1, 1, 0, 0) // Backtesting Time notInTrade = strategy.position_size <= 0 if goLongCondition1 and timePeriod and notInTrade stopLoss = low * 0.99 // -2% takeProfit = high * 1.05 // +5% strategy.entry('long', strategy.long ) strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit) // fastEMA = ta.ema(close, 24) // slowEMA = ta.ema(close, 100) // goLongCondition1 = ta.crossover(fastEMA, slowEMA) // timePeriod = time >= timestamp(syminfo.timezone, 2018, 12, 15, 0, 0) // notInTrade = strategy.position_size <= 0 // if goLongCondition1 and timePeriod and notInTrade // stopLoss = low * 0.97 // takeProfit = high * 1.12 // strategy.entry('long', strategy.long) // strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit) // plot(fastEMA, color=color.new(color.blue, 0)) // plot(slowEMA, color=color.new(color.yellow, 0))