Estrategia de identificador de tendencias de MyQuant

El autor:¿ Qué pasa?, Fecha: 2024-02-22 16:04:04
Las etiquetas:

img

Resumen general

La estrategia MyQuant Trend Identifier es una estrategia para el comercio diario de Bitcoin. Identifica las tendencias del mercado calculando el promedio móvil y sus derivados de primer y segundo orden del precio, y toma decisiones de compra y venta en consecuencia.

Principio de la estrategia

La estrategia primero calcula el Adaptive Moving Average (ALMA) del precio y sus derivados de primer orden y segundo orden. El derivado de primer orden refleja la tasa de cambio del precio, y el derivado de segundo orden refleja la curvatura del precio. Luego juzga la tendencia actual como alcista, descendente o fluctuante en función de los valores de los derivados de primer y segundo orden. Combinado con indicadores de acciones, determina si se cumplen las condiciones de compra o venta.

En concreto, la estrategia calcula los siguientes indicadores:

  • ALMA: media móvil adaptativa del precio, longitud 140, factor rápido 1.1, sigma 6
  • dema: derivado de primer orden de ALMA
  • d2ema: derivado de primera orden de dema, que refleja el derivado de segunda orden del precio
  • índice: índice de oscilación del indicador dema
  • Ind: índice de desviación del precio de su media móvil

Cuando se cumple la condición de compra, se calcula el número de acciones a comprar en función de las señales de las bandas de acumulación/distribución CAUSED y del buscador superior y inferior de exposición causada.

Ventajas de la estrategia

Al combinar los juicios de tendencia e indicador, esta estrategia puede identificar efectivamente los puntos de inflexión en las tendencias del mercado. El uso de los derivados de primer y segundo orden de los precios para determinar las tendencias evita el impacto de las fluctuaciones de precios y hace que las señales sean más claras.

Análisis de riesgos

Esta estrategia es muy sensible a la selección del período de tiempo de negociación y los ajustes de parámetros. Si el período de tiempo se selecciona incorrectamente y los puntos de inflexión importantes del precio no se cubren, la estrategia no será muy efectiva. Si los parámetros del indicador se establecen incorrectamente, las señales de compra y venta se verán más afectadas por el ruido, lo que afectará a los rendimientos de la estrategia. Además, las condiciones de stop loss preestablecidas en la estrategia también afectan a los rendimientos finales.

Direcciones para la optimización

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Optimizar la lógica para la selección de períodos de tiempo, a través de una selección más inteligente de backtest y períodos de tiempo de negociación en vivo.
  2. Optimizar los parámetros del indicador, como el ajuste de la longitud de ALMA y dema, etc.
  3. Se añadirán los juicios de las condiciones de stop loss para controlar las pérdidas máximas.
  4. Evalúa los efectos en diferentes criptomonedas y elige las que mejor funcionan.

Conclusión

Al calcular las derivadas de primer y segundo orden de la media móvil adaptativa de precios, la estrategia MyQuant Trend Identifier identifica eficazmente las tendencias del mercado para Bitcoin y toma las decisiones de compra y venta correspondientes. Al combinar múltiples indicadores para el juicio, evita la interferencia excesiva de ruido con las señales. Con una mayor optimización del tiempo y los parámetros, el rendimiento de esta estrategia puede mejorarse aún más.


/*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)


Más.