Lettura dei buffer degli indicatori impostati sul grafico - pagina 5

 
Dmitry Fedoseev:
Quale dichiarazione? L'affermazione nel titolo non è corretta. Non ci sono problemi con i buffer di lettura. Con quali problemi - ha scritto, e ancora ha dato un link a questo post. Dovrei ancora correrti dietro e costringerti a farlo?

L'aggressività è inversamente proporzionale all'argomentazione! Quale link è quello in questione - non capisco.

Sono stati dati i codici degli indicatori e degli EA. È dimostrato che non si possono ottenere buffer in alcuni casi attraverso iCustom. Quindi il titolo non è solo corretto, è anche provato.

Con le restrizioni iCustom di un tipo diverso, è simile. Che senso hanno i vostri "si può" e "non vedo il problema" se non si dice altro? Allora non partecipare al thread, visto che non sei in grado di apportare alcuna sostanza costruttiva.

 
È impossibile scrivere un Expert Advisor che riceva i valori del buffer degli indicatori in esecuzione su un grafico con parametri di input non predefiniti. Perché iCustom è implementato in modo tale che richiede la scrittura di una propria chiamata nel SOURCE per ogni indicatore.
 
comp:

È come un calcio in testa per fare una dichiarazione del genere. Ho deciso di cercare indicatori in Kodobase. Non ho trovato nessuno che usi quello a cui sono abituato: modello event-driven + OOP.

È difficile dire cosa sia più: la frustrazione o la delusione per questo stato di cose. Gli indicatori, a quanto pare, sono DAVVERO primitivi da scrivere.

Mostratemi un esempio in cui un modello di eventi combinato con il dare dati a un EA sarebbe necessario.

Non ho nulla contro l'accesso agli indicatori che girano su un grafico. E anche alla struttura dei parametri (a proposito, MT5 ce l'ha già).

Ma ancora una volta sto cercando di suggerire che state affrontando il compito dal lato sbagliato. Non c'è bisogno di piantare chiodi con un microscopio, serve ad altro.

 
comp:
È impossibile scrivere un Expert Advisor che riceva i valori del buffer degli indicatori in esecuzione su un grafico con parametri di input non predefiniti. Poiché iCustom è implementato in questo modo, richiede la scrittura di una propria chiamata nel SOURCE per ogni indicatore.

Non lo sapevo.

owl legge il buffer 0

l'indy può essere appeso a un altro grafico

icomp l'indicatore

gufo ecomp

inoltre è possibile scrivere valori da owl al buffer dell'indicatore

File:
icomp_v2.ex4  8 kb
ecomp_v2.ex4  6 kb
 

Esempio di uno script che dà i nomi e i parametri di input di tutti gli indicatori in esecuzione su un grafico

#property strict

string GetBetweenString( string &SourceString, const string BeginString, const string EndString = "" )
{
  string Str = SourceString;
  int Pos1 = 0;
  int Pos2 = 0;

  if (BeginString != "")
    Pos1 = StringFind(SourceString, BeginString);

  if (Pos1 >= 0)
  {
    Pos1 += StringLen(BeginString);

    Pos2 = StringFind(SourceString, EndString, Pos1);

    if (Pos2 != Pos1)
      Str = StringSubstr(SourceString, Pos1, Pos2 - Pos1);
    else
      Str = "";
  }

  SourceString = StringSubstr(SourceString, Pos2 + StringLen(EndString));

  return(Str);
}

string FileToString( const string FileName )
{
  string Res = "";

  const int handle = FileOpen(FileName, ::FILE_READ|::FILE_BIN);

  if (handle != INVALID_HANDLE)
  {
    uchar Array[];

    FileReadArray(handle, Array);

    Res = CharArrayToString(Array);

    FileClose(handle);
  }

  return(Res);
}

string GetIndicatorsData( const long Chart_ID = 0 )
{
  string Res = "Current chart:";

  const string FileName = ::WindowExpertName() + ".tpl";

  if (ChartSaveTemplate(Chart_ID, "..\\MQL4\\Files\\" + FileName))
  {
    string Str = FileToString(FileName);

    int PosName = StringFind(Str, "name=Custom Indicator");

    while (PosName > 0)
    {
      const string IndicatorName = GetBetweenString(Str, "<indicator>\r\nname=Custom Indicator\r\n<expert>\r\nname=", "\r\n");

      Res += "\n\nIndicator: " + IndicatorName;

      const int PosInputs = StringFind(Str, "<inputs>");
      PosName = StringFind(Str, "name=Custom Indicator");

      if (PosInputs > 0)
        if ((PosName < 0) || (PosName > PosInputs))
          Res += "\nInputs:\n" + GetBetweenString(Str, "<inputs>\r\n", "\r\n</inputs>");

      Res += "\n\nLast Null Buffer Value (ONLY Default Inputs) = " + (string)iCustom(Symbol(), Period(), IndicatorName, 0, 0);
    }
  }

  return(Res);
}

void OnStart( void )
{
  MessageBox(GetIndicatorsData());

  return;
}

Questi dati dovrebbero essere sufficienti per calcolare i valori degli indicatori. Ma a causa dell'"ellissi" di iCustom è impossibile farlo.

 
pako:

Non lo sapevo.

il gufo legge il buffer 0

l'indy può essere appeso a un altro grafico

icomp l'indicatore

gufo ecomp

Fonti?
 
comp:
Le fonti?
Non c'è motivazione.
 
comp:

Esempio di uno script che dà i nomi e i parametri di input di tutti gli indicatori in esecuzione su un grafico

Questi dati dovrebbero essere sufficienti per calcolare i valori degli indicatori. Ma a causa dell'"ellissi" di iCustom è impossibile farlo.

volete sapere quale indicatore è sul grafico e i suoi parametri?

si può vedere il nome

quanto e quali parametri si possono vedere

e lo script mostra il corretto


nome e quanti parametri

 
pako:

volete sapere quale indicatore è in bilico sul grafico e i suoi parametri?

No, voglio capire cosa non funziona nel tuo esempio, perché il tuo EA non mostra il cambiamento dei dati dell'indicatore.

 
comp:

No, voglio capire cosa non funziona nel tuo esempio perché il tuo EA non mostra i dati degli indicatori che cambiano.

mostra i dati del buffer 0

mostra i dati del buffer 0.