Texto dentro do indicador - página 3

 
supermagix:

Você pode encontrar o melhor ponto de movimentação OBJPROP_XDISTÂNCIA e OBJPROP_YDISTÂNCIA

se eu mudar o valor para OBJPROP_YDISTANCE para 500

a etiqueta não está movendo um pixel

//--- create object
  
   ObjectCreate(0,objectName,OBJ_TEXT,window,0,0);
 //ObjectSetString(0,objectName,OBJPROP_TEXT,string(ExtRSIBuffer[rates_total-1]));
   ObjectSetString(0,objectName,OBJPROP_TEXT,DoubleToString(ExtRSIBuffer[rates_total-1],2));
   ObjectSetInteger(0,objectName,OBJPROP_COLOR,Red);
   ObjectSetString(0,objectName,OBJPROP_FONT,"Arial");
   ObjectSetInteger(0,objectName,OBJPROP_FONTSIZE,20);
 //ObjectSetInteger (0,objectName, OBJPROP_CORNER, corner);
   ObjectSetInteger(0,objectName,OBJPROP_XDISTANCE,0);
   ObjectSetInteger(0,objectName,OBJPROP_YDISTANCE,500);
   
   datetime tm[1];
   CopyTime(_Symbol,_Period,0,1,tm);
   ObjectSetInteger(0,objectName,OBJPROP_TIME,tm[0]);
   ObjectSetDouble(0,objectName,OBJPROP_PRICE,ExtRSIBuffer[rates_total-1]);
 
walb99:

Como posso colocar a etiqueta no canto superior direito?

Vamos examinar este assunto, obrigado.
 
Rosh:

Você deve aprender um pouco de MQL5 antes de escrever tal indicador. Você cometeu erros tão incômodos.



Estou tentando aprender, mas não existe um simples tutorial ou cursos para mql5: devo aprender com os erros e pedir sua ajuda.

Eu não consigo entender esta instrução escrita por Você:

 int i=prev_calculated;
   if (i>0) prev_calculated--;
   for(;i<rates_total;i++)

há um erro quando eu compenso.

 
supermagix:

Estou tentando aprender, mas não existe um simples tutorial ou cursos para mql5: devo aprender com os erros e pedir sua ajuda.

Não consigo entender esta instrução escrita de Você:

há um erro quando eu compenso.

Eu tenho errado, desculpe. O certo é

 int i=prev_calculated;
   if (i>0) i--;
   for(;i<rates_total;i++)
 
Rosh:

Eu tenho errado, desculpe. O direito é

Aqui está o código mais correto, use-o, por favor.

//+------------------------------------------------------------------+
//|                                                     CCIcolor.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2009, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "Relative Strength Index"
//--- indicator settings
#property indicator_separate_window

#property indicator_buffers 4
#property indicator_plots 3
//--- input parameters
input int      CCIPeriod=14;         // Period for calculating the CCI
input int      CCIPeriodTurbo=6;     // Period for calculating the TURBOCCI
input ENUM_APPLIED_PRICE  price1=PRICE_CLOSE; // Method of calculating

//---- plot CCI_LINE
#property indicator_label1  "CCI_LINE"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Black
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

//---- plot CCI_TURBO_LINE
#property indicator_label2  "CCI_TURBO_LINE"
#property indicator_type2  DRAW_LINE
#property indicator_color2  Navy
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//---- plot CCI_HISTOGRAM
#property indicator_label3  "CCI_HISTO"
#property indicator_type3   DRAW_COLOR_HISTOGRAM
#property indicator_color3  Red,Green
#property indicator_style3  STYLE_SOLID
#property indicator_width3  2


//----- level
#property indicator_level1       -100.0
#property indicator_level2        100.0
#property indicator_level3       -200.0
#property indicator_level4        200.0
#property indicator_level5       -50.0
#property indicator_level6        50.0
//--- indicator buffers

double         CCI_LINEBuffer[]; //  CCI_LINE
double         CCI_TURBOBuffer[]; //  CCI TURBO_LINE
double         HISTOGRAM[];       //  HISTOGRAM
double         HISTOGRAMColor[];       //  HISTOGRAM
int            copied;
int  CCIhandle;
int CCI_TURBO_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

void OnInit()
  {
//--- indicator buffers mapping

   SetIndexBuffer(0,CCI_LINEBuffer,INDICATOR_DATA);//buffer LINE
   SetIndexBuffer(1,CCI_TURBOBuffer,INDICATOR_DATA);//buffer Turbo
   SetIndexBuffer(2,HISTOGRAM,INDICATOR_DATA);//buffer Histogram
   SetIndexBuffer(3,HISTOGRAMColor,INDICATOR_COLOR_INDEX);//buffer Histogram

                                                          //name of separate window 
   IndicatorSetString(INDICATOR_SHORTNAME,"MYCCI");
//--- Create the indicator of CCI LINR
   CCIhandle=iCCI(NULL,0,CCIPeriod,price1);

//--- Create the indicator of CCI TURBO
   CCI_TURBO_handle=iCCI(NULL,0,CCIPeriodTurbo,price1);

//---
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[]
                )
  {
//--- not all data may be calculated
   int calculated=BarsCalculated(CCIhandle);
   if(calculated<rates_total)
     {
      Print("Not all data of CCIhandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
//--- not all data may be calculated
   calculated=BarsCalculated(CCI_TURBO_handle);
   if(calculated<rates_total)
     {
      Print("Not all data of CCI_TURBO_handle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }

//--- we can copy not all data
   int to_copy;
   if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total;
   else
     {
      to_copy=rates_total-prev_calculated;
      if(prev_calculated>0) to_copy++;
     }
//---- get CCI buffers
   if(CopyBuffer(CCIhandle,0,0,to_copy,CCI_LINEBuffer)<=0)
     {
      Print("getting CCIhandle is failed! Error",GetLastError());
      return(0);
     }

   if(CopyBuffer(CCI_TURBO_handle,0,0,to_copy,CCI_TURBOBuffer)<=0)
     {
      Print("getting CCI_TURBO_handle is failed! Error",GetLastError());
      return(0);
     }

   int i=prev_calculated;
   if(i>0) i--;
   for(;i<rates_total;i++)
     {
      HISTOGRAM[i]=CCI_LINEBuffer[i];
      if(CCI_LINEBuffer[i]<0)
        {
         HISTOGRAMColor[i]=0.0;//HISTOGRAM RED
        }
      if(CCI_LINEBuffer[i]>0)
        {
         HISTOGRAMColor[i]=1.0;//HISTOGRAM Green
        }
     }

//--- return value of prev_calculated for next call
   return(rates_total);

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

Aqui está o código mais correto, use-o, por favor.


Eu removi esta istrução

 int i=prev_calculated;
   if(i>0) i--;
  /////// if(prev_calculated!=0) return(prev_calculated);
   for(;i<rates_total;i++)

porque os histogramas não foram atualizados a cada mudança de preço.

Acho que o problema pode estar em ( retorno).

está correto?

obrigado por sua ajuda

......I estou fazendo outras mudanças.....

 
supermagix:

Eu removi esta istrução

porque os histogramas não foram atualizados a cada mudança de preço.

Acho que o problema pode estar em ( retorno).

está correto?

obrigado por sua ajuda

......I estou fazendo outras mudanças.....

Você está certo, ela foi implementada para fins de depuração. Eu o apaguei do meu posto.
 

Modifiquei o programa para obter a cor dos histogramas, mas não funciona.

Penso que o problema está em counter.... no ciclo FOR..... está correto?

//+------------------------------------------------------------------+
//|                                                     CCIcolor.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2009, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "CCI"
//--- indicator settings
#property indicator_separate_window

#property indicator_buffers 4
#property indicator_plots 3
//--- input parameters
input int      CCIPeriod=14;         // Period for calculating the CCI
input int      CCIPeriodTurbo=6;     // Period for calculating the TURBOCCI
input ENUM_APPLIED_PRICE  price1=PRICE_CLOSE; // Method of calculating

//---- plot CCI_LINE
#property indicator_label1  "CCI_LINE"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Black
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

//---- plot CCI_TURBO_LINE
#property indicator_label2  "CCI_TURBO_LINE"
#property indicator_type2  DRAW_LINE
#property indicator_color2  Navy
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//---- plot CCI_HISTOGRAM
#property indicator_label3  "CCI_HISTO"
#property indicator_type3   DRAW_COLOR_HISTOGRAM
#property indicator_color3  Gray,Gold,Red,Green
#property indicator_style3  STYLE_SOLID
#property indicator_width3  2


//----- level
#property indicator_level1       -100.0
#property indicator_level2        100.0
#property indicator_level3       -200.0
#property indicator_level4        200.0
#property indicator_level5       -50.0
#property indicator_level6        50.0
//--- indicator buffers

double         CCI_LINEBuffer[]; //  CCI_LINE
double         CCI_TURBOBuffer[]; //  CCI TURBO_LINE
double         HISTOGRAM[];       //  HISTOGRAM
double         HISTOGRAMColor[];       //  HISTOGRAM
int            copied;
int  CCIhandle;
int CCI_TURBO_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

void OnInit()
  {
//--- indicator buffers mapping
   
   SetIndexBuffer(0,CCI_LINEBuffer,INDICATOR_DATA);//buffer LINE
   SetIndexBuffer(1,CCI_TURBOBuffer,INDICATOR_DATA);//buffer Turbo
   SetIndexBuffer(2,HISTOGRAM,INDICATOR_DATA);//buffer Histogram
   SetIndexBuffer(3,HISTOGRAMColor,INDICATOR_COLOR_INDEX);//buffer Histogram

                                                          //name of separate window 
   IndicatorSetString(INDICATOR_SHORTNAME,"MYCCI");
//--- Create the indicator of CCI LINR
   CCIhandle=iCCI(NULL,0,CCIPeriod,price1);

//--- Create the indicator of CCI TURBO
   CCI_TURBO_handle=iCCI(NULL,0,CCIPeriodTurbo,price1);

//---
  }
//+------------------------------------------------------------------+
//| 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[])

 {
//--- not all data may be calculated
   int calculated=BarsCalculated(CCIhandle);
   if(calculated<rates_total)
     {
      Print("Not all data of CCIhandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
//--- not all data may be calculated
   calculated=BarsCalculated(CCI_TURBO_handle);
   if(calculated<rates_total)
     {
      Print("Not all data of CCI_TURBO_handle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }

//--- we can copy not all data
   int to_copy;
   if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total;
   else
     {
      to_copy=rates_total-prev_calculated;
      if(prev_calculated>0) to_copy++;
     }
//---- get CCI buffers
   if(CopyBuffer(CCIhandle,0,0,to_copy,CCI_LINEBuffer)<=0)
     {
      Print("getting CCIhandle is failed! Error",GetLastError());
      return(0);
     }

   if(CopyBuffer(CCI_TURBO_handle,0,0,to_copy,CCI_TURBOBuffer)<=0)
     {
      Print("getting CCI_TURBO_handle is failed! Error",GetLastError());
      return(0);
     }

   int i=prev_calculated;
   if(i>0) i--;
   for(;i<rates_total;i++)
     {
      HISTOGRAM[i]=CCI_LINEBuffer[i];
    
//--- set color histogram Long
        
     if(CCI_LINEBuffer[i+5]<0 && CCI_LINEBuffer[i+4]>0 && CCI_LINEBuffer[i+3]>0 && CCI_LINEBuffer[i+2]>0 && CCI_LINEBuffer[i+1]>0)
       HISTOGRAMColor[i]=1.0; // set color Yellow (only one histogram)
      }
       {
      if(CCI_LINEBuffer[i+5]>0 && CCI_LINEBuffer[i+4]>0 && CCI_LINEBuffer[i+3]>0 && CCI_LINEBuffer[i+2]>0 && CCI_LINEBuffer[i+1]>0);
        HISTOGRAMColor[i]=2.0; // set color Green
        } 
     
//--- set color histogram Short
      {
      if(CCI_LINEBuffer[i+5]>0 && CCI_LINEBuffer[i+4]<0 && CCI_LINEBuffer[i+3]<0 && CCI_LINEBuffer[i+2]<0 && CCI_LINEBuffer[i+1]<0)
        HISTOGRAMColor[i]=1.0; // set color Yellow (onli one histogram)
       }
       {
      if(CCI_LINEBuffer[i+5]<0 && CCI_LINEBuffer[i+4]<0 && CCI_LINEBuffer[i+3]<0 && CCI_LINEBuffer[i+2]<0 && CCI_LINEBuffer[i+1]<0)
         HISTOGRAMColor[i]=3.0; // set color Red
       }  

//--- return value of prev_calculated for next call
   return(rates_total);

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


Caso eu veja isto:

Obrigado pela ajuda.

 
Rosh:
Vamos examinar este assunto, obrigado.

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,

 

Após muitos testes terem chegado a este resultado:

Valor preto e verde = histogramas de diferença

Valor preto grande = valor atual da CCI

...mas eu tenho problemas com a cor dos histogramas.....