Funciones útiles de KimIV - página 20

 

Función GetTypeLastClosePos().

Esta función devuelve el tipo de la última posición cerrada o -1. Una selección más precisa 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. NULL significa el instrumento actual.
  • mn - identificador de posición, MagicNumber. El valor por defecto -1 significa cualquier identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней закрытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTypeLastClosePos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}
ZS. Se adjunta un script para probar la función GetTypeLastClosePos().
Archivos adjuntos:
 

Función GetTypeLastOpenPos().

Esta función devuelve el tipo de la última posición abierta o -1. Una selección más precisa de las posiciones a tener en cuenta se especifica mediante parámetros externos:

  • sy - Nombre del instrumento de mercado. Si 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. NULL significa el instrumento actual.
  • mn - identificador de posición, MagicNumber. El valor por defecto -1 significa cualquier identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней открытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTypeLastOpenPos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderOpenTime()) {
            t=OrderOpenTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}
ZS. Se adjunta un script para probar la función GetTypeLastOpenPos().
Archivos adjuntos:
 
KimIV:

Función OpenPosition() para la conexión.

      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
      

¿Qué significan los códigos de error 142 y 143?

Gracias.

 
zennon:

¿Qué significan los códigos de error 142 y 143?

142 - El pedido se ha puesto en cola.

143 - La orden ha sido aceptada por el distribuidor para su ejecución.

Para más información , consulte aquí.

 

El documento aconseja tratarlos como un error 128

si es posible, una o dos palabras sobre esto desde su punto de vista o posición...

 
kombat:

El documento aconseja tratarlos como un error 128

Si es posible, una o dos palabras sobre esto desde su punto de vista o posición...

Mi punto de vista está expresado en el código dado por Andrei dos posts más arriba.

 

Lo siento... lo vio, por supuesto...

No lo tengo muy claro.

Sleep(1000*66.666);

Aparte de eso, no sé... dormir...

Pero si y más allá, no tanto.

es decir, dormir, entonces si hay una posición, si tocamos una marcha.

-

Vale, si es una pregunta más floja, lo siento de nuevo, y puede quedar sin respuesta.

 
kombat писал (а):
Vale, si es una pregunta más floja, lo siento de nuevo, y lo dejaré así.

nah... vamos a resolverlo... ...un enfrentamiento profundiza el entendimiento... No entiendo lo que no entiendes. Plantee la cuestión en términos más sencillos y convencionales. ¿Le confunde el intervalo de hibernación? ¿Por qué exactamente 66 segundos?

 
KimIV:
¿Por qué exactamente 66 segundos?

¡No, eso no! No hay duda de que... ¡absolutamente!

Pero la acción lógica-secuencial posterior en este fragmento no es tan buena.

Digamos que obtenemos un código de error, dormimos, luego obtenemos un boolt, el Vals de Spoin suena si esta función está activada...

-

(maldición, faltan las colas de los mensajes, hay que repetirlas :(((

-

Me interesa mucho más cómo continuar lo que se ha empezado.

Es decir, más gestos comerciales: o bien la función se

O bien la función se desplaza hasta que se abre, o da el control a otra...

En el primer caso no está claro cómo "bucle", para llamar a "sí mismo" o ¿cómo?

 

Hmm... Todavía no lo entiendo. Dispararé al azar. Todo lo siguiente se aplicará a los errores 128, 142 y 143.

Si el error 128 no se gestiona de ninguna manera, se corre el riesgo de obtener dos posiciones abiertas idénticas en lugar de una. En dos años de operar con dos cuentas reales sólo he tenido un caso así. Las posiciones duplicadas se producen porque el servidor de negociación, por alguna razón, devolvió un mensaje al terminal sobre el vencimiento del tiempo de ejecución de la orden. Al terminal no se le negó el servicio. La operación puede seguir ejecutándose. Su ejecución acaba de retrasarse durante un tiempo "inaceptablemente" largo. Si envía otra solicitud después de este mensaje, tanto la solicitud retrasada como la nueva pueden ser ejecutadas. Para evitar esta situación, los desarrolladores aconsejan hacer una pausa de al menos un minuto y comprobar si se ha ejecutado la solicitud sobre la que el servidor de comercio ha enviado el mensaje retrasado. Si la respuesta es SÍ, hemos alcanzado nuestro objetivo: el puesto está abierto, si es NO, podemos repetir la solicitud. Así es como mi código maneja los errores 128, 142 y 143.