Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1342

 
Vladimir Karputov #:

In OnDeinit dovreste fareObjectsDeleteAll- cancellare per prefisso (nel vostro caso il prefisso è "HLine")

In quale riga va scritto "HLine"?

 
Green handsome #:

In quale riga va scritto "HLine"?

Cosa non è chiaro?

Forum sul trading, sistemi di trading automatico e test di strategia

FAQ da principianti MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2021.09.10 15:53

Dovete fareObjectsDeleteAll in OnDeinit - cancellare per prefisso(nel vostro caso, il prefisso è "HLine")

int  ObjectsDeleteAll(
   long           chart_id,   // идентификатор графика
   const string     prefix,   // префикс имени объекта
   int       sub_window=-1,   // индекс окна
   int      object_type=-1    // тип объекта для удаления
   );


 
Vladimir Karputov #:

Cosa esattamente non è chiaro?


int  ObjectsDeleteAll(
   long           chart_id,   // идентификатор графика
   const string      HLine,   // префикс имени объекта
   int       sub_window=-1,   // индекс окна
   int      object_type=-1    // тип объекта для удаления
   
   );

Qui l'ho fatto, ma ancora non lo cancella.

 
void OnDeinit(const int reason)
  {
     {
      ObjectsDeleteAll(0,prefix,0);
     }
//---
   //ChartRedraw();
  }

il prefisso contiene i nomi delle etichette grafiche

sai cosa significa prefisso?

 
Fast235 #:

il prefisso contiene i nomi delle etichette grafiche

sai cosa significa prefisso?

Non conosco affatto il MQL.... Ho pensato di sistemare un paio di righe e basta.

 
Green handsome #:

Non so assolutamente nulla di MQL .... Ho pensato di sistemare un paio di righe e basta.

il codice qui sopra dovrebbe aiutare, altrimenti guardate il prefisso con cui vengono creati gli oggetti

 

Qual è la ragione per cui non viene visualizzato il nome breve nella sottofinestra in alto a sinistra?


Inoltre, se carico un indicatore sul grafico, la seconda copia non funziona più - OnInit() = niente si attiva e non stampa. Ma se cambio i "parametri di ingresso" in altri - funziona

#property indicator_separate_window

#property indicator_plots 0

input int MASlow = 21; // Период медленной МА
input int MAFast = 8;  // Период быстрой МА

//+------------------------------------------------------------------+
string prog_name,short_name;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit(void)
{
  prog_name=MQLInfoString(MQL_PROGRAM_NAME);
  short_name="=Set ("+(string)MASlow+"/"+(string)MAFast+")";
  IndicatorSetString(INDICATOR_SHORTNAME,short_name);
  Print("INIT_SUCCEEDED");
  return(INIT_SUCCEEDED);
}

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

---

Cosa c'è di sbagliato, in mt4 questo codice funziona.

 
Vitaly Muzichenko #:

Per quale motivo non viene visualizzato il nome breve nella sottofinestra in alto a sinistra?


Inoltre, se carico un indicatore sul grafico, la seconda copia non funziona più - OnInit() = niente si attiva e non stampa. Ma se cambio i "parametri di ingresso" in altri - funziona

---

Cosa c'è di sbagliato, questo codice funziona in mt4.

Forse solo perché è troppo corto? Nessuna mappatura, nessun buffer... Perché fare una seconda copia di un tale indicatore, così il terminale diventa arbitrario...

 
Vitaly Muzichenko #:

Per quale motivo non viene visualizzato il nome breve nella sottofinestra in alto a sinistra?


Inoltre, se carico un indicatore sul grafico, la seconda copia non funziona più - OnInit() = niente si attiva e non stampa. Ma se cambio i "parametri di ingresso" in altri - funziona

---

Cosa c'è di sbagliato, questo codice funziona in mt4.

Anch'io ho avuto un problema, ma ho costruito l'indicatore e tutto è a posto.

#property copyright "Copyright 2021, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- indicator buffers
double         Label1Buffer[];
input int MASlow = 21; // Период медленной МА
input int MAFast = 8;  // Период быстрой МА
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
   string short_name = MQLInfoString(MQL_PROGRAM_NAME) + "=Set (" + (string)MASlow + "/" + (string)MAFast + ")";
   IndicatorSetString(INDICATOR_SHORTNAME, short_name);
   SetIndexBuffer(0, Label1Buffer, INDICATOR_DATA);
//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
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[])
{
   for(int i = prev_calculated == 0 ? 0 : prev_calculated - 1; i < rates_total; i++)
   {
      Label1Buffer[i] = close[i];
   }
   return(rates_total);
}
//+------------------------------------------------------------------+

Potrei commentarlo per scoprire quando smette di scrivere il nome dell'indicatore nella sottofinestra ... ma troppo pigro

 
Igor Makanu #:

manca qualcosa - probabilmente qualche tipo di proprietà, anche di fronte a questo, ma qui ho abbozzato l'indicatore, tutto è OK

potete commentarlo per cercare quando smette di scrivere il nome dell'indicatore nella sottofinestra... ma pigro

I dati vengono visualizzati, ma da dove, se la funzioneOnInit() non ha funzionato? Lanciamo una copia sul grafico e OnInit() può essere attivata per caso, ma se è un'altra copia, è tutto, non c'è nemmeno una stampa. Ma se cambiamo i parametri di input - allora funziona.

#property copyright "Copyright 2021, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2


input int MASlow = 21; // Период медленной МА
input int MAFast = 8;  // Период быстрой МА

//+------------------------------------------------------------------+
int wndNum;
string short_name;
double Label1Buffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
  short_name="Set ("+(string)MASlow+"/"+(string)MAFast+")";
  IndicatorSetString(INDICATOR_SHORTNAME,short_name);
  wndNum=ChartWindowFind();
  Print("INIT SUCCEEDED: "+(string)wndNum);
  SetIndexBuffer(0, Label1Buffer, INDICATOR_DATA);
//---
  return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
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[])
{
   for(int i = prev_calculated == 0 ? 0 : prev_calculated - 1; i < rates_total; i++)
   {
      Label1Buffer[i] = close[i];
   }
   return(rates_total);
}

---

Qual è la soluzione, perché OnInit non funziona?