Vixenator_II

Platform
  1. Thinkorswim
Code:
# Vixenator_II: a statistical approach to the relationship between VIX and SPX

# Build: August 24, 2013

#

# --- script begin ---- 

#

declare lower;

input risk = "VIX";

input index = "SPX";

input length = 30;

input level = 2.0; #hint level: 1 St.dev. level to be breached for trigger. \n Set to "0" for stop & reverse.

def ratio = close(risk) / close(index);

def sma = Average(ratio, length);

def sd = StDev(ratio, length);

def diff = ratio - sma;

plot zscore = -1 * 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(COLOR.CYAN);

zscore.SetLineWeight(1);

zscore.AssignValueColor(if zscore >= 0 then COLOR.VIOLET else Color.RED);

zero.SetDefaultColor(COLOR.GRAY);

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, COLOR.VIOLET, Color.RED);

posLevel.SetDefaultColor(COLOR.VIOLET);

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", COLOR.VIOLET);

DefineGlobalColor("Short", Color.RED);

DefineGlobalColor("Neutral", Color.YELLOW);

input barcoloring = No;

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);
 
Last edited by a moderator:

barbaros

Administrator
Staff member
Cleanup...

zrn0Ti9.png


Code:
# Vixenator_II: a statistical approach to the relationship between VIX and SPX
# barbaros - cleaup for b4indicators.com

declare lower;

input risk = "VIX";
input index = "SPX";
input length = 30;
input level = 2.0; #hint level: 1 St.dev. level to be breached for trigger. \n Set to "0" for stop & reverse.

DefineGlobalColor("Long", COLOR.YELLOW);
DefineGlobalColor("Short", Color.RED);
DefineGlobalColor("Neutral", Color.GRAY);
DefineGlobalColor("No Trend", Color.DARK_GRAY);

def ratio = close(risk) / close(index);
def sma = Average(ratio, length);
def sd = StDev(ratio, length);
def diff = ratio - sma;

plot zscore = -1 * 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(COLOR.CYAN);
zscore.SetLineWeight(1);
zscore.AssignValueColor(if zscore >= 0 then COLOR.VIOLET else Color.RED);

zero.SetDefaultColor(COLOR.GRAY);
zero.HideTitle();
zero.SetStyle(Curve.POINTS);
zero.AssignValueColor(
    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("No Trend") 
);

AddCloud(zscore, z0, COLOR.VIOLET, Color.RED);

posLevel.SetDefaultColor(COLOR.VIOLET);
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();

input barcoloring = No;

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
);
 

barbaros

Administrator
Staff member
Added alerts.

Code:
# Vixenator_II: a statistical approach to the relationship between VIX and SPX
# barbaros - cleanup for b4indicators.com
#            added alerts

declare lower;

input risk = "VIX";
input index = "SPX";
input length = 30;
input level = 2.0; #hint level: 1 St.dev. level to be breached for trigger. \n Set to "0" for stop & reverse.

DefineGlobalColor("Long", COLOR.YELLOW);
DefineGlobalColor("Short", Color.RED);
DefineGlobalColor("Neutral", Color.GRAY);
DefineGlobalColor("No Trend", Color.DARK_GRAY);

def ratio = close(risk) / close(index);
def sma = Average(ratio, length);
def sd = StDev(ratio, length);
def diff = ratio - sma;
input barcoloring = No;

plot zscore = -1 * diff / sd;
zscore.SetDefaultColor(COLOR.CYAN);
zscore.SetLineWeight(1);
zscore.AssignValueColor(if zscore >= 0 then COLOR.VIOLET else Color.RED);

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);

zero.SetDefaultColor(COLOR.GRAY);
zero.HideTitle();
zero.SetStyle(Curve.POINTS);
zero.AssignValueColor(
    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("No Trend")
);

plot posLevel = level;
posLevel.SetDefaultColor(COLOR.VIOLET);
posLevel.HideTitle();
posLevel.SetLineWeight(2);
posLevel.SetStyle(curve.SHORT_DASH);

plot negLevel = -level;
negLevel.SetDefaultColor(Color.RED);
negLevel.HideTitle();
negLevel.SetLineWeight(2);
negLevel.SetStyle(curve.SHORT_DASH);

plot p3 = 3;
p3.SetDefaultColor(Color.DARK_GRAY);
p3.HideTitle();

plot p2 = 2;
p2.SetDefaultColor(Color.DARK_GRAY);
p2.HideTitle();

plot p1 = 1;
p1.SetDefaultColor(Color.DARK_GRAY);
p1.HideTitle();

plot z0 = 0;
z0.SetDefaultColor(Color.DARK_GRAY);
z0.HideTitle();

plot m1 = -1;
m1.SetDefaultColor(Color.DARK_GRAY);
m1.HideTitle();

plot m2 = -2;
m2.SetDefaultColor(Color.DARK_GRAY);
m2.HideTitle();

plot m3 = -3;
m3.SetDefaultColor(Color.DARK_GRAY);
m3.HideTitle();

AddCloud(zscore, z0, COLOR.VIOLET, Color.RED);

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
);

Alert(trend > 0 and zscore > 0, "Bullish", Alert.BAR, Sound.DING);
Alert(trend < 0 and zscore < 0, "Bearish", Alert.BAR, Sound.DING);
 
Last edited:
Thanks Barbaros , FYI I'm not the creator of the indicator, I found this searching thinkscript cloud / technical /uncategorized there is no creator listed to give credit to.
 

barbaros

Administrator
Staff member
Thanks Barbaros , FYI I'm not the creator of the indicator, I found this searching thinkscript cloud / technical /uncategorized there is no creator listed to give credit to.
Thank you for posting your findings here :) We all appreciate it.
 

barbaros

Administrator
Staff member
Slight fix to the trend variable. Please test.

Code:
# Vixenator_II: a statistical approach to the relationship between VIX and SPX
# barbaros - cleaup for b4indicators.com
#            added alerts
# barbaros - slight bug fix for trend variable

declare lower;

input risk = "VIX";
input index = "SPX";
input length = 30;
input level = 2.0; #hint level: 1 St.dev. level to be breached for trigger. \n Set to "0" for stop & reverse.

DefineGlobalColor("Long", COLOR.YELLOW);
DefineGlobalColor("Short", Color.RED);
DefineGlobalColor("Neutral", Color.GRAY);
DefineGlobalColor("No Trend", Color.DARK_GRAY);

def ratio = close(risk) / close(index);
#def ratio = if isNaN(ratioPre) then ratio[1] else ratioPre;
def sma = Average(ratio, length);
def sd = StDev(ratio, length);
def diff = ratio - sma;
input barcoloring = No;

plot zscore = -1 * diff / sd;
zscore.SetDefaultColor(COLOR.CYAN);
zscore.SetLineWeight(1);
zscore.AssignValueColor(if zscore >= 0 then COLOR.VIOLET else Color.RED);

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

def delta = zscore - zscore[1];

def trend = if barNumber() == 1 or isNaN(delta) then 0
            else 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;

zero.SetDefaultColor(COLOR.GRAY);
zero.HideTitle();
zero.SetStyle(Curve.POINTS);
zero.AssignValueColor(
    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("No Trend") 
);

plot posLevel = level;
posLevel.SetDefaultColor(COLOR.VIOLET);
posLevel.HideTitle();
posLevel.SetLineWeight(2);
posLevel.SetStyle(curve.SHORT_DASH);

plot negLevel = -level;
negLevel.SetDefaultColor(Color.RED);
negLevel.HideTitle();
negLevel.SetLineWeight(2);
negLevel.SetStyle(curve.SHORT_DASH);

plot p3 = 3;
p3.SetDefaultColor(Color.DARK_GRAY);
p3.HideTitle();

plot p2 = 2;
p2.SetDefaultColor(Color.DARK_GRAY);
p2.HideTitle();

plot p1 = 1;
p1.SetDefaultColor(Color.DARK_GRAY);
p1.HideTitle();

plot z0 = 0;
z0.SetDefaultColor(Color.DARK_GRAY);
z0.HideTitle();

plot m1 = -1;
m1.SetDefaultColor(Color.DARK_GRAY);
m1.HideTitle();

plot m2 = -2;
m2.SetDefaultColor(Color.DARK_GRAY);
m2.HideTitle();

plot m3 = -3;
m3.SetDefaultColor(Color.DARK_GRAY);
m3.HideTitle();

AddCloud(zscore, z0, COLOR.VIOLET, Color.RED);

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
);

def bullish = trend > 0 and zscore > 0;
def bearish = trend < 0 and zscore < 0;

Alert(bullish and bullish != bullish[1], "Bullish", Alert.BAR, Sound.DING);
Alert(bearish and bearish != bearish[1], "Bearish", Alert.BAR, Sound.DING);
 
Top