Funciones útiles de KimIV - página 17

 

La propia función:


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.05.2008                                                     |
//|  Описание : Возвращает корреляцию двух рядов.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений первого ряда                                        |
//|    y - массив значений второго ряда                                        |
//+----------------------------------------------------------------------------+
double Correlation(double& x[], double& y[]) {
  double co=0, sa=0, sb=0, sc=0, xs=0, ys=0;
  int    i, k=MathMin(ArraySize(x), ArraySize(y));

  if (k>0) {
    for (i=0; i<k; i++) {
      xs+=x[i]; ys+=y[i];
    }
    xs/=k; ys/=k;
    for (i=0; i<k; i++) {
      sa+=(x[i]-xs)*(y[i]-ys);
      sb+=(x[i]-xs)*(x[i]-xs);
      sc+=(y[i]-ys)*(y[i]-ys);
    }
    sb=MathSqrt(sb*sc);
    if (sb!=0) co=sa/sb;
  }
  return(co);
}
ZS. En el trailer hay un script para probar la función Correlation().
Archivos adjuntos:
 

Función GetIndexLastPos().

Esta función devuelve el índice de la última posición abierta o -1. Una selección más precisa de las posiciones a comprobar se define mediante parámetros externos:

  • sy - Nombre del instrumento de mercado. Si establecemos 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.
  • 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 - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetIndexLastPos(string sy="", int op=-1, int mn=-1) {
  datetime o;
  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=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                r=i;
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
ZS. Se adjunta un script para probar la función GetIndexLastPos().
Archivos adjuntos:
 

La función GetLotLastPos().

Esta función devuelve el tamaño del lote de la última posición abierta o -1. 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 tendrá en cuenta las posiciones del 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.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает размер лота последней открытой позиции или -1       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastPos(string sy="", int op=-1, int mn=-1) {
  datetime o;
  double   l=-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=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
  return(l);
}
ZS. Se adjunta un script para probar la función GetLotLastPos().
Archivos adjuntos:
 
KimIV:

Función GetIndexLastPos().

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

ZS. Se adjunta un script para probar la función GetIndexLastPos().

¿Qué es el índice? ¿Es un número de barra de la última posición abierta? ¿O algo más?

 
rid писал (а):
¿Qué es el índice? ¿Es el número de barra de la última posición abierta? ¿O algo más?

Es el número de secuencia de la posición en la lista de posiciones abiertas y órdenes fijas. La numeración empieza por cero y es la misma para las posiciones y las órdenes.

 

Querido Igor, por favor ayúdame. El problema es que no encuentro en ninguna parte el código de cómo adjuntar MA a CCI o Stoch. La señal de compra o venta debe generarse cuando este МА cruza el nivel del CCI, por ejemplo, +100/-100.

¿Tal vez hay un Asesor Experto que utiliza el código que necesito?

 

Función GetMaxLotFromOpenPos().

Esta función devuelve el tamaño máximo del lote a partir del número de posiciones abiertas. Una selección más precisa de las posiciones a comprobar 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 GetMaxLotFromOpenPos(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) {
              if (l<OrderLots()) l=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
ZS. En el trailer hay un script para probar la función GetMaxLotFromOpenPos().
Archivos adjuntos:
 

Función GetMinLotFromOpenPos().

Esta función devuelve el tamaño mínimo del lote a partir del número de posiciones abiertas. Una selección más precisa de las posiciones a comprobar 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 GetMinLotFromOpenPos(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) {
              if (l==0 || l>OrderLots()) l=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
HH. Se adjunta un script para probar la función GetMinLotFromOpenPos().
Archivos adjuntos:
 
GYL:

Querido Igor, por favor ayúdame. El problema es que no encuentro en ninguna parte el código de cómo adjuntar MA a CCI o Stoch. La señal de compra o venta debe generarse cuando este МА cruza el nivel del CCI, por ejemplo, +100/-100.

¿Quizás haya un Asesor Experto que utilice el código que necesito?

Es evidente que esta pregunta no es pertinente. Le daré un ejemplo de tal fragmento de código usando ejemplos estocásticos y MA para no distraer a Igor.

double Stochastic_array[50];int j=0; while (j<50) {
Stochastic_array[j]= iStochastic(NULL, 0, Stochastic_period, 3,3,
                                     MODE_SMA,0,MODE_MAIN, j); j++; }
ArraySetAsSeries(Stochastic_array,true);
double MA_0 =iMAOnArray(Stochastic_array,0,MA_period,1,MODE_SMA,0) ;
double Stochastic_0=iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN, 0);
double Stochastic_1=iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN, 1);

MA. Mantendré el post durante 24 horas - ¡luego lo borraré!

 
rid:
La pregunta está obviamente fuera de tema. Para no distraer a Igor con nimiedades le daré un ejemplo de un trozo de código de este tipo, usando estocástico y

MA. Mantendré este post durante 24 horas - ¡luego lo borraré!

Muchas gracias, me han ayudado mucho.