표시기 내부 텍스트 - 페이지 5

 

감사합니다 wald99 : 노력하고 있습니다.

나는 Metaquotes가 기본(구문)에서 시작하는 과정을 만들 것을 제안합니다. 가능하면 mq5에 특정한 비디오도 포함됩니다. 이것은 프로그래밍을 시작하는 사람들에게 매우 유용합니다.

많은 사람들이 MT5에 관심이 있지만 프로그래밍 방법을 모른다고 생각합니다.
 
walb99 :

안녕하세요 인베스테오

감사합니다. 코드가 작동합니다. 즉, 레이블이 표시되지만 값이 업데이트되지 않습니다. 내가 실수를 했나요?

여기 내 코드가 있습니다.


월브99,


이 시도. 문제는 레이블 개체 를 사용할 수 없는 경우에만 값을 업데이트하려고 한다는 것입니다. 레이블에 타임스탬프를 추가하여 매 틱마다 업데이트되는 시간을 볼 수 있습니다.


 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]; 
       // myMAnow=MA1TempBuffer[rates_total - 1]; 
        


          
   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 , 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 ,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 
  {
       ObjectSetString ( 0 ,label_info, OBJPROP_TEXT , TimeToString ( TimeCurrent (), TIME_SECONDS)+ " " + DoubleToString (myMAnow,nDigits));
  }; 
  

 
         return (rates_total);
}
  
 
investeo :


월브99,


이 시도. 문제는 레이블 개체 를 사용할 수 없는 경우에만 값을 업데이트하려고 한다는 것입니다. 레이블에 타임스탬프를 추가하여 매 틱마다 업데이트되는 시간을 볼 수 있습니다.


감사합니다. 작동합니다.

레이블 색상에 대한 정보도 대괄호에 넣으면 레이블 색상도 제대로 업데이트됩니다.

 } else 
  {
       ObjectSetInteger ( 0 ,label_info, OBJPROP_COLOR ,label_color);
       ObjectSetString ( 0 ,label_info, OBJPROP_TEXT , TimeToString ( TimeCurrent (), TIME_SECONDS)+ " " + DoubleToString (myMAnow,nDigits));
  }; 
  
 

위의 rsi 예제에서 해당 개체 이름을 어디에 할당합니까? 전체 코드를 읽었지만 이해가 되지 않습니다.

표시기 창에 간단한 텍스트를 넣고 싶습니다. 위의 RSI 예제와 같은 결과를 얻을 수 없습니다.

내 코드:

 //+------------------------------------------------------------------+
//|                                                    text win .mq5 |
//|                                           Copyright CREATE BY DK |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "CREATE BY DK"
#property link       "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot mv1
#property indicator_label1   "mv1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1   1
//--- input parameters
input int       mv1= 20 ;
//--- indicator buffers
double          mv1Buffer[];
int       mahandle;

string objectname = "text" ;
int windows;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,mv1Buffer, INDICATOR_DATA );
   windows = ChartWindowFind ( 0 ,objectname);
  
   // IndicatorSetString(INDICATOR_SHORTNAME,"Text window");

//---
   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[])
  {
//---
int i ;
i=rates_total;
mahandle = iMA ( NULL , PERIOD_CURRENT ,mv1, 0 , MODE_SMA , PRICE_CLOSE );
if ( CopyBuffer (mahandle, 0 , 0 ,rates_total,mv1Buffer)<= 0 )
{
Print ( "getting errors somewhere" , GetLastError ());
return ( 0 );
}

ObjectCreate ( 0 ,objectname, OBJ_TEXT ,windows, 0 , 0 );
ObjectSetString ( 0 ,objectname, OBJPROP_TEXT , "check it out" );
ObjectSetInteger ( 0 ,objectname, OBJPROP_COLOR , Red );
//ObjectSetInteger(0,objectname,OBJPROP_XDISTANCE,1480);
//ObjectSetInteger(0,objectname,OBJPROP_YDISTANCE,100);
ObjectSetString ( 0 , "Name" , OBJPROP_FONT , "Arial" );
   ObjectSetInteger ( 0 , "Name" , OBJPROP_FONTSIZE , 20 );
   ObjectSetInteger ( 0 , "Name" , OBJPROP_XDISTANCE , 1480 );
   ObjectSetInteger ( 0 , "Name" , OBJPROP_YDISTANCE , 450 );

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

결과 :

 

알겠습니다. 텍스트를 표시하는 것만으로 문제가 해결되었다고 생각합니다. 다음에는 표시기로 작업하겠습니다. 하지만 누군가 obj_text 대신 obj_label을 사용하여 텍스트를 표시할 수 없는 이유를 말해 줄 수 있습니까?

 //+------------------------------------------------------------------+
//|                                                   text win 2.mq5 |
//|                                           Copyright CREATE BY DK |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "CREATE BY DK"
#property link       "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_plots 1

string ddock = "try it out" ;
int windows = - 1 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
/*
if ((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
windows=ChartWindowFind();


if (ObjectFind(0,ddock)<0)
{
   ObjectCreate(0,ddock,OBJ_LABEL,windows,0,0);
   ObjectSetInteger(0,ddock,OBJPROP_XDISTANCE,200);
   ObjectSetInteger(0,ddock,OBJPROP_YDISTANCE,20);
   ObjectSetInteger(0,ddock,OBJPROP_CORNER, CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,ddock,OBJPROP_COLOR,LightBlue);
   ObjectSetString(0,ddock,OBJPROP_FONT,"Arial");
   ObjectSetInteger(0,ddock,OBJPROP_FONTSIZE,14);
   ObjectSetString(0,ddock,OBJPROP_TEXT, "TRYING VERY HARD");
}
else
Print("ddock already exists");
*/

/*
  if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     windows=ChartWindowFind();
*/

   // check if label object does not already exist and create it
   if ( ObjectFind ( 0 ,ddock)< 0 )
  {
       // Create label in indicator's window
       ObjectCreate ( 0 ,ddock, OBJ_TEXT ,windows, 0 , 0 );        
       // Set X and Y distance from UPPER RIGHT CORNER
       ObjectSetInteger ( 0 ,ddock, OBJPROP_XDISTANCE , 200 );
       ObjectSetInteger ( 0 ,ddock, OBJPROP_YDISTANCE , 20 );
       ObjectSetInteger ( 0 ,ddock, OBJPROP_CORNER , CORNER_RIGHT_UPPER );
       // Set text properties: colour, font and font size
       ObjectSetInteger ( 0 ,ddock, OBJPROP_COLOR , LightPink );
       ObjectSetString ( 0 ,ddock, OBJPROP_FONT , "Arial" );
       ObjectSetInteger ( 0 ,ddock, OBJPROP_FONTSIZE , 14 );
       // Set text to display
       ObjectSetString ( 0 ,ddock, OBJPROP_TEXT , "TRYING VERY HARD" );
  } else Print ( "ddock 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,ddock)<0)
ObjectDelete(0,ddock);
}
/* void OnDeinit(const int reason)
  {
//---
  if(!ObjectFind(0,ddock)<0)
      ObjectDelete(0, ddock);
  } */