Estratégia de período cruzado de média móvel ponderada baseada no intervalo real

Autora:ChaoZhang, Data: 2024-01-17 15:09:28
Tags:

img

Resumo

Esta estratégia usa True Range e Weighted Moving Average (WMA) para construir um indicador de período cruzado para julgamento da tendência. Ao mesmo tempo, tem um mecanismo de acumulação de posição piramidal com múltiplos mecanismos de stop loss para buscar lucros estáveis.

Princípio da estratégia

A estratégia calcula primeiro a amplitude ascendente (sube) e descendente (baja), e depois calcula o WMA do ciclo da linha rápida (corto) e do ciclo da linha lenta (largo), respectivamente. A diferença entre as linhas rápidas e lentas é calculada novamente através do WMA para obter o indicador (ind). Quando o indicador cruza acima de 0, um sinal de compra é gerado. Quando cruza abaixo de 0, um sinal de venda é gerado.

Após a entrada no mercado, a estratégia predefine 5 posições, que são acumuladas de forma piramidal (dobrada). Ao mesmo tempo, um mecanismo de stop loss é definido para que as posições subsequentes abertas sejam julgadas se o lucro flutuante atual é inferior à linha de stop loss, a fim de controlar os riscos.

Análise das vantagens

A estratégia integra mecanismos como o julgamento do ciclo cruzado, a acumulação de posições em pirâmide e as perdas de paragem múltiplas, que podem controlar efetivamente os riscos e obter lucros estáveis.

Os julgamentos de ciclo cruzado estabelecem um sistema de julgamento de tendência através de uma combinação de linhas rápidas e lentas, que podem efetivamente filtrar o ruído do mercado e identificar pontos de virada da tendência.

Análise de riscos

O principal risco desta estratégia é a possibilidade de um evento súbito causar uma rápida inversão do mercado que desencadeie um limite de stop loss e cause perdas.

O risco de reversão do mercado pode ser tratado relaxando adequadamente a linha de stop loss.

Direcção de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Aumentar os indicadores estatísticos para julgamento, utilizar indicadores como volatilidade e volume para corrigir parâmetros e tornar a estratégia mais adaptável.

  2. Aumentar o modelo de aprendizagem de máquina para julgamento, usar LSTM e outros modelos de aprendizagem profunda para auxiliar o julgamento e melhorar a precisão da estratégia.

  3. Otimizar os mecanismos de gestão das posições, considerar o ajustamento da amplitude do aumento das posições em função da percentagem de lucro flutuante para tornar o crescimento das posições mais razoável.

  4. Incorporar modelos de cobertura de futuros para controlar ainda mais os riscos através de arbitragem spot e futuros.

Resumo

Em resumo, esta é uma estratégia de tendência de ciclo cruzado baseada em indicadores de True Range com acumulação de posições de pirâmide e múltiplos mecanismos de stop loss, que podem controlar efetivamente os riscos e buscar lucros estáveis. É uma estratégia de negociação quantitativa muito prática. No entanto, ainda é necessária atenção para reverter riscos e problemas de otimização de parâmetros. Outras otimizações podem ser feitas em estatísticas, aprendizado de máquina e outros aspectos.


/*backtest
start: 2023-01-10 00:00:00
end: 2024-01-16 00:00:00
period: 1d
basePeriod: 1h
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/
// © MaclenMtz

//@version=5
strategy("[MACLEN] Rangos", shorttitle="Rangos [https://t.me/Bitcoin_Maclen]", overlay=false )

//------WINDOW----------

i_startTime = input(defval = timestamp("01 Jan 2022 00:00 -0700"), title = "Start Time", group = "Backtest Window")
i_endTime = input(defval = timestamp("31 Dec 2025 00:00 -0700"), title = "End Time")
window = true

//-----------------------------

sube = close>close[1] ? ta.tr : 0
baja = close<close[1] ? ta.tr : 0

corto = input(10)
largo = input(30)
suavizado = input(10)

fastDiff = ta.wma(sube, corto) - ta.wma(baja,corto)
slowDiff = ta.wma(sube, largo) - ta.wma(baja, largo)
ind = ta.wma(fastDiff - slowDiff, suavizado)

iColor = ind>0 ? color.green : ind<0 ? color.red : color.black
plot(ind, color=iColor)
plot(0, color=color.white)

long = ind[1]<ind and ind[2]<ind[1] and ind<0
short = ind[1]>ind and ind[2]>ind[1] and ind>0

plotshape(long and not long[1], style = shape.xcross, color=color.green, location=location.bottom, size=size.tiny)
plotshape(short and not short[1], style = shape.xcross, color=color.red, location=location.top, size=size.tiny)

//Contratos
contrato1 = input(50000)/(16*close)
c1 = contrato1
c2 = contrato1
c3 = contrato1*2
c4 = contrato1*4
c5 = contrato1*8

//cap_enopentrade = strategy.opentrades == 1 ? c1: strategy.opentrades == 2 ? c1+c2: strategy.opentrades == 3 ? c1+c2+c3: strategy.opentrades == 4 ? c1+c2+c3+c4: strategy.opentrades == 5 ? c1+c2+c3+c4+c5 : 0
openprofit_porc = math.round((close-strategy.position_avg_price)/strategy.position_avg_price * 100,2)

porc_tp = input.float(6.5)
safe = input(-6)

//----------------Strategy---------------------------

if strategy.opentrades == 0
    strategy.entry('BUY1', strategy.long, qty=c1, when = long and not long[1] and window)

if strategy.opentrades == 1
    strategy.entry('BUY2', strategy.long, qty=c2, when = long and not long[1] and window and openprofit_porc<safe)

if strategy.opentrades == 2
    strategy.entry('BUY3', strategy.long, qty=c3, when = long and not long[1] and window and openprofit_porc<safe)

if strategy.opentrades == 3
    strategy.entry('BUY4', strategy.long, qty=c4, when = long and not long[1] and window and openprofit_porc<safe)

if strategy.opentrades == 4
    strategy.entry('BUY5', strategy.long, qty=c5, when = long and not long[1] and window and openprofit_porc<safe)

min_prof = strategy.openprofit>0

strategy.close_all(when=short and min_prof)

plot(openprofit_porc)


Mais.