Discussão do artigo "Modelos prontos para integrar indicadores nos Expert Advisors (Parte 1): Osciladores"

 

Novo artigo Modelos prontos para integrar indicadores nos Expert Advisors (Parte 1): Osciladores foi publicado:

Neste artigo, examinaremos os indicadores padrão da categoria Osciladores. Criaremos modelos prontos a serem usados em Expert Advisors, modelos esses que incluirão: declaração e configuração de parâmetros, inicialização/desinicialização de indicadores e recuperação de dados/sinais a partir de buffers de indicador em EAs.

Embora integrar indicadores ao EA e usar os dados do buffer de indicador no EA seja uma tarefa bastante simples, é necessário consultar os materiais de referência o tempo todo. De fato, é preciso lembrar todos os parâmetros passados para a função de criação do indicador, preparar parte deles como parâmetros de entrada do EA, verificar se estão corretos, etc. Já para acessar os dados, a pessoa tem de escrever funções que retornem os dados necessários a partir da barra desejada. Tudo isso requer tempo para consultar a documentação, inserir as variáveis necessárias no EA, escrever funções para receber e monitorar dados para detectar sinais, etc.

É por isso que o objetivo deste artigo é criar modelos para acoplar indicadores aos Expert Advisors. Veremos os indicadores da categoria Oscilador, suas variáveis de entrada, a criação de um handle de indicador e a recuperação dos dados necessários a partir dele.

Autor: Artyom Trishkin

 
Por que de wint para int e por que você gostaria de ter esse tipo de design em primeiro lugar?
//--- Defina e ajuste, se necessário, o período de cálculo
   period=int(InpPeriod<1 ? 14 : InpPeriod);

Entendo que a entrada é uma constante. Só não consigo imaginar a tarefa.

Bem, apenas como uma defesa contra um tolo que coloca um sinal de menos, mas seria melhor ter um alerta de que a pessoa cometeu um erro.

 
Valeriy Yastremskiy #:
Por que de uint para int e por que essa construção?

Entendo que a entrada é uma constante. Só não consigo imaginar a tarefa.

Bem, apenas como uma defesa contra um tolo que colocou um sinal de menos, mas seria melhor ter um alerta de que a pessoa cometeu um erro.

InpPeriod é uma variável de entrada. Não há como colocar um sinal de menos ali. Você pode colocar um zero ali. Essas verificações (para menos de um) são um hábito de não comparar números com zero diretamente - se, de repente, em outra construção semelhante, houver uma variável de entrada com tipo duplo, isso me permitirá evitar a comparação direta de dois números duplos. Sim, isso é "infalível". Em primeiro lugar, por mim mesmo - para cometer menos erros ao portar o código para outros lugares.

 
Artyom Trishkin #:

InpPeriod - entrada de variável de entrada. Não há como colocar um sinal de menos nesse local. Você pode colocar um zero ali. Essas verificações (para menos de um) são um hábito de não comparar números com zero diretamente - se, de repente, em outra construção semelhante, houver uma variável de entrada com tipo duplo, isso me permitirá evitar a comparação direta de dois números duplos. Sim, isso é "infalível". Em primeiro lugar, por mim mesmo - para cometer menos erros ao portar o código para outros lugares.

Bem, sim, é uint)))))) Você não pode colocar um sinal de menos nele))))

 
Valeriy Yastremskiy #:

Bem, sim, quero))))))) Não é possível colocar um sinal de menos nisso))))

E zero?

 
Alexey Viktorov #:

E zero?

E zero é possível. Mas, nesse caso, o indicador será definido com o valor padrão.

Mas o objetivo da sua pergunta era outro - você já sabe sobre o zero.

Mas eu não vou adivinhar

 
Artyom Trishkin #:

E zero é possível. Mas, nesse caso, o indicador será definido com o valor padrão.

Mas o objetivo da sua pergunta era outro - você já sabe sobre o zero.

Mas eu não vou adivinhar

É isso mesmo. Não há necessidade de adivinhar. Era apenas uma pergunta para Valery. Você não pode colocar um menos, mas um zero?

 
Alexey Viktorov #:

E zero?

Então, o zero é atual)))) Como um projeto infalível é ótimo))))))

E você pode colocar uma máscara no teclado, de modo que apenas os dígitos sejam pressionados e as outras teclas não sejam pressionadas)))))) Os soldados dos anos 90 fizeram isso)))))) E ao pressionar outras teclas, um aviso aparecia em letras grandes))

 
Artyom Trishkin #:

Saudações!

Como posso alinhar o texto ao centro da célula?


 
Vitaly Muzichenko #:

Saudações!

Como posso alinhar o texto ao centro da célula?


Hi. Acho que nunca fiz uma saída de texto para células com pontos de ancoragem diferentes.

Mas se presumirmos que column_width é a largura da célula, column_height é sua altura,
e text_w e text_h são as dimensões correspondentes do texto a ser enviado para a célula,
, então as coordenadas do canto superior esquerdo do texto devem ser calculadas usando estas fórmulas:

Âncora text_x text_y
ESQUERDA_UPER 0 0
ESQUERDA 0 (altura_da_coluna - altura_do_texto)/2
ESQUERDA_INFERIOR 0 altura_da_coluna - text_h
INFERIOR (largura_da_coluna - text_w)/2 altura_da_coluna - text_h
DIREITA_INFERIOR largura_da_coluna - text_w altura_da_coluna - text_h
DIREITA largura_da_coluna - text_w (altura_da_coluna - text_h)/2
SUPERIOR DIREITA largura_da_coluna - text_w 0
SUPERIOR (largura_da_coluna - text_w)/2 0
CENTRAL (largura_da_coluna - text_w)/2 (altura_da_coluna - text_h)/2

Aqui, a ancoragem do texto - por padrão - inicia as coordenadas do texto no canto superior esquerdo e, para exibir o texto dependendo do ponto de ancoragem (âncora no cabeçalho da tabela), você precisa calcular as coordenadas do texto usando as fórmulas acima.

 
Artyom Trishkin #:

Hi. Acho que não fiz a saída de texto para células com pontos de ancoragem diferentes.

Mas se presumirmos que column_width é a largura da célula, column_height é sua altura,
e text_w e text_h são os tamanhos correspondentes do texto a ser enviado para a célula,
, então as coordenadas do canto superior esquerdo do texto devem ser calculadas usando essas fórmulas:

Âncora text_x text_y
ESQUERDA_UPER 0 0
ESQUERDA 0 (altura_da_coluna - altura_do_texto)/2
ESQUERDA_INFERIOR 0 altura_da_coluna - text_h
INFERIOR (largura_da_coluna - text_w)/2 altura_da_coluna - text_h
DIREITA_INFERIOR largura_da_coluna - text_w altura_da_coluna - text_h
DIREITA largura_da_coluna - text_w (altura_da_coluna - text_h)/2
SUPERIOR DIREITA largura_da_coluna - text_w 0
SUPERIOR (largura_da_coluna - text_w)/2 0
CENTRAL (largura_da_coluna - text_w)/2 (altura_da_coluna - text_h)/2

Aqui, a ancoragem do texto - por padrão - inicia as coordenadas do texto no canto superior esquerdo e, para exibir o texto dependendo do ponto de ancoragem (âncora no cabeçalho da tabela), você precisa calcular as coordenadas do texto de acordo com as fórmulas fornecidas.

Foi mais ou menos isso que pensei, mas achei que havia uma solução mais simples.

Obrigado!