Caratteristiche utili da KimIV - pagina 16

 
KimIV:
khorosh:
c'è un errore nella funzione bool idPriceLevel() inclusa in e-TFL_v2 Expert Advisor: gdUpPrice==0 è ripetuto due volte nell'ultima condizione, probabilmente volevi scrivere gdDnPrice==0 nel secondo caso.

Grazie! Ho caricato la versione corretta di e-TFL_v2 sul sito web.


khorosh:
Per qualche motivo questo EA funziona nel mio Strategy Tester in modalità visiva ma non apre posizioni su un conto demo, anche se riporta i livelli di acquisto e vendita nei commenti. Forse potete dirmi qual è il problema.

Non lo so... Ho appena finito di testare questo Expert Advisor su una demo di NorthFinance. Ieri mi ha chiamato il mio amico di Mosca. Si è lamentato dello stesso Expert Advisor. Dice che apre le posizioni in base alla linea e poi sempre di più fino a quando si ferma e apre molte posizioni. Pertanto, c'erano due obiettivi per i test:

1. Per quanto riguarda la sua domanda. Controllo della funzionalità generale.

2. Sulla domanda del mio amico. Ho aperto solo una posizione da una linea.

Per verificarlo, ho messo e-TFL_v2 Expert Advisor su timeframe a 5 minuti EURUSD, GBPUSD, USDCHF e USDJPY. Usando le linee di tendenza ho disegnato dei canali sulle ultime 20-30 barre. Di conseguenza, l'Expert Advisor ha funzionato come dovrebbe. L'EUR è stato comprato dalla linea inferiore, mentre lo JPY è stato venduto da quella superiore. Anche per la libbra e il chyf tutto era corretto. Quindi dovreste controllare da soli. L'Expert Advisor funziona.

KimIV:
khorosh:
La funzione idPriceLevel() in e-TFL_v2 ha un errore: nell'ultima condizione gdUpPrice==0 è ripetuta due volte. Probabilmente, nel secondo caso volevi scrivere gdDnPrice==0.

Grazie! Ho caricato la versione corretta di e-TFL_v2 sul sito web.


khorosh:
Per qualche motivo questo EA funziona nel mio Strategy Tester in modalità visiva ma non apre posizioni su un conto demo, anche se riporta i livelli di acquisto e vendita nei commenti. Forse potete dirmi qual è il problema.

Non lo so... Ho appena finito di testare questo Expert Advisor su una demo di NorthFinance. Ieri mi ha chiamato il mio amico di Mosca. Si è lamentato dello stesso Expert Advisor. Dice che apre le posizioni in base alla linea e poi sempre di più fino a quando si ferma e apre molte posizioni. Pertanto, c'erano due obiettivi per i test:

1. Per quanto riguarda la sua domanda. Controllo della funzionalità generale.

2. Sulla domanda del mio amico. Ho aperto solo una posizione da una linea.

Per verificarlo, ho messo e-TFL_v2 Expert Advisor su timeframe a 5 minuti EURUSD, GBPUSD, USDCHF e USDJPY. Usando le linee di tendenza ho disegnato dei canali sulle ultime 20-30 barre. Di conseguenza, l'Expert Advisor ha funzionato come dovrebbe. L'EUR è stato comprato dalla linea inferiore, mentre lo JPY è stato venduto da quella superiore. Anche per la libbra e il chyf tutto era corretto. Quindi dovreste controllare da soli. L'Expert Advisor funziona.

Forse non ho capito bene la logica dell'EA, ma mi sembra che se si usa una linea, la condizione in cui si è verificato l'errore sarà soddisfatta e idPriceLevel() imposterà False. Spiega, se mi sbaglio.

 
khorosh:

se si usa una sola linea, la condizione in cui si è verificato l'errore sarà soddisfatta e idPriceLevel() sarà impostato su False, e questo non aprirà la posizione.

Sì, è corretto. L'EA richiede due linee per il suo normale funzionamento: una linea è sopra il prezzo e la seconda linea è sotto il prezzo corrente. Ho corretto la descrizione sul sito web. Grazie!

 
KimIV:
khorosh:

se si usa una sola linea, la condizione in cui si è verificato l'errore sarà soddisfatta e idPriceLevel() sarà impostato su False, e questo non aprirà la posizione.

Sì, è corretto. L'EA richiede due linee per il suo normale funzionamento: una linea è sopra il prezzo e la seconda linea è sotto il prezzo corrente. Ho corretto la descrizione sul sito web. Grazie!

Ecco perché la mia posizione non si è aperta, dato che ho lavorato con una sola linea. Ora è tutto chiaro. Grazie per i vostri sforzi disinteressati. Le tue funzioni sono molto chiare e descritte chiaramente. Forse la maggior parte dei nostri EA, che sono in fase di sviluppo ora, utilizzeranno le vostre funzioni.

 

Funzione ExistOPNearMarket().

Questa funzione restituisce un flag che un ordine o una posizione esiste vicino al mercato (ad una distanza specificata in pip dal mercato). Una selezione più accurata degli ordini o delle posizioni da controllare è specificata da parametri esterni:

  • sy - Nome dello strumento. Se questo parametro è impostato, la funzione controllerà solo gli ordini o le posizioni dello strumento specificato. Il "" o NULL significa il simbolo corrente.
  • op - Operazione di trading, ordine o tipo di posizione. Valori validi: OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP o -1. Il valore predefinito di -1 significa qualsiasi operazione commerciale.
  • mn - Identificatore dell'ordine o della posizione (MagicNumber). Il valore predefinito -1 significa qualsiasi identificatore.
  • ds - Distanza dal mercato in pip. Il valore predefinito è 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. allegato script per esperimenti con la funzione ExistOPNearMarket().
 

Funzione ExistPosByPrice().

Questa funzione restituisce un flag per l'esistenza di una posizione ad un dato prezzo aperto. Una selezione più accurata delle posizioni da controllare è definita da parametri esterni:

  • sy - Nome dello strumento di mercato. Se si specifica questo parametro, la funzione controllerà solo le posizioni di uno 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.
  • pp - Prezzo aperto della posizione. Il valore predefinito 0 significa qualsiasi prezzo.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. Nel trailer c'è uno script per testare la funzione ExistPosByPrice().
 

La funzione GetAmountLotFromOpenPos().

Questa funzione restituisce la somma dei lotti di posizioni aperte. Una selezione più accurata delle posizioni da prendere in considerazione è 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 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. In allegato c'è uno script per testare la funzione GetAmountLotFromOpenPos().
 

Funzione GetIndexByTicket().

Questa funzione restituisce l'indice dell'ordine o della posizione per biglietto. La selezione più accurata degli ordini o delle posizioni da cercare è specificata da parametri esterni:

  • ti - Ordine del biglietto, posizione. Il valore di questo parametro non può essere vuoto o zero.
  • sy - Nome dello strumento di mercato. Se impostate questo parametro, la funzione considererà solo le posizioni dello strumento specificato. Valore predefinito - "" significa qualsiasi strumento di mercato. NULL significa lo strumento corrente.
  • op - Operazione di trading, ordine o tipo di posizione. Valori validi: OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP o -1. Il valore predefinito di -1 significa qualsiasi posizione.
  • mn - Identificatore di posizione, MagicNumber. Il valore predefinito di -1 significa qualsiasi identificatore.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. In allegato c'è uno script per testare la funzione GetIndexByTicket().
 

Ciao

Vorrei sapere se avete una funzione per determinare la correlazione di due serie passate come parametri?

 
scorpionk:

Ciao

Vorrei sapere se avete una funzione per determinare la correlazione delle due serie passate come parametri?

no... Ma ho un interesse per questo argomento. Se fornite le formule per calcolare la correlazione, scriverò la funzione.


ZS. Non cercherò le formule da solo. Nemmeno io andrò ai link con i materiali. Cioè, non ho alcun desiderio di capire l'argomento. C'è solo il desiderio di scrivere una funzione usando formule già pronte.

 
KimIV:
scorpionk:

Ciao

Vorrei sapere se avete una funzione per determinare la correlazione delle due serie passate come parametri?

no... Ma ho un interesse per questo argomento. Se fornite le formule per calcolare la correlazione, scriverò la funzione.


ZS. Non cercherò le formule da solo. Nemmeno io andrò ai link con i materiali. Cioè, non ho alcun desiderio di capire l'argomento. C'è solo il desiderio di scrivere la funzione sulle formule pronte.


Formula di correlazione