Funciones útiles de KimIV - página 10

 

¡Gracias KimIV!

 

Función DeleteOrders(). Versión de prueba.

La función DeleteOrders() sirve para eliminar las órdenes pendientes BuyLimit, BuyStop, SellLimit y SellStop. La función DeleteOrders() es universal, es decir, puede utilizarse para eliminar todas las órdenes pendientes ya colocadas, así como las específicas que cumplan las condiciones de selección establecidas mediante los parámetros de la función:

sy - Nombre del instrumento. Dado que en el probador sólo se puede negociar el símbolo actual, este parámetro no es relevante para la versión del probador y sólo es necesario para la compatibilidad con la versión en línea de esta función. Es mejor utilizar los valores "" o NULL en el probador. El valor por defecto "" significa cualquier símbolo.
op
- Tipo de operación comercial, tipo de orden pendiente. Es posible uno de los cinco valores: -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT o OP_SELLSTOP. El valor por defecto de -1 significa cualquier orden.
mn
- MagicNumber, número de identificación de la orden pendiente. Valor por defecto -1 - significa cualquier magik.

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 

Función DeleteOrders(). Versión en línea.


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 28.11.2006                                                      |
//| Описание : Удаление ордеров                                                |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента   ( ""  - любой символ,                    |
//|                                    NULL - текущий символ)                  |
//|   op - операция                   (  -1 - любой ордер)                     |
//|   mn - MagicNumber                (  -1 - любой магик)                     |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  bool fd;
  int err, i, it, k=OrdersTotal(), ot;
  
  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            for (it=1; it<=NumberOfTry; it++) {
              if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
              while (!IsTradeAllowed()) Sleep(5000);
              fd=OrderDelete(OrderTicket(), clDelete);
              if (fd) {
                if (UseSound) PlaySound(NameFileSound); break;
              } else {
                err=GetLastError();
                Print("Error(",err,") delete order ",GetNameOP(ot),
                      ": ",ErrorDescription(err),", try ",it);
                Sleep(1000*5);
              }
            }
          }
        }
      }
    }
  }
}
 

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


1. Borrar todos los pedidos:

DeleteOrders();
2. Eliminar todas las órdenes de BuyStop:
DeleteOrders(NULL, OP_BUYSTOP);

3. Eliminar todos los pedidos con la magia 123456:

DeleteOrders(NULL, -1, 123456);

ZY. En el tráiler hay un guión de trabajo con los mismos ejemplos.

Archivos adjuntos:
 
KimIV:

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

A este ritmo, nunca llegaremos a la biblioteca. Tendré que ir a la biblioteca después de todo. Si me invitas. No voy sin invitación.
 
Todo hombre tiene derecho a la izquierda... hee... Voy a divertirme un poco con esto

Ilnar, en el tema Órdenes pendientes en fractales, preguntó, ¿Cómo hacer órdenes pendientes en fractales?


Supongo que Ilnar tuvo alguna dificultad para detectar los niveles de precios de los fractales. Por eso sugiero utilizar mi función:


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 07.10.2006                                                      |
//| Описание : Поиск ближайшего фрактала.                                      |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента     (NULL - текущий символ)                |
//|   tf - таймфрейм                    (  0  - текущий ТФ)                    |
//|   mode - тип фрактала               (MODE_LOWER|MODE_UPPER)                |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
 
  for (s=2; s<100; s++) {
    f=iFractals(sy, tf, mode, s);
    if (f!=0) return(NormalizeDouble(f, d));
  }
  Print("FindNearFractal(): Фрактал не найден");
  return(0);
}
La función FindNearFractal() busca el fractal más cercano del tipo especificado en el símbolo especificado, en el marco temporal dado, y devuelve su nivel de precios. Conociendo el nivel de precios de la ubicación del fractal, ya es fácil establecer una orden a este nivel.
 
KimIV:
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
Pregunta... ¿Qué tiene que ver d con 0?
 
kharko:
KimIV:
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
Pregunta... ¿Qué tiene que ver d con 0?
No sé... Tuve un caso en mi consulta en el que era d=0. Tuve que realizar una comprobación para que fuera igual a cero. Desde entonces, he arrastrado este código a todas partes. Tal vez sea innecesario, pero creo que es mejor ser demasiado que demasiado poco.
 
Vinin:
KimIV:

Ejemplos de uso de DeleteOrders().

A este ritmo, nunca llegaremos a la biblioteca. Tendremos que ir a la biblioteca. Si me invitas. No voy sin invitación.

Vitek, ¿cuál es el problema? Claro, ven a cavar el jardín pronto... puedes ayudar...

 
KimIV:
Vinin:
KimIV:

Ejemplos de uso de DeleteOrders().

A este ritmo, nunca llegaremos a la biblioteca. Tendremos que ir a la biblioteca después de todo. Si me invitas. No voy sin invitación.

Vitek, ¿cuál es el problema? Claro, ven a cavar el jardín pronto... puedes ayudar...

No hay problema con el jardín, aunque no tengo la edad adecuada. Tal vez podríamos conseguir a alguien más joven para el trabajo. Iremos a los baños y tomaremos un poco de kvass (eres alérgico, yo también lo era). Veremos cómo trabajan los jóvenes. No sería serio.
Razón de la queja: