Funciones útiles de KimIV - página 16

 
KimIV:
khorosh:
hay un error en la función bool idPriceLevel() incluida en el Asesor Experto e-TFL_v2: gdUpPrice==0 se repite dos veces en la última condición, probablemente quiso escribir gdDnPrice==0 en el segundo caso.

Gracias. He subido la versión corregida de e-TFL_v2 al sitio web.


khorosh:
Por alguna razón este EA funciona en mi Probador de Estrategias en modo visual pero no abre posiciones en una cuenta demo, aunque reporta niveles de compra y venta en los comentarios. Tal vez pueda decirme cuál es el problema.

No sé... Acabo de terminar de probar este Asesor Experto en una demo de NorthFinance. Ayer llamé a mi amigo de Moscú. Se quejó del mismo Asesor Experto. Dice que abre posición por la línea y luego más y más hasta que lo paras y abre muchas posiciones. Por lo tanto, los objetivos de las pruebas eran dos:

1. Con respecto a su pregunta. Comprobación del funcionamiento general.

2. Sobre la pregunta de mi amigo. Abrí sólo una posición de una línea.

Para comprobarlo, puse el Asesor Experto e-TFL_v2 en los marcos de tiempo de 5 minutos EURUSD, GBPUSD, USDCHF y USDJPY. Utilizando las líneas de tendencia dibujé canales en las últimas 20-30 barras. Como resultado, el Asesor Experto funcionó como debería. El euro se ha comprado por la línea inferior, mientras que el yen se ha vendido por la superior. Para la libra y el chyf todo era correcto también. Así que deberías comprobarlo por tu cuenta. El Asesor Experto funciona.

KimIV:
khorosh:
La función idPriceLevel() en e-TFL_v2 tiene un error: en la última condición gdUpPrice==0 se repite dos veces. Probablemente, en el segundo caso se quiso escribir gdDnPrice==0.

Gracias. He subido la versión corregida de e-TFL_v2 al sitio web.


khorosh:
Por alguna razón este EA funciona en mi Probador de Estrategias en modo visual pero no abre posiciones en una cuenta demo, aunque reporta niveles de compra y venta en los comentarios. Tal vez pueda decirme cuál es el problema.

No sé... Acabo de terminar de probar este Asesor Experto en una demo de NorthFinance. Ayer me llamó mi amigo de Moscú. Se quejó del mismo Asesor Experto. Dice que abre posición por la línea y luego más y más hasta que lo paras y abre muchas posiciones. Por lo tanto, había dos objetivos para las pruebas:

1. Con respecto a su pregunta. Comprobación del funcionamiento general.

2. Sobre la pregunta de mi amigo. Abrí sólo una posición de una línea.

Para comprobarlo, puse el Asesor Experto e-TFL_v2 en los marcos de tiempo de 5 minutos EURUSD, GBPUSD, USDCHF y USDJPY. Utilizando las líneas de tendencia dibujé canales en las últimas 20-30 barras. Como resultado, el Asesor Experto funcionó como debería. El euro se ha comprado por la línea inferior, mientras que el yen se ha vendido por la superior. Para la libra y el chyf todo era correcto también. Así que deberías comprobarlo por tu cuenta. El Asesor Experto funciona.

Tal vez, no entiendo bien la lógica del EA, pero me parece que si se utiliza una línea, la condición en la que se produjo el error se cumplirá y idPriceLevel() establecerá False. Explícate, si me equivoco.

 
khorosh:

si se utiliza una sola línea, se cumplirá la condición en la que se produjo el error y idPriceLevel() se establecerá en False, y esto no abrirá la posición.

Sí, eso es correcto. El EA requiere dos líneas para su funcionamiento normal: una línea por encima del precio y la segunda línea por debajo del precio actual. He corregido la descripción en el sitio web. Gracias.

 
KimIV:
khorosh:

si se utiliza una sola línea, se cumplirá la condición en la que se produjo el error y idPriceLevel() se establecerá en False, y esto no abrirá la posición.

Sí, eso es correcto. El EA requiere dos líneas para su funcionamiento normal: una línea por encima del precio y la segunda línea por debajo del precio actual. He corregido la descripción en el sitio web. Gracias.

Por eso mi posición no se abrió, ya que trabajé con una línea. Ahora todo está claro. Gracias por su esfuerzo desinteresado. Sus funciones son muy claras y están claramente descritas. Tal vez la mayoría de nuestros EAs, que se están desarrollando ahora, utilizarán sus funciones.

 

Función ExistOPNearMarket().

Esta función devuelve un indicador de que existe una orden o posición cerca del mercado (a una distancia especificada en pips del mercado). Una selección más precisa de las órdenes o posiciones a comprobar se especifica mediante parámetros externos:

  • sy - Nombre del instrumento. Si se establece este parámetro, la función sólo comprobará las órdenes o posiciones del instrumento especificado. El "" o NULL significa el símbolo actual.
  • op - Operación comercial, orden o tipo de posición. Valores válidos: OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP o -1. El valor por defecto de -1 significa cualquier operación comercial.
  • mn - Identificador de la orden o posición (MagicNumber). El valor por defecto -1 significa cualquier identificador.
  • ds - Distancia del mercado en pips. El valor por defecto es 1000000.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг существования позиции или ордера около рынка   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    op - торговая операция               (    -1      - любая операция)     |
//|    mn - MagicNumber                     (    -1      - любой магик)        |
//|    ds - расстояние в пунктах от рынка   (  1000000   - по умолчанию)       |
//+----------------------------------------------------------------------------+
bool ExistOPNearMarket(string sy="", int op=-1, int mn=-1, int ds=1000000) {
  int i, k=OrdersTotal(), ot;

  if (sy=="" || sy=="0") sy=Symbol();
  double p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if ((OrderSymbol()==sy) && (op<0 || ot==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (ot==OP_BUY || ot==OP_BUYLIMIT || ot==OP_BUYSTOP) {
            if (MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())<ds*p) return(True);
          }
          if (ot==OP_SELL || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
            if (MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))<ds*p) return(True);
          }
        }
      }
    }
  }
  return(False);
}
SZZY. script adjunto para experimentar con la función ExistOPNearMarket().
Archivos adjuntos:
 

Función ExistPosByPrice().

Esta función devuelve un indicador de la existencia de una posición a un precio abierto determinado. Una selección más precisa de las posiciones a comprobar se define mediante parámetros externos:

  • sy - Nombre del instrumento de mercado. Si establece este parámetro, la función sólo comprobará las posiciones de un instrumento especificado. El valor por defecto "" significa cualquier instrumento de mercado. NULL significa el instrumento 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.
  • pp - Precio de apertura de la posición. El valor por defecto 0 significa cualquier precio.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг существования позиций по цене открытия         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pp - цена                       ( 0   - любая цена)                     |
//+----------------------------------------------------------------------------+
bool ExistPosByPrice(string sy="", int op=-1, int mn=-1, double pp=0) {
  double px, py;
  int    d, i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            d=MarketInfo(OrderSymbol(), MODE_DIGITS);
            px=NormalizeDouble(pp, d);
            py=NormalizeDouble(OrderOpenPrice(), d);
            if (pp<=0 || px==py) return(True);
          }
        }
      }
    }
  }
  return(False);
}
ZS. En el trailer hay un script para probar la función ExistPosByPrice().
Archivos adjuntos:
 

La función GetAmountLotFromOpenPos().

Esta función devuelve la suma de los lotes de las posiciones abiertas. 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 se establece este parámetro, la función sólo tendrá en cuenta las posiciones del símbolo especificado. El valor por defecto "" significa cualquier instrumento de mercado. NULL significa el instrumento 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                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();

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

La función GetIndexByTicket().

Esta función devuelve el índice de la orden o posición por ticket. La selección más precisa de las órdenes o posiciones a buscar se especifica mediante parámetros externos:

  • ti - Orden de entradas, posición. El valor de este parámetro no puede estar vacío ni ser cero.
  • sy - Nombre del instrumento de mercado. Si establece este parámetro, la función sólo tendrá en cuenta las posiciones del instrumento especificado. Valor por defecto - "" significa cualquier instrumento de mercado. NULL significa el instrumento actual.
  • op - Operación comercial, orden o tipo de posición. Valores válidos: OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP o -1. El valor por defecto de -1 significa cualquier posición.
  • mn - Identificador de posición, MagicNumber. El valor por defecto de -1 significa cualquier identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает индекс ордера или позиции по тикету.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ti - тикет ордера, позиции                                              |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetIndexByTicket(int ti, string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if ((mn<0 || OrderMagicNumber()==mn) && OrderTicket()==ti) return(i);
      }
    }
  }
  return(-1);
}
PS. Se adjunta un script para probar la función GetIndexByTicket().
Archivos adjuntos:
 

Hola

Me gustaría saber si tienen una función para determinar la correlación de dos series que se le pasan como parámetros?

 
scorpionk:

Hola

Me gustaría saber si tiene una función para determinar la correlación de las dos series que se le pasan como parámetros?

no... Pero tengo interés en este tema. Si me proporcionas las fórmulas para calcular la correlación, escribiré la función.


ZS. No voy a buscar las fórmulas yo mismo. Tampoco voy a ir a enlaces con materiales. Es decir, no tengo ningún deseo de entender el tema. Sólo existe el deseo de escribir una función utilizando fórmulas ya hechas.

 
KimIV:
scorpionk:

Hola

Me gustaría saber si tiene una función para determinar la correlación de las dos series que se le pasan como parámetros?

no... Pero tengo interés en este tema. Si usted proporciona las fórmulas para calcular la correlación, yo escribiré la función.


ZS. No voy a buscar las fórmulas yo mismo. Tampoco voy a ir a enlaces con materiales. Es decir, no tengo ningún deseo de entender el tema. Sólo hay deseo de escribir la función en las fórmulas listas.


Fórmula de correlación

Razón de la queja: