Estratégia sólida e estável de detenção de posições SMA

Autora:ChaoZhang, Data: 2023-12-18 17:44:16
Tags:

img

Resumo

Esta estratégia é uma estratégia simples de posicionamento baseada em linhas SMA. Ela fica longa quando a linha SMA de curto prazo cruza a linha SMA de longo prazo e fecha a posição quando a linha SMA de curto prazo cruza abaixo da linha SMA de longo prazo.

Princípio da estratégia

A estratégia usa duas linhas de SMA, uma linha de curto prazo de 20 dias e uma linha de longo prazo de 50 dias. A linha de curto prazo pode capturar as mudanças de tendência de preço mais rapidamente, enquanto a linha de longo prazo filtra o ruído de curto prazo. Quando a linha de curto prazo sobe rapidamente acima da linha de longo prazo, isso indica que a tendência pode ter começado uma recuperação de longo prazo, então vamos longos aqui. Quando a linha de curto prazo cai abaixo da linha de longo prazo, isso sugere que a tendência de alta pode ter terminado, então fechamos a posição aqui.

Em resumo, esta estratégia utiliza as características da curva das linhas SMA para determinar as tendências do movimento dos preços em duas dimensões temporais e obtém lucros estáveis com uma posição relativamente estável.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. Simples de operar, fácil de entender, baixa barreira de utilização
  2. Relativamente estável através da alavancagem dos pontos fortes das linhas SMA
  3. Períodos de detenção longos, menos afectados pelo ruído do mercado a curto prazo
  4. Poucos parâmetros configuráveis, fácil de encontrar combinações ideais de parâmetros

Análise de riscos

Os riscos desta estratégia incluem:

  1. Maiores perdas de parada possíveis quando os mercados de gama prolongada
  2. As linhas SMA têm efeito de atraso, não conseguem captar as alterações imediatas dos preços
  3. Incapacidade de capitalizar os padrões de retração de pico a curto prazo
  4. Impossibilidade de controlar o tamanho das perdas de transações individuais

Orientações de otimização

Esta estratégia pode ser melhorada nos seguintes aspectos:

  1. Adicionar o indicador MACD para identificar o momento do rebote inferior para menos perdas durante os mercados de faixa
  2. Teste diferentes combinações de parâmetros de linha SMA para encontrar o ideal
  3. Incorporar indicadores nacionais para detectar a divergência de tendências, melhorando a precisão da entrada
  4. Adicionar mecanismos de captação de lucros e de stop loss ao controlo de lucros/perdas por transação

Resumo

Em resumo, esta estratégia de posicionamento de SMA é estável, simples e fácil de operar, adequado para iniciantes em negociação ao vivo.


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

//@version=5
strategy('Zlema Strateg Long 5m', overlay=true )

// FUNCTIONS

Atr(p) =>
    atr = 0.
    Tr = math.max(high - low, math.max(math.abs(high - close[1]), math.abs(low - close[1])))
    atr := nz(atr[1] + (Tr - atr[1]) / p, Tr)
    atr

// ZLEMA
length = input(title='Length', defval=14)
highlightMovements = input(title='Highlight Movements ?', defval=true)
src = input(title='Source', defval=close)

lag = math.floor((length - 1) / 2)

zlema = ta.ema(src + src - src[lag], length)

zlemaColor = highlightMovements ? zlema > zlema[1] ? color.green : color.red : #6d1e7f
plot(zlema, title='ZLEMA', linewidth=2, color=zlemaColor, transp=0)


// TAKE PROFIT AND STOP LOSS
long_tp1_inp = input.float(1, title='Long Take Profit 1 %', step=0.1) / 100
long_tp1_qty = input.int(10, title='Long Take Profit 1 Qty', step=1)

long_tp2_inp = input.float(5, title='Long Take Profit 2%', step=0.1) / 100
long_tp2_qty = input.int(50, title='Long Take Profit 2 Qty', step=1)

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)




// Stop Loss
multiplier = input.float(2.2, 'SL Mutiplier', minval=1, step=0.1)
ATR_period = input.int(17, 'ATR period', minval=1, step=1)

// Strategy
entry_long = zlema > zlema[1]
entry_price_long = ta.valuewhen(entry_long, close, 0)
SL_floating_long = entry_price_long - multiplier * Atr(ATR_period)
exit_long = zlema < zlema[1]

///// BACKTEST PERIOD ///////
testStartYear = input(2022, 'Backtest Start Year')
testStartMonth = input(1, 'Backtest Start Month')
testStartDay = input(1, 'Backtest Start Day')
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(9999, 'Backtest Stop Year')
testStopMonth = input(12, 'Backtest Stop Month')
testStopDay = input(31, 'Backtest Stop Day')
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

if testPeriod()
    strategy.entry('long', strategy.long, comment='Long', when=entry_long)
    strategy.exit('TP1', 'long', qty_percent=long_tp1_qty, limit=long_take_level_1)  //, trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
    strategy.exit('TP2', qty_percent=long_tp2_qty, limit=long_take_level_2)  //, trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
    strategy.close('long', when=exit_long, comment='exit long')


// LONG POSITION
plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='1st Long Take Profit')
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='2nd Long Take Profit')
plot(strategy.position_size > 0 ? SL_floating_long : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Long Stop Loss')


if testPeriod()
    strategy.entry('long', strategy.long, comment='Long', when=entry_long)


// LONG POSITIONplot(strategy.position_size > 0 ? SL_floating_long : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Long Stop Loss')



Mais.