Gösterge içindeki metin - sayfa 2

 

Teşekkürler Antt, ama aradığım şey bu değildi. Bu örnekteki gibi bir metin eklerdim: CSR'nin RSI +-değeri... mümkün mü?


 
supermagix :

Teşekkürler Antt, ama aradığım şey bu değildi. Bu örnekteki gibi bir metin eklerdim: CSR'nin RSI +-değeri... mümkün mü?

//+------------------------------------------------------------------+
//|                                                          RSI.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_minimum 0
#property indicator_maximum 100
#property indicator_level1 30
#property indicator_level2 70
#property indicator_buffers 3
#property indicator_plots   1
#property indicator_type1   DRAW_LINE
#property indicator_color1  DodgerBlue
//--- input parameters
input int InpPeriodRSI=14; // Period
//--- indicator buffers
double    ExtRSIBuffer[];
double    ExtPosBuffer[];
double    ExtNegBuffer[];
//--- global variable
int       ExtPeriodRSI;
//---
int       window ;
string    objectName="RsiText"; 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- check for input
   if(InpPeriodRSI<1)
     {
      ExtPeriodRSI=12;
      Print("Incorrect value for input variable InpPeriodRSI =",InpPeriodRSI,
            "Indicator will use value =",ExtPeriodRSI,"for calculations.");
     }
   else ExtPeriodRSI=InpPeriodRSI;
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtRSIBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtPosBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,ExtNegBuffer,INDICATOR_CALCULATIONS);
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ExtPeriodRSI);
//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"RSI("+string(ExtPeriodRSI)+")");
//--- get window number
   window=ChartWindowFind(); 
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   int    i;
   double diff;
//--- check for rates count
   if(rates_total<=ExtPeriodRSI)
      return(0);
//--- preliminary calculations
   int pos=prev_calculated-1;
   if(pos<=ExtPeriodRSI)
     {
      //--- first RSIPeriod values of the indicator are not calculated
      ExtRSIBuffer[0]=0.0;
      ExtPosBuffer[0]=0.0;
      ExtNegBuffer[0]=0.0;
      double SumP=0.0;
      double SumN=0.0;
      for(i=1;i<=ExtPeriodRSI;i++)
        {
         ExtRSIBuffer[i]=0.0;
         ExtPosBuffer[i]=0.0;
         ExtNegBuffer[i]=0.0;
         diff=price[i]-price[i-1];
         SumP+=(diff>0?diff:0);
         SumN+=(diff<0?-diff:0);
        }
      //--- calculate first visible value
      ExtPosBuffer[ExtPeriodRSI]=SumP/ExtPeriodRSI;
      ExtNegBuffer[ExtPeriodRSI]=SumN/ExtPeriodRSI;
      ExtRSIBuffer[ExtPeriodRSI]=100.0-(100.0/(1.0+ExtPosBuffer[ExtPeriodRSI]/ExtNegBuffer[ExtPeriodRSI]));
      //--- prepare the position value for main calculation
      pos=ExtPeriodRSI+1;
     }
//--- the main loop of calculations
   for(i=pos;i<rates_total;i++)
     {
      diff=price[i]-price[i-1];
      ExtPosBuffer[i]=(ExtPosBuffer[i-1]*(ExtPeriodRSI-1)+(diff>0.0?diff:0.0))/ExtPeriodRSI;
      ExtNegBuffer[i]=(ExtNegBuffer[i-1]*(ExtPeriodRSI-1)+(diff<0.0?-diff:0.0))/ExtPeriodRSI;
      ExtRSIBuffer[i]=100.0-100.0/(1+ExtPosBuffer[i]/ExtNegBuffer[i]);
     }
//--- create object
   ObjectCreate(0,objectName,OBJ_TEXT,window,0,0);
   ObjectSetString(0,objectName,OBJPROP_TEXT,string(ExtRSIBuffer[rates_total-1]));
   ObjectSetInteger(0,objectName,OBJPROP_COLOR,Red);
   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]);

//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+

 

Teşekkürler Antt mükemmel.

Şimdi: Metni alt Pencerede belirli bir noktada düzeltirdim.


 //+------------------------------------------------------------------+
//|                                                          RSI.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_minimum 0
#property indicator_maximum 100
#property indicator_level1 30
#property indicator_level2 70
#property indicator_buffers 3
#property indicator_plots   1
#property indicator_type1   DRAW_LINE
#property indicator_color1  DodgerBlue
//--- input parameters
input int InpPeriodRSI= 14 ; // Period
//--- indicator buffers
double     ExtRSIBuffer[];
double     ExtPosBuffer[];
double     ExtNegBuffer[];
//--- global variable
int        ExtPeriodRSI;
//---
int        window;
string     objectName= "RsiText" ; 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- check for input
   if (InpPeriodRSI< 1 )
     {
      ExtPeriodRSI= 12 ;
       Print ( "Incorrect value for input variable InpPeriodRSI =" ,InpPeriodRSI,
             "Indicator will use value =" ,ExtPeriodRSI, "for calculations." );
     }
   else ExtPeriodRSI=InpPeriodRSI;
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,ExtRSIBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,ExtPosBuffer, INDICATOR_CALCULATIONS );
   SetIndexBuffer ( 2 ,ExtNegBuffer, INDICATOR_CALCULATIONS );
//--- set accuracy
   IndicatorSetInteger ( INDICATOR_DIGITS , 2 );
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger ( 0 , PLOT_DRAW_BEGIN ,ExtPeriodRSI);
//--- name for DataWindow and indicator subwindow label
   IndicatorSetString ( INDICATOR_SHORTNAME , "RSI(" + string (ExtPeriodRSI)+ ")" );
//--- get window number
   window= ChartWindowFind (); 
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int OnCalculate( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[])
  {
   int     i;
   double diff;
//--- check for rates count
   if (rates_total<=ExtPeriodRSI)
       return ( 0 );
//--- preliminary calculations
   int pos=prev_calculated- 1 ;
   if (pos<=ExtPeriodRSI)
     {
       //--- first RSIPeriod values of the indicator are not calculated
      ExtRSIBuffer[ 0 ]= 0.0 ;
      ExtPosBuffer[ 0 ]= 0.0 ;
      ExtNegBuffer[ 0 ]= 0.0 ;
       double SumP= 0.0 ;
       double SumN= 0.0 ;
       for (i= 1 ;i<=ExtPeriodRSI;i++)
        {
         ExtRSIBuffer[i]= 0.0 ;
         ExtPosBuffer[i]= 0.0 ;
         ExtNegBuffer[i]= 0.0 ;
         diff=price[i]-price[i- 1 ];
         SumP+=(diff> 0 ?diff: 0 );
         SumN+=(diff< 0 ?-diff: 0 );
        }
       //--- calculate first visible value
      ExtPosBuffer[ExtPeriodRSI]=SumP/ExtPeriodRSI;
      ExtNegBuffer[ExtPeriodRSI]=SumN/ExtPeriodRSI;
      ExtRSIBuffer[ExtPeriodRSI]= 100.0 -( 100.0 /( 1.0 +ExtPosBuffer[ExtPeriodRSI]/ExtNegBuffer[ExtPeriodRSI]));
       //--- prepare the position value for main calculation
      pos=ExtPeriodRSI+ 1 ;
     }
//--- the main loop of calculations
   for (i=pos;i<rates_total;i++)
     {
      diff=price[i]-price[i- 1 ];
      ExtPosBuffer[i]=(ExtPosBuffer[i- 1 ]*(ExtPeriodRSI- 1 )+(diff> 0.0 ?diff: 0.0 ))/ExtPeriodRSI;
      ExtNegBuffer[i]=(ExtNegBuffer[i- 1 ]*(ExtPeriodRSI- 1 )+(diff< 0.0 ?-diff: 0.0 ))/ExtPeriodRSI;
      ExtRSIBuffer[i]= 100.0 - 100.0 /( 1 +ExtPosBuffer[i]/ExtNegBuffer[i]);
     }
//--- create object
   ObjectCreate ( 0 ,objectName, OBJ_TEXT ,window, 0 , 0 );
   ObjectSetString ( 0 ,objectName, OBJPROP_TEXT , string (ExtRSIBuffer[rates_total- 1 ]));
   ObjectSetInteger ( 0 ,objectName, OBJPROP_COLOR , Red );
   ObjectSetString ( 0 ,objectName, OBJPROP_FONT , "Arial" );
   ObjectSetInteger ( 0 ,objectName, OBJPROP_FONTSIZE , 20 );
   ObjectSetInteger ( 0 ,objectName, OBJPROP_XDISTANCE , 100 );
   ObjectSetInteger ( 0 ,objectName, OBJPROP_YDISTANCE , 100 );
   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 ]);
//--- OnCalculate done. Return new prev_calculated.
   return (rates_total);
  }
//+------------------------------------------------------------------+

Şunu ekledim: objprop_xdistance ama function değil. Niye ya ?

Tekrar teşekkürler

 
supermagix :

Teşekkürler Antt mükemmel.

Şimdi: Metni alt Pencerede belirli bir noktada düzeltirdim.


Şunu ekledim: objprop_xdistance ama function değil. Niye ya ?

Tekrar teşekkürler



 ObjectCreate ( 0 ,objectName, OBJ_LABEL ,window, 0 , 0 );
 
antt :


wooooow....... güzel Antt, aradığım şey buydu.....

Şimdi, mümkünse tekrar yardımınızı rica ediyorum: Bu CCİ'yi kurdum ama CCİ sıfır çizgisinin üstünde veya altındayken bakamıyorum ve histogramlara renk değiştiremiyorum. Niye ya?

Yardımın için teşekkürler

 //+------------------------------------------------------------------+
//|                                                          RSI.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
int             copied;

//+------------------------------------------------------------------+
//| 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_COLOR_INDEX ); //buffer Histogram
   
 //name of separate window 
   IndicatorSetString ( INDICATOR_SHORTNAME , "MYCCI" );

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

int OnCalculate( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[]
                 )
  { 
  
   //--- Create the indicator of CCI LINR
   int   CCIhandle= iCCI ( NULL , 0 ,CCIPeriod,price1);
    copied= CopyBuffer (CCIhandle, 0 , 0 ,rates_total,CCI_LINEBuffer);
  
   
//--- Create the indicator of CCI TURBO
   int CCI_TURBO_handle= iCCI ( NULL , 0 ,CCIPeriodTurbo,price1);
   copied= CopyBuffer (CCI_TURBO_handle, 0 , 0 ,rates_total,CCI_TURBOBuffer);
   
   int i ;
   for (i= 0 ;i>=rates_total;i++);
    
 if   (CCI_LINEBuffer[i]< 0 )
      {
      HISTOGRAM[i]= 0.0 ; //HISTOGRAM RED
     }  
 if   (CCI_LINEBuffer[i]> 0 )
      {
      HISTOGRAM[i]= 1.0 ; //HISTOGRAM Green
     }    
//--- return value of prev_calculated for next call
   return (rates_total);

  }
 
supermagix :

wooooow....... güzel Antt, aradığım şey buydu.....

Şimdi, mümkünse tekrar yardımınızı rica ediyorum: Bu CCİ'yi kurdum ama CCİ sıfır çizgisinin üstünde veya altındayken bakamıyorum ve histogramlara renk değiştiremiyorum. Niye ya?

Yardımın için teşekkürler

Böyle bir gösterge yazmadan önce MQL5'i biraz öğrenmelisiniz. Çok garip hatalar yaptın.

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

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

int OnCalculate( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[]
                )
  {

//--- Create the indicator of CCI LINR
   int   CCIhandle= iCCI ( NULL , 0 ,CCIPeriod,price1);
   copied= CopyBuffer (CCIhandle, 0 , 0 ,rates_total,CCI_LINEBuffer);

//--- Create the indicator of CCI TURBO
   int CCI_TURBO_handle= iCCI ( NULL , 0 ,CCIPeriodTurbo,price1);
   copied= CopyBuffer (CCI_TURBO_handle, 0 , 0 ,rates_total,CCI_TURBOBuffer);

   int i=prev_calculated;
   if (i>0) prev_calculated--;
   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);

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

Etiketi sağ üst köşeye nasıl koyabilirim?

 
walb99 :

Etiketi sağ üst köşeye nasıl koyabilirim?

Grafik Köşesi bölümü için örneğe bakın
 

Sağ üst köşede RSI değerini gösterecek şekilde RSI örnek göstergesini değiştirebilir misiniz?

Zaten hemen hemen her şeyi denedim, ama benim için mümkün değildi.

 
walb99 :

Sağ üst köşede RSI değerini gösterecek şekilde RSI örnek göstergesini değiştirebilir misiniz?

Zaten hemen hemen her şeyi denedim, ama benim için mümkün değildi.

OBJPROP_XDISTANCE ve OBJPROP_YDISTANCE hareket eden en iyi noktayı bulabilirsiniz.

 ObjectCreate ( 0 , "Name" , OBJ_LABEL ,window, 0 , 0 );
   ObjectSetString ( 0 , "Name" , OBJPROP_TEXT , string ...................);
   ObjectSetInteger ( 0 , "Name" , OBJPROP_COLOR , Green );
   ObjectSetString ( 0 , "Name" , OBJPROP_FONT , "Arial" );
   ObjectSetInteger ( 0 , "Name" , OBJPROP_FONTSIZE , 20 );
   ObjectSetInteger ( 0 , "Name" , OBJPROP_XDISTANCE , 1480 );
   ObjectSetInteger ( 0 , "Name" , OBJPROP_YDISTANCE , 450 );