Gösterge içindeki metin

 

Bir göstergenin (ayrı pencere) içine nasıl metin ekleneceğine dair bir örnek görmek mümkün mü?

teşekkürler

 
supermagix :

Bir göstergenin (ayrı pencere) içine nasıl metin ekleneceğine dair bir örnek görmek mümkün mü?

teşekkürler


denedim


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


ancak

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


4101 hatası veriyor


herhangi bir fikir? (MT5 yapı 237)

 
investeo :


denedim



ancak


4101 hatası veriyor


herhangi bir fikir? (MT5 yapı 237)


Bu, metnin göründüğü sonuçtur:

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

sadece grafikte ama göstergede değil.

Biri yardım etmemi isterse, göstergenin kodunu yüklerim.

Önerileri memnuniyetle kabul ediyorum ve değiştiriyorum .....

teşekkürler

Dosyalar:
mycci.mq5  6 kb
 
supermagix :


Bu, metnin göründüğü sonuçtur:

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

sadece grafikte ama göstergede değil.

Biri yardım etmemi isterse, göstergenin kodunu yüklerim.

Önerileri memnuniyetle kabul ediyorum ve değiştiriyorum .....

teşekkürler


Farklı konfigürasyonlar denedim, MT5'teki gösterge pencerelerinde HERHANGİ BİR NESNELERE izin verilmediği ortaya çıktı.


görmek


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


Özel Gösterge bölümü şunları söylüyor:


Özel Gösterge , halihazırda istemci terminaline entegre edilmiş olanlara ek olarak bağımsız olarak yazılmış teknik bir göstergedir. Yerleşik göstergeler gibi, otomatik olarak işlem yapamazlar ve yalnızca analitik işlevlerin uygulanmasına yöneliktirler.
 

Özel göstergeler, çizelgeler veya çizelge nesneleriyle çalışmak için işlevleri kullanamaz. Özel göstergeler terminal_directory \MQL5\Indicators içinde saklanır


Bu nedenle, gösterge penceresine metin koymanın tek yolu, onun INDICATOR_SHORTNAME özelliğini ayarlamaktır .


Örneğin

IndicatorSetString(INDICATOR_SHORTNAME,"Merhaba "+label2_name+"...");


Yanlışım varsa düzelt.

saygılarımla

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

Özel göstergeler, çizelgeler veya çizelge nesneleriyle çalışmak için işlevleri kullanamaz. Özel göstergeler terminal_directory \MQL5\Indicators içinde saklanır


Şu anda mümkün. Lütfen deneyin.
 

Senden bir iyilik istiyorum: bir örnek yazar mısın?

teşekkürler

 
Rosh :
Şu anda mümkün. Lütfen deneyin.


Rosh, yapı 238'i kullanarak bunu başarmaya çalıştım ama yine de şansım yok. Bu kod parçası


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


biri ana grafik penceresine diğeri gösterge penceresine olmak üzere 2 nesne (etiket) koymaya çalışır.


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


gösterge penceresi için pencere değişkeni 1 olarak ayarlandı ve göstergeyi çalıştırdığımda gördüğüm şey



Ve


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


GetLastError '4101' değerini döndürür

 

Gösterge örneğimi dene

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

Gösterge örneğimi dene



Göstergeniz doğru çalışıyor ancak nesneleri ayrı bir pencerede değil ana grafikte çiziyor (bir nesnenin ayrı gösterge penceresinde çizilmesini istiyoruz). kullandığım zaman


 #property indicator_separate_window


yerine


 #property indicator_chart_window


(örneğinizde olduğu gibi)


ve ayarladım

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


Aşağıdaki hata çıktılarını alıyorum


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


Nesne Oluşturma yöntemindeki ilk parametre ("1"), ChartWindowFind() işlevinden döndürülen bir değerdir:



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

):


burada önerildiği gibi: https://www.mql5.com/en/docs/chart_operations/chartwindowfind

Documentation on MQL5: Chart Operations / ChartWindowFind
  • www.mql5.com
Chart Operations / ChartWindowFind - Documentation on MQL5
 
?...... işleyen bir örnek görmek mümkün mü ayrı bir göstergeye uygulanmış herhangi bir ? Teşekkürler
 
supermagix :
?...... işleyen bir örnek görmek mümkün mü ayrı bir göstergeye uygulanmış herhangi bir ? Teşekkürler
//+------------------------------------------------------------------+
//|                                       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());
     }

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

Neden: