Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1126

 
mi pregunta es si mi EA está en el gráfico de libras y quiero que vea una línea horizontal del gráfico de euros esto no funciona ?
 
Aleksandr Egorov:
mi pregunta es si mi EA está en el gráfico de la GBP y quiero que vea una línea horizontal desde el gráfico del EUR esto no funciona ?

Observe el primer parámetro de la función

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

Está presente en todas las funciones de trabajo con objetos gráficos.

Utilizando el identificador correcto puede obtener fácilmente las propiedades del objeto desde cualquier gráfico.

Документация по MQL5: Графические объекты / ObjectName
Документация по MQL5: Графические объекты / ObjectName
  • www.mql5.com
Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени. Нужно иметь это обстоятельство в виду...
 
Bien largo es m5 etc 0 gráfico actual, y String Sumbol ¿cómo?
 
Aleksandr Egorov:
el largo es el m5 y tg 0 gráfico actual, pero la cadena sumbol como? lo necesito en la libra del gráfico del euro o algo que no entiendo

No, no hay marcos temporales - se necesita un ID de gráfico:ChartID

Una de las opciones: ejecutar un script en el gráfico con la línea, que imprimael ChartID, entonces puede acceder a la propiedad de la línea desde otro gráfico. Por ejemplo, si se trata de una línea horizontal, entonces a través deObjectGetDouble

 
Vladimir Karputov:

No, no hay marcos temporales - se necesita un ID de gráfico:ChartID

Una de las opciones: en el gráfico con la línea, ejecutar el script que imprimeChartID, entonces se puede acceder a la propiedad de la línea desde otro gráfico. Por ejemplo, si es una línea horizontal, entonces a través de ObjectGetDoubl gracias

gracias

 
Aleksandr Egorov:

gracias

Hay otra opción: sólo necesitas saber el nombre del objeto gráfico y el tipo (necesitas el nombre para buscar en todos los gráficos, y el tipo para encontrar exactamente el objeto correcto) ...

 
Aleksandr Egorov:

gracias

Variante #2: establecer el nombre, el tipo de objeto y en qué ventana buscarlo ("0" - en la ventana principal). La búsqueda se realiza en OnInit y si se encuentra el objeto, guardamos el identificador del gráfico en la variable 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()
  {
//---

  }
//+------------------------------------------------------------------+
Archivos adjuntos:
 
Si coloco órdenes de mercado(TRADE_ACTION_DEAL) con niveles especificados de Stop Loss y Take Profit, pero el broker tiene prohibido establecer órdenes con SL o TP, ¿se cancelará la orden o se establecerá con SL y TP cero?
 
Vladimir Karputov:

Variante #2: especificar nombre, tipo de objeto y en qué ventana buscarlo ("0" - en la ventana principal). La búsqueda se realiza en OnInit y si se encuentra el objeto, guardamos el identificador del gráfico en la variable m_obj_chart_id.

Gracias aún más

 

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategia

FAQ de principiantes MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2019.08.31 08:16


Y su error está en la formación del precio de salida:

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

Recomiendo hacer el precio de salida por separado para las órdenes pendientes de Stop y por separado para las de Límite.

¡Hola Vladimir!

Por favor, ayúdenme a modificar el precio de inicio del script de abajo:

//--- 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;
        }

El script debe colocar órdenes pendientes no basadas en la oferta y la demanda, sino en la altura y el mínimo de la barra anterior (vela).

Sinceramente, Vladimir.