Características úteis da KimIV - página 28

 

A função ArrayMax().

Esta função retorna o valor do elemento máximo da matriz.

  • x é um conjunto de elementos do tipo duplo, no qual o valor máximo do elemento é procurado.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 17.05.2008                                                     |
//|  Описание : Возвращает значение максимального элемента массива.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayMax(double& x[]) {
  if (ArraySize(x)>0) return(x[ArrayMaximum(x)]);
  else {
    Print("ArrayMax(): Массив пуст!");
    return(0);
  }
}
P.S. Em anexo está um roteiro para testar a função ArrayMax().
Arquivos anexados:
 

A função ArrayMin().

Esta função retorna o valor do elemento mínimo da matriz.

  • x - Um conjunto de elementos do tipo duplo, no qual o valor mínimo do elemento é procurado.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 17.05.2008                                                     |
//|  Описание : Возвращает значение минимального элемента массива.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayMin(double& x[]) {
  if (ArraySize(x)>0) return(x[ArrayMinimum(x)]);
  else {
    Print("ArrayMin(): Массив пуст!");
    return(0);
  }
}
ZS. Anexado um roteiro para testar a função ArrayMin().
Arquivos anexados:
 

Olá, encontrei um par de suas funções ZigZag no fórum. Isto é exatamente o que eu preciso. Decidi verificar a funcionalidade destas funções, então fiz um consultor especializado que apenas chama esta função no comentário. Número de barras ZigZag = so-and-so. O problema é que a função só mostra o número da barra do ziguezague se não estiver em barra zero. Se o ziguezague estiver em uma barra zero, ele mostra a barra do ziguezague anterior. E eu preciso que ele apareça na barra zero. Em outras palavras, eu quero saber quando o novo ziguezague apareceu.

O código do Conselheiro Especialista é dado abaixo:

int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
GetExtremumZZBar ();
 Comment("бар зигзага = ", GetExtremumZZBar());         //Просто проверяю работоспособность функции
//----
   return(0);
  }
//+------------------------------------------------------------------+
int GetExtremumZZBar(string sym="EURUSD", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sym=="") sym=Symbol();
  double zz;
  int    i, k=iBars(sym, tf), ke=0;
 
  for (i=1; i<k; i++) {
    zz=iCustom(sym, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
 
Climber писал (а) >>

A função mostra o número de barra do ziguezague somente se não estiver em barra zero.
Se o ziguezague estiver na barra zero, ele mostra a barra do ziguezague anterior.
E eu preciso que ele apareça na barra zero. Em outras palavras, para saber quando um novo ziguezague surgiu.

ok... corrigido por barra zero

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает номер бара экстремума ЗигЗага по его номеру.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=0; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(-1);
}
 
TheXpert писал (а) >>

Peço desculpas pelo meu posto ao autor, escrevi em vão, pois de qualquer forma não vou usar este código, pois tenho minha própria libc com tudo o que preciso. E porque durante tanto tempo não houve um feedback claramente negativo, isso significa que o código do autor satisfaz. Simplesmente não suportou :), desculpe.

Há muita gente inteligente, mas as pessoas inteligentes e amáveis são poucas. Você, por outro lado, não expõe sua biblioteca, apesar de achar que codifica melhor, enquanto Igor expõe de graça quase todo o seu trabalho.

 
khorosh писал (а) >>

Há muitas pessoas inteligentes, mas poucas inteligentes e amáveis. Você não coloca sua biblioteca para fora, embora você pense que codifica melhor, enquanto Igor coloca para fora quase todo o seu trabalho de graça.

Eu já escrevi o porquê. Porque meu código não é completamente universal. Se eu puder encontrar algo para postar, eu o farei com certeza

 

A função ArrayAvg().

Esta função retorna a aritmética média dos elementos da matriz.

  • x - Um conjunto de elementos do tipo duplo.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает среднее аримфетическое элементов массива.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayAvg(double& x[]) {
  double s=0;
  int    i, k=ArraySize(x);

  for (i=0; i<k; i++) s+=x[i];
  if (k>0) s/=k; else Print("ArrayAvg(): Массив пуст!");

  return(s);
}
P.S. Em anexo está um roteiro para testar a função ArrayAvg().
Arquivos anexados:
 
KimIV писал (а) >>

ok... corrigido para a barra zero.

Muito obrigado. Algo com a Internet no trabalho, não poderia lhe agradecer antes.

 

A função ArrayAvGeom().

Esta função retorna a média geométrica dos elementos da matriz.

  • x - Um conjunto de elementos do tipo duplo.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.06.2008                                                     |
//|  Описание : Возвращает среднее геометрическое элементов массива.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayAvGeom(double& x[]) {
  double s=1, k=ArraySize(x);
  int    i;

  for (i=0; i<k; i++) s*=x[i];
  if (k>0) s=MathPow(s, 1/k); else Print("ArrayAvGeom(): Массив пуст!");

  return(s);
}
ZS. Anexado um roteiro para testar a função ArrayAvGeom().
Arquivos anexados:
 
KimIV писал (а) >>

A função ArrayAvGeom().

Esta função retorna a média geométrica dos elementos da matriz.

  • x é um conjunto de elementos do tipo duplo.
ZS. Em anexo está um roteiro para testar a função ArrayAvGeom().

Caro KimIV , obrigado pela função!

É realista escrever o mesmo tipo de função para calcular a modalidade?