Chart Event seta na minima do candle

Para adicionar comentários, por favor Faça o login ou registrar
Marreta
94
Marreta  

Ola, Gostaria da ajuda de alguma alma caridosa para alterar a formula que fiz abaixo. Do modo como esta quando eu click on chart, uma seta de compra e plotada no grafico no exato ponto do mouse click. Gostaria de altera-la para poder, assim que click no grafico a seta fosse para a minima do candle relativo ao ponto clicado. Eu sei que isso e possivel , so nao faco ideia de como.

Valeu.

 

 

input string          InpName="ArrowBuy";   // Object name
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Print("The expert with name",MQL5InfoString(MQL5_PROGRAM_NAME),"is running");
//---
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
 void OnChartEvent(const int id, 
                  const long   &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   string comment="Last event: ";
//--- select event on chart
   switch(id)
     {
            
      //--- 1
      case CHARTEVENT_CLICK:
        {
         comment+="6) mouse click on chart";
         //--- object counter 
         static uint sign_obj_cnt;
         string buy_sign_name="buy_sign_"+IntegerToString(sign_obj_cnt+1);
         //--- coordinates 
         int mouse_x=(int)lparam;
         int mouse_y=(int)dparam;
          
         //--- time and price
         datetime obj_time;
         double obj_price;
          
         int sub_window;
         //--- convert the X and Y coordinates to the time and price values
         if(ChartXYToTimePrice(0,mouse_x,mouse_y,sub_window,obj_time,obj_price) )
            {
            //--- create object
            if(!ObjectCreate(0,buy_sign_name,OBJ_ARROW_BUY,0,obj_time,obj_price)) //OBJ_ARROW_BUY
            
              {
               Print("Failed to create buy sign!");
               return;
              }
            
           }
           
        }
     }
//---
   Comment(comment);
          
       }
Rodrigo Malacarne
Moderador
11289
Rodrigo Malacarne  
Marreta:

Ola, Gostaria da ajuda de alguma alma caridosa para alterar a formula que fiz abaixo. Do modo como esta quando eu click on chart, uma seta de compra e plotada no grafico no exato ponto do mouse click. Gostaria de altera-la para poder, assim que click no grafico a seta fosse para a minima do candle relativo ao ponto clicado. Eu sei que isso e possivel , so nao faco ideia de como.

Valeu. 

Olá Marreta,

por favor tente a abordagem abaixo e nos diga se deu certo.

Abraços,
Malacarne

 

//---
input string          InpName="ArrowBuy";   // Object name
//---
MqlRates candle[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnInit()
  {
//---
   ArraySetAsSeries(candle,true);
   
  }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
 void OnChartEvent(const int id, 
                  const long   &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   //---
   int visibleBars = (int)ChartGetInteger(0,CHART_VISIBLE_BARS,0);
   //---
   CopyRates(_Symbol,_Period,0,visibleBars,candle);

//---   
   string comment="Last event: ";
//--- select event on chart
   switch(id)
     {
            
      //--- 1
      case CHARTEVENT_CLICK:
        {
         comment+="6) mouse click on chart";
         //--- object counter 
         static uint sign_obj_cnt;
         string buy_sign_name="buy_sign_"+IntegerToString(sign_obj_cnt+1);
         //--- coordinates 
         int mouse_x=(int)lparam;
         int mouse_y=(int)dparam;
          
         //--- time and price
         datetime obj_time;
         double obj_price;
          
         int sub_window;
         //--- convert the X and Y coordinates to the time and price values
         if(ChartXYToTimePrice(0,mouse_x,mouse_y,sub_window,obj_time,obj_price) )
            {
            //---
            int barPos = Bars(_Symbol,_Period,obj_time,TimeCurrent());
            //--- create object
            if(!ObjectCreate(0,buy_sign_name,OBJ_ARROW_BUY,0,obj_time,candle[barPos].low)) //OBJ_ARROW_BUY
            
              {
               Print("Failed to create buy sign!");
               return;
              }
            
           }
           
        }
     }
//---
   Comment(comment);
          
       }
Marreta
94
Marreta  

Perfeito Malacarne, muito obrigado, voce ve, sem sua ajuda levaria anos para descobrir. Vi muitos exemplos de sistemas nos forums MQL5 em ingles, mas quase nada envolvendo click on chart.

Abusando da sua benevolencia, neste exemplo seria facil adicionar um offset  em ticks para que a seta ficasse por exemplo 2 ticks abaixo da minima? Seria usando nShift ? 

Valeu! 

Rodrigo Malacarne
Moderador
11289
Rodrigo Malacarne  
Marreta:

Perfeito Malacarne, muito obrigado, voce ve, sem sua ajuda levaria anos para descobrir. Vi muitos exemplos de sistemas nos forums MQL5 em ingles, mas quase nada envolvendo click on chart.

Abusando da sua benevolencia, neste exemplo seria facil adicionar um offset  em ticks para que a seta ficasse por exemplo 2 ticks abaixo da minima? Seria usando nShift ? 

Valeu! 

Basta definir a variável global

double tickSize = SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);

e usar 

candle[barPos].low-(2*tickSize)

Abraços,
Malacarne 

Marreta
94
Marreta  

Maravilha Malacarne, alterei a formula para que ao invez de seta apareca uma linha horizontal. 

Agora e que o bixo pega, seria possivel adicionar uma segunda linha com um segundo click no grafico? deixe eu explicar melhor, gostaria de clicar a primeira vez e ter a linha horizontal abaixo da minima do candle relativo ao primeiro click, depois ter uma segunda linha acima da maxima do candle ao clicar uma segunda vez no grafico relativo a este segundo click.

Como seria possivel isto? Teria de armazenar o primeiro click para que no segundo mantivesse a linha horizontal do primeiro?

 Segue o codigo ate o presente.

Abraco

Valeu!

//+------------------------------------------------------------------+
//|                                                           T6.mq5 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"//
input string          InpName="HLineLow";   // Object name
//---
MqlRates candle[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnInit()
  {
//---
   ArraySetAsSeries(candle,true);
   
  }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
 void OnChartEvent(const int id, 
                  const long   &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   //---
   int visibleBars = (int)ChartGetInteger(0,CHART_VISIBLE_BARS,0);
   //---
   CopyRates(_Symbol,_Period,0,visibleBars,candle);
   //---
   double tickSize = SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
//---   
   string comment="Last event: ";
//--- select event on chart
   switch(id)
     {
            
      //--- 1
      case CHARTEVENT_CLICK:
        {
         comment+="6) mouse click on chart";
         //--- object counter 
         static uint sign_obj_cnt;
         string buy_sign_name="buy_sign_"+IntegerToString(sign_obj_cnt+1);
         //--- coordinates 
         int mouse_x=(int)lparam;
         int mouse_y=(int)dparam;
          
         //--- time and price
         datetime obj_time;
         double obj_price;
          
         int sub_window;
         //--- convert the X and Y coordinates to the time and price values
         if(ChartXYToTimePrice(0,mouse_x,mouse_y,sub_window,obj_time,obj_price) )
            {
            //---
            int barPos = Bars(_Symbol,_Period,obj_time,TimeCurrent());
            //--- create object
            if(!ObjectCreate(0,buy_sign_name, OBJ_HLINE,0,obj_time,candle[barPos].low-(20*tickSize))) //OBJ_ARROW_BUY
            
              {
               Print("Failed to create buy sign!");
               return;
              }
            
           }
           
        }
     }
//---
   Comment(comment);
          
       }
Ruiprado
7
Ruiprado  
Marreta:

Maravilha Malacarne, alterei a formula para que ao invez de seta apareca uma linha horizontal. 

Agora e que o bixo pega, seria possivel adicionar uma segunda linha com um segundo click no grafico? deixe eu explicar melhor, gostaria de clicar a primeira vez e ter a linha horizontal abaixo da minima do candle relativo ao primeiro click, depois ter uma segunda linha acima da maxima do candle ao clicar uma segunda vez no grafico relativo a este segundo click.

Como seria possivel isto? Teria de armazenar o primeiro click para que no segundo mantivesse a linha horizontal do primeiro?

 Segue o codigo ate o presente.

Abraco

Valeu!

Ola Malacarne,

tudo bem..

gostaria de saber se é possivel desenvlover o mesmo programa para utilizar no mt4?

grato

Ruiprado 

Para adicionar comentários, por favor Faça o login ou registrar