#property description "Script a base de los datos del indicador RSI muestra en la ventana del gráfico"
#property description "la información sobre la frecuencia con la que el mercado se encuentra en las zonas de sobrecompra"
#property description "y sobreventa durante el período de tiempo especificado.
//--- mostramos la ventana de los parámetros de entrada durante el arranque del script
#property script_show_inputs
//--- parámetros de entrada
input int InpMAPeriod=14; // Período de Media móvil
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // Tipo del precio
input double InpOversoldValue=30.0; // Nivel de sobreventa
input double InpOverboughtValue=70.0; // Nivel de sobrecompra
input datetime InpDateStart=D'2012.01.01 00:00'; // Fecha de inicio del análisis
input datetime InpDateFinish=D'2013.01.01 00:00'; // Fecha de finalización del análisis
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
double rsi_buff[]; // array de valores del indicador
int size=0; // tamaño del array
//--- obtenemos el manejador del indicador RSI
ResetLastError();
int rsi_handle=iRSI(Symbol(),Period(),InpMAPeriod,InpAppliedPrice);
if(rsi_handle==INVALID_HANDLE)
{
//--- fallo al obtener el manejador del indicador
PrintFormat("Fallo al obtener el manejador. Código del error = %d",GetLastError());
return;
}
//--- seguimos en el ciclo hasta que el indicador no termine de calcular todos sus valores
while(BarsCalculated(rsi_handle)==-1)
{
//--- salimos si el usuario finaliza el trabajo del script de forma forzada
if(IsStopped())
return;
//--- retardo para que al indicador le de tiempo a calcular sus valores
Sleep(10);
}
//--- copiamos los valores del indicador durante un período determinado
ResetLastError();
if(CopyBuffer(rsi_handle,0,InpDateStart,InpDateFinish,rsi_buff)==-1)
{
PrintFormat("Fallo al copiar los valores del indicador. Código del error = %d",GetLastError());
return;
}
//--- obtenemos el tamaño del array
size=ArraySize(rsi_buff);
//--- clasificamos el array
ArraySort(rsi_buff);
//--- averiguamos el porcentaje de tiempo durante el que el mercado se encuentra en la zona de sobreventa
double ovs=(double)ArrayBsearch(rsi_buff,InpOversoldValue)*100/(double)size;
//--- averiguamos el porcentaje de tiempo durante el que el mercado se encuentra en la zona de sobrecompra
double ovb=(double)(size-ArrayBsearch(rsi_buff,InpOverboughtValue))*100/(double)size;
//--- formamos cadenas para visualizar los datos
string str="De "+TimeToString(InpDateStart,TIME_DATE)+" a "
+TimeToString(InpDateFinish,TIME_DATE)+" el mercado estaba:";
string str_ovb="en la zona de sobrecompra "+DoubleToString(ovb,2)+"% de tiempo";
string str_ovs="en la zona de sobreventa "+DoubleToString(ovs,2)+"% de tiempo";
//--- mostramos los datos en el gráfico
CreateLabel("top",5,60,str,clrDodgerBlue);
CreateLabel("overbought",5,35,str_ovb,clrDodgerBlue);
CreateLabel("oversold",5,10,str_ovs,clrDodgerBlue);
//--- redibujamos el gráfico
ChartRedraw(0);
//--- retardo
Sleep(10000);
}
//+------------------------------------------------------------------+
//| Mostrar comentario en la esquina inferior izquierda del gráfico |
//+------------------------------------------------------------------+
void CreateLabel(const string name,const int x,const int y,
const string str,const color clr)
{
//--- crear etiqueta
ObjectCreate(0,name,OBJ_LABEL,0,0,0);
//--- anclar etiqueta a la esquina inferior izquierda
ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_LOWER);
//--- cambiamos la posición del punto de anclaje
ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_LEFT_LOWER);
//--- distancia del punto de anclaje por el eje X
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
//--- distancia del punto de anclaje por el eje Y
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- texto de la etiqueta
ObjectSetString(0,name,OBJPROP_TEXT,str);
//--- color del texto
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- tamaño del texto
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
}
|