Estratégia de identificação de tendências MyQuant


Data de criação: 2024-02-22 16:04:04 última modificação: 2024-02-22 16:04:04
cópia: 2 Cliques: 633
1
focar em
1617
Seguidores

Estratégia de identificação de tendências MyQuant

Visão geral

A estratégia de identificação de tendências do MyQuant é uma estratégia usada para a negociação diária do Bitcoin. A estratégia identifica as tendências do mercado através do cálculo da média móvel do preço e seus derivados de primeira e segunda classe e, com base nisso, toma decisões de compra e venda.

Princípio da estratégia

A estratégia primeiro calcula a média móvel adaptada do preço (ALMA) e seus derivativos de primeira e segunda classe. O derivativo de primeira classe reflete a velocidade de mudança de preço, o derivativo de segunda classe reflete a curva de preço. De acordo com os valores dos derivativos de primeira e segunda classe, o preço está atualmente em uma tendência ascendente, uma tendência descendente ou um período de oscilação.

Em particular, a estratégia calcula os seguintes indicadores:

  • ALMA: média móvel adaptada do preço, de 140 de comprimento, com um fator rápido de 1,1, sigma de 6
  • dema: A derivada de primeira ordem de ALMA
  • d2ema: derivado de primeira ordem de dema, refletindo o derivado de segunda ordem de preço
  • index: índice de oscilação do índice dema
  • ind: índice de desvio dos preços da linha média

Quando as condições de compra são satisfeitas, o número de ações compradas é calculado com base nos sinais CAUSED.Accumulation/Distribution Bands e Caused Exposure Top and Bottom Finder. Quando as condições de venda são satisfeitas, a posição é vendida inteira.

Vantagens estratégicas

A estratégia combina tendências e indicadores de julgamento, que é capaz de identificar eficazmente o ponto de mudança de tendência do mercado. Usar o primeiro grau e o segundo grau de derivativos de preços para julgar a tendência, evitar a influência de oscilações de preços, para que o sinal seja mais claro. Comparado com a estratégia de média móvel comum, tem uma maior precisão de julgamento.

Análise de Riscos

A estratégia é muito sensível à escolha do período de negociação e ao ajuste de parâmetros. Se o período de tempo for selecionado incorretamente, a falha em cobrir os pontos de inflexão de preços importantes pode levar à má eficácia da estratégia. Se o parâmetro do indicador for configurado incorretamente, o sinal de compra e venda será afetado por mais ruído, o que afetará os ganhos da estratégia.

Direção de otimização

A estratégia pode ser melhorada em alguns aspectos:

  1. Optimizar a lógica de seleção de períodos de tempo, selecionando de forma mais inteligente os períodos de retrospectiva e de negociação em disco.
  2. Parâmetros de otimização de indicadores, como o ajuste do comprimento de ALMA e dema.
  3. Aumentar o julgamento de stop loss para controlar o máximo de perdas.
  4. Avaliação da eficácia das diferentes criptomoedas, selecionando as que melhor se comportam.

Resumir

A estratégia de identificação de tendências do MyQuant identifica efetivamente as tendências do mercado de Bitcoin e toma decisões de compra e venda correspondentes, através de cálculos de derivativos de primeira e segunda ordem das médias móveis adaptativas do preço. A estratégia é julgada em combinação com vários indicadores, evitando que o sinal seja interferido por ruído excessivo. A eficácia da estratégia pode ser aumentada com otimizamento de tempo e parâmetros adicionais.

Código-fonte da estratégia
/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 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/
// © spacekadet17
// 
//@version=5

strategy(title="Trend Identifier Strategy", shorttitle="Trend Identifier Strategy", format=format.price, precision=4, overlay = false, initial_capital = 1000, pyramiding = 10, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.03)

//start-end time
startyear = input.int(2020,"start year")
startmonth = input.int(1,"start month")
startday = input.int(1,"start day")
endyear = input.int(2025,"end year")
endmonth = input.int(1,"end month")
endday = input.int(1,"end day")

timeEnd = time <= timestamp(syminfo.timezone,endyear,endmonth,endday,0,0)
timeStart = time >= timestamp(syminfo.timezone,startyear,startmonth,startday,0,0)
choosetime = input(false,"Choose Time Interval")
condTime = (choosetime ? (timeStart and timeEnd) : true)

// time frame?
tfc = 1
if timeframe.isdaily
    tfc := 24

// indicators: price normalized alma, and its 1st and 2nd derivatives
ema = ta.alma(close,140,1.1,6)
dema = (ema-ema[1])/ema
stodema = ta.ema(ta.ema(ta.stoch(dema,dema,dema,100),3),3)

d2ema = ta.ema(dema-dema[1],5)
stod2ema = ta.ema(ta.ema(ta.stoch(d2ema,d2ema,d2ema,100),3),3)

ind = (close-ta.ema(close,120*24/tfc))/close
heat = ta.ema(ta.stoch(ind,ind,ind,120*24/tfc),3)
index = ta.ema(heat,7*24/tfc)

//plot graph
green = color.rgb(20,255,100)
yellow = color.yellow
red = color.red
blue = color.rgb(20,120,255)
tcolor = (dema>0) and (d2ema>0)? green : (dema>0) and (d2ema<0) ? yellow : (dema < 0) and (d2ema<0) ? red : (dema < 0) and (d2ema>0) ? blue : color.black
demaema = ta.ema(dema,21)
plot(demaema, color = tcolor)

//strategy buy-sell conditions
cond1a = strategy.position_size <= 0
cond1b = strategy.position_size > 0

if (condTime and cond1a and ( ( ((tcolor[1] == red and demaema<0.02) or (tcolor[1] == blue and demaema < 0.02) or (tcolor[1] == yellow and demaema>-0.02) ) and tcolor == green) or (tcolor[1] == red and tcolor == blue and demaema < -0.01) ) and index<85 and ind<0.4)
    strategy.entry("buy",strategy.long, (strategy.equity-strategy.position_size*close)/1/close)
    
if (condTime and cond1b and ( (((tcolor[1] == yellow and demaema > -0.02) or (tcolor[1] == blue and demaema < 0.02) or (tcolor[1] == green and demaema < 0.02)) and tcolor == red) or (tcolor[1] == green and tcolor == yellow and demaema > 0.015) ) and index>15 and ind>-0.1)
    strategy.order("sell",strategy.short, strategy.position_size)