Forum

// Text inside indicator

To add comments, please log in or register

Pages:12345
Wolfgang
15
walb99 2010.02.04 11:57
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 

investeo
539
investeo 2010.02.04 12:05
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.

investeo
539
investeo 2010.02.04 19:03

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);
      
Wolfgang
15
walb99 2010.02.04 20:37

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

investeo
539
investeo 2010.02.05 11:06
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);
  }
antonio
22
supermagix 2010.02.05 16:29

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


Wolfgang
15
walb99 2010.02.05 16:58
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);
  }
  
  //------------------------------------------------------------------------
Wolfgang
15
walb99 2010.02.05 17:04
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
Attached files
antonio
22
supermagix 2010.02.05 18:46
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

Wolfgang
15
walb99 2010.02.05 18:55
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

http://www.forexfactory.com/showthread.php?t=173962

You only have to replace the HMA with EMA34 

/ /12345

To add comments, please log in or register