Características úteis da KimIV - página 17

 

A função em si:


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. No trailer está um roteiro para testar a função Correlação().
Arquivos anexados:
 

Função GetIndexLastPos().

Esta função retorna o índice da última posição aberta ou -1. Uma seleção mais precisa das posições a serem verificadas é definida por parâmetros externos:

  • sy - Nome do instrumento de mercado. Se definirmos este parâmetro, a função considerará apenas as posições do instrumento especificado. O valor padrão "" significa qualquer instrumento de mercado. NULL significa o instrumento atual.
  • op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
  • mn - Identificador de posição, MagicNumber. O valor padrão -1 significa qualquer 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. Anexado um script para testar a função GetIndexLastPos().
Arquivos anexados:
 

A função GetLotLastPos().

Esta função retorna o tamanho do lote da última posição aberta ou -1. Uma seleção mais precisa das posições a serem verificadas é definida por parâmetros externos:

  • sy - Nome do instrumento de mercado. Se você definir este parâmetro, a função considerará apenas as posições do instrumento especificado. O valor padrão "" significa qualquer instrumento de mercado. NULL significa o instrumento atual.
  • op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor por default -1 significa qualquer posição.
  • mn - Identificador de posição, MagicNumber. O valor padrão -1 significa qualquer 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. Anexado um script para testar a função GetLotLastPos().
Arquivos anexados:
 
KimIV:

Função GetIndexLastPos().

Esta função retorna o índice da última posição aberta ou -1. Uma seleção mais precisa das posições a serem verificadas é especificada por parâmetros externos:

ZS. Anexado um script para testar a função GetIndexLastPos().

O que é o índice ? É um número de barra da última posição aberta? Ou algo mais?

 
rid писал (а):
O que é o índice? É o número de barra da última posição aberta? Ou algo mais?

Este é o número seqüencial da posição na lista de posições abertas e ordens definidas. A numeração começa de zero e é a mesma para posições e pedidos.

 

Caro Igor, por favor, me ajude. O problema é que não consigo encontrar em nenhum lugar o código de como anexar MA à CCI ou Stoch. O sinal de compra ou venda deve ser gerado quando este МА cruzar o nível da CCI, por exemplo, +100/-100.

Talvez haja um Expert Advisor que use o código que eu preciso?

 

Função GetMaxLotFromOpenPos().

Esta função retorna o tamanho máximo do lote a partir do número de posições abertas. Uma seleção mais precisa das posições a serem verificadas é especificada por parâmetros externos:

  • sy - Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do símbolo especificado. O valor padrão "" significa qualquer instrumento de mercado. NULL significa o instrumento atual.
  • op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
  • mn - Identificador de posição, MagicNumber. O valor padrão -1 significa qualquer 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. No trailer há um script para testar a função GetMaxLotFromOpenPos().
Arquivos anexados:
 

Função GetMinLotFromOpenPos().

Esta função retorna o tamanho mínimo do lote a partir do número de posições abertas. Uma seleção mais precisa das posições a serem verificadas é especificada por parâmetros externos:

  • sy - Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do símbolo especificado. O valor padrão "" significa qualquer instrumento de mercado. NULL significa o instrumento atual.
  • op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
  • mn - Identificador de posição, MagicNumber. O valor padrão -1 significa qualquer 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. Anexado um script para testar a função GetMinLotFromOpenPos().
Arquivos anexados:
 
GYL:

Caro Igor, por favor, me ajude. O problema é que não consigo encontrar em nenhum lugar o código de como anexar MA à CCI ou Stoch. O sinal de compra ou venda deve ser gerado quando este МА cruzar o nível da CCI, por exemplo, +100/-100.

Talvez haja um Expert Advisor que use o código que eu preciso?

Esta pergunta obviamente não é relevante. Vou dar um exemplo de tal fragmento de código usando exemplos estocásticos e MA para não distrair o 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. Eu manterei o posto por 24 horas - então eu o apagarei!

 
rid:
A questão é obviamente fora de tópico. Para não distrair Igor por trivialidades, darei um exemplo de tal código, usando estocástico e

MA. Vou manter este posto por 24 horas - depois vou apagá-lo!

Muito obrigado, você tem me ajudado muito.
Razão: