Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1199

 

Pouvez-vous me dire comment demander des données à Program.mqh ?

il y a le code suivant

//--- Определение точек
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);
      }
comment demander des données ponctuelles à l'EA ?
 
MakarFX:

Pouvez-vous me dire comment demander des données à Program.mqh ?

il y a ce code

comment demander des données ponctuelles à un EA ?

Tout ce dont vous avez besoin pour obtenir un objet à partir d'un graphique est un nom d'objet et un identifiant de graphique:

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

Ainsi, vous pouvez obtenir les données de n'importe quel objet à partir de n'importe quel programme dans MQL4.

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

Tout ce dont vous avez besoin pour obtenir un objet à partir d'un graphique est un nom d'objet et un identifiant de graphique:

Ainsi, vous pouvez obtenir les données de n'importe quel objet à partir de n'importe quel programme dans MQL4.

Vous m'avez mal compris...

Le code ci-dessus est dans le fichier Program.mqh =>OnTimerEvent

Les valeurs des points sont périodiquement mises à jour et le conseiller expert doit recevoir ces valeurs.

D'où la question : comment demander des données à 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:

Vous me comprenez mal...

le code ci-dessus est dans le fichier Program.mqh =>OnTimerEvent

Les valeurs des points sont périodiquement mises à jour et le conseiller expert doit recevoir ces valeurs.

Donc, ma question est la suivante : comment puis-je demander des données à Program.mqh ?

Personne ne vous empêche de déclarer des variables,

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

déclarer des variables dans la zone publique de la classe CProgram et y accéder depuis l'Expert Advisor sans aucun problème.

MakarFX:

Vous m'avez mal compris...

Bien sûr, je n'ai pas compris tout de suite, car la description du problème doit être plus complète. Idéalement, il est souhaitable d'ajouter le code source.

 
Mihail Matkovskij:

Le fichierProgram.mqh est-il connecté à l'EA?

Si oui, personne ne vous empêche de déclarer des variables,

dans la portée globale de la classe CProgram et d'y accéder à partir de l'Expert Advisor sans aucun problème.

Le fichierProgram.mqh est connecté...

Je vais maintenant essayer de déclarer des variables de manière globale

 
MakarFX:

Le fichierProgram.mqh est connecté...

Maintenant, essayez de déclarer les variables de manière globale

Modifié: https://www.mql5.com/ru/forum/160683/page1199#comment_17172497 car vous m'avez initialement confondu...

 
Mihail Matkovskij:

Personne ne vous empêche de déclarer des variables,

dans la zone publique de la classe CProgram et n'ont aucun problème pour y accéder depuis l'Expert Advisor.

ne fonctionne pas

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


 
MakarFX:

ne fonctionne pas


Vous avez besoin du code source ou du code de la classeCProgram. Sinon, ça ne marchera pas...

Je voulais dire le faire comme ça :

class CProgram : ... {
...
public:
  double stS, opS, stB, opB;
...
La partie à trois est quelque chose que je ne connais pas dans votre classe :)
 
Mihail Matkovskij:

Besoin du code source ou du code pour la classeCProgram. Sinon, il ne fera pas l'affaire...

Je voulais dire le faire comme ça :

Trois points, c'est ce que je ne sais pas de votre classe :)

Merci ! !! Ça a marché.

J'ai mis sans le savoir

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

J'ai enlevé les zéros et ça a marché.

Merci beaucoup.

 
MakarFX:

Merci ! !! Tout s'est arrangé.

J'ai mis sans le savoir

J'ai enlevé les zéros et ça a marché.

Merci beaucoup.

Une dernière chose. Il est préférable d'effectuer une initialisation :

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

Sinon, le conseiller expert peut recevoir des données aléatoires dans les variables avant le tick du timer, si la lecture est effectuée dans OnTick().

Raison: