domingo, 22 de marzo de 2020

El sistema "Pinchos del VIX"

Hoy veremos un sistema con unas estadísticas excelentes. Compra el futuro mini del SP500 cuando se produce un techo en el VIX en forma de "pincho", tal y como se puede ver en la imagen siguiente:


El sistema es relevante con fecha 20 de marzo pues acaba de marcar una compra. La fiabilidad es del 80% pero no deja de ser un sistema de trading, basado en la retrospectiva, así que no se recomienda en ningún caso para la operativa con derivados. Utilice el código de debajo para sus pruebas.


CÓDIGO DEL SISTEMA

//---------------------------------------//
// SISTEMA "PINCHOS DEL VIX"
// COMPRA TRAS UN DESPLOME DEL SP500 Y EL
// VIX HACIENDO UN MÁXIMO EN FORMA DE PINCHO
// OSCAR G. CAGIGAS
// 22 MARZO 2020
//---------------------------------------//

//VARIABLES OPTIMIZABLES
med = Optimize("per",11,7,25,2); //parámetros de la banda de Bollinger (desviación)
desv = Optimize("desv",0.7,0.6,2.5,0.1); //parámetros de la banda de Bollinger (media)

//-------------SISTEMA DE TRADING-------------------

//VARIOS//
SetOption("InitialEquity", 100000);
PositionSize = MarginDeposit = 1;
PointValue = 50; //FUTURO MINI SP500

//CAÍDA FUERTE
CF = BarsSince( L == LLV(L,21) ) < 2; //en los últimos 2 días hubo un mínimo mensual

//DEFINICIONES
VIX = Foreign("$VIX","Close");
VIXout = VIX > BBandTop(VIX,med,desv); //sale de su banda de Bollinger
VIXin= VIX < BBandTop(VIX,med,desv); //entra en la banda de Bollinger
VueltaVIX = Ref(VIXout,-1) AND VIXin; //ida y vuelta en la Banda de Bollinger

//ENTRADA
Buy =  CF AND VueltaVIX;

//SALIDA
Sell = BarsSince(Buy) == 21; //mantenemos la compra un mes justo 

//SOLO LARGOS
Short = Cover = 0;

//STOP LOSS// 
nstop = 10; //stop loss en desviaciones estándar
desv_carver = sqrt( EMA( ( C-Ref(C,-1) )^2, 36 ) ) ;    
stop = Nz(nstop * desv_carver);   
ApplyStop(stopTypeLoss,stopModePoint,stop,1,0); 
Equity(1,0); 


//********************************************************
//********************PARTE VISUAL************************
//********************************************************

//CHART//
SetChartOptions(0,chartShowDates);
Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ) 
+"\n"+ FullName()+"\n"+ EncodeColor(colorBlue)+"SISTEMA PINCHOS DEL VIX"
+"\n"+ EncodeColor(colorGreen)+"ATR="+NumToStr(ATR(20),1.2)+" %";

//CIRCULOS EN PANTALLA//
Plot(C,"Last ",colorBlack,styleBar|styleThick);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-15);
PlotShapes(IIf(Buy,shapeHollowCircle,shapeNone),colorGreen,0,BuyPrice,0);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-15);
PlotShapes(IIf(Sell,shapeHollowCircle,shapeNone),colorRed,0,SellPrice,0);

//LETREROS//
dist = ATR(10); 
for( i = 0; i < BarCount; i++ ) 

if( Buy[i]  ) PlotText( "Long "+ NumToStr(ValueWhen(Buy[i],BuyPrice[i]),1.2), i, L[ i ]-dist[i], colorGreen ); 
if( Sell[i] ) PlotText( "Exit " + NumToStr(ValueWhen(Sell[i],SellPrice[i]),1.2), i, H[ i ]+dist[i], colorRed ); 
if( Short[i]  ) PlotText( "Short "+NumToStr(ValueWhen(Short[i],ShortPrice[i]),1.2), i, H[ i ]+dist[i], colorBrown ); 
if( Cover[i] ) PlotText( "Cover " + NumToStr(ValueWhen(Cover[i],CoverPrice[i]),1.2), i, L[ i ]-dist[i], colorDarkGreen ); 
}

7 comentarios:

  1. Óscar, hola. Intento aplicar el sistema sobre el índice sp500 (SPX-IDX). No he sido capaz de pintarlo ni hacer análisis. Puedes echarle un vistazo y decirme lo que tengo que cambiar? Saludos
    // SISTEMA "PINCHOS DEL VIX"
    // COMPRA TRAS UN DESPLOME DEL SP500 Y EL
    // VIX HACIENDO UN MÁXIMO EN FORMA DE PINCHO
    // OSCAR G. CAGIGAS
    // 22 MARZO 2020
    //---------------------------------------//

    //VARIABLES OPTIMIZABLES
    med = Optimize("per",11,7,25,2); //parámetros de la banda de Bollinger (desviación)
    desv = Optimize("desv",0.7,0.6,2.5,0.1); //parámetros de la banda de Bollinger (media)

    //-------------SISTEMA DE TRADING-------------------

    //VARIOS//
    SetOption("InitialEquity", 100000);
    PositionSize = MarginDeposit = 1;
    //PointValue = 50; //FUTURO MINI SP500
    SPX = Foreign("SPX-IDX","Close");
    //CAÍDA FUERTE
    CF = BarsSince( L == LLV(L,21) ) < 2; //en los últimos 2 días hubo un mínimo mensual

    //DEFINICIONES
    VIX = Foreign("VIX-IDX","Close");
    VIXout = VIX > BBandTop(VIX,med,desv); //sale de su banda de Bollinger
    VIXin= VIX < BBandTop(VIX,med,desv); //entra en la banda de Bollinger
    VueltaVIX = Ref(VIXout,-1) AND VIXin; //ida y vuelta en la Banda de Bollinger
    SPX = Foreign("SPX-IDX","Close");
    //ENTRADA
    Buy = CF AND VueltaVIX;

    //SALIDA
    Sell = BarsSince(Buy) == 21; //mantenemos la compra un mes justo

    //SOLO LARGOS
    Short = Cover = 0;

    //STOP LOSS//
    nstop = 10; //stop loss en desviaciones estándar
    desv_carver = sqrt( EMA( ( C-Ref(C,-1) )^2, 36 ) ) ;
    stop = Nz(nstop * desv_carver);
    ApplyStop(stopTypeLoss,stopModePoint,stop,1,0);
    Equity(1,0);


    //********************************************************
    //********************PARTE VISUAL************************
    //********************************************************

    //CHART//
    SetChartOptions(0,chartShowDates);
    Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) )
    +"\n"+ FullName()+"\n"+ EncodeColor(colorBlue)+"SISTEMA PINCHOS DEL VIX"
    +"\n"+ EncodeColor(colorGreen)+"ATR="+NumToStr(ATR(20),1.2)+" %";

    //CIRCULOS EN PANTALLA//
    Plot(C,"Last ",colorBlack,styleBar|styleThick);
    PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-15);
    PlotShapes(IIf(Buy,shapeHollowCircle,shapeNone),colorGreen,0,BuyPrice,0);
    PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-15);
    PlotShapes(IIf(Sell,shapeHollowCircle,shapeNone),colorRed,0,SellPrice,0);

    //LETREROS//
    dist = ATR(10);
    for( i = 0; i < BarCount; i++ )
    {
    if( Buy[i] ) PlotText( "Long "+ NumToStr(ValueWhen(Buy[i],BuyPrice[i]),1.2), i, L[ i ]-dist[i], colorGreen );
    if( Sell[i] ) PlotText( "Exit " + NumToStr(ValueWhen(Sell[i],SellPrice[i]),1.2), i, H[ i ]+dist[i], colorRed );
    if( Short[i] ) PlotText( "Short "+NumToStr(ValueWhen(Short[i],ShortPrice[i]),1.2), i, H[ i ]+dist[i], colorBrown );
    if( Cover[i] ) PlotText( "Cover " + NumToStr(ValueWhen(Cover[i],CoverPrice[i]),1.2), i, L[ i ]-dist[i], colorDarkGreen );
    }

    ResponderEliminar
    Respuestas
    1. No indicas el error que sale pero supongo que si no pinta nada es un problema con los tickers así que yo probaría a pintar SP500 y VIX en un código aparte y cuando lo tenga lo pasaría al sistema. Saludos

      Eliminar
    2. Sólo me sale el precio del spx y los letreros o title. Imagino que el fallo está en querer cambiar el backtest del futuro al spx-idx. Puedes revisarme esta parte?. Sólo es cambiar 2 ticker que son los de mi base de datos y que el spx sí me lo pinta y eliminar cualquier referencia al futuro y posición.
      Saludos
      Luis E.
      //VARIOS//
      SetOption("InitialEquity", 100000);
      PositionSize = MarginDeposit = 1;
      //PointValue = 50; //FUTURO MINI SP500
      SPX = Foreign("SPX-IDX","Close");
      //CAÍDA FUERTE
      CF = BarsSince( L == LLV(L,21) ) < 2; //en los últimos 2 días hubo un mínimo mensual

      //DEFINICIONES
      VIX = Foreign("VIX-IDX","Close");
      VIXout = VIX > BBandTop(VIX,med,desv); //sale de su banda de Bollinger
      VIXin= VIX < BBandTop(VIX,med,desv); //entra en la banda de Bollinger
      VueltaVIX = Ref(VIXout,-1) AND VIXin; //ida y vuelta en la Banda de Bollinger
      SPX = Foreign("SPX-IDX","Close");

      Eliminar
    3. Lo que tiene que ver con el futuro no influye para pintarlo, solo a las ganancias y pérdidas cuando se hace backtest. En cualquier caso no me das suficiente información para ayudarte. Qué proveedor de datos usas? Puedes ver a la vez el SP500 y el VIX en una ventana aparte? Puedes ver los mercados por separado? Mientras no puedas pintar juntos el SP500 y el VIX en una ventana separada el código no te servirá de nada. Saludos

      Eliminar
  2. Oscar, como no sé si se puede enviar imágenes te las envío por mail.
    Un saludo
    Luis

    ResponderEliminar
  3. ´>Oscar, para pintar el sistema como lo tienes en la imagen, debo terminar el código y plot la BB y el vix?
    Saludos
    Luis

    ResponderEliminar
  4. Para que funcione el sistema solo hay que cambiar el ticker del VIX. El SP500 es el mercado al que lo aplicamos así que no hace falta especificarlo en el código. El código es el sistema de trading. Si te fijas las bandas de Bollinger están en una ventana aparte; he insertado las que trae por defecto Amibroker y les he cambiado el color y los parámetros, para que coincidan con los del sistema.

    ResponderEliminar

ENTRADAS POPULARES