Caratteristiche utili da KimIV - pagina 17

 

La funzione stessa:


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. Nel trailer c'è uno script per testare la funzione Correlation().
File:
 

Funzione GetIndexLastPos().

Questa funzione restituisce l'indice dell'ultima posizione aperta o -1. Una selezione più accurata delle posizioni da controllare è definita da parametri esterni:

  • sy - Nome dello strumento di mercato. Se impostiamo questo parametro, la funzione considererà solo le posizioni dello strumento specificato. Il valore predefinito "" significa qualsiasi strumento di mercato. NULL significa lo strumento corrente.
  • op - operazione commerciale, tipo di posizione. Valori validi: OP_BUY, OP_SELL o -1. Il valore predefinito -1 significa qualsiasi posizione.
  • mn - Identificatore di posizione, MagicNumber. Il valore predefinito -1 significa qualsiasi identificatore.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. In allegato c'è uno script per testare la funzione GetIndexLastPos().
 

La funzione GetLotLastPos().

Questa funzione restituisce la dimensione del lotto dell'ultima posizione aperta o -1. Una selezione più accurata delle posizioni da controllare è definita da parametri esterni:

  • sy - Nome dello strumento di mercato. Se impostate questo parametro, la funzione considererà solo le posizioni dello strumento specificato. Il valore predefinito "" significa qualsiasi strumento di mercato. NULL significa lo strumento corrente.
  • op - operazione commerciale, tipo di posizione. Valori validi: OP_BUY, OP_SELL o -1. Il valore predefinito -1 significa qualsiasi posizione.
  • mn - Identificatore di posizione, MagicNumber. Il valore predefinito -1 significa qualsiasi identificatore.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. In allegato c'è uno script per testare la funzione GetLotLastPos().
File:
 
KimIV:

Funzione GetIndexLastPos().

Questa funzione restituisce l'indice dell'ultima posizione aperta o -1. Una selezione più accurata delle posizioni da controllare è specificata da parametri esterni:

ZS. In allegato c'è uno script per testare la funzione GetIndexLastPos().

Qual è l'indice? È un numero di barra dell'ultima posizione aperta? O qualcos'altro?

 
rid писал (а):
Qual è l'indice? È il numero della barra dell'ultima posizione aperta? O qualcos'altro?

Questo è il numero di sequenza della posizione nella lista delle posizioni aperte e degli ordini impostati. La numerazione parte da zero ed è la stessa per le posizioni e gli ordini.

 

Caro Igor, per favore aiutami. Il problema è che non riesco a trovare da nessuna parte il codice per collegare la MA al CCI o allo Stoch. Il segnale di acquisto o di vendita dovrebbe essere generato quando questo МА attraversa il livello CCI, ad esempio +100/-100.

Forse c'è un Expert Advisor che usa il codice di cui ho bisogno?

 

Funzione GetMaxLotFromOpenPos().

Questa funzione restituisce la dimensione massima del lotto dal numero di posizioni aperte. Una selezione più accurata delle posizioni da controllare è specificata da parametri esterni:

  • sy - Nome dello strumento di mercato. Se questo parametro è impostato, la funzione considererà solo le posizioni del simbolo specificato. Il valore predefinito "" significa qualsiasi strumento di mercato. NULL significa lo strumento corrente.
  • op - operazione commerciale, tipo di posizione. Valori validi: OP_BUY, OP_SELL o -1. Il valore predefinito -1 significa qualsiasi posizione.
  • mn - Identificatore di posizione, MagicNumber. Il valore predefinito -1 significa qualsiasi identificatore.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. Nel trailer c'è uno script per testare la funzione GetMaxLotFromOpenPos().
 

Funzione GetMinLotFromOpenPos().

Questa funzione restituisce la dimensione minima del lotto dal numero di posizioni aperte. Una selezione più accurata delle posizioni da controllare è specificata da parametri esterni:

  • sy - Nome dello strumento di mercato. Se questo parametro è impostato, la funzione considererà solo le posizioni del simbolo specificato. Il valore predefinito "" significa qualsiasi strumento di mercato. NULL significa lo strumento corrente.
  • op - operazione commerciale, tipo di posizione. Valori validi: OP_BUY, OP_SELL o -1. Il valore predefinito -1 significa qualsiasi posizione.
  • mn - Identificatore di posizione, MagicNumber. Il valore predefinito -1 significa qualsiasi identificatore.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. In allegato c'è uno script per testare la funzione GetMinLotFromOpenPos().
 
GYL:

Caro Igor, per favore aiutami. Il problema è che non riesco a trovare da nessuna parte il codice per collegare la MA al CCI o allo Stoch. Il segnale di acquisto o di vendita dovrebbe essere generato quando questo МА attraversa il livello CCI, ad esempio +100/-100.

Forse c'è un Expert Advisor che usa il codice di cui ho bisogno?

Questa domanda non è ovviamente pertinente. Vi darò un esempio di un tale frammento di codice usando esempi stocastici e MA per non distrarre 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. Terrò il post per 24 ore - poi lo cancellerò!

 
rid:
La domanda è ovviamente fuori tema. Per non distrarre Igor con sciocchezze vi darò un esempio di un tale pezzo di codice, usando stocastico e

MA. Terrò questo post per 24 ore - poi lo cancellerò!

Grazie mille, mi avete aiutato molto.