From my limited observation, it seems that VIX is pretty good at showing the tops but not the bottoms. If VIX or VOX touches the bands, then that's a signal. Some of you folks may want to play with using VIX for tops and VOX for bottoms.
-----------------
{$I 'paintMacdPane'}
HideVolume;
var Bar: integer;
var VXO : integer = GetExternalSeries('VXO.X', #close);
var VXOUBB : integer = BBandUpperSeries(VXO, 20, 2);
var VXOLBB : integer = BBandLowerSeries(VXO, 20, 2);
var VIX : integer = GetExternalSeries('VIX.X', #close);
var VIXUBB : integer = BBandUpperSeries(VIX, 20, 2);
var VIXLBB : integer = BBandLowerSeries(VIX, 20, 2);
var vixPane : integer = CreatePane(60, false, true);
var vxoPane : integer = CreatePane(60, false, true);
var macdPane : integer = CreatePane(60, false, true);
paintMacdPane(5,13,6, #close,macdPane, 1);
PlotSeriesLabel(VXO, vxoPane, #black, #thin, 'VXO');
PlotSeriesLabel(VXOUBB, vxoPane, #red, #thin, 'UBB(20,2)');
PlotSeriesLabel(VXOLBB, vxoPane, #blue, #thin, 'LBB(20,2)');
PlotSeriesLabel(VIX, vixPane, #black, #thin, 'VIX');
PlotSeriesLabel(VIXUBB, vixPane, #red, #thin, 'UBB(20,2)');
PlotSeriesLabel(VIXLBB, vixPane, #blue, #thin, 'LBB(20,2)');
var DiffVXOLBB : integer = SubtractSeries(VXO, VXOLBB);
var DiffVIXLBB : integer = SubtractSeries(VIX, VIXLBB);
var Color, MacdColor : integer;
var MACDH : integer = SubtractSeries(EMASeries(#close, 5), EMASeries(#close, 13));
var Signal : integer = EMASeries(MACDH, 6);
var bVXOU, bVIXU, bVXOL, bVIXL : boolean;
for Bar := 20 to BarCount - 1 do
begin
if (@VXO[Bar] >= @VXOUBB[Bar]) then
bVXOU := true
else
bVXOU := false;
if (@VIX[Bar] >= @VIXUBB[Bar]) then
bVIXU := true
else
bVIXU := false;
if (@DiffVXOLBB[Bar] <= 0.09) then
bVXOL := true
else
bVXOL := false;
if (@DiffVIXLBB[Bar] <= 0.09) then
bVIXL := true
else
bVIXL := false;
if ((@VXO[Bar] = @VXOUBB[Bar]) and (@VXO[Bar] = @VXOLBB[Bar])) then
begin
bVXOU := false;
bVXOL := false;
end;
if (bVXOU or bVIXU) then
color := 1
else if (bVXOL or bVIXL) then
color := 0;
if (@MACDH[Bar] > @Signal[Bar]) then
MacdColor := 0
else if (@MACDH[Bar] < @Signal[Bar]) then
MacdColor := 1;
if ((Color = 0) and (MacdColor = 0)) then
SetBackgroundColor(Bar, #RedBkg)
else if ((Color = 1) and (MacdColor = 1)) then
SetBackgroundColor(Bar, #BlueBkg)
else if ((Color = 0) and (MacdColor = 1)) then
SetBackgroundColor(Bar, #BlueBkg)
else if ((Color = 1) and (MacdColor = 0)) then
SetBackgroundColor(Bar, #GreenBkg);
end;