Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1199

 

Potete dirmi come richiedere i dati da Program.mqh?

c'è il seguente codice

//--- Определение точек
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);
      }
come richiedere i dati dei punti da EA?
 
MakarFX:

Potete dirmi come richiedere i dati da Program.mqh?

c'è questo codice

come richiedere i dati dei punti da un EA?

Tutto ciò di cui avete bisogno per ottenere un oggetto da qualsiasi grafico è un nome di oggetto e un identificatore di grafico:

#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, ".");
  }
}

Così, è possibile ottenere i dati di qualsiasi oggetto da qualsiasi programma in MQL4.

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

Tutto ciò di cui avete bisogno per ottenere un oggetto da qualsiasi grafico è un nome di oggetto e un identificatore di grafico:

Così, è possibile ottenere i dati di qualsiasi oggetto da qualsiasi programma in MQL4.

Mi hai frainteso...

Il codice di cui sopra è nel file Program.mqh =>OnTimerEvent

e i valori dei punti vengono aggiornati periodicamente e l'Expert Advisor deve ricevere questi valori.

Da qui la domanda: come richiedere dati da 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:

Lei mi fraintende...

il codice di cui sopra è nel file Program.mqh =>OnTimerEvent

I valori dei punti vengono aggiornati periodicamente e l'Expert Advisor deve ricevere questi valori.

Quindi, la mia domanda è: come posso richiedere i dati da Program.mqh?

Nessuno vi impedisce di dichiarare le variabili,

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

dichiarare le variabili nell'area pubblica della classe CProgram e accedervi da Expert Advisor senza problemi.

MakarFX:

Mi hai frainteso...

Certo, non ho capito subito, perché la descrizione del problema deve essere più completa. Idealmente, è auspicabile aggiungere il codice sorgente.

 
Mihail Matkovskij:

Il fileProgram.mqh è collegato all'EA?

Se sì, nessuno vi impedisce di dichiarare le variabili,

nell'ambito globale della classe CProgram e ottenere l'accesso ad essi da Expert Advisor senza problemi.

Il fileProgram.mqh è collegato...

Ora proverò a dichiarare le variabili globalmente

 
MakarFX:

Il fileProgram.mqh è collegato...

ora provate a dichiarare le variabili in modo gobale

Edited:https://www.mql5.com/ru/forum/160683/page1199#comment_17172497 dato che inizialmente mi hai confuso...

 
Mihail Matkovskij:

Nessuno vi impedisce di dichiarare le variabili,

nell'area pubblica della classe CProgram e non hanno problemi ad accedervi dall'Expert Advisor.

non funziona

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


 
MakarFX:

non funziona


Avete bisogno del codice sorgente o del codice della classeCProgram. Altrimenti, non funzionerà...

Intendevo dire di fare così:

class CProgram : ... {
...
public:
  double stS, opS, stB, opB;
...
Il trio è qualcosa che non conosco della tua classe :)
 
Mihail Matkovskij:

Ho bisogno del codice sorgente o del codice per la classeCProgram. Altrimenti, non farà il lavoro...

Intendevo dire di fare così:

Tre punti, ecco cosa non so della tua classe :)

Grazie!!! Ha funzionato.

Ho messo inconsapevolmente

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

Ho tolto gli zeri e ha funzionato.

Grazie mille.

 
MakarFX:

Grazie!!! Tutto ha funzionato.

Ho messo inconsapevolmente

Ho tolto gli zeri e ha funzionato.

Grazie mille.

Un'altra cosa. È meglio eseguire l'inizializzazione:

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

Altrimenti, l'Expert Advisor può ricevere dati casuali nelle variabili prima del tick del timer, se la lettura viene eseguita in OnTick().

Motivazione: