Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 53

 
Vitaly Muzichenko:

Va più o meno così:

Grande, i profitti si sommano. Grazie!
 

Buon pomeriggio, Qualcuno può suggerire una soluzione a questo problema. C'è un codice con entrata su M15, ma il segnale da H1 è preso in considerazione. Mentre c'è un segnale su H1, su M15 l'indicatore dà diversi segnali. La questione è come limitarlo a uno (cioè il primo segnale).

k=0;
for (i=OrdersTotal()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 >= 80 && stM0 < 80 && stH0 < 30 && k==0 && opp != Time[0]) // vendita

 

Ho scritto un piccolo pannello informativo:

extern string     Display                    = "Настройки отображения"; //Display
extern color      PanelBackgroundColor       = Black;
extern color      PanelTextColor             = White;

double MaxDD;

int OnInit()
  {
//--- indicator buffers mapping
  
   ObjectCreate("Background", OBJ_RECTANGLE_LABEL, 0, 0, 0);
   ObjectSet("Background", OBJPROP_CORNER, 0);
   ObjectSet("Background", OBJPROP_XDISTANCE, 5);
   ObjectSet("Background", OBJPROP_YDISTANCE, 35);
   ObjectSet("Background", OBJPROP_XSIZE, 215);
   ObjectSet("Background", OBJPROP_YSIZE, 220);  
   ObjectSet("Background", OBJPROP_BGCOLOR, PanelBackgroundColor);
  
   ObjectCreate("Account information", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Account information", OBJPROP_CORNER, 0);
   ObjectSet("Account information", OBJPROP_XDISTANCE, 15);
   ObjectSet("Account information", OBJPROP_YDISTANCE, 45);
   ObjectSetText("Account information","=====Account information=====",10,"Arial",PanelTextColor);
  
   ObjectCreate("Balance", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Balance", OBJPROP_CORNER, 0);
   ObjectSet("Balance", OBJPROP_XDISTANCE, 15);
   ObjectSet("Balance", OBJPROP_YDISTANCE, 60);

   ObjectCreate("Profit/DD", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Profit/DD", OBJPROP_CORNER, 0);
   ObjectSet("Profit/DD", OBJPROP_XDISTANCE, 15);
   ObjectSet("Profit/DD", OBJPROP_YDISTANCE, 75);
  
   ObjectCreate("Max DD", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Max DD", OBJPROP_CORNER, 0);
   ObjectSet("Max DD", OBJPROP_XDISTANCE, 15);
   ObjectSet("Max DD", OBJPROP_YDISTANCE, 90);
  
   ObjectCreate("Equity", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Equity", OBJPROP_CORNER, 0);    
   ObjectSet("Equity", OBJPROP_XDISTANCE, 15);
   ObjectSet("Equity", OBJPROP_YDISTANCE, 105);

   ObjectCreate("Free margin", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Free margin", OBJPROP_CORNER, 0);    
   ObjectSet("Free margin", OBJPROP_XDISTANCE, 15);
   ObjectSet("Free margin", OBJPROP_YDISTANCE, 120);
  
   ObjectCreate("Pair information", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Pair information", OBJPROP_CORNER, 0);    
   ObjectSet("Pair information", OBJPROP_XDISTANCE, 15);
   ObjectSet("Pair information", OBJPROP_YDISTANCE, 150);
   ObjectSetText("Pair information","=======Pair information======",10,"Arial",PanelTextColor);
  
   ObjectCreate("Pair", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Pair", OBJPROP_CORNER, 0);    
   ObjectSet("Pair", OBJPROP_XDISTANCE, 15);
   ObjectSet("Pair", OBJPROP_YDISTANCE, 165);
   ObjectSetText("Pair","Pair: "+Symbol(),10,"Arial",PanelTextColor);

   ObjectCreate("Margin required", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Margin required", OBJPROP_CORNER, 0);    
   ObjectSet("Margin required", OBJPROP_XDISTANCE, 15);
   ObjectSet("Margin required", OBJPROP_YDISTANCE, 180);

   ObjectCreate("Price pips", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Price pips", OBJPROP_CORNER, 0);    
   ObjectSet("Price pips", OBJPROP_XDISTANCE, 15);
   ObjectSet("Price pips", OBJPROP_YDISTANCE, 195);

   ObjectCreate("Spread", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Spread", OBJPROP_CORNER, 0);    
   ObjectSet("Spread", OBJPROP_XDISTANCE, 15);
   ObjectSet("Spread", OBJPROP_YDISTANCE, 210);

   ObjectCreate("Leverage", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Leverage", OBJPROP_CORNER, 0);    
   ObjectSet("Leverage", OBJPROP_XDISTANCE, 15);
   ObjectSet("Leverage", OBJPROP_YDISTANCE, 225);
//---
   return(INIT_SUCCEEDED);
  }

void start()
{
   //Расчет максимальной просадки
   if (AccountProfit()<0)
   {
      if (AccountProfit()<MaxDD)
         MaxDD=AccountProfit();
   }
  
   ObjectSetText("Balance","Balance: "+DoubleToString (AccountBalance(),2)+" "+AccountCurrency(),10,"Arial",PanelTextColor);
   ObjectSetText("Profit/DD","Profit/DD: "+DoubleToString (AccountProfit(),2)+" ("+DoubleToString((AccountProfit()*100)/AccountBalance(),2)+"%)",10,"Arial",PanelTextColor);
   ObjectSetText("Max DD","Max DD: "+DoubleToString (MaxDD,2)+" ("+DoubleToString((MaxDD*100)/AccountBalance(),2)+"%)",10,"Arial",PanelTextColor);
   ObjectSetText("Equity","Equity: "+DoubleToString (AccountEquity(),2),10,"Arial",PanelTextColor);
   ObjectSetText("Free margin","Free margin: "+DoubleToString (AccountFreeMargin(),2),10,"Arial",PanelTextColor);
   ObjectSetText("Margin required","Margin required: "+DoubleToString(MarketInfo(Symbol(), MODE_MARGINREQUIRED), 2)+" $",10,"Arial",PanelTextColor);
   ObjectSetText("Price pips","Price pips: "+DoubleToString(MarketInfo(Symbol(), MODE_TICKVALUE), 2)+" $",10,"Arial",PanelTextColor);
   ObjectSetText("Spread","Spread: "+DoubleToString(MarketInfo(Symbol(),MODE_SPREAD),2),10,"Arial",PanelTextColor);
   ObjectSetText("Leverage","Leverage: 1:"+IntegerToString(AccountLeverage(), 0),10,"Arial",PanelTextColor);
}

Tutto funziona, visualizza le informazioni correttamente, ma appena si riavvia il terminale, il pannello smette di funzionare (scrive che il saldo è 0 e il resto delle informazioni smette di aggiornarsi e si blocca su una posizione, semplicemente si blocca). Come combattere questo?

Uno screenshot è allegato:
 
ilnur17021992:

Ho scritto un piccolo pannello informativo:

extern string     Display                    = "Настройки отображения"; //Display
extern color      PanelBackgroundColor       = Black;
extern color      PanelTextColor             = White;

double MaxDD;

int OnInit()
  {
//--- indicator buffers mapping
  
   ObjectCreate("Background", OBJ_RECTANGLE_LABEL, 0, 0, 0);
   ObjectSet("Background", OBJPROP_CORNER, 0);
   ObjectSet("Background", OBJPROP_XDISTANCE, 5);
   ObjectSet("Background", OBJPROP_YDISTANCE, 35);
   ObjectSet("Background", OBJPROP_XSIZE, 215);
   ObjectSet("Background", OBJPROP_YSIZE, 220);  
   ObjectSet("Background", OBJPROP_BGCOLOR, PanelBackgroundColor);
  
   ObjectCreate("Account information", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Account information", OBJPROP_CORNER, 0);
   ObjectSet("Account information", OBJPROP_XDISTANCE, 15);
   ObjectSet("Account information", OBJPROP_YDISTANCE, 45);
   ObjectSetText("Account information","=====Account information=====",10,"Arial",PanelTextColor);
  
   ObjectCreate("Balance", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Balance", OBJPROP_CORNER, 0);
   ObjectSet("Balance", OBJPROP_XDISTANCE, 15);
   ObjectSet("Balance", OBJPROP_YDISTANCE, 60);

   ObjectCreate("Profit/DD", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Profit/DD", OBJPROP_CORNER, 0);
   ObjectSet("Profit/DD", OBJPROP_XDISTANCE, 15);
   ObjectSet("Profit/DD", OBJPROP_YDISTANCE, 75);
  
   ObjectCreate("Max DD", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Max DD", OBJPROP_CORNER, 0);
   ObjectSet("Max DD", OBJPROP_XDISTANCE, 15);
   ObjectSet("Max DD", OBJPROP_YDISTANCE, 90);
  
   ObjectCreate("Equity", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Equity", OBJPROP_CORNER, 0);    
   ObjectSet("Equity", OBJPROP_XDISTANCE, 15);
   ObjectSet("Equity", OBJPROP_YDISTANCE, 105);

   ObjectCreate("Free margin", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Free margin", OBJPROP_CORNER, 0);    
   ObjectSet("Free margin", OBJPROP_XDISTANCE, 15);
   ObjectSet("Free margin", OBJPROP_YDISTANCE, 120);
  
   ObjectCreate("Pair information", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Pair information", OBJPROP_CORNER, 0);    
   ObjectSet("Pair information", OBJPROP_XDISTANCE, 15);
   ObjectSet("Pair information", OBJPROP_YDISTANCE, 150);
   ObjectSetText("Pair information","=======Pair information======",10,"Arial",PanelTextColor);
  
   ObjectCreate("Pair", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Pair", OBJPROP_CORNER, 0);    
   ObjectSet("Pair", OBJPROP_XDISTANCE, 15);
   ObjectSet("Pair", OBJPROP_YDISTANCE, 165);
   ObjectSetText("Pair","Pair: "+Symbol(),10,"Arial",PanelTextColor);

   ObjectCreate("Margin required", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Margin required", OBJPROP_CORNER, 0);    
   ObjectSet("Margin required", OBJPROP_XDISTANCE, 15);
   ObjectSet("Margin required", OBJPROP_YDISTANCE, 180);

   ObjectCreate("Price pips", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Price pips", OBJPROP_CORNER, 0);    
   ObjectSet("Price pips", OBJPROP_XDISTANCE, 15);
   ObjectSet("Price pips", OBJPROP_YDISTANCE, 195);

   ObjectCreate("Spread", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Spread", OBJPROP_CORNER, 0);    
   ObjectSet("Spread", OBJPROP_XDISTANCE, 15);
   ObjectSet("Spread", OBJPROP_YDISTANCE, 210);

   ObjectCreate("Leverage", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Leverage", OBJPROP_CORNER, 0);    
   ObjectSet("Leverage", OBJPROP_XDISTANCE, 15);
   ObjectSet("Leverage", OBJPROP_YDISTANCE, 225);
//---
   return(INIT_SUCCEEDED);
  }

void start()
{
   //Расчет максимальной просадки
   if (AccountProfit()<0)
   {
      if (AccountProfit()<MaxDD)
         MaxDD=AccountProfit();
   }
  
   ObjectSetText("Balance","Balance: "+DoubleToString (AccountBalance(),2)+" "+AccountCurrency(),10,"Arial",PanelTextColor);
   ObjectSetText("Profit/DD","Profit/DD: "+DoubleToString (AccountProfit(),2)+" ("+DoubleToString((AccountProfit()*100)/AccountBalance(),2)+"%)",10,"Arial",PanelTextColor);
   ObjectSetText("Max DD","Max DD: "+DoubleToString (MaxDD,2)+" ("+DoubleToString((MaxDD*100)/AccountBalance(),2)+"%)",10,"Arial",PanelTextColor);
   ObjectSetText("Equity","Equity: "+DoubleToString (AccountEquity(),2),10,"Arial",PanelTextColor);
   ObjectSetText("Free margin","Free margin: "+DoubleToString (AccountFreeMargin(),2),10,"Arial",PanelTextColor);
   ObjectSetText("Margin required","Margin required: "+DoubleToString(MarketInfo(Symbol(), MODE_MARGINREQUIRED), 2)+" $",10,"Arial",PanelTextColor);
   ObjectSetText("Price pips","Price pips: "+DoubleToString(MarketInfo(Symbol(), MODE_TICKVALUE), 2)+" $",10,"Arial",PanelTextColor);
   ObjectSetText("Spread","Spread: "+DoubleToString(MarketInfo(Symbol(),MODE_SPREAD),2),10,"Arial",PanelTextColor);
   ObjectSetText("Leverage","Leverage: 1:"+IntegerToString(AccountLeverage(), 0),10,"Arial",PanelTextColor);
}

Tutto funziona, visualizza le informazioni correttamente, ma appena si riavvia il terminale, il pannello smette di funzionare (scrive che il saldo è 0 e il resto delle informazioni smette di aggiornarsi e si blocca su una posizione, semplicemente si blocca). Come affrontarlo?

Allego uno screenshot:

Problema simile discusso non molto tempo fa, hai guardato la scheda log o gli Expert Advisors, posso dire con il 100% di certezza che hai un errore di divisione per zero in queste linee

   ObjectSetText("Profit/DD","Profit/DD: "+DoubleToString (AccountProfit(),2)+" ("+DoubleToString((AccountProfit()*100)/AccountBalance(),2)+"%)",10,"Arial",PanelTextColor);
   ObjectSetText("Max DD","Max DD: "+DoubleToString (MaxDD,2)+" ("+DoubleToString((MaxDD*100)/AccountBalance(),2)+"%)",10,"Arial",PanelTextColor);


...

 
ilnur17021992:

Ho scritto un piccolo pannello informativo:

void start()
{
   //Расчет максимальной просадки
   if (AccountProfit()<0)
   {
      if (AccountProfit()<MaxDD)
         MaxDD=AccountProfit();
   }
  
   ObjectSetText("Balance","Balance: "+DoubleToString (AccountBalance(),2)+" "+AccountCurrency(),10,"Arial",PanelTextColor);
   ...
   ObjectSetText("Leverage","Leverage: 1:"+IntegerToString(AccountLeverage(), 0),10,"Arial",PanelTextColor);
}

Tutto funziona, visualizza le informazioni correttamente, ma quando si riavvia il terminale, il pannello smette di funzionare (scrive che il saldo è 0, e il resto delle informazioni smette di aggiornarsi e si blocca su una posizione, semplicemente si blocca). Come lottare con esso?

Schermata allegata:

Prova così:

void start()
{
   if (AccountBalance()<5) return; // <<< if (AccountBalance()==0) return;

   //Расчет максимальной просадки
   if (AccountProfit()<0)
   {
      if (AccountProfit()<MaxDD)
         MaxDD=AccountProfit();
   }
  
   ObjectSetText("Balance","Balance: "+DoubleToString (AccountBalance(),2)+" "+AccountCurrency(),10,"Arial",PanelTextColor);
   ...
   ObjectSetText("Leverage","Leverage: 1:"+IntegerToString(AccountLeverage(), 0),10,"Arial",PanelTextColor);
}
Questo problema è dovuto al fatto che la connessione al server non è ancora avvenuta e non ci sono dati sull'account, quindi divide per zero. Inserisci un semplice controllo e se non c'è connessione allora il saldo sarà zero - aspetta la connessione e aggiorna.
 
ilnur17021992 :

Ha scritto un piccolo pannello informativo:

extern string      Display                    = "Настройки отображения" ; //Display
extern color       PanelBackgroundColor       = Black;
extern color       PanelTextColor             = White;



Tutto funziona, le informazioni vengono visualizzate correttamente, ma non appena il terminale viene riavviato, il pannello smette di funzionare (dice che il saldo è 0 e il resto delle informazioni smette di aggiornarsi e si blocca in una posizione, semplicemente si blocca). Come affrontarlo?

Schermata allegata:

Ho fatto una piccola magia sul tuo pannello. è risultato il codice seguente, l'errore di divisione per zero è stato eliminato.

//+------------------------------------------------------------------+
//|                                                   test_panel.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link        "https://www.mql5.com/ru/users/sergey1294"
#property version    "1.00"
#property strict

sinput string      Display= NULL ; //Настройки отображения
input color       PanelBackgroundColor       = clrBlack ;
input color       PanelTextColor             = clrWhite ;
input color       ColorMinus= clrRed ;
input color ColorPlus= clrBlueViolet ;
input color ColorZero= clrMediumAquamarine ;

double balans= 0.0 ;
double profit= 0.0 ;
double profit_dd_procent= 0.0 ;
double MaxDD= 0.0 ;
double MaxDD_procent= 0.0 ;
double Equity= 0.0 ;
double Freemargin= 0.0 ;
double Marginrequired= 0.0 ;
double Pricepips= 0.0 ;
int Spread= 0 ;
int Leverage= 0 ;
string symbol= NULL ;
string currency= NULL ;

int X= 15 ;
int Y= 45 ;
int size= 15 ;
int x_sdvig= 150 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   Refresh();
   Panel();
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   RectLabelDelete( 0 , "Background" );
   LabelDelete( 0 , "Account information" );
   LabelDelete( 0 , "Balance" );
   LabelDelete( 0 , "Balance value" );
   LabelDelete( 0 , "Profit/DD" );
   LabelDelete( 0 , "Profit/DD value" );
   LabelDelete( 0 , "Max DD" );
   LabelDelete( 0 , "Max DD value" );

   LabelDelete( 0 , "Equity" );
   LabelDelete( 0 , "Equity value" );
   LabelDelete( 0 , "Free margin" );
   LabelDelete( 0 , "Free margin value" );
   LabelDelete( 0 , "Pair information" );
   LabelDelete( 0 , "Pair" );
   LabelDelete( 0 , "Pair value" );
   LabelDelete( 0 , "Margin required" );
   LabelDelete( 0 , "Margin required value" );
   LabelDelete( 0 , "Price pips" );
   LabelDelete( 0 , "Price pips value" );
   LabelDelete( 0 , "Spread" );
   LabelDelete( 0 , "Spread value" );
   LabelDelete( 0 , "Leverage" );
   LabelDelete( 0 , "Leverage value" );

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   Refresh();
   Panel();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Refresh()
  {
   symbol= _Symbol ;
   currency= AccountInfoString ( ACCOUNT_CURRENCY );
   balans = AccountInfoDouble ( ACCOUNT_BALANCE );
   profit = AccountInfoDouble ( ACCOUNT_PROFIT );
   Equity = AccountInfoDouble ( ACCOUNT_EQUITY );
   Freemargin= AccountInfoDouble ( ACCOUNT_MARGIN_FREE );
   Marginrequired= MarketInfo (symbol, MODE_MARGINREQUIRED );
   Pricepips= SymbolInfoDouble (symbol, SYMBOL_TRADE_TICK_VALUE );
   Leverage=( int ) AccountInfoInteger ( ACCOUNT_LEVERAGE );
   double ask= SymbolInfoDouble (symbol, SYMBOL_ASK );
   double bid= SymbolInfoDouble (symbol, SYMBOL_BID );
   double point= SymbolInfoDouble (symbol, SYMBOL_POINT );
   Spread=( int ) SymbolInfoInteger (symbol, SYMBOL_SPREAD );
   if (Spread== 0 )Spread= int ((ask-bid)/point);
//Расчет максимальной просадки
   if (profit< 0 )
       if (profit<MaxDD)
         MaxDD=profit;
        
   if (balans!= 0 )
     {
      profit_dd_procent=profit* 100.0 /balans;
      MaxDD_procent=MaxDD* 100.0 /balans;
     }

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Panel()
  {
   RectLabelCreate( 0 , "Background" , 0 , 5 , 35 , 300 , 230 ,PanelBackgroundColor);
   LabelCreate( 0 , "Account information" , 0 ,X,Y, "=====Account information=====" ,PanelTextColor);Y+=size;
   LabelCreate( 0 , "Balance" , 0 ,X,Y, "Balance (" +currency+ "):" ,PanelTextColor);
   LabelCreate( 0 , "Balance value" , 0 ,x_sdvig,Y, DoubleToString (balans, 2 ),ColorValue(balans));Y+=size;
   LabelCreate( 0 , "Profit/DD" , 0 ,X,Y, "Profit/DD (" +currency+ " / %):" ,PanelTextColor);
   LabelCreate( 0 , "Profit/DD value" , 0 ,x_sdvig,Y, DoubleToString (profit, 2 )+ " / " + DoubleToString (profit_dd_procent, 2 ),ColorValue(profit));Y+=size;
   LabelCreate( 0 , "Max DD" , 0 ,X,Y, "Max DD (" +currency+ " / %):" ,PanelTextColor);
   LabelCreate( 0 , "Max DD value" , 0 ,x_sdvig,Y, DoubleToString (MaxDD, 2 )+ " / " + DoubleToString (MaxDD_procent, 2 ),ColorValue(MaxDD));Y+=size;
   LabelCreate( 0 , "Equity" , 0 ,X,Y, "Equity (" +currency+ "):" ,PanelTextColor);
   LabelCreate( 0 , "Equity value" , 0 ,x_sdvig,Y,( string )Equity,ColorValue(Equity));Y+=size;
   LabelCreate( 0 , "Free margin" , 0 ,X,Y, "Free margin (" +currency+ "):" ,PanelTextColor);
   LabelCreate( 0 , "Free margin value" , 0 ,x_sdvig,Y,( string )Freemargin,ColorValue(Freemargin));Y+=size;Y+=size;

   LabelCreate( 0 , "Pair information" , 0 ,X,Y, "=======Pair information======" ,PanelTextColor);Y+=size;
   LabelCreate( 0 , "Pair" , 0 ,X,Y, "Pair:" ,PanelTextColor);
   LabelCreate( 0 , "Pair value" , 0 ,x_sdvig,Y,symbol,PanelTextColor);Y+=size;
   LabelCreate( 0 , "Margin required" , 0 ,X,Y, "Margin required (" +currency+ "):" ,PanelTextColor);
   LabelCreate( 0 , "Margin required value" , 0 ,x_sdvig,Y,( string )Marginrequired,ColorValue(Marginrequired));Y+=size;
   LabelCreate( 0 , "Price pips" , 0 ,X,Y, "Price pips (" +currency+ "):" ,PanelTextColor);
   LabelCreate( 0 , "Price pips value" , 0 ,x_sdvig,Y,( string )Pricepips,ColorValue(Pricepips));Y+=size;
   LabelCreate( 0 , "Spread" , 0 ,X,Y, "Spread:" ,PanelTextColor);
   LabelCreate( 0 , "Spread value" , 0 ,x_sdvig,Y,( string )Spread,ColorValue(Spread));Y+=size;
   LabelCreate( 0 , "Leverage" , 0 ,X,Y, "Leverage:" ,PanelTextColor);
   LabelCreate( 0 , "Leverage value" , 0 ,x_sdvig,Y, "1:" +( string )Leverage,PanelTextColor);
  }
//+------------------------------------------------------------------+
//| Создает прямоугольную метку                                      |
//+------------------------------------------------------------------+
bool RectLabelCreate( const long              chart_ID= 0 ,               // ID графика
                     const string            name= "RectLabel" ,         // имя метки
                     const int               sub_window= 0 ,             // номер подокна
                     const int               x= 0 ,                       // координата по оси X
                     const int               y= 0 ,                       // координата по оси Y
                     const int               width= 50 ,                 // ширина
                     const int               height= 18 ,                 // высота
                     const color             back_clr= C'236,233,216' ,   // цвет фона
                     const ENUM_BORDER_TYPE border= BORDER_SUNKEN ,     // тип границы
                     const ENUM_BASE_CORNER corner= CORNER_LEFT_UPPER , // угол графика для привязки
                     const color             clr= clrRed ,               // цвет плоской границы (Flat)
                     const ENUM_LINE_STYLE   style= STYLE_SOLID ,         // стиль плоской границы
                     const int               line_width= 1 ,             // толщина плоской границы
                     const bool              back= false ,               // на заднем плане
                     const bool              selection= false ,           // выделить для перемещений
                     const bool              hidden= true ,               // скрыт в списке объектов
                     const long              z_order= 0 )                 // приоритет на нажатие мышью
  {
//--- сбросим значение ошибки
   ResetLastError ();
//--- создадим прямоугольную метку
   if ( ObjectFind (chart_ID,name)!=sub_window)
     {
       if (! ObjectCreate (chart_ID,name, OBJ_RECTANGLE_LABEL ,sub_window, 0 , 0 ))
        {
         Print ( __FUNCTION__ ,
               ": не удалось создать прямоугольную метку! Код ошибки = " , GetLastError ());
         return ( false );
        }
     }
//--- установим координаты метки
   ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x);
   ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y);
//--- установим размеры метки
   ObjectSetInteger (chart_ID,name, OBJPROP_XSIZE ,width);
   ObjectSetInteger (chart_ID,name, OBJPROP_YSIZE ,height);
//--- установим цвет фона
   ObjectSetInteger (chart_ID,name, OBJPROP_BGCOLOR ,back_clr);
//--- установим тип границы
   ObjectSetInteger (chart_ID,name, OBJPROP_BORDER_TYPE ,border);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger (chart_ID,name, OBJPROP_CORNER ,corner);
//--- установим цвет плоской рамки (в режиме Flat)
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- установим стиль линии плоской рамки
   ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- установим толщину плоской границы
   ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,line_width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
//--- включим (true) или отключим (false) режим перемещения метки мышью
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- успешное выполнение
   return ( true );
  }
//+------------------------------------------------------------------+
//| Создает текстовую метку                                          |
//+------------------------------------------------------------------+
bool LabelCreate( const long               chart_ID= 0 ,               // ID графика
                 const string             name= "Label" ,             // имя метки
                 const int                sub_window= 0 ,             // номер подокна
                 const int                x= 0 ,                       // координата по оси X
                 const int                y= 0 ,                       // координата по оси Y
                 const string             text= "Label" ,             // текст
                 const color              clr= clrRed ,               // цвет
                 const string             font= "Arial" ,             // шрифт
                 const int                font_size= 10 ,             // размер шрифта
                 const double             angle= 0.0 ,                 // наклон текста
                 const ENUM_BASE_CORNER   corner= CORNER_LEFT_UPPER , // угол графика для привязки
                 const ENUM_ANCHOR_POINT anchor= ANCHOR_LEFT_UPPER , // способ привязки
                 const bool               back= false ,               // на заднем плане
                 const bool               selection= false ,           // выделить для перемещений
                 const bool               hidden= true ,               // скрыт в списке объектов
                 const long               z_order= 0 )                 // приоритет на нажатие мышью
  {
//--- сбросим значение ошибки
   ResetLastError ();
//--- создадим текстовую метку
   if ( ObjectFind (chart_ID,name)!=sub_window)
     {
       if (! ObjectCreate (chart_ID,name, OBJ_LABEL ,sub_window, 0 , 0 ))
        {
         Print ( __FUNCTION__ ,
               ": не удалось создать текстовую метку! Код ошибки = " , GetLastError ());
         return ( false );
        }
     }
//--- установим координаты метки
   ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x);
   ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger (chart_ID,name, OBJPROP_CORNER ,corner);
//--- установим текст
   ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text);
//--- установим шрифт текста
   ObjectSetString (chart_ID,name, OBJPROP_FONT ,font);
//--- установим размер шрифта
   ObjectSetInteger (chart_ID,name, OBJPROP_FONTSIZE ,font_size);
//--- установим угол наклона текста
   ObjectSetDouble (chart_ID,name, OBJPROP_ANGLE ,angle);
//--- установим способ привязки
   ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor);
//--- установим цвет
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
//--- включим (true) или отключим (false) режим перемещения метки мышью
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- успешное выполнение
   return ( true );
  }
//+------------------------------------------------------------------+
//| Изменяет текст объекта                                           |
//+------------------------------------------------------------------+
bool LabelTextChange( const long    chart_ID= 0 ,   // ID графика
                     const string name= "Label" , // имя объекта
                     const string text= "Text" )   // текст
  {
//--- сбросим значение ошибки
   ResetLastError ();
//--- изменим текст объекта
   if (! ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text))
     {
       Print ( __FUNCTION__ ,
             ": не удалось изменить текст! Код ошибки = " , GetLastError ());
       return ( false );
     }
//--- успешное выполнение
   return ( true );
  }
//+------------------------------------------------------------------+
//| Удаляет текстовую метку                                          |
//+------------------------------------------------------------------+
bool LabelDelete( const long    chart_ID= 0 ,   // ID графика
                 const string name= "Label" ) // имя метки
  {
//--- сбросим значение ошибки
   ResetLastError ();
//--- удалим метку
   if (! ObjectDelete (chart_ID,name))
     {
       Print ( __FUNCTION__ ,
             ": не удалось удалить текстовую метку! Код ошибки = " , GetLastError ());
       return ( false );
     }
//--- успешное выполнение
   return ( true );
  }
//+------------------------------------------------------------------+
//| Удаляет прямоугольную метку                                      |
//+------------------------------------------------------------------+
bool RectLabelDelete( const long    chart_ID= 0 ,       // ID графика
                     const string name= "RectLabel" ) // имя метки
  {
//--- сбросим значение ошибки
   ResetLastError ();
//--- удалим метку
   if (! ObjectDelete (chart_ID,name))
     {
       Print ( __FUNCTION__ ,
             ": не удалось удалить прямоугольную метку! Код ошибки = " , GetLastError ());
       return ( false );
     }
//--- успешное выполнение
   return ( true );
  }
//+------------------------------------------------------------------+
color ColorValue( double value)
  {
   if (value> 0 ) return (ColorPlus);
   if (value< 0 ) return (ColorMinus);
   return (ColorZero);
  }
//+------------------------------------------------------------------+


....

 
Sergey Gritsay:

Ho fatto un po' di lavoro sulla tua dashboard, ho questo codice, ho eliminato l'errore di divisione per zero.

//+------------------------------------------------------------------+
//|                                                   test_panel.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"
#property strict


....

Beh, questo è sotto forma di un EA, e molto probabilmente hai bisogno di un indicatore, perché dopo aver installato questo EA, non puoi più installare un EA, e devi scegliere, o installare un EA di trading, o un pannello EA =)

 
Vitaly Muzichenko:

Bene, questo è sotto forma di un EA, e molto probabilmente hai bisogno di un indicatore, perché dopo aver installato questo EA, non sarà più possibile installare un EA, e dovrai scegliere, o installare un EA di trading o un pannello EA =)

Non è troppo difficile copiare questo codice nell'indicatore. Nella domanda del topiker non c'era alcuna indicazione che stesse scrivendo un indicatore.
 
Sergey Gritsay:
Non è troppo difficile copiare questo codice in un indicatore. Non c'era alcuna indicazione nella domanda che stava scrivendo l'indicatore.
Molte grazie a coloro che hanno risposto e aiutato. In realtà sto scrivendo non solo un "pannello" ma un pannello informativo interattivo completo sotto forma di indicatore per un robot a griglia:
 
Vladimir Karputov:

Nel tester di strategia, vai alla scheda "Ottimizzazione" -

È qui che verranno visualizzati i risultati dell'ottimizzazione.

Ho mt4 e l'ho fatto così, nessungrafico di ottimizzazione e nessun risultato!