Caratteristiche utili da KimIV - pagina 115

 

Ciao Andrey!

  1. Ci sono già tre funzioni per il prezzo di apertura:
  2. Ci sono anche funzioni per i biglietti. Ce ne sono due:
Andrey, queste funzioni hanno tutto quello che ti serve, tranne la selezione per dimensione del lotto. Nel prossimo futuro realizzerò altre funzioni in cui il prezzo aperto e il biglietto possono essere ottenuti per dimensione del lotto.

 
KimIV:

Ciao Andrey!

  1. Ci sono già tre funzioni per il prezzo di apertura:
  2. Ci sono anche funzioni per i biglietti. Ce ne sono due:
Andrey, queste funzioni hanno tutto quello che ti serve, tranne la selezione per dimensione del lotto. Nel prossimo futuro realizzerò altre funzioni in cui il prezzo aperto e il biglietto possono essere ottenuti per dimensione del lotto.
Forse, sono ridondanti per me e devo sbarazzarmi di condizioni inutili, come: prezzo della prossima posizione aperta, ultima posizione aperta, più vicina al mercato. E non sempre si rivela corretto. Inoltre, la comprensione di tutte queste sottigliezze sarà più veloce se le confrontiamo correttamente. Grazie, non vedo l'ora.
 

La funzione GetOpenPriceByLot().

Questa funzione restituisce il prezzo di apertura di una posizione o di un ordine per dimensione del lotto. La selezione 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 dello strumento specificato. Il valore predefinito"" significa qualsiasi strumento di mercato. Il valorenullo indica lo strumento corrente.
  • op- Operazione di trading, posizione o tipo di ordine. Valori validi:OP_BUY,OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP o-1. Il valore predefinito di-1 significa qualsiasi operazione commerciale.
  • mn- Identificatore di una posizione o di un ordine, MagicNumber. Il valore predefinito di-1 significa qualsiasi identificatore.
  • lo- Lotto. Il valore predefinito0 significa qualsiasi lotto.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает цену открытия позиции или ордера по размеру лота.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
double GetOpenPriceByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  double p=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=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((op<0 || OrderType()==op) && OrderType()<6) {
          if (lo==0 || lo==NormalizeLot(OrderLots())) p=OrderOpenPrice();
        }
      }
    }
  }
  return(p);
}
ZS. In allegato c'è uno script per testare la funzioneGetOpenPriceByLot().
 

La funzione GetTicketByLot().

Questa funzione restituisce il biglietto di una posizione o di un ordine per dimensione del lotto. La selezione 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. Il valorenullo indica lo strumento corrente.
  • op- Operazione di trading, posizione o tipo di ordine. Valori validi:OP_BUY,OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP o-1. Il valore predefinito di-1 significa qualsiasi operazione commerciale.
  • mn- Identificatore di una posizione o di un ordine, MagicNumber. Il valore predefinito di-1 significa qualsiasi identificatore.
  • lo - Lotto. Il valore predefinito 0 significa qualsiasi lotto.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает тикет позиции или ордера по размеру лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
int GetTicketByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  int i, k=OrdersTotal(), t;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((op<0 || OrderType()==op) && OrderType()<6) {
          if (lo==0 || lo==NormalizeLot(OrderLots())) t=OrderTicket();
        }
      }
    }
  }
  return(t);
}

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


 

Ciao Igor!

Grazie mille per le nuove funzionalità e per essere stati così veloci. Tutto è molto buono. La funzione restituisce, per esempio, un ordine di biglietti in base alle condizioni, che possono essere impostate da variabili esterne o non è possibile utilizzarle. Non mi è chiara questa linea:

se ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6))

Qui controlliamo la condizione dell'istruzione if, cioè, se la variabile esterna <0, qualsiasi tipo di ordine è disponibile O se scriviamo, per esempio, OP_BUY nella chiamata della funzione, la selezione sarà fatta tra gli ordini OP_BUY. Questa condizione è chiara, ma inoltre abbiamo una condizione equivalente scritta attraverso&& che afferma cheOrderType() deve essere all'interno dell'intervallo degli ordini in sospeso, cioè da 1 a 5. Il nostro tipo OP_BUY non è incluso in questo intervallo e quindi la condizione dell'operatore deve essere falsa e il controllo deve passare all'operatore che segue l'operatore if-else, cioè è difficile per me dire dove, da qualche parte dietro la freccia del corpo arricciato. Mi sembra che dovremmo specificare qui la condizione per gli ordini a mercato e una funzione separata degli ordini pendenti dello stesso tipo. Cioè, se voglio fare una selezione tra gli ordini a mercato e non conosco il suo tipo esatto, prendo la variabile esterna <0 ma mi rivolgo alla funzione dove si specificano le condizioni da 0 a 1. Lo stesso processo si applica agli ordini pendenti. Quindi, sono giunto alla conclusione che dovremmo usare una funzione diversa per ogni categoria di tipi di ordine quando usiamo questa utile condizione.

Inoltre, ho un problema con la connessione alla biblioteca. Ho cercato e letto, ma la connessione dà un errore durante la compilazione dell'EA che sto scrivendo. Non ho ancora il tempo di occuparmene, voglio scrivere un Expert Advisor redditizio più velocemente, quindi ho copiato tutte e tre le librerie necessarie e le ho allegate dopo la funzione speciale start(), e ho messo le loro variabili globali nelle variabili globali dell'EA e commentato i riferimenti ad esse. Non è molto comodo, ma funziona.
 
00007:

Non mi è chiara questa linea:

se ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6))

Grazie! Corretto... Questa è una conseguenza della copia, cioè l'utilizzo di una preforma di un'altra funzione destinata a lavorare solo con ordini limite e stop.

00007:

Ho anche un problema con la connessione delle librerie. Ho cercato e letto, ma la connessione mi dà un errore durante la compilazione dell'Expert Advisor che sto scrivendo. Non ho tempo per capirlo, e voglio scrivere un Expert Advisor redditizio più velocemente, così ho copiato tutte e tre le librerie necessarie e le ho attaccate dopo la funzione speciale start(), e ho messo le loro variabili globali nelle variabili globali EA e commentato i riferimenti ad esse. Non è molto comodo, ma funziona.

A proposito, non uso le mie librerie sotto forma di file MQH. Di solito copio le funzioni di cui ho bisogno nel mio EA, cioè il mio EA standard pronto è un singolo file MQ4. Tutto ciò di cui ho bisogno è dentro questo file. Sì, c'è una certa ripetitività nel codice. Ma non ci sono problemi con le versioni delle funzioni.

 

A proposito, ho anche notato che hai degli script di test per ogni funzione e hanno tutte le funzioni aggiuntive di cui hai bisogno, che puoi semplicemente aggiungere al tuo EA insieme alla funzione e sarà tutto in un file senza nulla in più. Le funzioni sono semplici e utili, ma con il vostro permesso ne farò quattro per me: due per le posizioni e due per gli stop. Saranno più universali per le esigenze delicate della mia EA. Ma ora vedo quanto sia facile da fare. Grazie mille Igor.

Saluti Andrei.

 

La funzione TimeOpenFirstPos().

Questa funzione restituisce il tempo della prima posizione aperta. La selezione delle posizioni da prendere in considerazione è specificata da parametri esterni:

  • sy- Nome dello strumento di mercato. Se impostate questo parametro, la funzione considererà solo le posizioni di questo strumento. Il valore predefinito"" significa qualsiasi strumento di mercato. Il valorenullo indica 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 di-1 significa qualsiasi identificatore.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.01.2012                                                     |
//|  Описание : Возвращает время открытия первой открытой позиций.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime TimeOpenFirstPos(string sy="", int op=-1, int mn=-1) {
  datetime t=TimeCurrent();
  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 (t>OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(t);
}
L'uso della funzione è simile a TimeOpenLastPos()
 

Ciao

Come aggiungere una foeba al tuo canale SetRegression()(https://www.mql5.com/ru/forum/107476/page35 ).

 
gince:

Ciao

Come aggiungere una foeba al tuo canale SetRegression()(https://www.mql5.com/ru/forum/107476/page35 ).

Duck, è facile:

  1. Si imposta il primo punto della linea di fibo (si calcola da dove si vuole che venga).
  2. Decidere su quale barra ottenere il secondo punto.
  3. Poi usateEquationDirect() per ottenere il prezzo.
  4. Avendo le coordinate di due punti, tracciate una linea che li attraversi usando la funzioneSetTLine().

Motivazione: