Características úteis da KimIV - página 25

 

A função TimeOpenLastPos().

Esta função retorna o tempo da última posição aberta. A seleção das posições a serem levadas em conta é definida por parâmetros externos:

  • sy - Nome do instrumento de mercado. Se você definir este parâmetro, a função considerará apenas as posições deste instrumento. O valor padrão "" significa qualquer instrumento de mercado. Um valor de NULL significa o instrumento atual.
  • op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor por default -1 significa qualquer posição.
  • mn - Identificador de posição, MagicNumber. O valor padrão -1 significa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. Anexado um roteiro para testar a função TimeOpenLastPos().
Arquivos anexados:
 
Prival:
Existe uma função de classificação de bolhas na sala dos fundos

Não disponível, mas levei 10 minutos para fazer

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. Anexado um roteiro para testar a função BubbleSort().
Arquivos anexados:
 

A função BarsBetweenLastFractals().

Esta função retorna o número de barras entre os dois últimos fractais ou -1. O instrumento de mercado e o cronograma a partir do qual os fractais devem ser retirados são especificados pelos parâmetros:

  • sy - Nome do instrumento de mercado. O valor padrão é "" ou NULL para o instrumento de mercado atual.
  • tf - Prazo (número de minutos por barra). O valor padrão 0 significa o período de tempo atual.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. Anexado um roteiro para testar a função BarsBetweenLastFractals().
Arquivos anexados:
 

SegundosApósFecharLastPos() função.

Esta função retorna o número de segundos depois que a última posição foi fechada. A seleção das posições a serem levadas em conta é especificada pelos parâmetros:

  • sy - Nome do instrumento de mercado. Se este parâmetro for definido, a função levará em conta apenas as posições do instrumento especificado. O valor padrão - "" significa qualquer instrumento de mercado. O valor NULL significa o instrumento atual.
  • op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
  • mn - Identificador de posição, MagicNumber. O valor padrão de -1 significa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. Em anexo está um roteiro para testar a função SecondsAfterCloseLastPos().
Arquivos anexados:
 

Olá

Alguns conselhos.

Tenho um EA que dá ordens a ambos os lados em um determinado momento

Por favor, explique em seus dedos como fazer a segunda ordem ser automaticamente apagada quando a primeira for acionada.

Ou ajustar

Obrigado

 
aceventura:

Olá

Alguns conselhos.

Tenho um EA que dá ordens a ambos os lados em um determinado momento

Por favor, explique em seus dedos como fazer a segunda ordem ser automaticamente apagada quando a primeira for acionada.

Ou ajustar

Obrigado

KimIV

Igor. Você tem dedos suficientes?

 
aceventura:

Olá

Alguns conselhos.

Tenho um EA que dá ordens a ambos os lados em um determinado momento

Por favor, explique em seus dedos como fazer a segunda ordem ser automaticamente apagada quando a primeira for acionada.

Ou ajustar

Obrigado

Primeiro pegue o número da função de ordens neste ramo e se ele retornar "== 1", "< 2" ou "== número ímpar", então chame a função deste ramo de "ordens de fechamento".

 
Vinin:

KimIV

Igor. Você tem dedos suficientes?

Provavelmente não... Só tenho dois: dedo indicador e punho... hee

 
SergNF:

Primeiro pegue a função número de ordens neste ramo, e depois se retornar "== 1", "< 2" ou "== número ímpar", então chame a função "fechar ordens" a partir deste ramo.

A função da quantidade de pedidos não funcionará, porque a EA é definida de forma diferente para cada par. E estabelece pedidos em pares diferentes ao mesmo tempo. Então, se quatro pedidos são feitos para dois pares e um acionado, três deles são apagados e o pedido oposto para cada um é apagado.

Razão: