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

 
KimIV писал (а) >>

Os ponteiros na MQL4 são complicados. Não há apoio direto. Alguém aqui no fórum tentou fazer isso com arrays, eu acho. Não posso ser mais preciso. Pesquise você mesmo.

MathRand()

Você só pode mudar programmaticamente a primeira dimensão da matriz. A função ArrayResize(). A segunda, terceira e quarta dimensões têm de ser fixadas rigidamente.

Bem, esqueçamos também os ponteiros e as matrizes dinâmicas...

Aguardando a 5ª versão do idioma...

Obrigado pela ajuda...



Trabalhar com uma grade é fácil de implementar.

O engraçado é que, para minha idéia, uma rede não era suficiente, e eu queria fazer um algoritmo para alternar entre redes, com apontadores não é difícil.

Mas não... teremos que codificá-lo de forma rígida.

 

A função SetTLineByAngle().

Esta função define o OBJ_TRENDBYANGLE objeto da linha de tendência pelo ângulo de inclinação no gráfico atual.

  • cl - Cor do objeto TRENDBYANGLE. Parâmetro necessário.
  • nm - Nome do objeto. Quando o valor padrão é passado - "", o tempo aberto da barra atual é usado como o nome.
  • t1 - Primeira coordenada do tempo de ajuste do objeto. Valor padrão - 0 - tempo de abertura da décima barra.
  • p1 - Primeira coordenada do objeto que fixa o preço. Valor padrão - 0 - mínimo da décima barra.
  • t2 - Segunda coordenada do tempo de ajuste do objeto. Valor padrão - 0 - tempo de abertura da barra atual.
  • p2 - Segunda coordenada do objeto que fixa o preço. Este parâmetro é uma espécie de interruptor. Seu valor não zero iguala esta função ao SetTLine(), ou seja, uma linha de tendência será desenhada usando o par de coordenadas tempo/preço, enquanto o valor do ângulo de inclinação da linha de tendência será ignorado. Valor padrão - 0 - construção de linha de tendência por ângulo de inclinação.
  • an - Ângulo de inclinação em graus. Valor padrão - 0 - Linha horizontal.
  • ry - Bandeira da propriedade BOW. O valor padrão é Falso.
  • st - Estilo de linha. Os valores válidos são STYLE_SOLID (padrão), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
  • wd - Largura da linha. O valor padrão é 1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TRENDBYANGLE трендовая линия по углу     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - время открытия текущего бара)  |
//|    p2 - ценовой уровень            (  0   - по углу)                       |
//|    an - угол                       (  0   - по умолчанию)                  |
//|    ry - луч                        (False - не луч)                        |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLineByAngle(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              double an=0, bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (p1<=0) p1=Low[10];
  if (t2<=0) t2=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TRENDBYANGLE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  if (p2>0) ObjectSet(nm, OBJPROP_PRICE2, p2);
  else ObjectSet(nm, OBJPROP_ANGLE, an);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

Exemplos de como usar o SetTLineByAngle().

  1. Feixe sólido laranja com ângulo de 45° a partir do mínimo da 5ª barra.
    SetTLineByAngle(Orange, "", Time[5], Low[5], 0, 0, 45, True);
  2. Um ventilador de raios vermelhos pontilhados a partir do mínimo da 13ª barra.
    for (int i=0; i<90; i+=10)
      SetTLineByAngle(Red, "TL"+i, Time[13], Low[13], 0, 0, i, True, STYLE_DOT);

ZY. Em anexo está um roteiro para testar SetTLineByAngle().

Arquivos anexados:
 

A função SetArrow().

Esta função define o ícone do objeto OBJ_ARROW para a tabela atual.

  • cd - código do ícone. Parâmetro necessário.
  • cl - Cor do ícone. Parâmetro necessário.
  • nm - Nome do objeto. Se o valor padrão for transferido - "", o tempo aberto da barra atual é usado como um nome.
  • t1 - Primeira coordenada do tempo de ajuste do objeto. Valor padrão - 0 - tempo de abertura da barra atual.
  • p1 - Primeira coordenada do objeto que fixa o preço. Valor padrão - 0 - preço atual da Licitação.
  • sz - Tamanho do ícone. Valor padrão - 0.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объекта OBJ_ARROW.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
 

Exemplos de como usar o SetArrow().

  • O marcador dourado do preço à esquerda no alto da 9ª barra.
    SetArrow(5, Gold, "", Time[9], High[9], 3);

  • Marca de preço direita vermelha no máximo da 2ª barra.
    SetArrow(6, Red, "", Time[2], High[2], 3);

  • 3. Seta azul acima do máximo da segunda barra.
    SetArrow(242, Blue, "", Time[2], High[2]+50*Point, 2);
    

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

Arquivos anexados:
 
Muito obrigado pelo que você faz, você se importa se eu coletar os recursos deste tópico e publicá-los em meu site, em uma seção separada com um link para o fórum e para o seu site?
 

Em geral, seria legal ter um "Índice" na primeira página deste post. Uma tabela com uma lista de funções, descrições e links para páginas. Ou manter um arquivo atualizado na primeira página, e as descrições podem ser encontradas nas outras páginas.

Portanto, se xrust fizer sua sugestão, seria bom repeti-la aqui. Por uma questão de sistematização dos ganhos duros :))

 
xrust писал (а) >>
...você se importa se eu coletar recursos deste tópico e publicá-los em meu site, em uma seção separada com um link para o fórum, e para seu site

Não, eu não vou...

 
xrust писал (а) >>
Muito obrigado pelo que você está fazendo, importa-se que eu colete as funções desta filial e as publique em meu site, em uma seção separada com uma referência ao fórum e ao seu site?

Criar um arquivo "inluder" (mqh) (provavelmente 2 - "comércio" e "outros"), concordar com seu nome e forçar os "desenvolvedores" a incluí-lo na distribuição. Para que todos em cada EA não tenham que reinventar a roda.

:)

 
Obrigado mais uma vez, sou apenas um pouco preguiçoso, quero recolher tudo o que está à mão. Outra pergunta, você se importaria se eu utilizasse a mesma sintaxe e nomes de variáveis em minhas funções como você, para padronizá-las, por assim dizer.