Auslesen von Indikatorpuffern, die auf Diagramm eingestellt sind - Seite 2

 
Yuriy Asaulenko:
Das ist seltsam. Ich habe irgendwo in der Hilfe gelesen, dass, wenn ein Indikator bereits läuft, keine Kopie erstellt wird. Ich kann das nicht verstehen.

Ich muss etwas missverstanden haben. Ich überprüfte diese Hypothese, machte einen Indikator mit zwei Puffern, einer wird von OnCalculate() und der andere von OnTimer(), Skript, Expert Advisor gefüllt... Ich habe iCustom() verwendet, um den Wert des in OnCalculate() gefüllten Puffers zu drucken, und der leere Wert wird von OnTimer() abgeleitet. Gleichzeitig befindet sich der Indikator in dem Diagramm, in dem ich das Skript oder den EA platziere.

Fazit: Beim Aufruf des Indikators durch iCustom() wird das Ereignis OnTimer() im Indikator nicht ausgeführt.

Vielleicht ist das der Grund, warum es in der Dokumentation steht

Die Funktion OnTimer() wird aufgerufen, wenn ein Timer-Ereignis eintritt, das vom Systemtimer nur für Expert Advisors und Indikatoren generiert wird - Sie können es nicht in Skripten verwenden.

Und es wird in keiner Weise auf Indikatoren hingewiesen.

Offensichtlich gibt es in mql einige nützliche, nicht dokumentierte Funktionen sowie undokumentierte Komplikationen...

События клиентского терминала - Программы MQL4 - Справочник MQL4
События клиентского терминала - Программы MQL4 - Справочник MQL4
  • docs.mql4.com
События клиентского терминала - Программы MQL4 - Справочник MQL4
 
comp:

Ein Indikator wird auf dem Diagramm platziert. Sie wird durch Timer-, ChartEvent- und Calculate-Ereignisse neu gezeichnet.

Ich benötige ein Skript, das die aktuellen Werte seiner Indikatorpuffer(INDICATOR_DATA) liest, die mit STRG+D angezeigt werden können. Ist es möglich, dies in MT4 zu tun?

Sie kann gelesen und geschrieben werden, und eine DLL ist nicht erforderlich.
 
pako:
Liest und schreibt und benötigt keine DLL
Und wo ist ein Beispiel?
 
Alexey Viktorov:
Nun, wo ist das Beispiel?
Wo ist der Indikator?
 
comp:

In diesem Fall ist es leider so, dass

wird nicht helfen.

Warum hilft das nicht?
 
pako:
Wo ist der Indikator?
Dmitry Fedoseev:
Warum hilft es nicht?

Thema:

#property strict

#property indicator_separate_window
#property indicator_buffers 1
#property  indicator_type1 DRAW_LINE
#property  indicator_color1 clrRed

#define  PAUSE 100

input double EMA = 0.1;      // Коэффициент экспоненциального сглаживания
input int Amount = 100;      // Сколько раз применить до "сброса"

double Buffer[];

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(rates_total);
}

void OnInit( void )
{
  SetIndexBuffer(0, Buffer);

  EventSetMillisecondTimer(PAUSE);

  return;
}

void OnDeinit( const int reason )
{
  EventKillTimer();

  return;
}

void SetBuffer( const bool Random )
{
  const int Size = ArraySize(Buffer);

  if (Random)
  {
    MathSrand((int)TimeLocal());

    for (int i = 0; i < Size; i++)
      Buffer[i] = MathRand();
  }
  else
    for (int i = 1; i < Size; i++)
      Buffer[i] += (Buffer[i - 1] - Buffer[i]) * EMA;

  return;
}

void OnTimer( void )
{
  static int Count = 0;

  SetBuffer(Count % Amount == 0);
  ChartRedraw();

  Count++;

  return;
}
 
Yuriy Asaulenko:
Seltsam. Ich habe irgendwo in der Hilfe gelesen, dass, wenn der Indikator bereits läuft, keine Kopie erstellt wird. Vielleicht übersehe ich etwas.

Vor kurzem habe ich einen Indikator gepostet, der nur eine Textzeichenfolge anzeigt. Und wenn ich es über iCustom aufrufe, stören sich die Indikatorlinien auf dem Diagramm und iCustom gegenseitig, so dass ich programmatisch nur eine Ausgabe machen kann.

Möglicherweise wird keine Kopie des Codes im Speicher erstellt, sondern die Neuberechnung erfolgt mit seinen Parametern

https://www.mql5.com/ru/code/14737/83151#!tab=code

 
comp:

Thema:

Na und?
 
Alexey Volchanskiy:

Vor kurzem habe ich einen Indikator gepostet, der nur eine Textzeichenfolge anzeigt. Und wenn ich es über iCustom aufrufe, stören sich die Indikatorlinien auf dem Diagramm und iCustom gegenseitig, so dass ich programmatisch nur eine Ausgabe machen kann.

Möglicherweise wird keine Kopie des Codes im Speicher angelegt, sondern die Neuberechnung erfolgt mit seinen ParameternCopy

https://www.mql5.com/ru/code/14737/83151#!tab=code

Eine Kopie des Codes kann nicht erstellt werden, da es sich um eine dynamische Last handelt.
 
Алексей Тарабанов:
Die Code-Kopie kann nicht nicht erstellt werden, da es sich um eine dynamische Last handelt.

Verbale Behauptung, oder sind Sie ein MQ-Entwickler? :))

Obwohl, ich denke, so selbst, in Analogie mit DLL, wo Programm-Code ist in einer Instanz, und Daten-Instanzen sind für Clients erstellt.

Kurz gesagt, der praktische Punkt ist, dass, wenn es einen Index auf einem Diagramm gibt, iCustom die Daten nicht von diesem, sondern von einer separat erstellten Instanz nimmt.