Texto dentro do indicador

 

É possível ver um exemplo de como inserir um texto dentro de um indicador (janela separada) ?

Obrigado

 
supermagix   :

É possível ver um exemplo de como inserir um texto dentro de um indicador (janela separada) ?

Obrigado


eu tentei


if(ObjectFind(0,label_name)<0)
     {
      Print("Generating a label");
      ObjectCreate(0,label_name,OBJ_LABEL,0,0,0);           
      ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,10);
      ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,30);
      ObjectSetInteger(0,label_name,OBJPROP_COLOR,YellowGreen);
      ObjectSetString(0,label_name,OBJPROP_TEXT,"This is an example text inside chart window");
      ObjectSetString(0,label_name,OBJPROP_FONT,"Arial");
      ObjectSetInteger(0,label_name,OBJPROP_FONTSIZE,14);
      ObjectSetInteger(0,label_name,OBJPROP_SELECTABLE,false);
      ChartRedraw(0);                                      
     }
     
   int window=-1;
 
   if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     {
      window=ChartWindowFind();
      Print(window);
     }
     
     if(ObjectFind(window,label2_name)<0)
     {
      Print("Generating a label2");
      ObjectCreate(window,label2_name,OBJ_LABEL,0,0,0);       
      Print(GetLastError());    
      ObjectSetInteger(window,label2_name,OBJPROP_XDISTANCE,10);
      ObjectSetInteger(window,label2_name,OBJPROP_YDISTANCE,30);
      ObjectSetInteger(window,label2_name,OBJPROP_COLOR,YellowGreen);
      ObjectSetString(window,label2_name,OBJPROP_TEXT,"This is an example text inside indicator, cool, huh?");
      ObjectSetString(window,label2_name,OBJPROP_FONT,"Arial");
      ObjectSetInteger(window,label2_name,OBJPROP_FONTSIZE,14);
      ObjectSetInteger(window,label2_name,OBJPROP_SELECTABLE,false);
      ChartRedraw(window);                                      
     }


mas

ObjectCreate(window,label2_name,OBJ_LABEL,0,0,0); 


erro de retorno 4101


alguma idéia? (MT5 build 237)

 
investeo   :


eu tentei



mas


erro de retorno 4101


alguma idéia? (MT5 build 237)


Este é o resultado do qual o texto aparece:

http://clip2net.com/clip/m19204/1263295278-clip-38kb.png

somente no gráfico, mas não no indicador.

Se alguém quiser que eu ajude, eu carrego o código do indicador.

Aceito de bom grado sugestões e modifico.....

Obrigado investeo

Arquivos anexados:
mycci.mq5  6 kb
 
supermagix   :


Este é o resultado que o texto aparece:

http://clip2net.com/clip/m19204/1263295278-clip-38kb.png

somente no gráfico, mas não no indicador.

Se alguém quiser que eu ajude, eu carrego o código do indicador.

Aceito de bom grado sugestões e modifico.....

Obrigado investeo


Tentei configurações diferentes e descobri que QUALQUER OBJETIVO não é permitido dentro das janelas indicadoras no MT5.


ver


https://www.mql5.com/en/docs/index


A seção Indicador personalizado diz:


Custom Indicator éum indicador técnico escrito independentemente, além daqueles já integrados no terminal do cliente. Como os indicadores integrados, eles não podem ser comercializados automaticamente e são destinados apenas à implementação de funções analíticas.

Os indicadores personalizados não podem usar funções para trabalhar com gráficos ou objetos gráficos . Osindicadores personalizados são armazenados no diretório_de_indicadores do terminal\MQL5\Indicadores


Portanto, a única forma de colocar texto na janela indicadora é através de ajustes de sua propriedade INDICADOR_SHORTNAME.


por exemplo

IndicatorSetString(INDICADOR_SHORTNAME, "Olá "+label2_name+"...");


Corrija-me se eu estiver errado.

melhores cumprimentos

MQL5 Documentation
  • www.mql5.com
MQL5 Documentation
 
investeo:

Os indicadores personalizados não podem usar funções para trabalhar com gráficos ou objetos gráficos . Indicadores personalizados são armazenados nodiretório_de_indicadores do terminal\MQL5\Indicadores


Isso é possível no momento. Tente, por favor.
 

Eu lhe peço um favor: você poderia escrever um exemplo?

Obrigado

 
Rosh:
Isso é possível no momento. Tente, por favor.


Rosh, tentei alcançá-lo usando o build 238, mas ainda não tive sorte. Este fragmento de código


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


string label_name="mainwindow_label";
string label2_name="indicator_label";
int window=-1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
//---
    
   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(ObjectFind(0,label_name)<0)
     {
      Print("Generating a label");
      ObjectCreate(0,label_name,OBJ_LABEL,0,0,0);           
      ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,10);
      ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,30);
      ObjectSetInteger(0,label_name,OBJPROP_COLOR,YellowGreen);
      ObjectSetString(0,label_name,OBJPROP_TEXT,"This is an example text inside chart window");
      ObjectSetString(0,label_name,OBJPROP_FONT,"Arial");
      ObjectSetInteger(0,label_name,OBJPROP_FONTSIZE,14);
      ObjectSetInteger(0,label_name,OBJPROP_SELECTABLE,false);
      ChartRedraw(0);                                      
     }
     
   
 
   if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     {
      window=ChartWindowFind();
      Print(window);
     }
     
     if(ObjectFind(window,label2_name)<0)
     {
      Print("Generating a label2");
      ObjectCreate(window,label2_name,OBJ_LABEL,0,0,0);       
      Print(GetLastError());    
      ObjectSetInteger(window,label2_name,OBJPROP_XDISTANCE,10);
      ObjectSetInteger(window,label2_name,OBJPROP_YDISTANCE,10);
      ObjectSetInteger(window,label2_name,OBJPROP_COLOR,YellowGreen);
      ObjectSetString(window,label2_name,OBJPROP_TEXT,"This is an example text inside indicator, cool, huh?");
      ObjectSetString(window,label2_name,OBJPROP_FONT,"Arial");
      ObjectSetInteger(window,label2_name,OBJPROP_FONTSIZE,14);
      ObjectSetInteger(window,label2_name,OBJPROP_SELECTABLE,false);
      ChartRedraw(window);                                      
     }
     
   IndicatorSetString(INDICATOR_SHORTNAME,"Hello "+label2_name+"...");
   
   return(rates_total);
}
  
void OnDeinit(const int reason)
{
   if(ObjectFind(0,label_name)>=0)
      ObjectDelete(0,label_name);
   if(ObjectFind(window,label2_name)>=0)
      ObjectDelete(window,label2_name);
      
}


tenta colocar 2 objetos (rótulos), um na janela principal do gráfico e o segundo na janela indicadora.


if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     {
      window=ChartWindowFind();
      Print(window);
     }


A variável janela é definida como 1 para janela indicadora, e o que vejo quando corro o indicador é



E


Print("Generating a label2");
      ObjectCreate(window,label2_name,OBJ_LABEL,0,0,0);       
      Print(GetLastError()); 


GetLastError retorna o valor '4101'.

 

Experimente minha amostra indicadora

//+------------------------------------------------------------------+
//|                                       testObjectsInIndicator.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   1
//---- plot Bollinger
#property indicator_label1  "BB High; BB Low"
#property indicator_type1   DRAW_FILLING
#property indicator_color1  Magenta,LimeGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input int      BBperiod=20;            // период BBands
input int      length=30;              // длина канала
input double   width=2.0;              // ширина BBands
input color    channelColor=Turquoise; // цвет канала
//--- indicator buffers
double         BollingerBuffer1[];
double         BollingerBuffer2[];
int handleBBands;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BollingerBuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,BollingerBuffer2,INDICATOR_DATA);
   handleBBands=iBands(NULL,0,BBperiod,0,width,PRICE_CLOSE);
//---
   Print("Function ",__FUNCTION__,"  Build ",__MQ5BUILD__);
   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[])
  {
//---
   static int prevbars=-1;
//int bars=Bars(NULL,0);
   int copied=CopyBuffer(handleBBands,1,0,rates_total,BollingerBuffer1);
   if(copied<=0)
     {
      Print("Copying of indicator values failed");
      return(0);
     }

   copied=CopyBuffer(handleBBands,2,0,rates_total,BollingerBuffer2);
   if(copied<=0)
     {
      Print("Copying of indicator values failed");
      return(0);
     }
   if(prevbars!=rates_total)
     {
      prevbars=rates_total;
      ArraySetAsSeries(time,true);
      SetupChannel(time[length],time[1]);
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SetupChannel(datetime time1,datetime time2)
  {
   static string channelName="Channel";
   static string startLine="start";
   static string finishLine="finish";

   if(ObjectFind(0,channelName)<0)
     {
      Print("Channel not found, let's create it");
      if(!ObjectCreate(0,channelName,OBJ_STDDEVCHANNEL,0,0,0))
         Print("Channel creation failed error =",GetLastError());
      else
        {
         ObjectSetInteger(0,channelName,OBJPROP_COLOR,channelColor);
         Print("Set channel beginning at",time1);
         ObjectSetInteger(0,channelName,OBJPROP_TIME,0,time1);
         Print("Set channel finish at",time2);
         bool modified=ObjectSetInteger(0,channelName,OBJPROP_TIME,1,time2);
         if(!modified)
           {
            Print("Can not to set up time coordinates. Error",GetLastError());
           }
         Print("Move channel on background");
         ObjectSetInteger(0,channelName,OBJPROP_BACK,true);

        }
     }

   if(ObjectFind(0,startLine)<0)
     {
      Print("Линия start не найдена, создадим сами");
      if(!ObjectCreate(0,startLine,OBJ_VLINE,0,time1,0))
         Print("Не удалось создать линию startLine, error =",GetLastError());
     }
   if(ObjectFind(0,finishLine)<0)
     {
      Print("Линия finish не найдена, создадим сами");
      if(!ObjectCreate(0,finishLine,OBJ_VLINE,0,time2,0))
         Print("Не удалось создать линию finishLine, error =",GetLastError());
     }

  }
//+------------------------------------------------------------------+
 
Rosh:

Experimente minha amostra indicadora



Seu indicador funciona corretamente, mas ele traça os objetos no gráfico principal, não na janela separada (queremos que um objeto seja desenhado em uma janela indicadora separada). Quando eu uso


#property indicator_separate_window


em vez de


#property indicator_chart_window


(como em seu exemplo)


e eu estabeleço

ObjectCreate(1,startLine,OBJ_VLINE,0,time1,0)


Recebo as seguintes saídas de erro


2010.01.14 16:11:40     testObjectOnIndicator (EURUSD,M5)       Не удалось создать линию finishLine, error = 4101
2010.01.14 16:11:40     testObjectOnIndicator (EURUSD,M5)       Линия finish не найдена, создадим сами
2010.01.14 16:11:40     testObjectOnIndicator (EURUSD,M5)       Не удалось создать линию startLine, error = 4101
2010.01.14 16:11:40     testObjectOnIndicator (EURUSD,M5)       Линия start не найдена, создадим сами
2010.01.14 16:11:40     testObjectOnIndicator (EURUSD,M5)       Channel creation failed error = 4101
2010.01.14 16:11:40     testObjectOnIndicator (EURUSD,M5)       Channel not found, let's create it
2010.01.14 16:11:40     testObjectOnIndicator (EURUSD,M5)       Function  OnInit   Build  223


o primeiro parâmetro ("1") no método Object Create é um valor retornado de ChartWindowFind():



if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     {
      window=ChartWindowFind();
     }

):


como sugerido aqui : https://www.mql5.com/en/docs/chart_operations/chartwindowfind

Documentation on MQL5: Chart Operations / ChartWindowFind
  • www.mql5.com
Chart Operations / ChartWindowFind - Documentation on MQL5
 
é possível ver um exemplo que funciona?...... aplicado a um indicador separado qualquer ? obrigado
 
supermagix:
é possível ver um exemplo que funciona?...... aplicado a um indicador separado qualquer ? obrigado
//+------------------------------------------------------------------+
//|                                       testObjectsInIndicator.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
//---- plot Bollinger
#property indicator_label1  "BB High; BB Low"
#property indicator_type1   DRAW_FILLING
#property indicator_color1  Magenta,LimeGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input int      BBperiod=20;            // период BBands
input int      length=30;              // длина канала
input double   width=2.0;              // ширина BBands
input color    channelColor=Turquoise; // цвет канала
//--- indicator buffers
double         BollingerBuffer1[];
double         BollingerBuffer2[];
int            handleBBands;
//---
int            window=1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- get window number
   window=ChartWindowFind();
//--- indicator buffers mapping
   SetIndexBuffer(0,BollingerBuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,BollingerBuffer2,INDICATOR_DATA);
   handleBBands=iBands(NULL,0,BBperiod,0,width,PRICE_CLOSE);
//---
   Print("Function ",__FUNCTION__,"  Build ",__MQ5BUILD__);
   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[])
  {
//---
   static int prevbars=-1;
//int bars=Bars(NULL,0);
   int copied=CopyBuffer(handleBBands,1,0,rates_total,BollingerBuffer1);
   if(copied<=0)
     {
      Print("Copying of indicator values failed");
      return(0);
     }

   copied=CopyBuffer(handleBBands,2,0,rates_total,BollingerBuffer2);
   if(copied<=0)
     {
      Print("Copying of indicator values failed");
      return(0);
     }
   if(prevbars!=rates_total)
     {
      prevbars=rates_total;
      ArraySetAsSeries(time,true);
      SetupChannel(time[length],time[1]);
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SetupChannel(datetime time1,datetime time2)
  {
   static string channelName="Channel";
   static string startLine="start";
   static string finishLine="finish";

   if(ObjectFind(0,channelName)<0)
     {
      Print("Channel not found, let's create it");
      if(!ObjectCreate(0,channelName,OBJ_STDDEVCHANNEL,window,0,0))
         Print("Channel creation failed error =",GetLastError());
      else
        {
         ObjectSetInteger(0,channelName,OBJPROP_COLOR,channelColor);
         Print("Set channel beginning at",time1);
         ObjectSetInteger(0,channelName,OBJPROP_TIME,0,time1);
         Print("Set channel finish at",time2);
         bool modified=ObjectSetInteger(0,channelName,OBJPROP_TIME,1,time2);
         if(!modified)
           {
            Print("Can not to set up time coordinates. Error",GetLastError());
           }
         Print("Move channel on background");
         ObjectSetInteger(0,channelName,OBJPROP_BACK,true);

        }
     }

   if(ObjectFind(0,startLine)<0)
     {
      Print("Линия start не найдена, создадим сами");
      if(!ObjectCreate(0,startLine,OBJ_VLINE,window,time1,0))
         Print("Не удалось создать линию startLine, error =",GetLastError());
     }
   if(ObjectFind(0,finishLine)<0)
     {
      Print("Линия finish не найдена, создадим сами");
      if(!ObjectCreate(0,finishLine,OBJ_VLINE,window,time2,0))
         Print("Не удалось создать линию finishLine, error =",GetLastError());
     }

  }
//+------------------------------------------------------------------+