Funciones útiles de KimIV - página 23

 

La función NumberOfBarCloseLastPos().

Esta función devuelve el número de cierre de barra de la última posición 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 de este instrumento. El valor por defecto - NULL significa el instrumento de mercado actual.
  • tf - Marco temporal. El valor por defecto 0 significa el marco temporal 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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal();

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

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

La función DeleteOrders() está diseñada para eliminar las órdenes pendientes BuyLimit, BuyStop, SellLimit y SellStop. 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. El valor por defecto -1 significa cualquier magik.

Hola. En la página 10 se ha configurado la aplicación de esta función.

Lo he aplicado en mi Expert Advisor para eliminar las órdenes pendientes. O más bien, quería utilizarlo. He colocado la función fuera de la sección de inicio de int

Lo he pegado.

if (isCloseLastPosByTake(NULL,OP_BUY, My order Buy ))   {
              DeleteOrders(NULL, -1,  My order Sell);   }

Pero al compilar, obtengo un error

'clDelete' - variable no definida C:{Archivos de programa\MetaTrader - Alpari\experts\5.mq4 (1155, 40)

¿Cómo puedo eliminar este error?

Y cuando uso la función ClosePositions() - Cerrarposiciones a precio de mercado, todo va bien - ¡sin errores!

/ incluso si sólo inserto la función DeleteOrders y no la aplico todavía - ¡este error sigue compilando!

 
Rita писал (а):
Pero al compilarlo se obtiene un error
'clDelete' - variable no definida C:\N-Archivos de Programa\N-MetaTrader - Alpari\experts\5.mq4 (1155, 40)
¿Cómo puedo eliminar este error? ¿Qué es este 'clDelete'?

Allí, en la página 10 del archivo adjunto está el archivo test_DeleteOrders.mq4

Descárgalo y busca cualquier referencia a clDelete en él.

 

Lo he descargado y lo he visto. ¿Y qué? Resulta que todo lo que tenía que hacer era establecer el color del icono de cierre.

Pero ahora no está bien de nuevo. Ahora ese error ha desaparecido. Pero ha aparecido otro error -en la función ClosePositions()- que no habíamos visto antes.

if (L_2Sell==true)                 {  
        ClosePositions(NULL, -1,Magic);
                                      }

ClosePosBySelect' - la función no está definida C:\N-Archivos de Programa\N-MetaTrader - Alpari\experts\0005.mq4 (905, 47)
Y no hay ningún script cerca (p. 14) para comprobar

¿Pueden decirme cómo solucionar este error?

 
Rita писал (а):
ClosePosBySelect' - la función no está definida C:\N-Archivos de programa\N-MetaTrader - Alpari\experts\0005.mq4 (905, 47)

Este error significa que ClosePosBySelect() no está definido.

Rita escribió (a):
¿Pueden decirme cómo solucionar este error?
Encuentra el código de la función ClosePosBySelect() y pégalo en el archivo de tu EA. Consulte la página 13.
 

Siento molestarle de nuevo. He puesto la función ClosePositions() que has especificado junto a ClosePosBySelect(), ¡y han aparecido seis errores tras la compilación! Me siento enfadado.

Yo mismo he tratado con cuatro de ellos. Deslizamiento, color, número de intentos cercanos....Se mantienen dos errores, -

archivos de sonido -

'UseSound' - variable no definida C:\N-Archivos de Programa\N-MetaTrader - Alpari\experts\5.mq4 (1002, 13)

NameFileSound' - variable no definida C:³ Files\MetaTrader - Alpari\experts\0005.mq4 (1002, 33)

¿De dónde lo saco? ¿Dónde los pongo?

Bueno extern bool UseSound = false;//Desactivar

Lo pondré en PROPIEDADES DE EXPERTOS pero ¿qué es NameFileSound' y dónde lo cojo?

**************************************************************************

Lo encontré y lo puse en global.

extern bool UseSound = false;//выключатель звука
extern string NameFileSound="alert.wav";

Y entonces, en lugar de un error, el compilador arrojó 4 más:

'GetNameOP' - la función no está definida

'ErrorDescription' - la función no está definida

'else' - token inesperado

'GetNameOP' - la función no está definida

Parece que estos errores no cesan de aparecer. Para utilizar una función ClosePositions(), tuve que crear primero otra - ClosePosBySelect(). Y el otro, a su vez, requiere algunos sonidos: campanas y silbatos. Y cuando estoy luchando por encontrar estas campanas y timbres totalmente innecesarios, obtengo todo tipo de errores extraños -'else'- token inesperado y otros errores. Todavía no he empezado a utilizar esta función. ¡Sólo lo he puesto entre otros!

¿Pueden decirme cómo puedo solucionar estos errores? He comentado todos estos GetNameOP. Los errores parecen haber desaparecido. ¿Pero la función funcionará bien sin ellos?

 
Rita писал (а):
Y aquí en vez de un error el compilador arrojó 4 más:
'GetNameOP' - la función no está definida

En la primera página del archivo adjunto testrSetOrder.mq4

Rita escribió:
ErrorDescription' - la función no está definida

En el código de su EA inserte la siguiente línea

#include <stdlib.mqh>.

Rita escribió:
'else' - token inesperado
Al hacer lo descrito anteriormente, el error desaparecerá por sí solo.
 

La función NumberOfBarOpenLastPos().

Esta función devuelve el número de barra de la última posición abierta o -1. La selección de posiciones a tener en cuenta se especifica 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 - NULL significa el instrumento de mercado actual.
  • tf - Marco temporal. El valor por defecto 0 significa el marco temporal 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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

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