Funciones útiles de KimIV - página 53

 
KimIV >> :

Función IIFc().

...

¿Intentar hacer un operador ternario que falta?

Anotación, gracias, con mi costumbre de poner corchetes siempre que puedo, me será muy útil.

 
CMEPTHiK писал (а) >>
Estaba leyendo el libro de V.Yakimkin. "Mercado de divisas - su camino al éxito" y se encontró con tales líneas "...diferencial de (DJI x Nikkei)..." Dime Igor, es posible implementar y salida en forma de indicador...

El diferencial es la velocidad que muestra el indicador ROC.

 

Igor, ¿no tienes una función en tu escondite para cerrar todas las posiciones a la vez, incluyendo el cierre con posiciones contrarias en mente?

Es decir, cerrar primero todas las posiciones contrarias, en la medida de lo posible, teniendo en cuenta el desajuste de los lotes de las posiciones contrarias, luego las perdedoras, las rentables...

 
alexx_v писал(а) >>

Igor, ¿tienes una función en tu almacén para cerrar todas las posiciones a la vez, incluyendo el cierre con posiciones contrarias en mente?

Es decir, cerrar primero todas las posiciones contrarias, en la medida de lo posible, teniendo en cuenta el desajuste de lotes de posiciones contrarias, luego las perdedoras, las rentables...

No, todavía no lo tengo.

 

La función ExistInHistoryCloseBetween().

Devuelve un indicador de la existencia en el historial de una posición u orden cerrada (borrada) entre fechas. La función ExistInHistoryCloseBetween() recibe los siguientes parámetros:

  • sy - Nombre del instrumento de mercado. "" - cualquier símbolo, NULL - símbolo actual. El valor por defecto es "".
  • op - Operación comercial. Valores válidos: -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP. Valor por defecto -1 - cualquier operación.
  • mn - Identificador de las operaciones comerciales, MagicNumber. Valor por defecto -1 - cualquier número mágico.
  • d1 - Hora de cierre de la posición (pendiente de borrar la orden). El valor por defecto es 0 - cualquier hora de cierre (borrar). El tiempo d1 debe ser más corto que d2.
  • d2 - Hora de cierre de la posición (pendiente de eliminar la orden). Valor por defecto - 0 - cualquier tiempo de cierre (borrado). El tiempo d2 debe ser mayor que el tiempo d1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : закрытой (удалённого) между датами.                            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая операция)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время закрытия             ( 0   - любое время закрытия)           |
//|    d2 - время закрытия             ( 0   - любое время закрытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryCloseBetween(string sy="", int op=-1, int mn=-1,
                                datetime d1=0, datetime d2=0) {
  int i, k=OrdersHistoryTotal();

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()== sy || sy=="") && ( op<0 || OrderType()== op)) {
        if ( mn<0 || OrderMagicNumber()== mn) {
          if ( d1<=OrderCloseTime() && ( d2==0 || d2>=OrderCloseTime())) return( True);
        }
      }
    }
  }
  return( False);
}
 

Ejemplos de uso de ExistInHistoryCloseBetween().

  1. Presencia de posiciones cerradas ayer u órdenes borradas ayer con MagicNumber=0 por el símbolo del gráfico actual.
    datetime d1=iTime(NULL, PERIOD_D1, 1);
    datetime d2=iTime(NULL, PERIOD_D1, 0)-1;
    Message( IIFs( ExistInHistoryCloseBetween(NULL, -1, -1, d1, d2), "Есть", "Нет"));
  2. Presencia de posiciones u órdenes cerradas (borradas) en las últimas tres horas.
    datetime d1=TimeCurrent()-3*60*60;
    Message(IIFs(ExistInHistoryCloseBetween("", -1, -1, d1), "Есть", "Нет"));
  3. Si se ha cerrado o no una compra en euros en los últimos 5 minutos.
    datetime d1=TimeCurrent()-5*60;
    Message( IIFs( ExistInHistoryCloseBetween("EURUSD", OP_BUY, -1, d1), "Да", "Нет"));

P.D. Se adjunta un script para probar la función ExistInHistoryCloseBetween().

Archivos adjuntos:
 

La función ExistInHistoryOpenBetween().

Devuelve un indicador de la existencia en el historial de una posición u orden abierta (establecida) entre fechas. La función ExistInHistoryOpenBetween() acepta los siguientes parámetros:

  • sy - Nombre del instrumento. "" - cualquier carácter, NULL - el símbolo actual. El valor por defecto es "".
  • op - Operación comercial. Valores válidos: -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP. Valor por defecto -1 - cualquier operación.
  • mn - Identificador de las operaciones comerciales, MagicNumber. Valor por defecto -1 - cualquier número mágico.
  • d1 - Tiempo de apertura de la posición (pendiente de colocar la orden). El valor por defecto es 0 - cualquier tiempo de apertura (ajuste). El tiempo d1 debe ser menor que el tiempo d2.
  • d2 - Hora de apertura de la posición (pendiente de colocar la orden). El valor por defecto es 0 - cualquier tiempo de apertura (establecido). El tiempo d2 debe ser mayor que el tiempo d1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : открытой (установленного) между датами.                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время открытия             ( 0   - любое время открытия)           |
//|    d2 - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryOpenBetween(string sy="", int op=-1, int mn=-1,
                               datetime d1=0, datetime d2=0) {
  int i, k=OrdersHistoryTotal();

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()== sy || sy=="") && ( op<0 || OrderType()== op)) {
        if ( mn<0 || OrderMagicNumber()== mn) {
          if ( d1<=OrderOpenTime() && ( d2==0 || d2>=OrderOpenTime())) return( True);
        }
      }
    }
  }
  return( False);
}
 

¡Buenas tardes!

Igor, podrías decirme cómo pintar la barra en el color que quiero.

Te lo diré desde el principio. Estoy escribiendo un indicador para el comercio zonal - la cuarta dimensión del mercado B de Williams. Necesito que las barras sean de color verde, rojo o gris.

Escribí un indicador y esto es lo que obtuve:

Esto no es lo que quiero. Cómo hacer que una barra sea de color en el centro. Estoy utilizando un rectángulo con dos coordenadas como método de sombreado. Ahí es donde tengo todo el problema, cómo elegir las coordenadas del inicio y del final del rectángulo.

Por favor, dame una pista.

Este es el código del indicador.

Archivos adjuntos:
zonetrade.mq4  6 kb
 
Duke3D писал(а) >>
Igor, ¿podrías decirme cómo sombrear una barra en el color que quiero?
...
Cómo hacer que una barra se sombree exactamente en el centro
.

Echa un vistazo al indicador Heiken Ashi. Su código fuente está incluido en MetaTrader 4.

 

Función ExistInHistoryToDay().

Devuelve el indicador de existencia en el historial de una posición u orden abierta (establecida) hoy. La función ExistInHistoryToDay() recibe los siguientes parámetros:

  • sy - Nombre del instrumento. "" - cualquier símbolo, NULL - el símbolo actual. El valor por defecto es "".
  • op - Operación comercial. Valores válidos: -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP. Valor por defecto -1 - cualquier operación.
  • mn - Identificador de las operaciones comerciales, MagicNumber. Valor por defecto -1 - cualquier magik.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.08.2008                                                     |
//|  Описание : Возвращает флаг наличия ордера или позиции в истории за сегодня|
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool ExistInHistoryToDay(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersHistoryTotal();

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()== sy || sy=="") {
        if ( op<0 || OrderType()== op) {
          if ( mn<0 || OrderMagicNumber()== mn) {
            if (TimeDay  (OrderOpenTime())==Day()
            &&  TimeMonth(OrderOpenTime())==Month()
            &&  TimeYear (OrderOpenTime())==Year()) return( True);
          }
        }
      }
    }
  }
  return( False);
}
Razón de la queja: