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

 

A função SetVLine().

Esta função define a linha vertical do objeto OBJ_VLINE no gráfico atual.

  • cl - Cor do objeto da LINHA VERTICAL. Parâmetro obrigatório.
  • nm - nome do objeto. Quando o valor padrão é passado - "", o tempo aberto da barra atual é usado como o nome do objeto.
  • t1 - Tempo de ajuste do objeto. Valor padrão - 0 - tempo de abertura da barra atual.
  • 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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2008                                                     |
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время                      (0  - время открытия текущего бара)     |
//|    st - стиль линии                (0  - простая линия)                    |
//|    wd - ширина линии               (1  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetVLine(color cl, string nm="", datetime t1=0, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_VLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

Exemplos de como usar o SetVLine().

  1. Linha vertical sólida azul na barra atual.
    SetVLine(Aqua);
  2. Linha grossa Lilás na oitava barra.
    SetVLine(Magenta, "", Time[8], STYLE_SOLID, 3);
  3. Grade de linhas pontilhadas nas barras 14:00.
    for (int i=0; i<7; i++) {
      datetime dt=StrToTime((TimeToStr(TimeCurrent()-i*1440*60, TIME_DATE))+" 14:00");
      int nb=iBarShift(NULL, 0, dt, True);
      SetVLine(Coral, "VLine"+i, Time[nb], STYLE_DOT);
    }

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

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

EXECUTIVO. >> VOU FAZER.

Mostre-me uma foto, vamos tentar fazer uma.

 
TheXpert писал (а) >>

Mostre-o na figura, vamos tentar fazer isso.

Uma função personalizada que calcula as áreas descritas pelo indicador, por exemplo, RSI e a linha do meio.

O espaço delimitado pela curva abaixo da linha média e a própria linha média é a área -S1, e acima da linha média é +S2.

Posted to https://www.mql5.com/ru/forum/109590 para não interferir.

 

A função SetTLine().

Esta função define o objeto da linha de tendência OBJ_TREND na tabela atual.

  • cl - Cor do objeto TREND LINE. É um parâmetro obrigató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. Valor padrão - 0 - barra de corrente baixa.
  • ry - Bandeira da propriedade AZUL. 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_TREND трендовая линия                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLine(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=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 (p2<=0) p2=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  ObjectSet(nm, OBJPROP_PRICE2, p2);
  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 SetTLine().

  1. Linha sólida laranja através dos mínimos da 15ª e atuais barras.
    SetTLine(Orange, "", Time[15], Low[15], 0, Low[0], True);
  2. Linha de tendência vermelha através dos máximos da 35ª e 10ª barras.
    SetTLine(Red, "", Time[35], High[35], Time[10], High[10]);
  3. Raio grosso lilás através dos altos dos dois dias anteriores.
    datetime d0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
    datetime d1=TimeCurrent()-24*60*60;
    while (TimeDayOfWeek(d1)==0 || TimeDayOfWeek(d1)==6) d1-=24*60*60;
    d1=StrToTime(TimeToStr(d1, TIME_DATE));
    datetime d2=d1-24*60*60;
    while (TimeDayOfWeek(d2)==0 || TimeDayOfWeek(d2)==6) d2-=24*60*60;
    d2=StrToTime(TimeToStr(d2, TIME_DATE));
    int b2=iBarShift(NULL, 0, d2);     // номер бара начала второго дня
    int b1=iBarShift(NULL, 0, d1);     // номер бара начала первого дня
    int b0=iBarShift(NULL, 0, d0);     // номер бара начала текущего дня
    int n2=iHighest(NULL, 0, MODE_HIGH, b2-b1-1, b1);
    int n1=iHighest(NULL, 0, MODE_HIGH, b1-b0-1, b0);
    datetime t1=Time[n2];
    double   p1=High[n2];
    datetime t2=Time[n1];
    double   p2=High[n1];
    SetTLine(Magenta, "", t1, p1, t2, p2, True, STYLE_SOLID, 3);

HH. Anexado um roteiro para testar a função SetTLine().

Arquivos anexados:
 

Igor, estou me dirigindo a você como um codificador MQL4 mais experiente.

Comecei a escrever uma biblioteca para a rede da Kohonen.

Quero torná-lo o mais flexível e conveniente possível, mas já enfrentei um momento que ainda não posso superar.

Exemplo1:

int& value; // так нельзя, интересует аналог на MQL4, если он есть
 
void AssignValue(int& newValue)
{
   value = newValue;
}
 
void SetValue(int newValue)
{
   value = newValue;
}
 
int init()
{
   int someValue = 5;
   AssignValue(someValue);
   SetValue(10);
   Print(someValue); // очень хочется, чтобы вывелось 10
}

É possível fazer isso usando a MQL4, e como, se sim?



Exemplo2:

void SetSize(double& matrix[][], int inSize, int outSize)
{
    // требуется установить размеры матрицы, не осилил
}
 
void Init(double& matrix[][])
{
    // допустим, требуется проиниализировать всю матрицу значением 1, также не осилил
}

Mais uma vez, se for possível, por favor, me dê o código. Este exemplo me parece realizável.



Agradecemos antecipadamente.

 
TheXpert писал (а) >>
Quero torná-lo mais flexível e conveniente, mas já enfrentei um momento que ainda não posso superar.
>> Exemplo1:
É possível fazê-lo com as ferramentas MQL4 e como, se sim?

Eu entendo que você quer organizar o trabalho com indicações. Para que uma variável aponte para outra... Ou talvez eu tenha entendido errado? Tente explicar em palavras o que você precisa.

TheXpert escreveu >>
Exemplo2:
Mais uma vez, se for possível fazer uma coisa dessas, por favor, me dê o código. Este exemplo me parece ser implementável.
void start()
{
  double arr[3][2];
  Init(arr);
  for (int i=0; i<3; i++)
  {
    for (int j=0; j<2; j++)
    {
      Print("arr[",i,"][",j,"]=",arr[i][j]);
    }
  }
}
void Init(double& matrix[][])
{
  ArrayInitialize(matrix, 1);
}
 
KimIV писал (а) >>

Eu entendo que você quer organizar o trabalho com indicações. Para que uma variável aponte para outra... Ou talvez eu tenha entendido errado? Tente explicar em palavras o que você precisa.

Sim, mais ou menos.


Sobre a segunda -- e que tal inicializar com valores aleatórios?

Sim, também, eu preciso exatamente de matrizes dinâmicas.

 
TheXpert писал (а) >>
Sim, mais ou menos.

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.

TheXpert escreveu (a) >>
Sobre a segunda -- e sobre inicializar com valores aleatórios?

MathRand()

TheXpert escreveu (a) >>
Sim, também, eu preciso exatamente de matrizes dinâmicas.
Somente a primeira dimensão da matriz pode ser mudada programmaticamente. A função ArrayResize(). A segunda, terceira e quarta dimensões têm de ser fixadas rigidamente.
Razão: