Como posso aprender a criar objetos gráficos? MQL4. - página 3

 
Integer:

Se o indicador cria objetos gráficos e depois obtém seus parâmetros, não.

Mas ainda é mais fácil resolver tudo através do uso de um indicador. Os cálculos são feitos no indicador e seus resultados são exibidos através de buffers indicadores.

Há mais uma alternativa. Criar variáveis globais com parâmetros da linha ao invés de linhas, mas neste caso, a função GetValueByShift() não funcionará, você deve escrever seu análogo.

Estou vendo. Mas como traçar uma linha de tendência em um indicador sem nenhum desenho gráfico?

Dois índices de barras são conhecidos, eles devem ser conectados com uma linha e desenhados para a direita.

 
forexman77:

Estou vendo. Mas como posso traçar uma linha de tendência no indicador sem nenhum desenho gráfico?

Dois índices de barras são conhecidos, eles devem ser conectados por uma linha e desenhados à direita.

Eu tinha tal indicador em minha base de códigos. Não o tenho agora.

Devemos utilizar cálculos. Conhecendo as coordenadas de dois pontos, podemos simplesmente calcular as coordenadas do terceiro.

 
Integer:

Eu costumava ter tal indicador em minha base de código. Agora se foi, se foi.

Você tem que usar cálculos para fazer tudo. Conhecendo as coordenadas de dois pontos, você pode simplesmente calcular as coordenadas do terceiro.

Onde encontrar uma fórmula para este cálculo?

Em geral, parece um pouco novo. O terminal tem todos os tipos de canais, fibos e outros índices geométricos, mas eles são inúteis no testador.

 
forexman77:

Onde posso encontrar a fórmula para este cálculo?

Em geral, é uma espécie de novo-rico. Há muitos canais, Fibos e outros índices geométricos no terminal, mas eles são inúteis no testador.

double y3(double x1,double y1,double x2,double y2,double x3){
   return(y1+(x3-x1)*(y2-y1)/(x2-x1));
}

x1, x2 - números de barras. y1, y2 - valores de preços. x3 - número de barras para as quais o cálculo é realizado.

 
Integer:

x1, x2 - números de barras. y1, y2 - valores de preços. x3 - número de barras para as quais o cálculo é realizado.

Ok. Obrigado. Vou continuar cavando.
 
Integer:

x1, x2 - números de barras. y1, y2 - valores de preços. x3 - número de barras para as quais o cálculo é realizado.

Feito indicador baseado nos cálculos, as leituras são as mesmas que para o indicador nos objetos gráficos.

A otimização está em andamento. O único problema é que as negociações não são abertas corretamente.

Quando aplico o indicador no gráfico a linha é plana no início, mas depois se torna como deveria ser e fica assim quando a coloco em um novo tique.

 
forexman77:

Feito um indicador com base nos cálculos, as leituras são as mesmas que o indicador nos objetos gráficos.

A otimização está em andamento. O único problema é que as negociações não são abertas corretamente.

Quando aplico o indicador no gráfico, a linha é plana no início, e depois com um novo tique, ela se torna como deveria ser e permanece assim.

Tente testá-lo em modo visual. Usando a impressão, procure a diferença.
 
Integer:
Tente testar em modo visual. Usando impressão, comentário, procure a diferença.

O modo visual não vai ajudar. Fui capaz de fazer com que o indicador mostrasse apenas o padrão atual.

O próprio indicador imprime o valor do primeiro índice (MQL4), a primeira impressão sai com um valor incorreto, e as outras estão corretas em carrapatos novos.

Se você não se importa de olhar o código, eu o enviei em sua mensagem pessoal.

 

De qualquer forma, eu transferi todos os cálculos da linha de tendência para a EA. Parece estar correto.

Não posso fazer um indicador, que se mostraria em toda a gama da linha. Eu não tenho experiência suficiente.

Na verdade, eu preciso de um indicador para ver visualmente que as negociações estão abertas corretamente.

Decidi utilizar objetos gráficos para a visualização.

O problema é o erro 4200 (o objeto já existe).

Eu tentei dar um novo nome ao objeto a cada vez. O mesmo erro.

É possível chamar múltiplos objetos? Em caso afirmativo, como posso aparar partes desnecessárias do raio?

         long   chart_ID=0;        // ID графика
         string name=TimeToStr(Time[0]);
         int    sub_window=0;      // номер подокна
         //--- сбросим значение ошибки
         ResetLastError();
         //--- создадим трендовую линию по заданным координатам
         if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
           {
            Print(__FUNCTION__,
                  ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
            return(0);
           }
         ObjectSet("TrendLine",OBJPROP_TIME1,Time[minbar]);
         ObjectSet("TrendLine",OBJPROP_PRICE1,Low[minbar]);
         ObjectSet("TrendLine",OBJPROP_TIME2,Time[IPMIN]);
         ObjectSet("TrendLine",OBJPROP_PRICE2,Low[IPMIN]);

 
forexman77:

De qualquer forma, eu transferi todos os cálculos da linha de tendência para a EA. Parece estar correto.

Não posso fazer um indicador, que se mostraria em toda a gama da linha. Eu não tenho experiência suficiente.

Na verdade, eu preciso de um indicador para ver visualmente que as negociações estão abertas corretamente.

Decidi utilizar objetos gráficos para a visualização.

O problema é o erro 4200 (o objeto já existe).

Eu tentei dar um novo nome ao objeto a cada vez. O mesmo erro.

É possível chamar múltiplos objetos? Em caso afirmativo, como posso aparar partes desnecessárias de um raio?

Antes da criação, você pode verificar se o objeto existe, função ObjectFind(). Você não tem que fazer nada, existe e não é um erro grave.

Um conjunto de objetos. Você pode adicionar o tempo de barra ao nome do objeto, ele terá um nome único.

Aparar a viga. Propriedade ObjetoSet(Nome,OBJPROP_RAY,falso);

Razão: