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

 
xrust писал (а) >>
Outra pergunta, você se importaria se eu usasse sua sintaxe e nomes de variáveis em minhas funções, por assim dizer, para padronizá-las.

Faça o que você acha que é certo.

 

A função SetLabel().

Esta função define o objeto da etiqueta de texto OBJ_LABEL no gráfico atual.

  • nm - Nome do objeto. Parâmetro necessário.
  • tx - Texto. Parâmetro necessário.
  • cl - Cor do marcador. Parâmetro necessário.
  • xd - X coordenada em pixels em relação ao ângulo de referência. Parâmetro necessário.
  • yd - Coordenadas em Y em pixels em relação ao ângulo de referência. Parâmetro obrigatório.
  • cr - Número do ângulo de referência. Valores válidos: 0 superior esquerda, 1 superior direita, 2 inferior esquerda, 3 inferior direita. O valor padrão é 0.
  • fs - Tamanho da fonte. O valor padrão é 9.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка текстовой метки, объект OBJ_LABEL.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    nm - наименование объекта                                               |
//|    tx - текст                                                              |
//|    cl - цвет метки                                                         |
//|    xd - координата X в пикселах                                            |
//|    yd - координата Y в пикселах                                            |
//|    cr - номер угла привязки        (0 - левый верхний,                     |
//|                                     1 - правый верхний,                    |
//|                                     2 - левый нижний,                      |
//|                                     3 - правый нижний )                    |
//|    fs - размер шрифта              (9 - по умолчанию  )                    |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
  ObjectSetText(nm, tx, fs);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_XDISTANCE, xd);
  ObjectSet(nm, OBJPROP_YDISTANCE, yd);
  ObjectSet(nm, OBJPROP_CORNER   , cr);
  ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
 

Exemplos de como usar o SetLabel().

  • Três rótulos de texto azul no canto superior esquerdo, fonte 9.
    SetLabel("Label1", "Текстовая метка", Blue, 5, 15);
    SetLabel("Label2", "Ещё одна текстовая метка", Blue, 5, 30);
    SetLabel("Label3", "Параметр cr=0", Blue, 5, 45);

  • Três etiquetas de texto roxo no canto superior direito, fonte 12.
    SetLabel("Label1", "Текстовая метка", Magenta, 5, 15, 1, 12);
    SetLabel("Label2", "Ещё одна текстовая метка", Magenta, 5, 30, 1, 12);
    SetLabel("Label3", "Параметр cr=1", Magenta, 5, 45, 1, 12);

  • Três etiquetas de texto verde no canto inferior direito, fonte 12.
    SetLabel("Label1", "Текстовая метка", Green, 5, 15, 3, 12);
    SetLabel("Label2", "Ещё одна текстовая метка", Green, 5, 30, 3, 12);
    SetLabel("Label3", "Параметр cr=3", Green, 5, 45, 3, 12);


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

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

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.

Não se pode matar a idéia, já faz muito tempo que vem se consolidando. Meu sonho como não-profissional é deixar que o usuário comum tome apenas decisões, liberando-o de complexidades de software.

Os desenvolvimentos de Igor (impressionantes em sua consistência e detalhes) chegaram o mais próximo possível disso. Além disso, o autor não apenas programa, mas mantém constantemente seu

Conselheiros em comércio real, o que aumenta o valor prático do código.

Seria interessante saber a opinião de Igor sobre a possibilidade de enquadramento de seus desenvolvimentos e sobre as vantagens e desvantagens de tal implementação.

 
granit77 писал (а) >>
Eu gostaria de saber a opinião de Igor sobre a possibilidade de mqh-design de seus desenvolvimentos, vantagens e desvantagens de tal implementação.

Sobre as possibilidades...

Já há algum tempo que tenho os arquivos MQH feitos... Ainda não estou postando... Eu tenho um ás na manga... O acorde final será... Vou postar todas as características e resumi-las postando os mqh-files.

Os prós e os contras...

Os arquivos MQH são convenientes. Você pode usá-los em diferentes Expert Advisors. O código de uma EA específica é significativamente reduzido. Apenas a lógica nua e algumas outras coisas são deixadas, e todos os aparelhos e invólucros estão do lado de fora.

Entretanto, raramente uso arquivos mqh, em geral, apenas um. É stdlib.mqh. Copiei todas as funções necessárias para o arquivo do Expert Advisor. É mais conveniente para mim. Eu tinha este hábito quando trabalhava muito com pedidos e muitas vezes me esquecia de enviar um ou outro mqh-ficheiro para o solicitante. Além disso, quero copiar um arquivo EA para pastas terminais diferentes, em vez de arrastar todo o monte de lúbricas depois dele.

 
Não é apenas uma delícia! É encantador! O dia não está muito distante quando uma distribuição sem tal biblioteca será considerada incompleta.
 

Talvez você tenha um roteiro em funções úteis que poderiam fazer a abertura de pedidos descritos no artigo http://www.kroufr.ru/content/view/1027/124/.

Caso contrário, informe-me onde encontrar um. .

 

A função CrossPointOfLines().

Esta função calcula as coordenadas do ponto de interseção de duas linhas. Cada linha é definida por um par de coordenadas de seus pontos. Três arrays são passados para a função como parâmetros:

  • x - matriz Abscissa. Deve conter quatro elementos: x[0], x[1] - as abcissas da primeira linha, x[2], x[3] - as abcissas da segunda linha.
  • y - Matriz de ordenados. Deve conter quatro elementos: y[0], y[1] - as ordenanças da primeira linha, y[0], y[1] - as ordenanças da segunda linha.
  • t - Conjunto de coordenadas do ponto de interseção das duas linhas. Após a execução normal da função, esta matriz conterá dois elementos: t[0] é a abcissa do ponto de intersecção procurado das duas linhas e t[1] é a ordenada do mesmo ponto.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Вычисляет координаты точки пересечения двух прямых.            |
//|             Каждая прямая задаётся парой координат своих точек.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив абсцисс              x[0], x[1] - первая прямая              |
//|                                    x[2], x[3] - вторая прямая              |
//|    y - массив ординат              y[0], y[1] - первая прямая              |
//|                                    y[0], y[1] - вторая прямая              |
//|    t - массив искомых координат    t[0]       - абсцисса                   |
//|                                    t[1]       - ордината                   |
//+----------------------------------------------------------------------------+
void CrossPointOfLines(double& x[], double& y[], double& t[]) {
  double z=(y[3]-y[2])*(x[1]-x[0])-(y[1]-y[0])*(x[3]-x[2]);
  ArrayResize(t, 2);
  ArrayInitialize(t, 0.0);

  if (z==0) Print("CrossPointOfLines(): Не удалось найти точку пересечения!");
  else {
    double xy1=x[1]*y[0]-x[0]*y[1];
    double xy2=x[3]*y[2]-x[2]*y[3];
    t[0]=NormalizeDouble((xy1*(x[3]-x[2])-xy2*(x[1]-x[0]))/z, 0);
    t[1]=(xy1*(y[3]-y[2])-xy2*(y[1]-y[0]))/z;
  }
}
 

Um exemplo de utilização da função CrossPointOfLines().

Como exemplo de utilização da função CrossPointOfLines(), tradicionalmente ofereço meu roteiro (ver anexo). Para que o roteiro funcione corretamente, é preciso traçar duas linhas de interseção no gráfico atual de qualquer um dos seguintes tipos: vertical, horizontal ou tendência. Em seguida, o roteiro deve ser anexado ao gráfico. O roteiro resultará na marcação do preço à esquerda no ponto de interseção das duas linhas.

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

Arquivos anexados:
 

A função SetRegression().

Esta função define o objeto OBJ_REGRESSION do canal de regressão linear no gráfico atual.

  • cl - Cor do objeto. Parâmetro necessário.
  • nm - Nome do objeto. Quando o valor padrão é passado - "", o tempo de abertura 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.
  • t2 - Segunda coordenada do tempo de ajuste do objeto. O valor padrão é 0 - o tempo aberto da barra atual.
  • 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_REGRESSION канал линейной регрессии.     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ( ""   - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10])                      |
//|    t2 - время открытия бара        (  0   - Time[0])                       |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetRegression(color cl, string nm="", datetime t1=0, datetime t2=0,
                    bool ry=False, int st=STYLE_SOLID, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (t2<=0) t2=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_REGRESSION, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_TIME2, t2);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
Razão: