
Z-Score Price Breakout Strategy utiliza el indicador de puntaje estándar del precio para determinar si el precio actual está en un estado anormal, lo que genera una señal de negociación. Cuando el puntaje estándar del precio es superior o inferior a un determinado umbral, indica que el precio ha entrado en un estado anormal, en el que se puede hacer más o menos operaciones.
El indicador central de la estrategia es el puntaje estándar de precios (Z-Score), cuya fórmula de cálculo es la siguiente:
Z_score = (C - SMA(n)) / StdDev(C,n)
Donde C es el precio de cierre, SMA (n) es el promedio móvil simple de n ciclos, StdDev (C, n) es la diferencia estándar del precio de cierre de n ciclos.
El puntaje estándar refleja el grado de desviación entre el precio actual y el precio promedio. Cuando el puntaje estándar de precio es mayor que un determinado umbral positivo (por ejemplo, +2), indica que el precio actual ya está por encima de 2 puntos de diferencia entre el precio promedio y pertenece a un nivel más alto; cuando es menor que un determinado umbral negativo (por ejemplo, -2), indica que el precio actual ya está por debajo de 2 puntos de diferencia entre el precio promedio y pertenece a un nivel más bajo.
La estrategia primero calcula el puntaje estándar del precio y luego establece un umbral positivo-negativo (como 0 y 0), que genera una señal de compra cuando el puntaje estándar es superior al umbral positivo y una señal de venta cuando es inferior al umbral negativo.
La estrategia de ruptura de precios de los parámetros estándares determina si el precio actual está en un estado anormal y se negocia en función de los puntos positivos y negativos de los parámetros de precios. La estrategia es sencilla y fácil de manejar, se puede negociar en ambos sentidos, pero también existe cierto riesgo.
/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-04 19:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 18/01/2017
// The author of this indicator is Veronique Valcu. The z-score (z) for a data
// item x measures the distance (in standard deviations StdDev) and direction
// of the item from its mean (U):
// z = (x-StdDev) / U
// A value of zero indicates that the data item x is equal to the mean U, while
// positive or negative values show that the data item is above (x>U) or below
// (x Values of +2 and -2 show that the data item is two standard deviations
// above or below the chosen mean, respectively, and over 95.5% of all data
// items are contained within these two horizontal references (see Figure 1).
// We substitute x with the closing price C, the mean U with simple moving
// average (SMA) of n periods (n), and StdDev with the standard deviation of
// closing prices for n periods, the above formula becomes:
// Z_score = (C - SMA(n)) / StdDev(C,n)
// The z-score indicator is not new, but its use can be seen as a supplement to
// Bollinger bands. It offers a simple way to assess the position of the price
// vis-a-vis its resistance and support levels expressed by the Bollinger Bands.
// In addition, crossings of z-score averages may signal the start or the end of
// a tradable trend. Traders may take a step further and look for stronger signals
// by identifying common crossing points of z-score, its average, and average of average.
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="Z-Score Strategy", shorttitle="Z-Score Strategy")
Period = input(20, minval=1)
Trigger = input(0)
reverse = input(false, title="Trade reverse")
hline(Trigger, color=purple, linestyle=line)
xStdDev = stdev(close, Period)
xMA = sma(close, Period)
nRes = (close - xMA) / xStdDev
pos = iff(nRes > Trigger, 1,
iff(nRes < Trigger, -1, nz(pos[1], 0)))
possig = iff(reverse and pos == 1, -1,
iff(reverse and pos == -1, 1, pos))
if (possig == 1)
strategy.entry("Long", strategy.long)
if (possig == -1)
strategy.entry("Short", strategy.short)
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(nRes, color=blue, title="Z-Score")