Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1342

 
Vladimir Karputov #:

In OnDeinit sollten SieObjectsDeleteAll ausführen - Löschen nach Präfix (in Ihrem Fall ist das Präfix "HLine")

In welche Zeile soll "HLine" geschrieben werden?

 
Green handsome #:

In welche Zeile soll "HLine" geschrieben werden?

Was ist nicht klar?

Forum für Handel, automatisierte Handelssysteme und Strategietests

FAQ von Anfängern MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2021.09.10 15:53

Sie müssenObjectsDeleteAll in OnDeinit ausführen - Löschen nach Präfix(in Ihrem Fall ist das Präfix "HLine")

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


 
Vladimir Karputov #:

Was genau ist nicht klar?


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

Hier habe ich es getan, aber es lässt sich immer noch nicht löschen.

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

das Präfix enthält die Namen der grafischen Beschriftungen

wissen Sie, was Präfix bedeutet?

 
Fast235 #:

das Präfix enthält die Namen der grafischen Beschriftungen

wissen Sie, was Präfix bedeutet?

Ich kenne mich mit MQL überhaupt nicht aus.... Ich dachte, ich korrigiere einfach ein paar Zeilen und das war's.

 
Green handsome #:

Ich weiß überhaupt nichts über MQLs.... Ich dachte, ich korrigiere einfach ein paar Zeilen und das war's.

der obige Code sollte helfen, ansonsten sehen Sie sich das Präfix an, mit dem Objekte erstellt werden

 

Was ist der Grund dafür, dass der Kurzname im Unterfenster oben links nicht angezeigt wird?


Außerdem, wenn ich einen Indikator auf den Chart lade, funktioniert die zweite Kopie nicht mehr - OnInit() = nichts wird ausgelöst und es wird nicht gedruckt. Aber wenn ich "Eingabeparameter" auf "andere" ändere, funktioniert es

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

---

Was ist falsch, in mt4 dieser Code funktioniert.

 
Vitaly Muzichenko #:

Was ist der Grund dafür, dass der Kurzname im Unterfenster oben links nicht angezeigt wird?


Außerdem, wenn ich einen Indikator auf den Chart lade, funktioniert die zweite Kopie nicht mehr - OnInit() = nichts wird ausgelöst und es wird nicht gedruckt. Aber wenn ich "Eingabeparameter" auf "andere" ändere, funktioniert es

---

Was ist falsch, in mt4 dieser Code funktioniert.

Vielleicht liegt es daran, dass er zu kurz ist? Kein Mapping, keine Puffer... Warum eine zweite Kopie eines solchen Indikators erstellen, damit das Terminal willkürlich wird...

 
Vitaly Muzichenko #:

Was ist der Grund dafür, dass der Kurzname im Unterfenster oben links nicht angezeigt wird?


Außerdem, wenn ich einen Indikator auf den Chart lade, funktioniert die zweite Kopie nicht mehr - OnInit() = nichts wird ausgelöst und es wird nicht gedruckt. Aber wenn ich "Eingabeparameter" auf "andere" ändere, funktioniert es

---

Was ist falsch, dieser Code funktioniert in mt4.

Ich hatte auch ein Problem damit, aber ich habe den Indikator gebaut, alles ist in Ordnung.

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

Ich könnte es auskommentieren, um herauszufinden, wann es aufhört, den Namen des Indikators in das Unterfenster zu schreiben ... aber zu faul

 
Igor Makanu #:

etwas fehlt - wahrscheinlich eine Art von Eigenschaft, auch mit diesem konfrontiert, aber hier habe ich den Indikator skizziert, alles ist OK

können Sie es so kommentieren, dass es darauf achtet, wann es aufhört, den Indikatornamen in das Unterfenster zu schreiben... aber faul

Die Daten werden angezeigt, aber woher, wenn die FunktionOnInit() nicht funktioniert hat? Wir werfen eine Kopie auf das Diagramm und OnInit() kann zufällig ausgelöst werden, aber wenn es eine weitere Kopie ist, war's das, es gibt nicht einmal einen Ausdruck. Aber wenn wir die Eingabeparameter ändern, dann funktioniert es.

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

---

Was ist die Lösung, warum OnInit nicht funktioniert?

Grund der Beschwerde: