Text inside indicator - page 4

 
investeo:

I made a proof-of-concept EA interacting with an indicator through a temporary global variables changed by using different keystrokes.

Corners do work, but one has to remember that lower corners are relative to indicator frame, not  the timeline - see the video.

Unfortunately video upload does not seem to work on this forum :(


For the time being I put it on

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

(see fullscreen for best results)

best regrds,

Hi

 

There was no audio attached to this videao.

 

Can you please post the code of the SampleTextIndicator?

 

Regards 

 
walb99:

Hi

 

There was no audio attached to this videao.

 

Can you please post the code of the SampleTextIndicator?

 

Regards 


Hi

The video does not contain audio track. I will post the code today in the evening because I left it on another laptop.

 

The code may not be very elegant, but works properly


//+------------------------------------------------------------------+
//|                                          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);
      
 

Hi

thanks for posting the code,

could you please change the code in a way that the indicator simply puts some kind of text in the upper right corner,

a sample that can be used for every indicator in separate window

 
walb99:

Hi

thanks for posting the code,

could you please change the code in a way that the indicator simply puts some kind of text in the upper right corner,

a sample that can be used for every indicator in separate window


I put the code with self-explanatory comments

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);
  }
 

I need a suggestion for a simple indicator:

Close > EMA 34 = green historgam or ....line or....arrow...

Close< EMA 34 = reed  histogram or...line or....arrow...

Thanks for help

 
investeo:


I put the code with self-explanatory comments

BR,

Investeo


Hi Investeo

many thanks, your code works, i.e.the label shows up, but the value is not updating. Did I make a mistake?

Here is my code.

//+------------------------------------------------------------------+
//|                                                                                                                                                     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:

I need a suggestion for a simple indicator:

Close > EMA 34 = green historgam or ....line or....arrow...

Close< EMA 34 = reed  histogram or...line or....arrow...

Thanks for help


You may try MACD for this purpos
Files:
 
walb99:
You may try MACD for this purpos

Yes, but should not follow the "curve of the indicator" but only indicate changing color.

Thanks walb

 
supermagix:

Yes, but should not follow the "curve of the indicator" but only indicate changing color.

Thanks walb

The indicator for MT4 is called russian colors, you want

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

You only have to replace the HMA with EMA34