Estratégia de negociação de média móvel de variação de vários níveis

Autora:ChaoZhang, Data: 23 de Fevereiro de 2023
Tags:

Resumo

A estratégia de negociação de média móvel de mudança de vários níveis entra e pára a perda em vários níveis, definindo várias linhas de média móvel de mudança com parâmetros diferentes. A estratégia primeiro calcula 3 linhas longas e 3 linhas curtas. Ela fica longa quando as linhas longas estão abaixo das linhas curtas e fica curta quando as linhas curtas estão abaixo das linhas longas. A estratégia permite a personalização de parâmetros como o período da média móvel, a taxa de mudança, o intervalo de tempo negociável, etc. É adequado para negociação de tendências de médio e longo prazo.

Estratégia lógica

  1. Calcular a média móvel simples do preço do src como linha de base.

  2. Definir o número de linhas longas e curtas com base nos parâmetros longas e curtas.

  3. As linhas longas1 etc. são definidas deslocando a linha de base de acordo com as relações longlevel1 etc. As linhas curtas são definidas de forma semelhante.

  4. Entrar em negociações em vários níveis quando o preço cruza as linhas dentro dos tempos negociáveis.

  5. Pare de perder quando o preço tocar a linha de base.

  6. Força feche todas as posições após o tempo final.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. A entrada em vários níveis permite lucrar em diferentes fases da tendência.

  2. Muito personalizável com parâmetros para diferentes produtos e estilos de negociação.

  3. Sistema de desvio confiável baseado em médias móveis.

  4. Evitar eventos importantes definindo um intervalo de tempo negociável.

  5. O valor da posição em risco deve ser calculado de acordo com o método de classificação da posição.

Análise de riscos

Alguns riscos da estratégia:

  1. Alto risco de posições piramidal, capital suficiente necessário.

  2. Parâmetros inadequados podem levar a uma troca excessiva.

  3. O tempo de saída fixo pode perder o lucro da tendência tardia.

  4. Não são consideradas as posições overnight e o carry cost.

  5. Não há controlo sobre o dimensionamento da posição.

Orientações de otimização

A estratégia pode ser melhorada nos seguintes aspectos:

  1. Adicionar stop loss em vez de tempo de saída fixo.

  2. Considere o custo de carregamento para posições overnight.

  3. Adicione stop loss para capturar lucros atrasados.

  4. Posições de tamanho dinâmico baseadas na exposição atual.

  5. Testar parâmetros em diferentes produtos e métodos de otimização de construção.

  6. Otimizar os níveis de stop loss para evitar paradas desnecessárias.

Resumo

A estratégia de média móvel de mudança de vários níveis obtém lucros das tendências através da entrada de vários níveis com base em médias móveis. Os tempos negociáveis e os controles de stop loss correm bem o risco.


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

//Noro
//2019

//@version=4
strategy(title = "Noro's ShiftMA-multi Strategy v1.1", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
long = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for long")
short = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
src = input(ohlc4, title = "MA Source")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick

//MA
ma = sma(src, len)
longline1 = long >= 1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long >= 2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long >= 3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short >= 1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short >= 2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short >= 3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//Lines
colorlong1 = long >= 1 ? color.lime : na
colorlong2 = long >= 2 ? color.lime : na
colorlong3 = long >= 3 ? color.lime : na
colorshort1 = short >= 1 ? color.red : na
colorshort2 = short >= 2 ? color.red : na
colorshort3 = short >= 3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort1)
plot(shortline2, offset = offset, color = colorshort2)
plot(shortline1, offset = offset, color = colorshort3)
plot(ma, offset = offset, color = color.blue)
plot(longline1, offset = offset, color = colorlong1)
plot(longline2, offset = offset, color = colorlong2)
plot(longline3, offset = offset, color = colorlong3)

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long >= 1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long >= 2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long >= 3 and needtime))
    
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short >= 1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short >= 2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short >= 3 and needtime))
if size > 0
    strategy.entry("TPL", strategy.short, 0, limit = ma)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Mais.