Funciones útiles de KimIV - página 27

 
SamMan писал (а) >>

Exactamente. Y cuanto más pequeño sea el código, más fácil será de entender. No soporto las fuentes "manchadas" en 2-3 pantallas. Una función debe estar toda en la pantalla, sin voltear. Por eso estoy a favor de la compacidad.


Yo tampoco los soporto :) . Mi función se ajusta a la pantalla.


¿Y está bien que tenga muchos continuos opcionales que, por cierto, vuelven a desviar la atención del lector?


Pues bien, reducir la complejidad de las funciones es una de las condiciones básicas para escribir un buen código.

Si te gusta así, tienes 2 opciones :

1. Estás acostumbrado a un mal estilo de código y lo usas tú mismo, nada bueno puede salir de ello, cuando tengas que escribir un código realmente fundamental entenderás mi razón. Al menos cuando se cambia a MQL5.

2 Y creo que esto es sólo acerca de usted - usted utiliza este código, porque usted es incapaz de escribir su propio código correctamente, como un programador no eres nada y entonces usted no tiene derecho a juzgar y discutir mi puesto al autor de este hilo. Más aún me dirigía al autor.

Me disculpo por mi post al autor, escribí en vano, ya que no voy a utilizar este código de todos modos, ya que tengo mi propia libc con todo lo que necesito. Y como durante tanto tiempo no ha habido ningún comentario claramente negativo, significa que el código del autor es satisfactorio. No podía soportarlo :), lo siento.

 
TheXpert писал (а) >>

Me disculpo por mi post al autor, escribí en vano, ya que no voy a utilizar este código de todos modos, ya que tengo mi propia libc con todo lo que necesito. Y como durante tanto tiempo no hubo una respuesta inequívocamente negativa, significa que el código del autor es satisfactorio. Simplemente no podía soportarlo :), lo siento.

Pido disculpas por escribir, pero no pude soportarlo. Será en vano si dejas la rama por la opinión de uno. Especialmente el autor ha dado las gracias.

Creo que sería bueno que una misma tarea pueda ser resuelta por 2 (o más) códigos. Puedes compartir tus códigos para resolver la misma tarea si crees que son mejores.

A menudo, ver cómo otra persona ha codificado lo mismo, pero con un estilo diferente. Puedes aprender mucho.

P.S. Igor, gracias por tu trabajo.

 
En efecto, Andrei, no deberías tomarlo así. Que sea sencillo. Y no tengas miedo de empujarme hacia abajo. No me importará que contribuyas con algo a mi trabajo o que publiques el tuyo propio.
 

La función ArraySearchDouble().

Esta función busca un elemento del array utilizando un valor de tipo double y devuelve el índice del elemento encontrado o -1. La función sólo encuentra un elemento y detiene la búsqueda si el resultado es positivo.

  • m - La matriz en la que se busca el elemento.
  • e - Valor de tipo doble, que se encuentra en el array 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. Se adjunta un script para probar la función ArraySearchDouble().
Archivos adjuntos:
 

La función ArraySearchInt().

Esta función busca un elemento del array por un valor de tipo int y devuelve el índice del elemento encontrado o -1. La función sólo encuentra un elemento y detiene la búsqueda si el resultado es positivo.

  • m - La matriz de elementos de tipo int, en la que se realiza la búsqueda.
  • e - Valor de tipo int, que se encuentra en el 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. Se adjunta un script para probar la función ArraySearchInt().
Archivos adjuntos:
 

La función ArraySearchString().

Esta función busca en un elemento del array un valor de tipo cadena y devuelve el índice del elemento encontrado o -1. La función sólo encuentra un elemento y detiene la búsqueda si el resultado es positivo.

  • m - La matriz de elementos de tipo cadena, en la que se realiza la búsqueda.
  • e - El valor de tipo cadena, que se encuentra en la 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. Se adjunta un script para probar la función ArraySearchString().
Archivos adjuntos:
 
KimIV писал (а) >>
Efectivamente, Andrey, no deberías haberlo tomado así. >> ¡Sé simple! Y no tengas miedo de empujarme hacia abajo. No me importará si haces una contribución y corriges algo mío o publicas lo tuyo.

Vale, yo tengo una visión un poco diferente de las cosas, como ya he escrito, considero que la universalidad global es un mal, es decir, que el código debería estar al menos un poco personalizado para lo que estás escribiendo, para conseguir la máxima simplicidad y comodidad. Por eso no veo ningún sentido en publicar mi propio código aquí.


Puedo actuar como revisor de tu código, si no te importa, por supuesto, y ofrecer tu propia versión del mismo o simplemente dar comentarios.



SZZH: Gracias por su apoyo, para ser sincero no esperaba ese tipo de comentarios.

 
KimIV писал (а) >>

La función ArraySearchDouble().

Esta función busca un elemento del array utilizando un valor de tipo double y devuelve el índice del elemento encontrado o -1. La función sólo encuentra un elemento y detiene la búsqueda si el resultado es positivo.

  • m - La matriz en la que se busca el elemento.
  • e - El valor de tipo double, que se encuentra en el array m.
ZS. Se adjunta un script para probar la función ArraySearchDouble().

El doble es algo complicado, y su código puede funcionar incorrectamente en algunas situaciones.

Esta es una posible solución

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

Y si quieres hacer lo mismo pero desde el 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 писал (а)
Puedo actuar como revisor de tu código, si no te importa, por supuesto, y ofrecer mi propia versión del mismo o simplemente dar comentarios.
¡Genial! Es bueno para todos tener una visión versátil de las cosas. Yo, en primer lugar :-)
 

El otro día estaba escribiendo un EA en el que necesitaba cambiar el tamaño del lote en función del resultado de una operación anterior y del tamaño del lote de la misma operación. Y resultó que no tenía una función que devolviera el tamaño del lote de la última posición cerrada. Aquí hay una corrección...

La función GetLotLastClosePos().

Esta función devuelve el tamaño del lote de la última posición cerrada, o -1. La selección de las posiciones a tener en cuenta se define mediante parámetros externos:

  • sy - Nombre del instrumento de mercado. Si se establece este parámetro, la función sólo tendrá en cuenta las posiciones del instrumento especificado. El valor por defecto "" significa cualquier instrumento de mercado. El valor nulo significa el instrumento actual.
  • op - Operación comercial, tipo de posición. Valores válidos: OP_BUY, OP_SELL o -1. El valor por defecto -1 significa cualquier posición.
  • mn - Identificador de posición, MagicNumber. El valor por defecto -1 significa cualquier 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. Se adjunta un script para probar la función GetLastClosePos().
Archivos adjuntos: