A estratégia de negociação de tendência de onda baseada no LazyBear

Autora:ChaoZhang, Data: 2023-12-19 12:07:14
Tags:

img

Resumo

Esta é uma estratégia de negociação baseada no indicador de tendência de onda da LazyBear. A estratégia identifica o sentimento do mercado através da computação da tendência de onda das flutuações de preços e toma decisões longas e curtas em conformidade.

Estratégia lógica

O núcleo desta estratégia é o indicador de tendência de onda da LazyBear. Ele primeiro calcula o preço médio (AP), depois a média móvel exponencial de AP (ESA) e o movimento de preço absoluto (D). Com base na ESA e na D, a estratégia calcula o índice de volatilidade (CI), que então alimenta uma média móvel exponencial para gerar a linha de tendência de onda (WT). WT é processada em WT1 e WT2 usando médias móveis simples. Quando WT1 cruza WT2, ele aciona a cruz de ouro e vai longo. Quando WT1 cruza abaixo de WT2, ele aciona a cruz da morte e fica curto.

Análise das vantagens

Trata-se de uma estratégia de tendência muito simples, mas prática.

  1. Identifica claramente a tendência dos preços e o sentimento do mercado com base no indicador de tendência de onda
  2. Lógica de negociação simples de longo / curto baseado em cruzes douradas / morte das linhas WT
  3. Parâmetros personalizáveis para ajustar a sensibilidade do WT para diferentes ciclos
  4. Flexibilidade para adicionar filtros adicionais, tais como janela de tempo de negociação

Análise de riscos

Há alguns riscos nesta estratégia:

  1. Como uma tendência de seguir a estratégia, pode gerar muitos sinais falsos durante os mercados de gama
  2. A natureza atrasada do WT pode causar curvas perdidas
  3. Os parâmetros por defeito podem não corresponder a todos os produtos e ciclos
  4. Não há mecanismo de stop loss, o período de retenção pode ser muito longo

As principais soluções são:

  1. Otimizar parâmetros para ajustar a sensibilidade do WT
  2. Adicionar outros indicadores de confirmação para evitar sinais falsos
  3. Empregar stop loss e take profit
  4. Limitar as operações ou posições diárias

Orientações de otimização

Há espaço para uma maior otimização:

  1. Otimizar parâmetros WT para melhor sensibilidade ou estabilidade
  2. Usar conjuntos de parâmetros diferentes com base em ciclos
  3. Adicionar indicadores como volume, volatilidade para confirmação
  4. Adicionar stop loss e take profit
  5. Enriquecer a lógica de negociação como pirâmide, negociação de rede
  6. Explorar melhores recursos e regras usando aprendizado de máquina

Resumo

Em resumo, esta é uma estratégia de tendência de onda muito simples e prática. Ao modelar a tendência de onda das flutuações de preços, ela identifica condições de mercado de sobrecompra e sobrevenda para gerar sinais de comércio usando cruzes de ouro e cruzes de morte WT. A estratégia é fácil de implementar, mas pode exigir mais otimização para sensibilidade e estabilidade.


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

//
// @author LazyBear
//
// If you use this code in its original/modified form, do drop me a note. 
//
//@version=4
     
// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
obLevel1 = input(60, "Over Bought Level 1")
obLevel2 = input(53, "Over Bought Level 2")
osLevel1 = input(-60, "Over Sold Level 1")
osLevel2 = input(-53, "Over Sold Level 2")
 
ap = hlc3 
esa = ema(ap, n1)
d = ema(abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ema(ci, n2)
 
wt1 = tci
wt2 = sma(wt1,4)

plot(0, color=color.gray)
plot(obLevel1, color=color.red)
plot(osLevel1, color=color.green)
plot(obLevel2, color=color.red, style=3)
plot(osLevel2, color=color.green, style=3)

plot(wt1, color=color.white)
plot(wt2, color=color.fuchsia)
plot(wt1-wt2, color=color.new(color.blue, 80), style=plot.style_area)

//Strategy
strategy(title="T!M - Wave Trend Strategy", overlay = false, precision = 8, max_bars_back = 200, pyramiding = 0, initial_capital = 1000, currency = currency.NONE, default_qty_type = strategy.cash, default_qty_value = 1000, commission_type = "percent", commission_value = 0.1, calc_on_every_tick=false, process_orders_on_close=true)
    
longCondition  = crossover(wt1, wt2)
shortCondition = crossunder(wt1, wt2)

strategy.entry(id="Long Entry", comment="buy", long=true, when=longCondition and window())
strategy.close("Long Entry", comment="sell", when=shortCondition and window())      

//strategy.entry(id="Short Entry", long=false, when=shortCondition)

Mais.