
La estrategia de identificación de tendencias de MyQuant es una estrategia utilizada para el comercio diario de Bitcoin. La estrategia identifica las tendencias del mercado mediante el cálculo de la media móvil del precio y sus derivados de primera y segunda fase, y toma decisiones de compra y venta en función de ello.
La estrategia primero calcula el promedio móvil adaptado del precio (ALMA) y sus derivados de primera y segunda clase. El derivado de primera clase refleja la velocidad de cambio del precio, el derivado de segunda clase refleja la curva del precio. Según los valores de los derivados de primera y segunda clase, se determina si el precio se encuentra actualmente en una tendencia alcista, descendente o oscilante.
En concreto, la estrategia calcula los siguientes indicadores:
Cuando se cumplen las condiciones de compra, se calcula el número de acciones compradas según las señales CAUSED.Accumulation/Distribution Bands y Caused Exposure Top and Bottom Finder. Cuando se cumplen las condiciones de venta, se vende toda la posición.
La estrategia combina la tendencia y el juicio del indicador, que permite identificar eficazmente el punto de inflexión de la tendencia del mercado. El uso de los derivados de primera y segunda clase de precios para juzgar la tendencia, evitar el impacto de la oscilación de precios, para que la señal sea más clara. En comparación con la estrategia de promedio móvil común, tiene una mayor precisión de juicio.
La estrategia es muy sensible a la elección del período de negociación y al ajuste de los parámetros. Si se elige mal el período de tiempo, no se cubren los puntos de inflexión importantes en el precio, lo que puede causar una mala eficacia de la estrategia. Si el parámetro del indicador no se ajusta correctamente, la señal de compra y venta se verá afectada por más ruido, lo que afectará a los beneficios de la estrategia.
La estrategia se puede optimizar aún más en los siguientes aspectos:
La estrategia de identificación de tendencias de MyQuant identifica eficazmente las tendencias del mercado de Bitcoin mediante el cálculo de derivados de primera y segunda clase de las medias móviles adaptadas al precio y toma decisiones de compra y venta correspondientes. La estrategia se juzga en combinación con varios indicadores y evita que la señal sea interrumpida por exceso de ruido. La eficacia de la estrategia se puede mejorar con una optimización adicional de tiempo y parámetros.
/*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)