Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1199

 

¿Pueden decirme cómo solicitar los datos de Program.mqh?

hay el siguiente código

//--- Определение точек
double stS=0,opS=0,stB=0,opB=0;
   if(ObjectsTotal(0,0,OBJ_TREND)>0)
      {
      stS=NormalizeDouble(ObjectGet("OrderS",OBJPROP_PRICE1)+5*Point,Digits-1);
      opS=NormalizeDouble(ObjectGet("OrderS",OBJPROP_PRICE2)-5*Point,Digits-1);
      stB=NormalizeDouble(ObjectGet("OrderB",OBJPROP_PRICE1)-5*Point,Digits-1);
      opB=NormalizeDouble(ObjectGet("OrderB",OBJPROP_PRICE2)+5*Point,Digits-1);
      }
¿cómo solicitar datos puntuales a EA?
 
MakarFX:

¿Pueden decirme cómo solicitar los datos de Program.mqh?

existe este código

¿cómo solicitar datos puntuales a un EA?

Todo lo que necesita para obtener un objeto de cualquier gráfico es un nombre de objeto y un identificador de gráfico:

#property script_show_inputs

//--- input parameters
input long     chartID = 0;
input string   name = "OrderS";
input int      subwin = 0;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {
//---
  double stS = 0, opS = 0, stB = 0, opB = 0;
  if(ObjectsTotal(chartID, subwin, OBJ_TREND) > 0) {
    stS = NormalizeDouble(ObjectGetDouble(chartID, name, OBJPROP_PRICE1) * Point, Digits);
    opS = NormalizeDouble(ObjectGetDouble(chartID, name, OBJPROP_PRICE2) * Point, Digits);
    stB = NormalizeDouble(ObjectGetDouble(chartID, name, OBJPROP_PRICE1) * Point, Digits);
    opB = NormalizeDouble(ObjectGetDouble(chartID, name, OBJPROP_PRICE2) * Point, Digits);
    Print("stS: ", stS, "; opS: ", opS, "; stB: ", stB, "; opB: ", opB, ".");
  }
}

De este modo, se pueden obtener los datos de cualquier objeto desde cualquier programa en MQL4.

Документация по MQL5: Операции с графиками / ChartID
Документация по MQL5: Операции с графиками / ChartID
  • www.mql5.com
Операции с графиками / ChartID - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mihail Matkovskij:

Todo lo que se necesita para obtener un objeto de cualquier gráfico es un nombre de objeto y un identificador de gráfico:

De este modo, se pueden obtener datos de cualquier objeto desde cualquier programa en MQL4.

Me has entendido mal...

El código anterior está en el archivo Program.mqh =>OnTimerEvent

Los valores de los puntos se actualizan periódicamente y el Asesor Experto necesita recibir estos valores.

De ahí la pregunta: ¿Cómo solicitar datos a Program.mqh?

void CProgram::OnTimerEvent(void)
  {
   CWndEvents::OnTimerEvent();
//--- Индикатор выполнения
   static int count1=0;
//--- Пауза между обновлением элементов
   static int count2=0;
   if(count2<200)
     {
      count2+=TIMER_STEP_MSC;
      return;
     }
//--- Обнулить счётчик
   count2=0;
//--- Определение точек
double stS=0,opS=0,stB=0,opB=0;
   if(ObjectsTotal(0,0,OBJ_TREND)>0)
      {
      stS=NormalizeDouble(ObjectGet("OrderS",OBJPROP_PRICE1)+5*Point,Digits-1);
      opS=NormalizeDouble(ObjectGet("OrderS",OBJPROP_PRICE2)-5*Point,Digits-1);
      stB=NormalizeDouble(ObjectGet("OrderB",OBJPROP_PRICE1)-5*Point,Digits-1);
      opB=NormalizeDouble(ObjectGet("OrderB",OBJPROP_PRICE2)+5*Point,Digits-1);
      }
  }
 
MakarFX:

Me malinterpretas...

el código anterior está en el archivo Program.mqh =>OnTimerEvent

Los valores de los puntos se actualizan periódicamente y el Asesor Experto necesita recibir estos valores.

Entonces, mi pregunta es: ¿Cómo puedo solicitar datos de Program.mqh?

Nadie te impide declarar variables,

double stS = 0, opS = 0, stB = 0, opB = 0;

declarar variables en el área pública de la clase CProgram y acceder a ellas desde el Asesor Experto sin ningún problema.

MakarFX:

Me has entendido mal...

Por supuesto, no entendí de inmediato, porque la descripción del problema debe ser más completa. Lo ideal es añadir el código fuente.

 
Mihail Matkovskij:

¿Está el archivoProgram.mqh conectado al EA?

Si la respuesta es afirmativa, nadie le impide declarar variables,

en el ámbito global de la clase CProgram y acceder a ellos desde Expert Advisor sin problemas.

El archivoProgram.mqh está conectado...

Ahora intentaré declarar las variables de forma global

 
MakarFX:

El archivoProgram.mqh está conectado...

ahora trata de declarar las variables gobally

Editado:https://www.mql5.com/ru/forum/160683/page1199#comment_17172497 ya que inicialmente me confundió...

 
Mihail Matkovskij:

Nadie te impide declarar variables,

en el área pública de la clase CProgram y no tienen ningún problema para acceder a ellos desde el Asesor Experto.

no funciona

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick(void)
  {
  if (program.stS<0)::Print("ERROR");
  }


 
MakarFX:

no funciona


Necesitas el código fuente o el código de la claseCProgram. Si no, no funcionará...

Me refería a hacerlo así:

class CProgram : ... {
...
public:
  double stS, opS, stB, opB;
...
El trío es algo que no conozco de tu clase :)
 
Mihail Matkovskij:

Necesito el código fuente o el código de la claseCProgram. De lo contrario, no hará el trabajo...

Me refería a hacerlo así:

Tres puntos, eso es lo que no sé de su clase :)

¡¡¡Gracias!!! Ha funcionado.

Sin saberlo, puse

public:
  double stS=0, opS=0, stB=0, opB=0;

Quité los ceros y funcionó.

Muchas gracias.

 
MakarFX:

¡¡¡Gracias!!! Todo salió bien.

Sin saberlo, puse

Quité los ceros y funcionó.

Muchas gracias.

Una cosa más. Es mejor realizar la inicialización:

CProgram::CProgram():
  stS(0), opS(0), stB(0), opB(0)
{
  ...
}

En caso contrario, el Asesor Experto puede recibir datos aleatorios en variables antes del tick del temporizador, si la lectura se realiza en OnTick().