Texto dentro del indicador - página 4

 
investeo:

Hice una prueba de concepto de EA interactuando con un indicador a través de unas variables globales temporales cambiadas por el uso de diferentes pulsaciones de teclas.

Las esquinas funcionan, pero hay que recordar que las esquinas inferiores son relativas al marco del indicador, no a la línea de tiempo - ver el video.

Lamentablemente la subida de videos no parece funcionar en este foro :(


De momento lo pongo en

http://www.youshare.com/Guest/c94bb3e9cfe6a424.flv.html

(ver a pantalla completa para mejores resultados)

mejor regrds,

Hola

No había audio en este videao.

¿Puedes publicar el código del SampleTextIndicator?

Saludos

 
walb99:

Hola

No había audio en este videao.

¿Puedes publicar el código del SampleTextIndicator?

Saludos


Hola

El vídeo no contiene pista de audio. Publicaré el código hoy por la tarde porque lo he dejado en otro portátil.

 

El código puede no ser muy elegante, pero funciona correctamente


//+------------------------------------------------------------------+
//|                                          SampleTextIndicator.mq5 |
//|                                            Copyright Investeo.pl |
//|                                                      Investeo.pl |
//+------------------------------------------------------------------+
#property copyright "Investeo.pl"
#property link      "http://Investeo.pl"
#property version   "1.00"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_minimum 0
#property indicator_maximum 100


string label2_name="indicator_label";
int window=-1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
//---
   IndicatorSetString(INDICATOR_SHORTNAME,"Hello... PRESS A-W-S-D-C TO PLAY");
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
{
//---
//--- return value of prev_calculated for next call
 
   if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     {
      window=ChartWindowFind();
      Print(window);
     }
     
     if(ObjectFind(0,label2_name)<0)
     {
      ObjectCreate(0,label2_name,OBJ_LABEL,window,0,0);         
      ObjectSetInteger(0,label2_name,OBJPROP_XDISTANCE,10);
      ObjectSetInteger(0,label2_name,OBJPROP_YDISTANCE,10);
      ObjectSetInteger(0,label2_name,OBJPROP_COLOR,LightPink);
      ObjectSetString(0,label2_name,OBJPROP_TEXT,"HELLO WORLD");
      ObjectSetString(0,label2_name,OBJPROP_FONT,"Arial");
      ObjectSetInteger(0,label2_name,OBJPROP_FONTSIZE,14);
      ObjectSetInteger(0,label2_name,OBJPROP_SELECTABLE,false);
      ChartRedraw(window);                                      
     } 
     else
     {
      ObjectSetInteger(0,label2_name,OBJPROP_XDISTANCE,(int)GlobalVariableGet("prop_x"));
      ObjectSetInteger(0,label2_name,OBJPROP_YDISTANCE,(int)GlobalVariableGet("prop_y"));
      ObjectSetString(0,label2_name,OBJPROP_TEXT,"x: " 
                                    + IntegerToString((int)GlobalVariableGet("prop_x")) 
                                    + " y: " 
                                    + IntegerToString((int)GlobalVariableGet("prop_y")));
      ObjectSetInteger(0,label2_name,OBJPROP_CORNER,(int)GlobalVariableGet("corner"));
                                          
     }
     
   
   
   return(rates_total);
}
  
void OnDeinit(const int reason)
{
   if(ObjectFind(window,label2_name)>=0)
      ObjectDelete(window,label2_name);
      
 

Hola

gracias por publicar el código,

podría por favor cambiar el código de manera que el indicador simplemente pone algún tipo de texto en la esquina superior derecha,

un ejemplo que se puede utilizar para cada indicador en una ventana separada

 
walb99:

Hola

gracias por publicar el código,

podría por favor cambiar el código de manera que el indicador simplemente pone algún tipo de texto en la esquina superior derecha,

un ejemplo que se puede utilizar para cada indicador en una ventana separada


Pongo el código con comentarios autoexplicativos

BR,

Investeo


//+------------------------------------------------------------------+
//|                                         UpperRightCornerText.mq5 |
//|                                      Copyright 2010, Investeo.pl |
//|                                               http://Investeo.pl |
//+------------------------------------------------------------------+
#property copyright "2010, Investeo.pl"
#property link      "http://Investeo.pl"
#property version   "1.00"
#property indicator_separate_window
#property indicator_plots   1

string label_info="label1";
int window=-1;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- initialize a label in upper right corner

  // find indicator's window handle
  if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     window=ChartWindowFind();

  // check if label object does not already exist and create it
  if(ObjectFind(0,label_info)<0)
  {
      // Create label in indicator's window 
      ObjectCreate(0,label_info,OBJ_LABEL,window,0,0);         
      // Set X and Y distance from UPPER RIGHT CORNER
      ObjectSetInteger(0,label_info,OBJPROP_XDISTANCE,200);
      ObjectSetInteger(0,label_info,OBJPROP_YDISTANCE,20);
      ObjectSetInteger(0,label_info,OBJPROP_CORNER, CORNER_RIGHT_UPPER);
      // Set text properties: colour, font and font size
      ObjectSetInteger(0,label_info,OBJPROP_COLOR,LightPink);
      ObjectSetString(0,label_info,OBJPROP_FONT,"Arial");
      ObjectSetInteger(0,label_info,OBJPROP_FONTSIZE,14);
      // Set text to display
      ObjectSetString(0,label_info,OBJPROP_TEXT,"HELLO I am a label");
  } else Print("label_info already exists"); 
  

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {
//---
  if(!ObjectFind(0,label_info)<0)
      ObjectDelete(0, label_info);
  }
 

Necesito una sugerencia para un indicador simple:

Cierre > EMA 34 = histograma verde o ....line o....arrow...

Cerrar< EMA 34 = histograma de caña o...línea o....arrow...

Gracias por la ayuda

 
investeo:


He puesto el código con comentarios autoexplicativos

BR,

Investeo


Hola Investeo

muchas gracias, tu código funciona, es decir, la etiqueta aparece, pero el valor no se actualiza. ¿He cometido un error?

Este es mi código.

//+------------------------------------------------------------------+
//|                                                                                                                                                     Color MA |
//|                                                                                        Copyright 2009, EarnForex.com |
//|                                                                                                       http://www.earnforex.com |
//+------------------------------------------------------------------+
#property copyright "2009, EarnForex.com"
#property link "http://www.earnforex.com"
#property version "1.00"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 1

//---- plot MA
#property indicator_label1 "Color MA1"
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_color1 Lime, Red
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1



//#include <MovingAverages.mqh>

//--- input parameters
input int MA1_Period = 10;
input ENUM_MA_METHOD MA1_Mode = MODE_EMA;
input ENUM_APPLIED_PRICE MA1_Price = PRICE_CLOSE;
input int MA1_Shift = 0;

input int CountBars=200;

string label_info=""; 
int window=-1;




color label_color;
double MA_Value;
double myPrice;
double myMAnow;


int nDigits;





//--- indicator buffers
double MA1TempBuffer[];
double MA1Buffer[];
double MA1ColorBuffer[];





int ma1_handle;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                                                            |
//+------------------------------------------------------------------+
void OnInit()
{
        SetIndexBuffer(0, MA1Buffer, INDICATOR_DATA);
        SetIndexBuffer(1, MA1ColorBuffer, INDICATOR_COLOR_INDEX);
        PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0);
        PlotIndexSetInteger(0,PLOT_SHIFT,MA1_Shift);
        

        
        
        IndicatorSetString(INDICATOR_SHORTNAME, "Color_MA["+IntegerToString(MA1_Period)+"]");
        IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
   
 if(Symbol()=="EURUSD" || Symbol()=="GBPUSD" || Symbol()=="EURCHF" || Symbol()=="USDCAD" || Symbol()=="EURGBP" || Symbol()=="AUDUSD" || Symbol()=="USDCHF" || Symbol()=="6S_CONT")  nDigits = 4; else nDigits = 2;

         ma1_handle = iMA(NULL, 0, MA1_Period, 0, MA1_Mode, MA1_Price); 
        
        
  
   label_info= "myMA"+IntegerToString(MA1_Mode)+IntegerToString(MA1_Period);
        
   
   //--- initialize a label in upper right corner

          // find indicator's window handle
  if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     window=ChartWindowFind();
     
     
        
   
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                                                                                 |
//+------------------------------------------------------------------+
int OnCalculate(        const int rates_total,
                                                const int prev_calculated,
                                                const datetime &time[],
                                                const double &open[],
                                                const double &high[],
                                                const double &low[],
                                                const double &close[],
                                                const long &tick_volume[],
                                                const long &volume[],
                                                const int &spread[])
{
        int limit;
        if (CountBars >= rates_total) limit = 0; else limit = rates_total - CountBars; 
        

        CopyBuffer(ma1_handle, 0, 0, rates_total, MA1TempBuffer);
        

        for (int i = rates_total - 1; i > limit; i--)
        {
                MA1Buffer[i] = MA1TempBuffer[i];
           double myMA_now = MA1TempBuffer[i];
                double myMA_previous = MA1TempBuffer[i - 1]; //MA One bar ago
                
                
                 
                if (myMA_now >= myMA_previous) MA1ColorBuffer[i] = 0;
                else if (myMA_now < myMA_previous) MA1ColorBuffer[i] = 1;
                        
        }
                

        myMAnow=MA1TempBuffer[rates_total-1-MA1_Shift]; 
        


          
   myPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
   
   if(myPrice>myMAnow)label_color=Lime;  else label_color=Red; 

   
   


  // check if label object does not already exist and create it
 
  if(ObjectFind(0,label_info)<0)
  {
      // Create label in indicator's window 
      ObjectCreate(0,label_info,OBJ_LABEL,window,0,0); 
        // Set X and Y distance from UPPER RIGHT CORNER      
      ObjectSetInteger(0,label_info,OBJPROP_XDISTANCE,100);
      ObjectSetInteger(0,label_info,OBJPROP_YDISTANCE,20);
       ObjectSetInteger(0,label_info,OBJPROP_CORNER, CORNER_RIGHT_UPPER); 
          
       // Set text properties: colour, font and font size
      ObjectSetInteger(0,label_info,OBJPROP_COLOR,label_color);
      ObjectSetString(0,label_info,OBJPROP_FONT,"Arial");
      ObjectSetInteger(0,label_info,OBJPROP_FONTSIZE,14);   
    
       // Set text to display
      ObjectSetString(0,label_info,OBJPROP_TEXT,DoubleToString(myMAnow,nDigits));

      
     
  } else Print("label_info already exists"); 
  

 
        return(rates_total);
}
//+------------------------------------------------------------------+ 

void OnDeinit(const int reason)
  {
//---
  if(!ObjectFind(0,label_info)<0)
      ObjectDelete(0, label_info);
  }
  
  //------------------------------------------------------------------------
 
supermagix:

Necesito una sugerencia para un indicador simple:

Cierre > EMA 34 = histograma verde o ....line o....arrow...

Cerrar< EMA 34 = histograma de caña o...línea o....arrow...

Gracias por la ayuda


Usted puede tratar de MACD para este propósito
Archivos adjuntos:
 
walb99:
Puedes probar el MACD para este propósito

Sí, pero no debe seguir la "curva del indicador" sino sólo indicar el cambio de color.

Gracias walb

 
supermagix:

Sí, pero no debe seguir la "curva del indicador", sino sólo indicar el cambio de color.

Gracias walb

El indicador para MT4 se llama colores rusos, usted quiere

/go?link=https://www.forexfactory.com/showthread.php?t=173962

Solo tienes que sustituir la HMA por la EMA34