Caratteristiche utili da KimIV - pagina 25

 

La funzione TimeOpenLastPos().

Questa funzione restituisce il tempo dell'ultima posizione aperta. La selezione delle posizioni da prendere in considerazione è definita 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. Un valore di 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   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime TimeOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  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);
}
ZS. In allegato c'è uno script per testare la funzione TimeOpenLastPos().
 
Prival:
C'è una funzione di smistamento delle bolle nel backroom

Non disponibile, ma mi ci sono voluti 10 minuti per fare

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.06.2008                                                     |
//|  Описание : Выполняет пузырьковую сортировку элементов массива.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    a - массив элементов                                                    |
//+----------------------------------------------------------------------------+
void BubbleSort(double& a[]) {
  double t;
  int    i, j, n=ArraySize(a);

  for (i=n-1; i>0; i--) {
    for (j=0; j<i; j++) {
      if (a[j]>a[j+1]) {
        t=a[j];
        a[j]=a[j+1];
        a[j+1]=t;
      }
    }
  }
}
ZS. In allegato c'è uno script per testare la funzione BubbleSort().
File:
 

La funzione BarsBetweenLastFractals().

Questa funzione restituisce il numero di barre tra gli ultimi due frattali o -1. Lo strumento di mercato e il timeframe da cui i frattali devono essere presi sono specificati dai parametri:

  • sy - Nome dello strumento di mercato. Il valore predefinito è "" o NULL per lo strumento di mercato corrente.
  • tf - Time frame (numero di minuti per barra). Il valore predefinito 0 indica l'intervallo di tempo corrente.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.06.2008                                                     |
//|  Описание : Возвращает количество баров между двумя последними фракталами. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//+----------------------------------------------------------------------------+
int BarsBetweenLastFractals(string sy="", int tf=0) {
  double fu=0, fd=0;
  int    i, nu=0, nd=0;

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=2; i<100; i++) {
    fu=iFractals(sy, tf, MODE_UPPER, i);
    if (fu!=0) {
      if (nu==0) nu=i;
    }
    fd=iFractals(sy, tf, MODE_LOWER, i);
    if (fd!=0) {
      if (nd==0) nd=i;
    }
    if (nu>0 && nd>0) return(MathAbs(nu-nd));
  }
  Print("BarsBetweenLastFractals(): Фракталы не найдены");
  return(-1);
}
ZS. In allegato c'è uno script per testare la funzione BarsBetweenLastFractals().
 

Funzione SecondsAfterCloseLastPos().

Questa funzione restituisce il numero di secondi dopo la chiusura dell'ultima posizione. La selezione delle posizioni da prendere in considerazione è specificata dai parametri:

  • sy - Nome dello strumento di mercato. Se questo parametro è impostato, la funzione prenderà in considerazione solo le posizioni dello strumento specificato. Il valore predefinito - "" significa qualsiasi strumento di mercato. Il valore nullo 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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после закрытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime SecondsAfterCloseLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  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 (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}
P.S. In allegato c'è uno script per testare la funzione SecondsAfterCloseLastPos().
 

Ciao

Qualche consiglio.

Ho un EA che mette ordini ad entrambe le parti ad una certa ora

Per favore, spiegate sulle vostre dita come fare in modo che il secondo ordine sia automaticamente cancellato quando il primo scatta.

O modificarlo

Grazie

 
aceventura:

Ciao

Qualche consiglio.

Ho un EA che mette ordini ad entrambe le parti ad una certa ora

Per favore, spiegate sulle vostre dita come fare in modo che il secondo ordine sia automaticamente cancellato quando il primo scatta.

O modificarlo

Grazie

KimIV

Igor. Hai abbastanza dita?

 
aceventura:

Ciao

Qualche consiglio.

Ho un EA che mette ordini ad entrambe le parti ad una certa ora

Per favore, spiegate sulle vostre dita come fare in modo che il secondo ordine sia automaticamente cancellato quando il primo scatta.

O modificarlo

Grazie

Per prima cosa prendete la funzione numero di ordini in questo ramo e se restituisce "== 1", "< 2" o "== numero dispari", allora chiamate la funzione di questo ramo "chiudi ordini".

 
Vinin:

KimIV

Igor. Hai abbastanza dita?

Probabilmente no... Ne ho solo due: indice e presa... hee

 
SergNF:

Prima prendi la funzione numero di ordini in questo ramo, e poi se restituisce "== 1", "< 2" o "== numero dispari", allora chiama la funzione "chiudi ordini" da questo ramo.

La funzione della quantità di ordini non funzionerà, perché l'EA è impostato diversamente per ogni coppia. E imposta gli ordini su diverse coppie allo stesso tempo. Quindi, se vengono piazzati quattro ordini per due coppie e uno è scattato, tre di essi vengono cancellati e l'ordine opposto per ciascuno viene cancellato.