Estrategia de seguimiento de cambios de precios a corto plazo con indicadores de momentum


Fecha de creación: 2023-12-25 13:09:48 Última modificación: 2023-12-25 13:09:48
Copiar: 0 Número de Visitas: 554
1
Seguir
1623
Seguidores

Estrategia de seguimiento de cambios de precios a corto plazo con indicadores de momentum

Descripción general

La estrategia utiliza indicadores de movimiento para rastrear los cambios de precios a corto plazo, determinar la dirección de la tendencia del mercado y realizar operaciones de compra y venta. La estrategia se llama Price Volume Trend Strategy y refleja la idea de que la estrategia utiliza cambios de precios y cambios en el volumen de transacciones para determinar la tendencia.

Principio de estrategia

La estrategia primero calcula el movimiento de los precios. Al calcular la diferencia entre los precios del ciclo actual y los precios del ciclo anterior, se puede reflejar el cambio absoluto en los precios en el último ciclo. Un valor positivo indica un aumento en los precios y un valor negativo indica una caída en los precios.

Cuando el precio más reciente es mayor que el movimiento promedio, indica que el precio está subiendo; cuando el precio más reciente es menor que el movimiento promedio, indica que el precio está bajando. De acuerdo con este indicador, se determina la dirección de la tendencia del precio.

En función de las tendencias de subida y bajada de los precios, realizar las operaciones de compra y venta correspondientes.

Análisis de las ventajas

  • La estrategia es rápida para determinar tendencias y captar rápidamente los cambios de precios a corto plazo, adecuada para operaciones de línea corta.
  • Evite ser engañado por falsos avances mediante filtros de volumen de transacciones
  • Implementó la lógica de operación de la persecución de la caída
  • La frecuencia de las operaciones es alta y es adecuada para los inversores activos

Análisis de riesgos

  • Es susceptible a las fluctuaciones anormales del mercado, con cierto riesgo de falsas señales
  • El riesgo de deslizamiento de las operaciones frecuentes
  • La rentabilidad a largo plazo aún está por comprobarse

Dirección de optimización

  • Ajuste de los parámetros del indicador de movimiento para optimizar el juicio
  • Optimización de los parámetros de filtración de la transmisión para mejorar la calidad de la señal
  • Aumentar los mecanismos de suspensión de pérdidas y controlar las pérdidas individuales
  • La combinación de más factores de juicio para asegurar un impulso multifactorial

Resumir

La estrategia general, a través de indicadores dinámicos para rastrear las tendencias de cambio de precios a corto plazo, determina rápidamente el momento de comprar y vender. La ventaja es que se actúa rápidamente, se detiene la caída; la desventaja es que la calidad de la señal y la rentabilidad a largo plazo deben ser consideradas. A través de la modificación de los parámetros y el aumento del mecanismo de control de viento, la estrategia puede ser una parte importante de la estrategia de alta frecuencia, que se utiliza en combinación con otras estrategias de baja frecuencia.

Código Fuente de la Estrategia
/*backtest
start: 2022-12-18 00:00:00
end: 2023-12-24 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/
// © russtic

//@version=2

strategy("HA smoothed eliminator v2  ",pyramiding=1, slippage=10, default_qty_type=strategy.percent_of_equity, 
     commission_type=strategy.commission.percent, commission_value=0.075, overlay=true, 
     default_qty_value=100, initial_capital=1000)

FromMonth1 = input(defval=1, title="From Month", minval=1, maxval=12)
FromDay1 = input(defval=1, title="From Day", minval=1, maxval=31)
FromYear1 = input(defval=2019, title="From Year", minval=2010)
ToMonth1 = input(defval=12, title="To Month", minval=1, maxval=12)
ToDay1 = input(defval=31, title="To Day", minval=1, maxval=31)
ToYear1 = input(defval=2020, title="To Year", minval=2010)
start1 = timestamp(FromYear1, FromMonth1, FromDay1, 00, 00)
finish1 = timestamp(ToYear1, ToMonth1, ToDay1, 23, 59)
window1() => true
    
t1 = time(timeframe.period, "0300-1200")
t2 = time(timeframe.period, "0930-1700")
London = na(t1) ? na : green
NY = na(t2) ? na : red

bgcolor(London, title="London")
bgcolor(NY, title="New York")
///////////////////////////
// HA smoothed

len=(1 )
o=ema(open,len)
c=ema(close,len)
h=ema(high,len)
l=ema(low,len)

haclose = (o+h+l+c)/4
haopen = na(haopen[1]) ? (o + c)/2 : (haopen[1] + haclose[1]) / 2
hahigh = max (h, max(haopen,haclose))
halow = min (l, min(haopen,haclose))

len2=(len)
o2=ema(haopen, len2)
c2=ema(haclose, len2)
h2=ema(hahigh, len2)
l2=ema(halow, len2)

buy= (o2<c2) 

closebuy= (o2>c2)

sell= (o2>c2)

closesell= (o2<c2)

//
/// END NEW SCRIPT 

//
//
//                  MERGE SCRIPTS
a1= o2<c2
b1=o2>c2
is_uptrend = (a1)// and (p> 0)
is_downtrend =  (b1)// and (p <0)
barcolor(b1 ? red: a1 ? lime : blue)

//end


// =========================start     PVT -GIVES EACH BAR A VALUE
facton = (true)//, title="arrow elimination (factor) on ")
Length1 = 2//input(2, title="PVT Length", minval=1)

xPrice = close//input(title="Source", type=source, defval=close)
xsma = wma(xPrice, Length1) 
nRes = xPrice - xsma  
pos = iff(nRes > 0, 1,
	     iff(nRes < 0, -1, nz(pos[1], 0))) 
forex= input(true, title = 'strength toggle ')
forexyes = (forex == true)? 10000 : (forex == false)? 1: na

plot(nRes*forexyes , color=aqua, title="strength", transp=100)
// =========================         end pvt
//
//=============================     start factor // ELIMINATES  weak signals
//                  start trend
//
factor = input(600.00, title = "strength elimination") 
factor1 = factor - (factor*2)//input(-100.00, title = "sell strength elimination ") 
facton1 = (facton == true) and is_uptrend == 1 and nRes*forexyes>factor ? 1 : (facton == true) and is_downtrend == 1 and nRes*forexyes<factor1 ? -1 : (facton == false)
// ==================== =====
// 
//===========================    end factor
nRestrend = (nRes*forexyes)
//=========================== plot arrows 
plot1 = iff(is_uptrend[1] == 1, 0 , 1)  
plot2 = iff(is_downtrend[1]  == 1, 0 , 1)
uparrowcond =  is_downtrend ? false : nz(uparrowcond[1], false) == true ? uparrowcond[1] : (facton1 and is_uptrend and nRes*forexyes>factor)
downarrowcond =  is_uptrend ? false : nz(downarrowcond[1], false) == true ? downarrowcond[1] : (facton1 and is_downtrend and nRes*forexyes<factor1)
//prevarrowstate = uparrowcond  ? 1 : downarrowcond ? -1 : nz(prevarrowstate[1], 0)


candledir = (open < close)? 1: (open>close)? -1 : na // ONLY OPENS ON SAME BAR DIRECTION AS SIGNAL



up=nz(uparrowcond[1], false) == false and ( is_uptrend and nRes*forexyes>factor) and candledir ? 1:na
dn=nz(downarrowcond[1], false) == false and ( is_downtrend and nRes*forexyes<factor1) and candledir? -1:na



sig=0
if up==1 
    sig:=1
else
    if dn==-1
        sig:=-1
    else
        sig:=sig[1]
plotarrow(sig[1]!=1 and sig==1?1:na, title="BUY ARROW", colorup=lime, maxheight=80, minheight=50, transp=0)// up arrow 
plotarrow(sig[1]!=-1 and sig==-1?-1:na, title="SELL ARROW", colordown=red, maxheight=80, minheight=50, transp=0)// down arrow

//========================= alert condition
alertcondition(sig[1]!=1 and sig==1?1:na, title="BUY eliminator", message="BUY " ) 
alertcondition(sig[1]!=-1 and sig==-1?-1:na, title="SELL eliminator",  message="SELL ") 


strategy.entry("B", true, when=(sig[1]!=1 and sig==1?1:na) and window1())
strategy.entry("S", false,when=(sig[1]!=-1 and sig==-1?-1:na) and window1())