Estratégia de impulso de duplo prazo

Autora:ChaoZhang, Data: 2024-04-25 17:33:02
Tags:SMA

img

Resumo

Esta estratégia é uma estratégia de momento de quadro de tempo duplo. Determina a direção da tendência no quadro de tempo superior usando uma média móvel simples (SMA) e identifica pontos de reversão no quadro de tempo inferior usando pontos de pivô (PivotLow e PivotHigh).

Princípios de estratégia

O principal princípio desta estratégia é que a direção da tendência do período mais longo influenciará o movimento do período mais baixo. Quando o período mais longo mostra uma tendência de alta, os pullbacks no período mais baixo são mais propensos a serem oportunidades de compra; quando o período mais longo mostra uma tendência de queda, os rebotes no período mais longo são mais propensos a serem oportunidades de curto. Esta estratégia usa a média móvel simples (SMA) para determinar a direção da tendência do período mais longo e os pontos pivotantes (PivotLow e PivotHigh) para identificar pontos de reversão no período mais baixo.

Vantagens da estratégia

  1. A análise de quadros de tempo duplos, aproveitando o impacto do quadro de tempo mais longo no quadro de tempo mais curto, aumenta a probabilidade de negociações bem sucedidas.
  2. Usar a SMA para determinar a direção da tendência é relativamente confiável, e usar pontos de pivô para capturar pontos de reversão é relativamente preciso.
  3. Os parâmetros são ajustáveis, tornando a estratégia altamente adaptável.
  4. A lógica é clara e fácil de compreender e implementar.

Riscos estratégicos

  1. Risco de alteração da tendência: se a tendência do período superior mudar repentinamente, o período inferior pode não ter reagido ainda, fazendo com que a estratégia falhe.
  2. Risco de configurações de parâmetros. A configuração inadequada de parâmetros pode levar a um desempenho estratégico ruim. Por exemplo, escolher um período de SMA que é muito curto pode levar a negociações frequentes, enquanto escolher um que é muito longo pode levar a julgamentos de tendência atrasados.
  3. Risco de condições de mercado extremas: em condições de mercado extremas (tais como subidas ou quedas acentuadas), esta estratégia pode falhar porque o prazo inferior pode não seguir a tendência do prazo superior.

Orientações para a otimização da estratégia

  1. Adicionar a detecção de mudança de tendência. A lógica pode ser adicionada para determinar se a tendência do prazo superior mudou, a fim de ajustar a negociação no prazo inferior mais rapidamente.
  2. Optimize a seleção de parâmetros. Os métodos de otimização de parâmetros (como algoritmos genéticos, pesquisa em grade, etc.) podem ser usados para encontrar a combinação ideal de parâmetros.
  3. Adicionar controlo de risco: podem ser adicionadas medidas de controlo de risco (como stop-loss, gestão de posições, etc.) para reduzir as perdas em condições de mercado extremas.
  4. Fusão multifatorial: outros indicadores ou factores (como a volatilidade, o volume, etc.) podem ser considerados como incorporados na estratégia para melhorar a sua robustez.

Resumo

Esta estratégia de impulso de quadro de tempo duplo aproveita a conexão entre os quadros de tempo mais altos e mais baixos, determinando a direção da tendência no quadro de tempo mais alto e capturando pontos de reversão no quadro de tempo mais baixo para alcançar o seguimento da tendência e a negociação de reversão.


/*backtest
start: 2023-04-19 00:00:00
end: 2024-04-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Riester

//@version=5
strategy("Dual Timeframe Momentum", overlay=true, precision=6, pyramiding=0, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=25.0, commission_value=0.05)

n = input.int(20, "Moving Average Period", minval=1)
src = input.source(close, "Source")
high_tf = input.timeframe("240", "Resolution")
pivot_l = input.int(5, "Pivot Let Bars")
pivot_r = input.int(2, "Pivot Right Bars")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Calculations
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

// 1. Define low and high timeframe prices
low_src = src
high_src = request.security(syminfo.tickerid, high_tf, src)

// 2. Use simple moving average to determine trend of higher timeframe (up or down)
high_tf_ma = ta.sma(high_src, n)
plot(high_tf_ma,  color=color.yellow)
high_tf_trend = high_tf_ma > high_tf_ma[1] ? 1 : -1

// 3. Use pivots to identify reversals on the low timeframe
low_tf_pl = ta.pivotlow(high_src, pivot_l, pivot_r)
plot(low_tf_pl, style=plot.style_line, linewidth=3, color= color.green, offset=-pivot_r)

low_tf_ph = ta.pivothigh(high_src, pivot_l, pivot_r)
plot(low_tf_ph, style=plot.style_line, linewidth=3, color= color.red, offset=-pivot_r)

bool long = low_tf_pl and high_tf_trend == 1
bool short = low_tf_ph and high_tf_trend == -1

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Plots
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

// this message is an alert that can be sent to a webhook, which allows for simple automation if you have a server that listens to alerts and trades programmatically.
enter_long_alert = '{"side": "Long", "order": "Enter", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'
exit_long_alert = '{"side": "Long", "order": "Exit", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'

if long
    strategy.entry(id="Long", direction=strategy.long, limit=open, alert_message=enter_long_alert)

if short
    strategy.close(id="Long", comment="Close Long", alert_message=exit_long_alert)


Relacionados

Mais.