Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1126

 
a minha pergunta é se a minha EA está no gráfico poundbucks e quero que veja uma linha horizontal do gráfico eurobucks isto não funciona ?
 
Aleksandr Egorov:
a minha pergunta é se a minha EA está no gráfico GBP e quero que veja uma linha horizontal do gráfico EUR isto não funciona ?

Note o primeiro parâmetro da função

string  ObjectName( 
   long  chart_id,           // идентификатор графика 
   int   pos,                // номер в списке объектов 
   int   sub_window=-1,      // номер окна 
   int   type=-1             // тип объекта 
   );

Está presente em todas as funções do trabalho com objectos gráficos.

Utilizando o identificador correcto, pode facilmente obter as propriedades do objecto a partir de qualquer gráfico.

Документация по MQL5: Графические объекты / ObjectName
Документация по MQL5: Графические объекты / ObjectName
  • www.mql5.com
Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени. Нужно иметь это обстоятельство в виду...
 
Bem longo é m5 etc 0 gráfico actual, e String Sumbol como?
 
Aleksandr Egorov:
o longo é o gráfico actual m5 e tg 0, mas o string sumbol como? preciso dele na libra a partir do gráfico do euro talvez algo que não compreendo

Não, sem prazos - precisa de um ID de gráfico:ChartID

Uma das opções: executar um guião no gráfico com a linha, que imprimeChartID, depois pode aceder à propriedade da linha a partir de outro gráfico. Por exemplo, se for uma linha horizontal, então através deObjectGetDouble

 
Vladimir Karputov:

Não, sem prazos - precisa de um ID de gráfico:ChartID

Uma das opções: no gráfico com a linha, execute o script que imprimeChartID, depois pode aceder à propriedade da linha a partir de outro gráfico. Por exemplo, se for uma linha horizontal, então através da ObjectGetDoubl agradecemos-lhe

obrigado

 
Aleksandr Egorov:

obrigado

Existe outra opção: basta saber o nome do objecto gráfico e o tipo (é preciso o nome para procurar em todos os gráficos, e o tipo para encontrar exactamente o objecto certo) ...

 
Aleksandr Egorov:

obrigado

Variante #2: nome do conjunto, tipo de objecto e em que janela procurar por ele ("0" - na janela principal). A pesquisa é realizada no OnInit e se o objecto for encontrado, guardamos o identificador do gráfico na variável m_obj_chart_id.

//+------------------------------------------------------------------+
//|                                    Object from another chart.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameters
input string      InpObjName     = "Object Name";  // Object: Name
input ENUM_OBJECT InpObjType     = OBJ_HLINE;      // Object: Type
input int         InpObjSubWindow= 0;              // Object: Window Index
//---
long     m_obj_chart_id=-1;   // Object ChartID
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

//--- variables for chart ID
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   Print("ChartFirst =",ChartSymbol(prevChart)," ID =",prevChart);
   while(i<limit)// We have certainly not more than 100 open charts
     {
      currChart=ChartNext(prevChart); // Get the new chart ID by using the previous chart ID
      if(currChart<0)
         break;          // Have reached the end of the chart list
      int total=ObjectsTotal(currChart,InpObjSubWindow,InpObjType);
      for(int j=0; j<total; j++)
         if(ObjectName(currChart,j,InpObjSubWindow,InpObjType)==InpObjName)
           {
            m_obj_chart_id=currChart;
            break;
           }
      prevChart=currChart;// let's save the current chart ID for the ChartNext()
      i++;// Do not forget to increase the counter
     }
//---
   if(m_obj_chart_id==-1)
      return(INIT_FAILED);
   else
      Print("Object Name ",InpObjName," found on chart ",m_obj_chart_id);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
Arquivos anexados:
 
Se eu colocar ordens de mercado(TRADE_ACTION_DEAL) com níveis de Stop Loss e Take Profit especificados, mas o corretor tiver uma proibição de definir ordens com SL ou TP, a ordem será cancelada ou definida com zero SL e TP?
 
Vladimir Karputov:

Variante #2: especificar nome, tipo de objecto e em que janela procurá-lo ("0" - na janela principal). A pesquisa é realizada no OnInit e se o objecto for encontrado, guardamos o identificador do gráfico na variável m_obj_chart_id.

Ainda mais obrigado

 

Fórum sobre Comércio, Sistemas de Comércio Automatizados e Testes de Estratégia

FAQ de Iniciantes MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2019.08.31 08:16


E o seu erro está na formação do preço inicial:

//--- start work
   double start_price_ask=m_symbol.Ask()-ExtUpGap;
   double start_price_bid=m_symbol.Bid()+ExtDownGap;

Recomendo que se faça o preço inicial separadamente para as ordens Stop e separadamente para as ordens Limit pendentes.

Olá Vladimir!

Por favor, ajude-me a modificar o preço inicial do guião abaixo:

//--- start work


   double start_price_ask=0.0;
   double start_price_bid=0.0;
   if(InpPending==stop)
     {
      start_price_ask=m_symbol.Ask()+ExtUpGap;
      start_price_bid=m_symbol.Bid()-ExtDownGap;
     }
   else
      if(InpPending==limit)
        {
         start_price_ask=m_symbol.Ask()-ExtUpGap;
         start_price_bid=m_symbol.Bid()+ExtDownGap;
        }

O guião deve colocar ordens pendentes não baseadas em Ask and Bid, mas na altura e no baixo da barra anterior (candelabro).

Atenciosamente, Vladimir.