Caratteristiche utili da KimIV - pagina 53

 
KimIV >> :

Funzione IIFc().

...

Cerchi di fare un operatore ternario mancante?

Score, grazie, con la mia abitudine di mettere parentesi graffe ovunque posso, sarà molto utile.

 
CMEPTHiK писал (а) >>
Stavo leggendo il libro di V. Yakimkin. "Forex market - your way to success" e si è imbattuto in tali linee "...differenziale da (DJI x Nikkei)..." Dimmi, Igor, è possibile implementare e produrre in forma di indicatore...

Il differenziale è la velocità mostrata dall'indicatore ROC.

 

Igor, non hai una funzione nella tua scorta per chiudere tutte le posizioni in una volta sola, compresa la chiusura con le contro posizioni in mente?

Cioè chiudere prima tutte le posizioni in contropartita, per quanto possibile, tenendo conto del mismatch dei lotti delle posizioni in contropartita, poi quelle perdenti e redditizie...

 
alexx_v писал(а) >>

Igor, hai una funzione nel tuo magazzino per chiudere tutte le posizioni in una volta sola, compresa la chiusura con le posizioni del contatore in mente?

Cioè chiudere prima tutte le posizioni opposte, per quanto possibile, tenendo conto del mismatch di molte posizioni opposte, poi quelle perdenti, quelle redditizie...

No, non ce l'ho ancora.

 

La funzione ExistInHistoryCloseBetween().

Restituisce un flag per l'esistenza nella storia di una posizione o di un ordine chiuso (cancellato) tra le date. La funzione ExistInHistoryCloseBetween() riceve i seguenti parametri:

  • sy - Nome dello strumento di mercato. "" - qualsiasi simbolo, NULL - simbolo corrente. Il valore predefinito è "".
  • op - operazione commerciale. Valori validi: -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP. Valore predefinito -1 - qualsiasi operazione.
  • mn - Identificatore delle operazioni commerciali, MagicNumber. Valore predefinito -1 - qualsiasi numero magico.
  • d1 - Tempo di chiusura della posizione (in attesa di cancellazione dell'ordine). Il valore predefinito è 0 - qualsiasi orario di chiusura (cancellare). Il tempo d1 deve essere più breve di d2.
  • d2 - Tempo di chiusura della posizione (in attesa di cancellazione dell'ordine). Valore predefinito - 0 - qualsiasi tempo di chiusura (cancellazione). Il tempo d2 deve essere più lungo del tempo d1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : закрытой (удалённого) между датами.                            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая операция)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время закрытия             ( 0   - любое время закрытия)           |
//|    d2 - время закрытия             ( 0   - любое время закрытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryCloseBetween(string sy="", int op=-1, int mn=-1,
                                datetime d1=0, datetime d2=0) {
  int i, k=OrdersHistoryTotal();

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()== sy || sy=="") && ( op<0 || OrderType()== op)) {
        if ( mn<0 || OrderMagicNumber()== mn) {
          if ( d1<=OrderCloseTime() && ( d2==0 || d2>=OrderCloseTime())) return( True);
        }
      }
    }
  }
  return( False);
}
 

Esempi dell'uso di ExistInHistoryCloseBetween().

  1. Presenza di qualsiasi posizione chiusa ieri o ordini cancellati ieri con MagicNumber=0 dal simbolo del grafico corrente.
    datetime d1=iTime(NULL, PERIOD_D1, 1);
    datetime d2=iTime(NULL, PERIOD_D1, 0)-1;
    Message( IIFs( ExistInHistoryCloseBetween(NULL, -1, -1, d1, d2), "Есть", "Нет"));
  2. Presenza di posizioni o ordini chiusi (cancellati) nelle ultime tre ore.
    datetime d1=TimeCurrent()-3*60*60;
    Message(IIFs(ExistInHistoryCloseBetween("", -1, -1, d1), "Есть", "Нет"));
  3. Se un acquisto in EUR è stato chiuso o meno negli ultimi 5 minuti.
    datetime d1=TimeCurrent()-5*60;
    Message( IIFs( ExistInHistoryCloseBetween("EURUSD", OP_BUY, -1, d1), "Да", "Нет"));

P.S. In allegato c'è uno script per testare la funzione ExistInHistoryCloseBetween().

 

La funzione ExistInHistoryOpenBetween().

Restituisce un flag per l'esistenza nella storia di una posizione o di un ordine aperto (impostato) tra le date. La funzione ExistInHistoryOpenBetween() accetta i seguenti parametri:

  • sy - Nome dello strumento. "" - qualsiasi carattere, NULL - il simbolo corrente. Il valore predefinito è "".
  • op - operazione commerciale. Valori validi: -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP. Valore predefinito -1 - qualsiasi operazione.
  • mn - Identificatore delle operazioni commerciali, MagicNumber. Valore predefinito -1 - qualsiasi numero magico.
  • d1 - Tempo di apertura della posizione (in attesa dell'ordine). Il valore predefinito è 0 - qualsiasi tempo di apertura (impostazione). Il tempo d1 dovrebbe essere inferiore al tempo d2.
  • d2 - Ora di apertura della posizione (in attesa dell'ordine). Il valore predefinito è 0 - qualsiasi tempo aperto (impostato). Il tempo d2 deve essere più lungo del tempo d1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : открытой (установленного) между датами.                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время открытия             ( 0   - любое время открытия)           |
//|    d2 - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryOpenBetween(string sy="", int op=-1, int mn=-1,
                               datetime d1=0, datetime d2=0) {
  int i, k=OrdersHistoryTotal();

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()== sy || sy=="") && ( op<0 || OrderType()== op)) {
        if ( mn<0 || OrderMagicNumber()== mn) {
          if ( d1<=OrderOpenTime() && ( d2==0 || d2>=OrderOpenTime())) return( True);
        }
      }
    }
  }
  return( False);
}
 

Buon pomeriggio!

Igor, potresti dirmi come dipingere la barra nel colore che voglio.

Ve lo dirò dall'inizio. Sto scrivendo un indicatore per il trading zonale - la quarta dimensione del mercato B di Williams. Ho bisogno che le barre siano colorate di verde, rosso o grigio.

Ho scritto un indicatore e questo è ciò che ho ottenuto:

Questo non è quello che voglio. Come fare una barra da colorare al centro. Sto usando un rettangolo con due coordinate come metodo di ombreggiatura. È qui che ho tutto il problema, come scegliere le coordinate dell'inizio e della fine del rettangolo.

Per favore, datemi un suggerimento.

Ecco il codice dell'indicatore.

File:
zonetrade.mq4  6 kb
 
Duke3D писал(а) >>
Igor, potresti per favore dirmi come ombreggiare una barra nel colore che voglio.
...
Come fare in modo che una barra sia ombreggiata esattamente al centro
.

Date un'occhiata all'indicatore Heiken Ashi. Il suo codice sorgente è incluso in MetaTrader 4.

 

Funzione ExistInHistoryToDay().

Restituisce il flag di esistenza nella storia di una posizione o di un ordine aperto (impostato) oggi. La funzione ExistInHistoryToDay() riceve i seguenti parametri:

  • sy - Nome dello strumento. "" - qualsiasi simbolo, NULL - il simbolo corrente. Il valore predefinito è "".
  • op - operazione commerciale. Valori validi: -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP. Valore predefinito -1 - qualsiasi operazione.
  • mn - Identificatore delle operazioni commerciali, MagicNumber. Valore predefinito -1 - qualsiasi magia.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.08.2008                                                     |
//|  Описание : Возвращает флаг наличия ордера или позиции в истории за сегодня|
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool ExistInHistoryToDay(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersHistoryTotal();

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()== sy || sy=="") {
        if ( op<0 || OrderType()== op) {
          if ( mn<0 || OrderMagicNumber()== mn) {
            if (TimeDay  (OrderOpenTime())==Day()
            &&  TimeMonth(OrderOpenTime())==Month()
            &&  TimeYear (OrderOpenTime())==Year()) return( True);
          }
        }
      }
    }
  }
  return( False);
}