Estratégia de câmbio baseada em ondas fractais e SMMA

Autora:ChaoZhang, Data: 2023-11-13 16:39:41
Tags:

img

Resumo

Esta estratégia combina teoria de onda fractal e SMMA para identificar oportunidades de tendência, e usa stop loss e trailing stop adequados para controlar riscos para maximizar lucros.

Estratégia lógica

  • Usar o SMMA para calcular o preço médio e filtrar o ruído do mercado para determinar a direção da tendência
  • Identificar os pontos de inversão da tendência utilizando o preço mais alto/mais baixo dentro de determinados períodos como ondas fractais
  • Faça curto quando a onda de preços ultrapassa SMMA, faça longo quando ultrapassa SMMA
  • Estabelecer o stop loss e o trailing stop com base no ATR para controlar os riscos
  • Negociar apenas dentro de sessões especificadas, evitando oscilações no fim de semana e no dia

Análise das vantagens

  • A teoria da onda fractal identifica com precisão os pontos de reversão da tendência, combinados com SMMA para a direção da tendência
  • O stop loss e o ATR trailing stop limitam efetivamente as perdas por transação
  • Apenas a negociação durante sessões líquidas evita deslizamentos e volatilidade excessivos
  • Seguindo o SAR parabólico estritamente para sair no sinal de reversão maximiza o lucro

Análise de riscos

  • Ondas fractais imprecisas podem causar batidas em períodos não-trending
  • O atraso da SMMA pode perder os pontos ideais de inversão da tendência
  • Stop loss muito apertado pode ser parado fora facilmente, muito solto pode incorrer em perda maior
  • Obtenção de lucro fixo incapaz de se adaptar a diferentes condições de mercado

Soluções:

  • Otimizar parâmetros para período fractal e SMMA
  • Adicionar estocásticos para confirmar sinais de reversão
  • Optimização dinâmica de stop loss, meta de lucro

Orientações de otimização

  • Otimizar o período fractal e os parâmetros SMMA
  • Adicionar indicador de estocástico para filtrar falhas
  • Experimento com stop loss dinâmico e tomada de lucro
  • Ampliar o stop loss para evitar ser parado
  • Otimizar parâmetros para diferentes produtos e sessões de negociação

Resumo

Esta estratégia integra teoria de onda fractal e SMMA para identificar pontos de tendência e reversão para o comércio, com stop loss e lucro adequados.


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

//@version=4
strategy("FX Strategy Based on Fractals and SMMA", overlay=true)

// パラメータ
SMMAPeriod1 = input(30, title="SMMA Period")
StopLoss1 = input(7, title="Stop Loss %")
TrailingStopCoef1 = input(2.7, title="Trailing Stop Coefficient")
fractalPeriod = input(5, title="Fractal Period")

// SMMAの計算関数
smma(src, length) =>
    var float smma = na
    if na(smma[1])
        smma := sma(src, length)
    else
        smma := (smma[1] * (length - 1) + src) / length
    smma

// フラクタルの近似
highFractal = high[2] > high[1] and high[2] > high[3] and high[2] > high[4] and high[2] > high
lowFractal = low[2] < low[1] and low[2] < low[3] and low[2] < low[4] and low[2] < low

// エントリー条件
longEntrySignal = lowFractal and close[1] < smma(close, SMMAPeriod1)
shortEntrySignal = highFractal and close[1] > smma(close, SMMAPeriod1)

// エントリー実行
if (longEntrySignal)
    strategy.entry("Long", strategy.long)

if (shortEntrySignal)
    strategy.entry("Short", strategy.short)

// トレーリングストップの計算
atrValue = atr(10)
longStopPrice = close - atrValue * TrailingStopCoef1
shortStopPrice = close + atrValue * TrailingStopCoef1

// トレーリングストップの設定
strategy.exit("Exit Long", "Long", stop=longStopPrice)
strategy.exit("Exit Short", "Short", stop=shortStopPrice)

// バックテスト期間の設定(MetaTraderのバックテストと同じ期間)
startYear = 2007
startMonth = 05
startDay = 01
endYear = 2022
endMonth = 04
endDay = 01

startDate = timestamp(startYear, startMonth, startDay, 00, 00)
endDate = timestamp(endYear, endMonth, endDay, 23, 59)

// バックテスト期間内でのみトレードを実行
if (time >= startDate and time <= endDate)
    if (longEntrySignal)
        strategy.entry("Long", strategy.long)
    if (shortEntrySignal)
        strategy.entry("Short", strategy.short)


Mais.