Funciones útiles de KimIV - página 63

 
KimIV >> :

no fue... escribió...

La función ClosePosBySortLots().

Esta función cierra las posiciones en orden de clasificación por tamaño de lote. Es decir, con esta función se pueden cerrar posiciones en orden ascendente o descendente de los tamaños de los lotes. La función ClosePosBySortLots() acepta los siguientes parámetros opcionales:

  • sy - Nombre del instrumento de negociación. "" - cualquier instrumento, NULL - instrumento actual. El valor por defecto es "".
  • op - Tipo de operación comercial. Valores válidos -1 - cualquier posición, OP_BUY - comprar, OP_SELL - vender. El valor por defecto es -1.
  • mn - MagicNumber, identificador único de la operación comercial. Valor por defecto -1 - cualquier número mágico.
  • sd - Dirección de clasificación del tamaño del lote. Valores válidos MODE_ASCEND - ascendente, MODE_DESCEND - descendente. El valor por defecto es MODE_DESCEND.

SZY. Se adjunta un script para probar la función ClosePosBySortLots().

Muchas gracias Igor. Rezaré por ti:-)

 

Privat

rsi

Gracias por los ejemplos.

Descifra esto si no te importa:

var=Close[0]
¿Qué hace?
 

er... para aquí... Lo siento... borrar... La creatividad siempre es bienvenida.

y tomar el enlace a las funciones del archivo adjunto...

Archivos adjuntos:
f_kimiv.rar  12 kb
 
WroC писал(а) >>

Por favor, descifra esto si no es difícil :

var=Cerrar[0]

¿Con qué quieres comerlo?

A la variable llamada var se le asigna el valor del nivel de precio del cierre de la barra actual (número cero). Pero como la barra actual aún no ha terminado, Close[0] es lo mismo que Bid, es decir, el precio actual.

 

KimIV


Y seguí tratando de usar de alguna manera marketinfo resulta ser aún más simple ....

 
if ( ExistPositions(NULL, OP_BUY, Magic)) {
 po= PriceOpenLastPos(NULL, OP_BUY, Magic);
 if (! ExistOrders (NULL, OP_SELLSTOP, Magic+1)
 && ! ExistPositions(NULL, OP_SELL , Magic+1)) {
 pp= po- offSet*Point;
 if ( StopLoss>0) sl= pp+ StopLoss*Point; else sl=0;
 if ( TakeProfit>0) tp= pp- TakeProfit*Point; else tp=0;
 SetOrder(NULL, OP_SELLSTOP, ll, pp, sl, tp, Magic+3);

Buenas tardes.
Igor, ¿tienes una función para implementar tácticas de bloqueo?
En la página 45 se da un ejemplo que podría usarse para esto.

Pero este enfoque limita el número de órdenes abiertas a 1.
Si miramos el ejemplo, se vería así
LockStep=20 de la posición abierta
LockStopLoss=10
1500 - open Buy\1480 - open sellstop

1470 - open buy\1450 - open sellstop

1460 - close sellstop 1450\open sellstop 1450
1490 - close sellstop 1480\opensellstop 1450
la función dada abrirá dos órdenes sellstop 1450

P.D. Muchas gracias por su trabajo. La verdad es que hay mucha información y es muy útil, la he tenido en cuenta en su mayoría.



 
demsan писал(а) >>
Igor, ¿tienes una función para implementar tácticas de bloqueo?

No, no hay ninguna función separada. Así que hay que combinar los existentes y quizá añadir algunos propios. Te aconsejo que organices la siguiente conexión: un par Buy/SellStop - un mago. Siguiente pareja - siguiente mago y así sucesivamente.

 

La función StringLower().

Esta función convierte una cadena en minúsculas. Todos los caracteres SIGNIFICATIVOS (grandes) se convierten en minúsculas. La función StringLower() sólo acepta un parámetro obligatorio: la cadena de entrada.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в нижнем регистре                            |
//+----------------------------------------------------------------------------+
string StringLower(string s) {
  int c, i, k=StringLen( s), n;
  for ( i=0; i< k; i++) {
    n=0;
    c=StringGetChar( s, i);
    if ( c>64 && c<91) n= c+32;     // A-Z -> a-z
    if ( c>191 && c<224) n= c+32;   // А-Я -> а-я
    if ( c==168) n=184;            //  Ё  ->  ё
    if ( n>0) s=StringSetChar( s, i, n);
  }
  return( s);
}

SZY. Se adjunta un script para probar la función StringLower().

Archivos adjuntos:
 

La función StringUpper().

Esta función convierte la cadena en mayúsculas. Todos los caracteres en minúscula (pequeños) se convierten en mayúsculas (grandes). La función StringUpper() sólo acepta un parámetro obligatorio: la cadena de entrada.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в ВЕРХНЕМ регистре                           |
//+----------------------------------------------------------------------------+
string StringUpper(string s) {
  int c, i, k=StringLen( s), n;
  for ( i=0; i< k; i++) {
    n=0;
    c=StringGetChar( s, i);
    if ( c>96 && c<123) n= c-32;    // a-z -> A-Z
    if ( c>223 && c<256) n= c-32;   // а-я -> А-Я
    if ( c==184) n=168;            //  ё  ->  Ё
    if ( n>0) s=StringSetChar( s, i, n);
  }
  return( s);
}

ZS. Se adjunta un script para probar StringUpper().

Archivos adjuntos:
 

La función StringToArrayDouble().

Esta función divide la cadena en números reales, y cada número se añade a la matriz como un elemento separado. Se añadirán a la matriz tantos números reales como aparezcan en la cadena, el mismo número de elementos. El punto y coma se reconoce como un separador. La función StringToArrayDouble() devuelve el número de elementos del array, y toma los siguientes parámetros obligatorios:

  • st - Una cadena de números reales separados por un punto y coma.
  • ad - Matriz de números reales.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.10.2008                                                     |
//|  Описание : Перенос вещественных чисел из строки в массив                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    st - строка вещественных чисел через точку с запятой                    |
//|    ad - массив вещественных чисел                                          |
//+----------------------------------------------------------------------------+
//|  Возврат:                                                                  |
//|    Количество элементов в массиве                                          |
//+----------------------------------------------------------------------------+
int StringToArrayDouble(string st, double& ad[]) {
  int    i=0, np;
  string stp;

  ArrayResize( ad, 0);
  while (StringLen( st)>0) {
    np=StringFind( st, ";");
    if ( np<0) {
      stp= st;
      st="";
    } else {
      stp=StringSubstr( st, 0, np);
      st=StringSubstr( st, np+1);
    }
    i++;
    ArrayResize( ad, i);
    ad[ i-1]=StrToDouble( stp);
  }
  return(ArraySize( ad));
}

ZS. Se adjunta un script para probar la función StringToArrayDouble().

Archivos adjuntos:
Razón de la queja: