Текст внутри индикатора - страница 4

 
investeo:

Я сделал proof-of-concept советника, взаимодействующего с индикатором через временные глобальные переменные, изменяемые с помощью различных нажатий клавиш.

Углы действительно работают, но нужно помнить, что нижние углы находятся относительно фрейма индикатора, а не временной шкалы - см. видео.

К сожалению, загрузка видео не работает на этом форуме :(


На данный момент я разместил его на

http://www.youshare.com/Guest/c94bb3e9cfe6a424.flv.html

(смотрите в полноэкранном режиме для достижения наилучших результатов)

наилучшие результаты,

Привет

К этому видео не было приложено аудио.

Не могли бы вы выложить код SampleTextIndicator?

С уважением,

 
walb99:

Привет

К этому видео не было приложено аудио.

Не могли бы вы выложить код SampleTextIndicator?

С уважением,


Привет

Видео не содержит звуковой дорожки. Я выложу код сегодня вечером, потому что я оставил его на другом ноутбуке.

 

Код может быть не очень элегантным, но работает правильно


//+------------------------------------------------------------------+
//|                                          SampleTextIndicator.mq5 |
//|                                            Copyright Investeo.pl |
//|                                                      Investeo.pl |
//+------------------------------------------------------------------+
#property copyright "Investeo.pl"
#property link      "http://Investeo.pl"
#property version   "1.00"

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


string label2_name="indicator_label";
int window=-1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
//---
   IndicatorSetString(INDICATOR_SHORTNAME,"Hello... PRESS A-W-S-D-C TO PLAY");
   
   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((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     {
      window=ChartWindowFind();
      Print(window);
     }
     
     if(ObjectFind(0,label2_name)<0)
     {
      ObjectCreate(0,label2_name,OBJ_LABEL,window,0,0);         
      ObjectSetInteger(0,label2_name,OBJPROP_XDISTANCE,10);
      ObjectSetInteger(0,label2_name,OBJPROP_YDISTANCE,10);
      ObjectSetInteger(0,label2_name,OBJPROP_COLOR,LightPink);
      ObjectSetString(0,label2_name,OBJPROP_TEXT,"HELLO WORLD");
      ObjectSetString(0,label2_name,OBJPROP_FONT,"Arial");
      ObjectSetInteger(0,label2_name,OBJPROP_FONTSIZE,14);
      ObjectSetInteger(0,label2_name,OBJPROP_SELECTABLE,false);
      ChartRedraw(window);                                      
     } 
     else
     {
      ObjectSetInteger(0,label2_name,OBJPROP_XDISTANCE,(int)GlobalVariableGet("prop_x"));
      ObjectSetInteger(0,label2_name,OBJPROP_YDISTANCE,(int)GlobalVariableGet("prop_y"));
      ObjectSetString(0,label2_name,OBJPROP_TEXT,"x: " 
                                    + IntegerToString((int)GlobalVariableGet("prop_x")) 
                                    + " y: " 
                                    + IntegerToString((int)GlobalVariableGet("prop_y")));
      ObjectSetInteger(0,label2_name,OBJPROP_CORNER,(int)GlobalVariableGet("corner"));
                                          
     }
     
   
   
   return(rates_total);
}
  
void OnDeinit(const int reason)
{
   if(ObjectFind(window,label2_name)>=0)
      ObjectDelete(window,label2_name);
      
 

Привет

Спасибо, что выложили код,

не могли бы вы изменить код таким образом, чтобы индикатор просто выводил какой-то текст в правом верхнем углу,

пример, который можно использовать для каждого индикатора в отдельном окне

 
walb99:

Привет

Спасибо, что выложили код,

не могли бы вы изменить код таким образом, чтобы индикатор просто выводил какой-то текст в правом верхнем углу,

пример, который можно использовать для каждого индикатора в отдельном окне.


Я разместил код с поясняющими комментариями

BR,

Investeo


//+------------------------------------------------------------------+
//|                                         UpperRightCornerText.mq5 |
//|                                      Copyright 2010, Investeo.pl |
//|                                               http://Investeo.pl |
//+------------------------------------------------------------------+
#property copyright "2010, Investeo.pl"
#property link      "http://Investeo.pl"
#property version   "1.00"
#property indicator_separate_window
#property indicator_plots   1

string label_info="label1";
int window=-1;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- initialize a label in upper right corner

  // find indicator's window handle
  if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     window=ChartWindowFind();

  // 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,LightPink);
      ObjectSetString(0,label_info,OBJPROP_FONT,"Arial");
      ObjectSetInteger(0,label_info,OBJPROP_FONTSIZE,14);
      // Set text to display
      ObjectSetString(0,label_info,OBJPROP_TEXT,"HELLO I am a label");
  } else Print("label_info 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,label_info)<0)
      ObjectDelete(0, label_info);
  }
 

Мне нужен совет по простому индикатору:

Close > EMA 34 = зеленая гистограмма или ....line или....arrow...

Close< EMA 34 = язычковая гистограмма или...линия или....arrow...

Спасибо за помощь

 
investeo:


Я поместил код с поясняющими комментариями

БР,

Investeo


Здравствуйте, Investeo

Большое спасибо, ваш код работает, т.е. ярлык отображается, но значение не обновляется. Я допустил ошибку?

Вот мой код.

//+------------------------------------------------------------------+
//|                                                                                                                                                     Color MA |
//|                                                                                        Copyright 2009, EarnForex.com |
//|                                                                                                       http://www.earnforex.com |
//+------------------------------------------------------------------+
#property copyright "2009, EarnForex.com"
#property link "http://www.earnforex.com"
#property version "1.00"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 1

//---- plot MA
#property indicator_label1 "Color MA1"
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_color1 Lime, Red
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1



//#include <MovingAverages.mqh>

//--- input parameters
input int MA1_Period = 10;
input ENUM_MA_METHOD MA1_Mode = MODE_EMA;
input ENUM_APPLIED_PRICE MA1_Price = PRICE_CLOSE;
input int MA1_Shift = 0;

input int CountBars=200;

string label_info=""; 
int window=-1;




color label_color;
double MA_Value;
double myPrice;
double myMAnow;


int nDigits;





//--- indicator buffers
double MA1TempBuffer[];
double MA1Buffer[];
double MA1ColorBuffer[];





int ma1_handle;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                                                            |
//+------------------------------------------------------------------+
void OnInit()
{
        SetIndexBuffer(0, MA1Buffer, INDICATOR_DATA);
        SetIndexBuffer(1, MA1ColorBuffer, INDICATOR_COLOR_INDEX);
        PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0);
        PlotIndexSetInteger(0,PLOT_SHIFT,MA1_Shift);
        

        
        
        IndicatorSetString(INDICATOR_SHORTNAME, "Color_MA["+IntegerToString(MA1_Period)+"]");
        IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
   
 if(Symbol()=="EURUSD" || Symbol()=="GBPUSD" || Symbol()=="EURCHF" || Symbol()=="USDCAD" || Symbol()=="EURGBP" || Symbol()=="AUDUSD" || Symbol()=="USDCHF" || Symbol()=="6S_CONT")  nDigits = 4; else nDigits = 2;

         ma1_handle = iMA(NULL, 0, MA1_Period, 0, MA1_Mode, MA1_Price); 
        
        
  
   label_info= "myMA"+IntegerToString(MA1_Mode)+IntegerToString(MA1_Period);
        
   
   //--- initialize a label in upper right corner

          // find indicator's window handle
  if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     window=ChartWindowFind();
     
     
        
   
}

//+------------------------------------------------------------------+
//| 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 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]; 
        


          
   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,100);
      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 Print("label_info already exists"); 
  

 
        return(rates_total);
}
//+------------------------------------------------------------------+ 

void OnDeinit(const int reason)
  {
//---
  if(!ObjectFind(0,label_info)<0)
      ObjectDelete(0, label_info);
  }
  
  //------------------------------------------------------------------------
 
supermagix:

Мне нужен совет по простому индикатору:

Close > EMA 34 = зеленая гистограмма или ....line или....arrow...

Close< EMA 34 = язычковая гистограмма или...линия или....arrow...

Спасибо за помощь


Вы можете попробовать MACD для этих целей
Файлы:
 
walb99:
Вы можете попробовать MACD для этих целей

Да, но не должен следовать "кривой индикатора", а только показывать изменение цвета.

Спасибо, Вальб

 
supermagix:

Да, но не должны следовать "кривой индикатора", а только указывать на изменение цвета.

Спасибо Walb

Индикатор для МТ4 называется russian colors, вы хотите

/go?link=https://www.forexfactory.com/showthread.php?t=173962

Вам нужно только заменить HMA на EMA34.

Причина обращения: