Vixenator, una estrategia que combina la volatilidad y el SP500

El Vix mas conocido como indicador del miedo, mide la volatilidad del mercado y el SP500 el indice mas representativo del mercado Americano, que pasa si combinamos ambos, obtenemos lo que traemos hoy el Vixenator.

Este indicador combina ambos y se los dejaremos para la plataforma de Ameritrade, TOS.

Como operar con el:

  • Solo funciona con el SPY, el ETF del indice SP500, lo pueden usar con otro indice o Stock pero no lo he testeado en ellas.
  • Time Frame en días y semanas,no menor da mas señales falsas
  • Operamos el lado largo y sólo cuando el precio cierra por encima de su media de 200 sesiones
  • Vamos largo cuando el indicador pasa a color morado y nos indique +1. Es decir sea mayor que 0
  • Vamos corto cuando el indicador pase a color rojo y nos indique -1. Es decir sea menor que 0
  • Cuando sea color amarillo no operamos, es indecisión.
  • No operar solo basando la operativa en este indicador si da buenas entradas pero es mejor usarlo como un complemento de nuestra estrategia.

Les dejo el código del indicador solo abrimos la plataforma TOS, nos vamos a Studies, edit, new y lo pegamos, le damos ok y lo agregamos en nuevo indicador.
Si te aparece como la imagen de abajo es correcto, si hay algún problema, tienes que quitar los plot del SPY .

Vixenator

#
# --- script begin ----
#

declare lower;

input index = {default SPX, NDX, DJI, COMP, RUT};
input length = 30;
input level = 1.0; #hint level: St.dev. level to be breached for trigger. \n Set to "0" for stop & reverse.

def den = if index == index.SPX then close("SPX") else if index == index.NDX then close("NDX") else if index == index.DJI then close("$DJI") else if index == index.COMP then close("COMP") else close("RUT");

def num = close;

def ratio = num / den;
def sma = Average(ratio, length);
def sd = StDev(ratio, length);
def diff = ratio - sma;

plot zscore = diff / sd;
plot zero = if !IsNaN(close) then 0 else Double.NaN;

def delta = zscore - zscore[1];

def trend = CompoundValue(1, if zscore >= level then 1 else if zscore <= -level then -1 else if trend[1] != 1 and zscore > 0 and delta >= level then 1 else if trend[1] != -1 and zscore < 0 and delta <= -level then -1 else if trend[1] == 1 and zscore > 0 then 1 else if trend[1] == -1 and zscore < 0 then -1 else 0, 0);

plot posLevel = level;
plot negLevel = -level;

plot p3 = 3;
plot p2 = 2;
plot p1 = 1;
plot z0 = 0;
plot m1 = -1;
plot m2 = -2;
plot m3 = -3;

zscore.SetDefaultColor(GetColor(1));
zscore.SetLineWeight(1);
zscore.AssignValueColor(if zscore >= 0 then CreateColor(127, 127, 255) else Color.RED);

zero.SetDefaultColor(GetColor(7));
zero.HideTitle();
zero.SetStyle(Curve.POINTS);
zero.AssignValueColor(if trend > 0 then if zscore > 0 then CreateColor(127, 127, 255) else Color.YELLOW else if trend < 0 then if zscore < 0 then Color.RED else Color.YELLOW else Color.YELLOW);

AddCloud(zscore, z0, CreateColor(127, 127, 255), Color.RED);

posLevel.SetDefaultColor(CreateColor(127, 127, 255));
posLevel.HideTitle();
posLevel.SetLineWeight(2);
posLevel.SetStyle(Curve.SHORT_DASH);
negLevel.SetDefaultColor(Color.RED);
negLevel.HideTitle();
negLevel.SetLineWeight(2);
negLevel.SetStyle(Curve.SHORT_DASH);

p3.SetDefaultColor(Color.DARK_GRAY);
p2.SetDefaultColor(Color.DARK_GRAY);
p1.SetDefaultColor(Color.DARK_GRAY);
z0.SetDefaultColor(Color.DARK_GRAY);
m1.SetDefaultColor(Color.DARK_GRAY);
m2.SetDefaultColor(Color.DARK_GRAY);
m3.SetDefaultColor(Color.DARK_GRAY);

p3.HideTitle();
p2.HideTitle();
p1.HideTitle();
z0.HideTitle();
m1.HideTitle();
m2.HideTitle();
m3.HideTitle();

DefineGlobalColor("Long", CreateColor(127, 127, 255));
DefineGlobalColor("Short", Color.RED);
DefineGlobalColor("Neutral", Color.YELLOW);

input barcoloring = yes;

AssignPriceColor(if barcoloring then if trend > 0 then if zscore > 0 then GlobalColor("Long") else GlobalColor("Neutral") else if trend < 0 then if zscore < 0 then GlobalColor("Short") else GlobalColor("Neutral") else GlobalColor("Neutral") else Color.CURRENT);

#