Estratégia automática de negociação longa/curta baseada em pontos pivô diários

Autora:ChaoZhang, Data: 2024-01-23 14:24:22
Tags:

img

Resumo

Esta estratégia desenha duas linhas com base nos preços mais altos e mais baixos dos candelabros diários para julgamentos de tendências longas / curtas.

Estratégia lógica

Esta estratégia utiliza principalmente os pontos de pivô dos candelabros diários para determinar tendências longas / curtas. Os chamados pontos de pivô se referem aos preços mais altos e mais baixos de ontem. Estas duas linhas formam um intervalo de negociação. Se o preço de hoje atravessa qualquer um deles, indica uma inversão da tendência.

Especificamente, a lógica principal é a seguinte:

  1. Linha de preço mais alta: gráfico do nível de preço mais alto de ontem.
  2. Linha de preço mais baixa: gráfico do nível de preço mais baixo de ontem.
  3. Introdução longa: abertura de uma posição longa quando o preço de fechamento ultrapassa a linha de preço mais elevada.
  4. Introdução curta: abertura de uma posição curta quando o preço de fechamento ultrapassa a linha de preço mais baixa.
  5. Stop loss: Stop loss longo perto da linha de preço mais baixa, stop loss curto perto da linha de preço mais alta.

Ao capturar tendências através de avanços dos preços mais altos/mais baixos, realiza a mudança automática entre long e short.

Análise das vantagens

As principais vantagens desta estratégia são:

  1. Lógica simples, fácil de compreender e implementar
  2. Baseado em barras diárias, ciclo longo, menos suscetível a ruídos de curta duração
  3. Alteração automática entre longo e curto, evitar mercados não em tendência
  4. Previsão de prejuízo, benéfica para o controlo do risco

Análise de riscos

Alguns riscos:

  1. Barras diárias têm menor frequência, incapaz de parar a perda em tempo hábil
  2. Falsos avanços podem causar perdas desnecessárias
  3. Detenção prolongada pode levar a perdas aumentadas

Melhorias:

  1. Adicionar outros indicadores de frequência mais elevada para confirmação
  2. Otimizar parâmetros para filtrar avanços falsos
  3. Adotar métodos de stop loss progressivos para um stop loss oportuno

Orientações de otimização

Algumas instruções:

  1. Mais backtesting em diferentes produtos e conjuntos de dados mais longos para testar a estabilidade
  2. Explorar outros indicadores de avanço como canais, bandas de Bollinger, etc.
  3. Incorporar o volume de negociação para evitar falhas sem volume
  4. Adicionar mais filtros para reduzir as falhas de quebra
  5. Utilize o aprendizado de máquina para otimização de parâmetros

Resumo

Em resumo, esta estratégia simples realiza auto longo / curto com base em pivots diários. A lógica é clara e fácil de entender. Outras otimizações podem melhorar a estabilidade. Os investidores podem aplicá-lo para negociação ao vivo com base na preferência pessoal de risco.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=3
strategy(title = "Noro's DEX Strategy", shorttitle = "DEX str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
showlines = input(true, title = "Show lines")
showbg = input(false, title = "Show background")
showday = input(false, title = "Show new day")
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")

//New day trand
bar = close > open ? 1 : close < open ? -1 : 0
newday = request.security(syminfo.tickerid, 'D', time)

//Lines
uplevel = request.security(syminfo.tickerid, 'D', high)
dnlevel = request.security(syminfo.tickerid, 'D', low)
upcolor = uplevel == uplevel[1] and showlines ? lime : na
dncolor = dnlevel == dnlevel[1] and showlines? red : na
plot(uplevel, offset = 1, linewidth = 2, color = upcolor)
plot(dnlevel, offset = 1, linewidth = 2, color = dncolor)

//Background
size = strategy.position_size
col = time == newday + 86400000 and showday ? blue : showbg and size > 0 ? lime : showbg and size < 0 ? red : na
bgcolor(col)

//Orders
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
truetime = true
if uplevel > 0 and dnlevel > 0
    strategy.entry("Long", strategy.long, needlong ? lot : 0, stop = uplevel, when = truetime)
    strategy.entry("Close", strategy.short, needshort ? lot : 0, stop = dnlevel, when = truetime)

Mais.