Desenhando um objeto

 

Ola,


Tenho uma duvida para criacao de objetos no grafico usando a função "ObjectCreate"

Dependendo do objeto, é necessário 2 ou 3 pontos de ancoragem. Vi exemplos que mostram a criação a partir da entrada (digitando) os pontos de ancoragem (dia e tempo). Porem eu gostaria de saber se é possivel definir clicando diretamente no grafico os pontos de ancoragem.


Vou citar um exemplo:

Esse exemplo cria um triangulo na tela, porem eu gostaria de clicar na tela para definir os pontos de ancoragem.

Alguem poderia me dar uma luz onde procurar como fazer?

 

Ola , Existem varias formas de conseguir chegar nesta ideia sua..., 


Eu fiz outro dia um indicador, pra simular o Pointfix... 
Ele faz o mesmo que a ferramenta porem nao congela a tela ( caucula apenas fibos , canal de alta ou baixa )..


uma ideia que fiz foi :


1 - ao clicar na tecla P - Habilita para desenhar
   2 - Apos habilitado pra desenho, clicar na tecla F

        3 - absorvera os cliques do mouse ,

           ponto 1 -> click1  

           ponto 2 -> click2

           ponto 3 -> click3 

com estes 3 pontos eu criava o fibonachi... 


o mesmo pra canal de baixa ou alta , so que colocava outro habilitador de desenho 

Canal de alta - A

Canal de Baxia - B


depois clicando na tecla P, desliga o modo de Desenho. 

 
sandrolho:

Ola , Existem varias formas de conseguir chegar nesta ideia sua..., 


Eu fiz outro dia um indicador, pra simular o Pointfix... 
Ele faz o mesmo que a ferramenta porem nao congela a tela ( caucula apenas fibos , canal de alta ou baixa )..


uma ideia que fiz foi :


1 - ao clicar na tecla P - Habilita para desenhar
   2 - Apos habilitado pra desenho, clicar na tecla F

        3 - absorvera os cliques do mouse ,

           ponto 1 -> click1  

           ponto 2 -> click2

           ponto 3 -> click3 

com estes 3 pontos eu criava o fibonachi... 


o mesmo pra canal de baixa ou alta , so que colocava outro habilitador de desenho 

Canal de alta - A

Canal de Baxia - B


depois clicando na tecla P, desliga o modo de Desenho. 

Show de bola, se parece muito com o que eu desejo. Sua alternativa de ativar clicando em "P" foi otima.

Mas no seu exemplo ao clicar P > F, ele simplesmente chamava a expansao de fibo ( o proprio comando) ou via código ele chamada toda a função de createobject fibo?


Há algo que vc possa compartilhar? Queria saber como fazer ele me pedir os cliques.


Obrigado.

 
Japa Trader Br:

Show de bola, se parece muito com o que eu desejo. Sua alternativa de ativar clicando em "P" foi otima.

Mas no seu exemplo ao clicar P > F, ele simplesmente chamava a expansao de fibo ( o proprio comando) ou via código ele chamada toda a função de createobject fibo?


Há algo que vc possa compartilhar? Queria saber como fazer ele me pedir os cliques.


Obrigado.

Isso é parte do que fiz,..  Eu acho q eu usava as coordenadas do mouse e a medida que ia navegando os alvos se projetavam e reposicionada com estas simples linhas... 

basta fazer disso uma funcao, receber os parametros e colocar la no 

oncalculate,otimer   ( nao coloque coisas graficas no ontick, pq fica muito pesado o refreh na hora de volatilidade )... 


Segue abaixo ... boa sorte !!

ObjectDelete(0,"FIBOMAX");

ObjectCreate(0,"FIBOMAX",OBJ_FIBOARC,0,TEMPO_INICIAL,ALVO1,TEMPOFINAL,ALVO2);

ObjectSetInteger(0,"FIBOMAX",OBJPROP_ELLIPSE,true); 

ObjectSetInteger(0,"FIBOMAX",OBJPROP_SELECTABLE,true); 

ObjectSetInteger(0,"FIBOMAX",OBJPROP_SELECTED,true); 

ObjectSetInteger(0,"FIBOMAX",OBJPROP_LEVELCOLOR,38.2,clrGreen); 

ObjectSetInteger(0,"FIBOMAX",OBJPROP_LEVELCOLOR,50,clrGreen); 

ObjectSetInteger(0,"FIBOMAX",OBJPROP_LEVELCOLOR,61,clrGreen); 

 
sandrolho:

Isso é parte do que fiz,..  Eu acho q eu usava as coordenadas do mouse e a medida que ia navegando os alvos se projetavam e reposicionada com estas simples linhas... 

basta fazer disso uma funcao, receber os parametros e colocar la no 

oncalculate,otimer   ( nao coloque coisas graficas no ontick, pq fica muito pesado o refreh na hora de volatilidade )... 


Segue abaixo ... boa sorte !!

ObjectDelete(0,"FIBOMAX");

ObjectCreate(0,"FIBOMAX",OBJ_FIBOARC,0,TEMPO_INICIAL,ALVO1,TEMPOFINAL,ALVO2);

ObjectSetInteger(0,"FIBOMAX",OBJPROP_ELLIPSE,true); 

ObjectSetInteger(0,"FIBOMAX",OBJPROP_SELECTABLE,true); 

ObjectSetInteger(0,"FIBOMAX",OBJPROP_SELECTED,true); 

ObjectSetInteger(0,"FIBOMAX",OBJPROP_LEVELCOLOR,38.2,clrGreen); 

ObjectSetInteger(0,"FIBOMAX",OBJPROP_LEVELCOLOR,50,clrGreen); 

ObjectSetInteger(0,"FIBOMAX",OBJPROP_LEVELCOLOR,61,clrGreen); 

Vou tentar aqui.


Obrigado pela ajuda!

 
Japa Trader Br:

Vou tentar aqui.


Obrigado pela ajuda!

Fiz uma vez um chart trading...igual do Profit usando a tecla CTRL e SHIFT. Eu fazia que enquanto a tecla estiver pressionado mostra objetos marcando o nivel de preço onde colocar a ordem e quando solta a tecla os objectos desaparecem. Ainda se a tecla estiver pressionada quando clicar no gráfico colocar uma ordem no nivel onde o cursor estiver posicional.
Você pode pegar essa mesma ideia e fazer um contador. Enquanto a tecla estiver pressional cada vez que clicar cria um ponto de ancoragem e se soltar a tecla antes de colocar todos os pontos cancelar a criação do objeto.
Como foi dito acima há várias formas de fazer isso. Infelizmente não tenho mais o código pra mostrar.

 
Samuel Manoel De Souza:

Fiz uma vez um chart trading...igual do Profit usando a tecla CTRL e SHIFT. Eu fazia que enquanto a tecla estiver pressionado mostra objetos marcando o nivel de preço onde colocar a ordem e quando solta a tecla os objectos desaparecem. Ainda se a tecla estiver pressionada quando clicar no gráfico colocar uma ordem no nivel onde o cursor estiver posicional.
Você pode pegar essa mesma ideia e fazer um contador. Enquanto a tecla estiver pressional cada vez que clicar cria um ponto de ancoragem e se soltar a tecla antes de colocar todos os pontos cancelar a criação do objeto.
Como foi dito acima há várias formas de fazer isso. Infelizmente não tenho mais o código pra mostrar.

Irei pesquisar.


Obrigado!

 
Japa Trader Br:

Irei pesquisar.


Obrigado!

Da uma olhada neste codigo


https://www.mql5.com/pt/docs/event_handlers/onchartevent


caso queira usar ctrl + shift,..  parece bem simples de adaptar para o que vc quer... 


no switch , onde é tratado o botao control ou shift pressinado,... coloca funcoes para captar o mouse_click ou mouse_move


Boa sorte !!!

Documentação sobre MQL5: Manipulação de eventos / OnChartEvent
Documentação sobre MQL5: Manipulação de eventos / OnChartEvent
  • www.mql5.com
//|                                          OnChartEvent_Sample.mq5 | //|                        Copyright 2018, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | "Exemplo do ouvinte dos eventos do gráfico e do gerador de eventos personalizados" //
 
sandrolho:

Da uma olhada neste codigo


https://www.mql5.com/pt/docs/event_handlers/onchartevent


caso queira usar ctrl + shift,..  parece bem simples de adaptar para o que vc quer... 


no switch , onde é tratado o botao control ou shift pressinado,... coloca funcoes para captar o mouse_click ou mouse_move


Boa sorte !!!

Incrivel.

Sei o basico para leves manipulações de código e indicadores, mas nada que envolva criação.


Muito obrigado por dar o caminho das pedras.

 

Pessoal, 

Há possibilidade de chamar dois ObjectCreate ao mesmo tempo? pois quando tento só plota um.


Olhem esse código:

               datetime currbar_time=iTime(_Symbol,_Period,0); // Retorna o valor do tempo de abertura da barra
               // Converter o horário para uma string formatada
               string marketTimeString = TimeToString(currbar_time, TIME_MINUTES); // Retorna no formato: 16:00
               if (marketTimeString=="11:00")
               {
                double close_atual = iClose(_Symbol, _Period, 0);
                double high_atual = iHigh(_Symbol, _Period, 0);
                double open_atual = iOpen(_Symbol, _Period, 0);
                double low_atual = iLow(_Symbol, _Period, 0);
                
                
                ObjectCreate(0,"LowLine",OBJ_HLINE,0,_Period,low_atual);
                ObjectSetInteger(0,"LowLine",OBJPROP_COLOR,clrBlue);
                ObjectSetInteger(0,"LowLine",OBJPROP_STYLE,STYLE_DASH);
                ObjectCreate(0,"HighLine",OBJ_HLINE,0,_Period,high_atual);
                ObjectSetInteger(0,"HighLine",OBJPROP_COLOR,clrRed);
                ObjectSetInteger(0,"HighLine",OBJPROP_STYLE,STYLE_DASH);
               }
               
 
sandrolho #:

Ola , Existem varias formas de conseguir chegar nesta ideia sua..., 


Eu fiz outro dia um indicador, pra simular o Pointfix... 
Ele faz o mesmo que a ferramenta porem nao congela a tela ( caucula apenas fibos , canal de alta ou baixa )..


uma ideia que fiz foi :


1 - ao clicar na tecla P - Habilita para desenhar
   2 - Apos habilitado pra desenho, clicar na tecla F

        3 - absorvera os cliques do mouse ,

           ponto 1 -> click1  

           ponto 2 -> click2

           ponto 3 -> click3 

com estes 3 pontos eu criava o fibonachi... 


o mesmo pra canal de baixa ou alta , so que colocava outro habilitador de desenho 

Canal de alta - A

Canal de Baxia - B


depois clicando na tecla P, desliga o modo de Desenho. 

Para isso, você pode usar a função ChartClick para capturar os eventos de clique no gráfico. Ao clicar no gráfico, você pode obter as coordenadas do ponto de clique usando a função ChartXYToTimePrice . Em seguida, você pode usar essas coordenadas para criar o objeto desejado usando a função ObjectCreate .
Razão: