Funciones útiles de KimIV - página 66

 
borisych писал(а) >>

...

3. Aquí, la regresión se refiere a una ecuación de regresión lineal y a su gráfico.

Has preguntado por la pendiente de la ecuación de regresión. Te mostré que se puede calcular de otra manera. Si quieres lo que dices en el punto 3. Verás 'Funciones útiles de KimIV' hay 2 tipos de funciones, si necesitas un polinomio de una potencia mayor entonces usa este algoritmo 'Teoría de flujos aleatorios y FOREX'.

 

La función StrTran().

Esta función reemplaza una subcadena. Se sustituyen todas las apariciones de la misma. Por ejemplo, puede sustituir todas las comas por puntos o viceversa de un plumazo. La función StrSplit() devuelve la cadena resultante y acepta los siguientes parámetros obligatorios:

  • str - La cadena en la que se sustituye la subcadena strFrom.
  • strFrom - subcadena sustituida. Si la subcadena strFrom se encuentra en la cadena str, se sustituirá por la subcadena strTo.
  • strTo - Subcadena sustituida.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  описание : Замена подстроки                                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    str     - текстовая строка, в которой производится замена               |
//|    strFrom - заменяемая подстрока                                          |
//|    strTo   - заменяющая подстрока                                          |
//+----------------------------------------------------------------------------+
string StrTran(string str, string strFrom, string strTo) {
  int    n;
  string strOut="", strTemp;

  for ( n=0; n<StringLen( str); n++) {
    strTemp=StringSubstr( str, n, StringLen( strFrom));
    if ( strTemp== strFrom) {
      strOut=StringConcatenate( strOut, strTo);
      n= n+StringLen( strFrom)-1;
    } else strOut=StringConcatenate( strOut, StringSubstr( str, n, 1));
  }
  return( strOut);
}
 

Ejemplos de cómo utilizar la función StrTran().

  1. Sustitución de un punto decimal por una coma:
    string s=DoubleToStr(Close[1], Digits);
    Print( s);
    s= StrTran( s, ".", ",");
    Print( s);
  2. Eliminación de espacios
    string s="1 2 3 4 5 6 7 8";
    Print( s, " ", StrToInteger( s));
    s= StrTran( s, " ", "");
    Print( s, " ", StrToInteger( s));
  3. Sustitución de palabras
    string s="листья жёлтые весной";
    Print( s);
    s= StrTran( s, "весной", "осенью");
    Print( s);

Resultados de la ejecución de los ejemplos:

ZY. Se adjunta un script para probar la función StrTran().

Archivos adjuntos:
 

Lista de funciones actualizada:

Archivos adjuntos:
f_kimiv.rar  12 kb
 
zhuki писал(а) >>
..
Si me permiten sugerir Función que muestra cualquier cosa en el acceso directo de la barra de tareas .
Lo uso para monitorear los EAs en el trabajo sin abrir la terminal (muchas miradas indiscretas).

Para ello he creado un programa independiente para mi tiempo - http://www.miraxem.com/rqids.htm


La calculadora del operador de Forex calcula automáticamente el beneficio/pérdida actual en las posiciones abiertas y el beneficio/pérdida en el cierre parcial o el vuelco de una posición.

Cotizaciones y gráficos en tiempo real para 12 pares de divisas

Se muestra como una barra en la parte superior de todas las ventanas y muestra la cotización actual de los pares de divisas seleccionados, los puntos de beneficio/pérdida y un calendario de noticias con un temporizador que da una señal antes de los acontecimientos importantes.

 
KimIV писал(а) >>
ah... Bueno, si en principio, se podría utilizar un array pasado por referencia. Entonces el número de parámetros devueltos estaría limitado por el tamaño del array.

Ahh... ¿Cómo es eso?

"Los argumentos(parámetros formales) se pasan por valor, es decir, cada expresión xl, . . ., xn se calcula y el valor se pasa a la función...."
Ejemplo de la ayuda

int start()
  {
   double some_array[4]={0.3, 1.4, 2.5, 3.6};
   double a= linfunc( some_array, 10.5, 8);
   //...
  }
double linfunc(double x[], double a, double b)
  {
   return ( a* x[0] + b);
  }
Y si intentas asignar x[0]=999 a una función, se bloqueará en la compilación, según recuerdo.
'x' - array item cannot be assigned

 
KimIV писал(а) >>
[...]
Estas son las operaciones comerciales OP_BUY y OP_SELL, mientras que las órdenes son las operaciones comerciales OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT y OP_SELLSTOP a mi entender. Abro posiciones y pongo órdenes. ¿Y qué abres? La función NumberOfOrders() está diseñada para trabajar con pedidos.

En realidad, no debería haber ninguna diferencia. También debería funcionar con posiciones.
La función compara ot=OrderType
();

y OrderType()
"Devuelve el tipo de operación de la orden actualmente seleccionada. Puede ser uno de los siguientes valores:
OP_BUY - posición de compra,
OP_SELL - posición de venta,
...

 
diakin писал(а) >>
Ahh... ¿Cómo es eso?

Me refería literalmente a lo siguiente:

void start()
{
  double some_array[];
  string st="";
  linfunc( some_array);
  for (int i=0; i<ArraySize( some_array); i++)
  {
    st=StringConcatenate( st, "some_array[", i, "]=", some_array[ i], "\n");
  }
  Comment( st);
}
void linfunc(double& x[])
{
  ArrayResize( x, 7);
  for (int i=0; i<ArraySize( x); i++)
  {
    x[ i]=0.7*( i+0.1);
  }
}

diakin escribió >>
x' - el elemento de la matriz no puede ser asignado

en lugar de:

double linfunc(double x[], double a, double b)

tienes que

double linfunc(double& x[], double a, double b)
 
diakin писал(а) >>
En realidad, no debería haber ninguna diferencia. También debería funcionar con posiciones.

La división en posiciones y órdenes es artificial. Lo inventé yo para mi comodidad personal. Se basa en las siguientes diferencias:

1. El precio de apertura/fijación de una orden puede ser modificado (OrderOpenPrice()), mientras que la posición no puede ser modificada.

Una orden debe ser eliminada (OrderDelete()), mientras que una posición debe ser cerrada (OrderClose()).

3. Puede cambiar el tamaño del lote de la orden (comentario, número mágico) sin afectar al depósito. Elimine la orden antigua y establezca una nueva con el nuevo tamaño de lote (comentario, número mágico). Si hace lo mismo con la posición, habrá una pérdida igual al spread multiplicado por el tamaño del lote y el valor del punto.

4. Una orden tiene una duración, pero una posición no.

 
KimIV писал(а) >>

Me refería literalmente a lo siguiente:

en lugar de:

.

Gracias. Ahora sabré que también se puede hacer por referencia...

¿Por qué el MQLQL helper debe escribir en una sección que los parámetros se pasan por valor y en otra que "es posible pasarlos por referencia" ....?

¡oh!

En cuanto a las órdenes, he leído más a fondo cuál es el problema (>1 && <6), es decir, OP_BUY, OP_SELL no pertenecen aquí.

Por cierto, el número mágico no se puede cambiar a través de OrderModify(). ¿O me he vuelto a perder algo? ;-()

Razón de la queja: