Buffers indicadores de leitura ajustados para tabela - página 2

 
Yuriy Asaulenko:
É estranho. Li em algum lugar na ajuda que se um indicador já está em funcionamento, nenhuma cópia é criada. Eu não entendo.

Eu devo ter entendido mal alguma coisa. Verifiquei esta hipótese, fiz um indicador com dois buffers, um é preenchido pela OnCalculate() e o outro pela OnTimer(), script, Expert Advisor... Usei iCustom() para imprimir o valor do buffer preenchido em OnCalculate() e o valor vazio é deduzido do OnTimer(). Ao mesmo tempo, o indicador está no gráfico onde eu coloco o roteiro ou EA.

Conclusão: ao chamar o indicador pelo iCustom(), o evento OnTimer() não é executado no indicador.

Talvez esta seja a razão pela qual está escrito na documentação

A função OnTimer() é chamada quando ocorre um evento Temporizador, que é gerada pelo temporizador do sistema apenas para Conselheiros Especialistas e indicadores - você não pode usá-la em scripts.

E não menciona de forma alguma indicadores.

Aparentemente, há algumas características úteis não documentadas em mql, bem como consequências não documentadas...

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

Um indicador é colocado na tabela. É redesenhado por Timer, ChartEvent e Calculate events.

Preciso de um roteiro para ler os valores atuais de seus buffers indicadores(INDICATOR_DATA) que podem ser vistos pela CTRL+D. É possível fazer isso no MT4?

Ela pode ser lida e escrita e DLL não é necessária.
 
pako:
Lê e escreve e não precisa de DLL
Bem, onde está um exemplo?
 
Alexey Viktorov:
Bem, onde está o exemplo?
Onde está o indicador?
 
comp:

Infelizmente, neste caso

não vai ajudar.

Por que isso não ajuda?
 
pako:
Onde está o indicador?
Dmitry Fedoseev:
Por que isso não ajuda?

Assunto:

#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:
Estranho. Li em algum lugar na ajuda que se o indicador já estiver funcionando, uma cópia não é criada. Talvez esteja me faltando algo.

Recentemente eu postei um indicador, ele apenas exibe uma seqüência de texto. E ao chamá-lo através do iCustom as linhas indicadoras no gráfico e o iCustom interferiam um com o outro, eu tinha que fazer apenas uma saída programática.

Talvez, uma cópia do código não seja criada na memória, mas o recálculo vai com seus parâmetros

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

 
comp:

Assunto:

E daí?
 
Alexey Volchanskiy:

Recentemente eu postei um indicador, ele apenas exibe uma seqüência de texto. E ao chamá-lo através do iCustom as linhas indicadoras no gráfico e o iCustom interferiam um com o outro, eu tinha que fazer apenas uma saída programática.

Talvez, uma cópia do código não seja criada na memória, mas o recálculo vai com seus parâmetrosCopy

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

Uma cópia do código não pode não ser criada porque é uma carga dinâmica.
 
Алексей Тарабанов:
A cópia de código não pode ser criada, porque é uma carga dinâmica.

Afirmação verbal, ou você é um desenvolvedor MQ? :))

Embora, eu mesmo penso assim, por analogia com a DLL, onde o código do programa está em uma instância, e as instâncias de dados são criadas para os clientes.

Em resumo, o ponto prático é que se houver um índice em um gráfico, o iCustom toma dados não dele, mas de uma instância criada separadamente.

Razão: