Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1199

 

Você pode me dizer como solicitar dados do Program.mqh?

há o seguinte 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);
      }
como solicitar dados de pontos à EA?
 
MakarFX:

Você pode me dizer como solicitar dados do Program.mqh?

há este código

como solicitar dados pontuais de um EA?

Tudo o que você precisa para obter um objeto de qualquer gráfico é um nome de objeto e um 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, ".");
  }
}

Assim, você pode obter os dados de qualquer objeto de qualquer programa na MQL4.

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

Tudo o que você precisa para obter um objeto de qualquer gráfico é um nome de objeto e um identificador de gráfico:

Assim, você pode obter dados de qualquer objeto de qualquer programa na MQL4.

Você me entendeu mal...

O código acima está no arquivo Program.mqh =>OnTimerEvent

e os valores dos pontos são atualizados periodicamente e o Expert Advisor precisa receber esses valores.

Daí a pergunta: Como solicitar dados do 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:

Você me entendeu mal...

o código acima está no arquivo Program.mqh =>OnTimerEvent

Os valores dos pontos são atualizados periodicamente e o Expert Advisor precisa receber esses valores.

Então, minha pergunta é: Como posso solicitar dados do Program.mqh?

Ninguém está impedindo que você declare variáveis,

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

declarar variáveis na área pública da classe CProgram e acessá-las do Consultor Especialista sem nenhum problema.

MakarFX:

Você me entendeu mal...

É claro que não entendi de imediato, porque a descrição do problema deve ser mais completa. Idealmente, é desejável acrescentar o código fonte.

 
Mihail Matkovskij:

O arquivoProgram.mqh está conectado ao EA?

Se sim, ninguém está impedindo que você declare variáveis,

no âmbito global da classe CProgram e obter acesso a eles do Expert Advisor sem nenhum problema.

O arquivoprogram.mqh está conectado...

Vou agora tentar declarar variáveis globalmente

 
MakarFX:

O arquivoprogram.mqh está conectado...

agora tente declarar as variáveis gobally

Editado:https://www.mql5.com/ru/forum/160683/page1199#comment_17172497 como você inicialmente me confundiu...

 
Mihail Matkovskij:

Ninguém está impedindo que você declare variáveis,

na área pública da classe CProgram e não têm problemas para acessá-los do Consultor Especialista.

não funciona

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


 
MakarFX:

não funciona


Você precisa do código fonte ou código da classeCProgram. Caso contrário, não vai funcionar...

Eu quis dizer fazer assim:

class CProgram : ... {
...
public:
  double stS, opS, stB, opB;
...
O trio é algo que eu não sei sobre sua classe :)
 
Mihail Matkovskij:

Precisa de código fonte ou código para a classeCProgram. Caso contrário, não fará o trabalho...

Eu quis dizer fazer assim:

Três pontos, isso é o que eu não sei sobre sua classe :)

Obrigado!!! Funcionou.

Eu, sem saber, coloquei

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

Eu tirei os zeros e funcionou.

Muito obrigado.

 
MakarFX:

Obrigado!!! Tudo deu certo.

Eu, sem saber, coloquei

Eu tirei os zeros e funcionou.

Muito obrigado.

Mais uma coisa. É melhor realizar a iniciação:

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

Caso contrário, o Expert Advisor pode receber dados aleatórios em variáveis antes do tick do timer, se a leitura for realizada em OnTick().

Razão: