miércoles, 27 de marzo de 2019

Indicador de movimientos significativos

El mercado no suele moverse más de una desviación estándar la mayor parte del tiempo. Pero a veces se sacude con fuerza y se mueve incluso 2 desviaciones estándar o más. Al revisar los días en los que el mercado se ha movido más de 2 desviaciones vemos que suelen conducir a tendencias; es decir, son días muy significativos que conviene vigilar.

No hay muchos días en los que el mercado se mueva tanto. Estamos a finales de marzo y en todo 2019 solo hay una barra significativa de 2.45 desviaciones estándar. En el gráfico se puede ver que a primeros de diciembre hubo una barra roja que condujo a una caída larga. A finales del mismo mes hubo una barra muy grande (3.27 desv) que condujo a una subida que en el momento mostrado aún se mantiene.





El código siguiente colorea la barra en rojo si excede las dos desviaciones estándar y también indica en pantalla el número exacto de desviaciones. Contiene el dimensionamiento por VAR según el modelo de Carver, aunque en esta ocasión no se usa para el indicador, pero será útil si se quiere insertar un sistema de trading o simplemente saber el número de contratos que produciría la volatilidad objetivo, en este caso indicada como VAR (Value At Risk).

El código también contiene un bucle que muestra en pantalla (arriba a la derecha) el porcentaje de las barras que tienen movimientos mayores de 2 desviaciones estándar. Si fuera una distribución normal sería alrededor de un 4.6% pero en la práctica suele haber más, como un 6%.


CÓDIGO DEL INDICADOR:

//-------------------------------------------------------     
// INDICADOR OPCIONES
// OSCAR G. CAGIGAS   
// 19 AGOSTO 2018
//-------------------------------------------------------     

//Varios
SetOption("WarningLevel", 1 );   

//RELLENAR PARAMETROS DE MONEY MANAGEMENT
//*****************************************************
Eq_euros = 100000; //saldo (actualizar a mano)
VAR = 0.375;  //en porcentaje
num_pos = 6; //numero de posiciones
//*****************************************************

//PARAMETROS DEL FRAMEWORK DE CARVER
idm = Min(2.5,sqrt(num_pos)); //instrument diversification multiplier 
iw = 1/num_pos;  //PESO EN LA CARTERA DE CADA POSICIÓN

//DIMENSIONAMIENTO//  
#include <vencimientos.afl>   
decim = 1 + dec/10; //decimales correctos

//DESVIACION STANDARD EXPONENCIAL    
desv_carver = sqrt( EMA( ( C-Ref(C,-1) )^2, 36 ) ) ;    
  
//----NÚMERO DE OPCIONES EN BASE AL FORECAST ANTERIOR, VOLATILIDAD Y EQUITY---- 
eurodolar = Foreign("@EU#C","C");   
tavol = 0.01 * VAR * 16 / 2.33; //target volatility en ttp1  (VAR 99% son 2.33 desv)
Eq = Eq_euros*eurodolar;  //Capital en dólares
dvt = Eq * tavol / 16; //daily volatility target    
ivv = desv_carver * PointValue; //instrument value volatility    
vs = Nz(dvt / ivv);  //volatility scalar    
pos = vs * iw * idm;  //forecast de 10 siempre. POs es posición en FUTUROS

//***************************************************************************************************


//BARRAS DE ALTA VOLATILIDAD
AVbar = abs( C - Ref(C,-1) ) > 2*Ref(desv_carver,-1);
color = IIf(AVbar, colorRed, colorBlack);

//CHART// 
SetChartOptions(0,chartShowDates);     
Plot(C,"PRICE",color,styleBar|styleThick,Null,Null,0,0,2);     
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)+"OPCIONES"       
+"\n"+EncodeColor(colorGrey40)+"STDEV = "+WriteVal(desv_carver,decim)+" Pts ; x"   + WriteVal(PointValue,1.0) + " ; (" + TickSize +")"
+"\n"+EncodeColor(colorRed)+"VOLAT = $"+WriteVal(ivv,1.2);   

//EXPORTAMOS VOLATILIDAD
Filter = Status( "lastbarinrange" );
AddTextColumn(WriteIf(AVbar,"1",""),"AVbar");
AddColumn(ivv,"ivv",1.0);

//NÚMERO DE DESVIACIONES ESTÁNDAR SI ES MAYOR DE 2//
dist = ATR(10); 
numdesv = abs (C - Ref(C,-1)) / Ref(desv_carver,-1);
cuenta = 0;
cuentadesv = 0;
for( i = 0; i < BarCount; i++ ) 

if( AvBar[i] ) 
{
PlotText( NumToStr(numdesv[i],1.2) + " std", i, H[ i ]+dist[i], colorRed ); 
cuenta++;
cuentadesv = cuentadesv +  numdesv[i];
}
}
Plot(100*cuenta/BarCount,">2desv%",colorRed,styleLine|styleLeftAxisScale|styleNoDraw);
Plot(cuenta,"cuenta",colorRed,styleLine|styleLeftAxisScale|styleNoDraw);
Plot(BarCount,"barcount",colorRed,styleLine|styleLeftAxisScale|styleNoDraw);
Plot(cuentadesv,"cuentadesv",colorRed,styleLine|styleLeftAxisScale|styleNoDraw);

No hay comentarios:

Publicar un comentario

ENTRADAS POPULARES