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

 
SamMan писал (а) >>

Exatamente. E quanto menor o código, mais fácil é de entender. Eu não suporto fontes "manchadas" em 2-3 telas. Uma função deve estar toda na tela, sem inverter. É por isso que sou a favor da compacidade.


Eu também não suporto eles :) . Minha função cabe na tela.


E é correto que você tenha muitos continuums opcionais que, por acaso, novamente chamam a atenção do leitor para longe de você?


Bem, reduzir a complexidade da função é uma das condições básicas para escrever um bom código.

Se você gosta desta forma, você tem 2 opções :

1. Você está acostumado a um mau estilo de código e você mesmo o usa, nada de bom pode vir dele, quando você terá que escrever um código realmente fundamental você entenderá minha retidão. Pelo menos quando você muda para MQL5.

2 E eu acho que isto é só sobre você - você usa este código, porque não consegue escrever seu próprio código corretamente, como programador você não representa nada, e então você não tem o direito de julgar e discutir meu post com o autor deste tópico. Mais ainda, eu estava me dirigindo ao autor.

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 como durante tanto tempo não houve um feedback claramente negativo, isso significa que o código do autor satisfaz. Simplesmente não suportou :), desculpe.

 
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 inequivocamente negativo, isso significa que o código do autor satisfaz. Simplesmente não suportou :), desculpe.

Peço desculpas por escrever, mas não consegui suportar isso. Você será em vão se deixar a filial por causa da opinião de alguém. Especialmente o autor disse obrigado.

Eu acho que seria bom se uma e a mesma tarefa pudesse ser resolvida por 2 (ou mais) códigos. Você pode compartilhar seus códigos resolvendo a mesma tarefa, se achar que eles são melhores.

Muitas vezes, vendo como alguém mais codificou a mesma coisa, mas em um estilo diferente. Você pode aprender muito.

P.S. Igor, obrigado por seu trabalho.

 
De fato, Andrei, você não deveria aceitar isso dessa maneira. Mantenha-o simples! E não tenha medo de me empurrar para baixo. Não me importo se você contribuir com algo para o meu trabalho ou colocar o seu próprio.
 

A função ArraySearchDouble().

Esta função procura um elemento de matriz usando um valor de tipo duplo e retorna o índice do elemento encontrado ou -1. A função encontra apenas um elemento e pára a busca se o resultado for positivo.

  • m - A matriz na qual o elemento é procurado.
  • e - Valor do tipo duplo, que pode ser encontrado na matriz m.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble(double& m[], double e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
ZS. Anexado um roteiro para testar a função ArraySearchDouble().
Arquivos anexados:
 

A função ArraySearchInt().

Esta função procura um elemento de matriz por um valor int e retorna o índice do elemento encontrado ou -1. A função encontra apenas um elemento e pára a busca se o resultado for positivo.

  • m - O conjunto de tipos, nos quais a busca é realizada.
  • e - Valor do tipo int, que pode ser encontrado no array m.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchInt(int& m[], int e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
ZS. Anexado um script para testar a função ArraySearchInt().
Arquivos anexados:
 

A função ArraySearchString().

Esta função procura um elemento de matriz por um valor do tipo string e retorna o índice do elemento encontrado ou -1. A função encontra apenas um elemento e pára a busca se o resultado for positivo.

  • m - O conjunto de elementos do tipo string, no qual a busca é realizada.
  • e - O valor do tipo de fio, que pode ser encontrado na matriz m.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 04.03.2008                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchString(string& m[], string e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
ZS. Anexado um roteiro para testar a função ArraySearchString().
Arquivos anexados:
 
KimIV писал (а) >>
De fato, Andrey, você não deveria ter tomado esse caminho. >> Seja simples! E não tenha medo de me empurrar para baixo. Eu não me importarei se você fizer uma contribuição e corrigir algo meu ou colocar o seu próprio.

OK, tenho uma visão um pouco diferente sobre as coisas, como já escrevi, considero a universalidade global como um mal, ou seja, o código deve ser pelo menos um pouco personalizado para o que você está escrevendo, a fim de alcançar a máxima simplicidade e conveniência. É por isso que eu não vejo nenhum sentido em publicar aqui meu próprio código.


Posso agir como revisor de seu código, se você não se importar, é claro, e oferecer sua própria versão dele ou apenas fazer comentários.



SZZH: Obrigado por seu apoio, para ser honesto, não esperava esse tipo de feedback de sua parte.

 
KimIV писал (а) >>

A função ArraySearchDouble().

Esta função procura um elemento de matriz usando um valor de tipo duplo e retorna o índice do elemento encontrado ou -1. A função encontra apenas um elemento e pára a busca se o resultado for positivo.

  • m - A matriz na qual o elemento é procurado.
  • e - O valor do tipo duplo, que pode ser encontrado na matriz m.
ZS. Anexado um roteiro para testar a função ArraySearchDouble().

O dobro é uma coisa complicada, e seu código pode funcionar incorretamente em algumas situações.

Aqui está uma possível solução

int ArraySearchDouble(double& array[], double value, double precision = 0.00000000001) 
{ // на то, что я перемещаю скобки не обращайте внимания, мне так читабельней
  for (int i = 0; i < ArraySize(array); i++) 
  {
    if (array[i] > value - precision && array[i] < value + precision) return(i);
  }
  return(-1);
}

E se você quiser fazer a mesma coisa, mas desde o final.

int ArrayRevertSearchDouble(double& array[], double value, double precision = 0.00000000001) 
{ 
  for (int i = ArraySize(array) - 1; i >= 0; i--) 
  {
    if (array[i] > value - precision && array[i] < value + precision) return(i);
  }
  return(-1);
}
 
TheXpert писал (а)
Posso agir como revisor de seu código, se você não se importar, é claro, e oferecer minha própria versão dele ou apenas fazer comentários.
Ótimo! É bom para todos ter uma visão versátil das coisas. Eu, antes de mais nada :-)
 

Eu estava escrevendo um EA no outro dia, no qual tive que mudar o tamanho do lote, dependendo do resultado de um comércio anterior e do tamanho do lote do mesmo comércio. E descobri que eu não tinha uma função que devolvesse o tamanho do lote da última posição fechada. Aqui está uma correção...

A função GetLotLastClosePos().

Esta função retorna o tamanho do lote da última posição fechada, ou -1. A seleção das posições a serem levadas em conta é definida por parâmetros externos:

  • sy - Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do instrumento especificado. O valor padrão "" significa qualquer instrumento de mercado. O valor NULL significa o instrumento atual.
  • op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
  • mn - Identificador de posição, MagicNumber. O valor padrão -1 significa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.06.2008                                                     |
//|  Описание : Возвращает размер лота последней закрытой позиции или -1       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastClosePos(string sy="", int op=-1, int mn=-1) {
  datetime o;
  double   l=-1;
  int      i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderCloseTime()) {
                o=OrderCloseTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
  return(l);
}
HH. Em anexo está um roteiro para testar a função GetLastClosePos().
Arquivos anexados:
Razão: