Texto dentro do indicador - página 4

 
investeo:

Eu fiz uma prova de conceito EA interagindo com um indicador através de variáveis globais temporárias alteradas através de diferentes toques de tecla.

Os cantos funcionam, mas é preciso lembrar que os cantos inferiores são relativos ao quadro do indicador, não à linha do tempo - veja o vídeo.

Infelizmente, o upload do vídeo não parece funcionar neste fórum :(


Por enquanto eu o coloco em

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

(ver tela cheia para melhores resultados)

melhores regressos,

Hi

Não havia nenhum áudio anexado a este vídeo.

Você pode, por favor, postar o código do SampleTextIndicator?

Cumprimentos

 
walb99:

Hi

Não havia nenhum áudio anexado a este vídeo.

Você pode, por favor, postar o código do SampleTextIndicator?

Cumprimentos


Hi

O vídeo não contém faixa de áudio. Vou postar o código hoje à noite, porque o deixei em outro laptop.

 

O código pode não ser muito elegante, mas funciona corretamente


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

obrigado por postar o código,

poderia, por favor, alterar o código de forma que o indicador simplesmente coloque algum tipo de texto no canto superior direito,

uma amostra que pode ser usada para cada indicador em janela separada

 
walb99:

Hi

obrigado por postar o código,

poderia, por favor, alterar o código de forma que o indicador simplesmente coloque algum tipo de texto no canto superior direito,

uma amostra que pode ser usada para cada indicador em janela separada


Coloco o código com comentários auto-explicativos

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

Preciso de uma sugestão para um indicador simples:

Fechar > EMA 34 = green historgam ou ....line ou....arrow...

Fechar > EMA 34 = reed histogram ou...line ou....arrow...

Obrigado pela ajuda

 
investeo:


Coloco o código com comentários auto-explicativos

BR,

Investeo


Olá Investeo

muito obrigado, seu código funciona, ou seja, a etiqueta aparece, mas o valor não está sendo atualizado. Eu cometi algum erro?

Aqui está o meu 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:

Preciso de uma sugestão para um indicador simples:

Fechar > EMA 34 = green historgam ou ....line ou....arrow...

Fechar > EMA 34 = reed histogram ou...line ou....arrow...

Obrigado pela ajuda


Você pode tentar MACD para este propósito
Arquivos anexados:
 
walb99:
Você pode tentar MACD para este propósito

Sim, mas não deve seguir a "curva do indicador", mas apenas indicar a mudança de cor.

Obrigado Walb

 
supermagix:

Sim, mas não deve seguir a "curva do indicador", mas apenas indicar a mudança de cor.

Obrigado Walb

O indicador para MT4 é chamado de cores russas, você quer

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

Você só tem que substituir o HMA por EMA34