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

 
KimIV писал (а) >>

A função isLossLastPos().

Esta função retorna a bandeira de perda da última posição fechada. Flag up - True - última posição foi fechada com uma perda. Bandeira omitida - Falso - a última posição foi fechada ou a zero, ou com lucro. Esta função não considera permutas e comissões. A seleção das posições é definida por parâmetros externos:

  • sy - Nome do instrumento de mercado. Se você especificar este parâmetro, a função considerará apenas as posições do instrumento especificado. O valor padrão "" significa qualquer instrumento de mercado. 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 de -1 significa qualquer identificador.
P.S. Em anexo está um roteiro para testar a função isLossLastPos().

A fim de não multiplicar o número de funções relacionadas com a última posição fechada, sugiro a seguinte variante

int LastClosePos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, j=-1, 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();
                j=OrderTicket();              }
              else
                return(j);
            }
          }
        }
      }
    }
  }
  return(-1);
}

Esta função define o número do bilhete da última posição fechada.

Outras ações com o número do bilhete ficam a critério do programador, dependendo de um problema a ser resolvido...

 

Função FindNearFractal().

Esta função procura o fractal mais próximo e retorna seu nível de preço. A função aceita os seguintes parâmetros opcionais:

  • sy - Nome do instrumento. "" ou NULL - símbolo atual. O valor padrão é NULL.
  • tf - Cronograma. Valor padrão 0 - símbolo atual.
  • modo - Tipo fractal. MODE_LOWER e MODE_UPPER são permitidos. O valor padrão é MODE_LOWER.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Поиск ближайшего фрактала. Возвращает ценовой уровень.         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy   - наименование инструмента      ("" или NULL - текущий символ)     |
//|    tf   - таймфрейм                     (    0       - текущий ТФ)         |
//|    mode - тип фрактала                  (MODE_LOWER|MODE_UPPER)            |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;

  for (s=2; s<100; s++) {
    f=iFractals(sy, tf, mode, s);
    if (f!=0) return(NormalizeDouble(f, d));
  }
  Print("FindNearFractal(): Фрактал не найден");
  return(0);
}
 

Exemplos de utilização do FindNearFractal().

  • O preço do fractal inferior mais próximo no gráfico atual.
    Message(FindNearFractal());
  • Preço do fractal superior mais próximo no gráfico H4 do símbolo atual.
    Message(FindNearFractal(NULL, PERIOD_H4, MODE_UPPER));
  • O preço do fractal inferior mais próximo no gráfico GBPUSD M30.
    Message(FindNearFractal("GBPUSD", PERIOD_M30, MODE_LOWER));
    

SZY. Em anexo está um roteiro para testar a função FindNearFractal().

Arquivos anexados:
 
KimIV писал (а) >>

Примеры использования функции SetVLine().

  1. Голубая сплошная вертикальная линия на текущем баре.
  2. Сиреневая толстая линия на восьмом баре.
  3. Сетка пунктирных линий на барах 14:00.

ЗЫ. Во вложении скрипт для тестирования функции SetVLine().

KimIV
писал (а)
>>

Exemplos de como usar o SetVLine().

  1. Linha vertical sólida azul sobre a barra atual.
  2. Linha grossa lilás na oitava barra.
  3. Uma grade de linhas pontilhadas nas barras 14:00.

ZS. Anexado um roteiro para testar a função SetVLine().

Oi Igor,
Poderia me mostrar um exemplo de como tal função pode ser usada em um indicador?
Estou tentando melhorar o indicador PreviousiHighhsvAndhLows0 e acrescentar uma marca a ele por tempo.

Usando o exemplo SetVLine() e desenhar a marca na abertura do bar com um certo tempo...
Até agora, minha versão desenhou alguns disparates.
Já pedi ajuda no fórum, mas os iniciantes não são mimados aqui...

Obrigado de qualquer forma, suas funções são muito úteis para o aprendizado passo a passo, mas é claro que seria bom se houvesse muitas outras dicas ou exemplos

Arquivos anexados:
 
obabuev писал (а) >>
Poderia me mostrar um exemplo de como tal função pode ser usada em um indicador?
Estou tentando melhorar o indicador e acrescentar-lhe um desenho de carimbo de tempo.
Usando o exemplo SetVLine() e desenhar uma marca na abertura do bar com um certo tempo...

Mostre na ilustração qual marca você deseja desenhar.

 

Função GetExtremumZZZBar().

Esta função procura um extremo do indicador ZigZag padrão personalizado e retorna o número de barras. A função aceita os seguintes parâmetros opcionais:

  • sy - Nome do instrumento. "" ou NULL - símbolo atual. O valor padrão é NULL.
  • tf - Cronograma. O valor padrão é 0 - o período de tempo atual.
  • ne - Número extremo. 0 - último, 1 - anterior, 2 - anterior, etc.
  • dp, dv, bs - Parâmetros ZigZaga: ExtDepth, ExtDeviation, ExtBackstep respectivamente.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает номер бара экстремума ЗигЗага по его номеру.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=0; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(-1);
}
 

Exemplos de utilização da função GetExtremumZZZBar().

  • O número da barra com o último extremo ZigZag no gráfico atual.
    Message(GetExtremumZZBar());
  • O número da barra com o penúltimo extremo ZigZag no gráfico H4 do símbolo atual.
    Message(GetExtremumZZBar(NULL, PERIOD_H4, 1));
  • Encontre a última quebra ZigZag na tabela atual e desenhe uma linha vertical através dela.
    int n=GetExtremumZZBar(NULL, 0, 1);
    SetVLine(Magenta, "", Time[n]);

ZS. Anexado um roteiro para testar a função GetExtremumZZZBar().

Arquivos anexados:
 
KimIV писал (а) >>

Mostre na ilustração qual marca você deseja desenhar.

Obrigado, Igor, por responder,
Demorei dois dias, mas deixei a marca.
Agora estou tentando fazer outro.
Preciso dele para testes
Usando seu indicador i-AnyRange, eu quero fazer
O indicador processará o tempo com desvio aleatório.
Por exemplo -
o indicador tem
time1=10:05;
time2=15:35;
e no próprio indicador para os cálculos das linhas indicadoras que ele usa
T1=time1(+/-random)
T2=time2(+/-aleatória)
mas também precisamos definir os limites máximos de desvio, por exemplo
máximo aleatório =5min;
O enigma é apenas como limitar a aleatoriedade a 5 minutos?
Você provavelmente tem exemplos similares

Arquivos anexados:
 
obabuev писал (а) >>

mas você também precisa definir os limites máximos de desvio, por exemplo
máximo aleatório =5min;
O problema é apenas como limitar a aleatoriedade a 5 minutos?
Você deve ter exemplos semelhantes.

5 minutos são 300 segundos:

void init() {
  MathSrand(TimeLocal());
}

void start() {
  double a=MathRand()/32767.0*300;
  int b=MathFloor(a);
  Comment(b);
}
 
KimIV писал (а) >>

Cinco minutos são 300 segundos:

Obrigado, é claro, mas isso não responde bem às perguntas,
Como adicionar int b à cadeia Tempo2 minutos agora ou como fazer mais menos aleatório

>> Vou investigar, é claro, mas estou passando por dificuldades.