Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1199

 

Können Sie mir sagen, wie ich Daten aus Program.mqh abrufen kann?

gibt es den folgenden Code

//--- Определение точек
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);
      }
Wie kann man Punktdaten von EA anfordern?
 
MakarFX:

Können Sie mir sagen, wie ich Daten aus Program.mqh abrufen kann?

gibt es diesen Code

Wie kann man Punktdaten von einem EA anfordern?

Alles, was Sie brauchen, um ein Objekt aus einem beliebigen Diagramm abzurufen, ist ein Objektname und ein Diagrammbezeichner:

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

So können Sie die Daten eines beliebigen Objekts aus einem beliebigen Programm in MQL4 abrufen.

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

Alles, was Sie brauchen, um ein Objekt aus einem beliebigen Diagramm abzurufen, ist ein Objektname und ein Diagrammbezeichner:

So können Sie in MQL4 die Daten eines beliebigen Objekts aus einem beliebigen Programm abrufen.

Sie haben mich missverstanden...

Der obige Code befindet sich in der Datei Program.mqh =>OnTimerEvent

Die Punktwerte werden in regelmäßigen Abständen aktualisiert und der Expert Advisor muss diese Werte erhalten.

Daher die Frage: Wie kann man Daten von Program.mqh abfragen?

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:

Du missverstehst mich...

der obige Code befindet sich in der Datei Program.mqh =>OnTimerEvent

Die Werte der Punkte werden regelmäßig aktualisiert und der Expert Advisor muss diese Werte erhalten.

Meine Frage lautet also: Wie kann ich Daten von Program.mqh abfragen?

Niemand hindert Sie daran, Variablen zu deklarieren,

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

Variablen im öffentlichen Bereich der CProgram-Klasse deklarieren und problemlos vom Expert Advisor aus darauf zugreifen.

MakarFX:

Sie haben mich missverstanden...

Natürlich habe ich das nicht sofort verstanden, denn die Beschreibung des Problems muss vollständiger sein. Idealerweise ist es wünschenswert, den Quellcode hinzuzufügen.

 
Mihail Matkovskij:

Ist die DateiProgram.mqh mit dem EA verbunden?

Wenn ja, hindert Sie niemand daran, Variablen zu deklarieren,

im globalen Bereich der Klasse CProgram und können von Expert Advisor aus problemlos darauf zugreifen.

Die DateiProgram.mqh ist verbunden...

Ich werde nun versuchen, Variablen global zu deklarieren

 
MakarFX:

Die DateiProgram.mqh ist verbunden...

Versuchen Sie nun, die Variablen gobal zu deklarieren

Editiert:https://www.mql5.com/ru/forum/160683/page1199#comment_17172497 da Sie mich zunächst verwirrt haben...

 
Mihail Matkovskij:

Niemand hindert Sie daran, Variablen zu deklarieren,

im öffentlichen Bereich der CProgram-Klasse und können problemlos vom Expert Advisor aus aufgerufen werden.

funktioniert nicht

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


 
MakarFX:

Funktioniert nicht


Sie benötigen den Quellcode oder den Code der KlasseCProgram. Sonst wird es nicht funktionieren...

Ich wollte es so machen:

class CProgram : ... {
...
public:
  double stS, opS, stB, opB;
...
Die Dreiergruppe ist etwas, das ich von deiner Klasse nicht kenne :)
 
Mihail Matkovskij:

Benötige Quellcode oder Code fürCProgram Klasse.Andernfalls wird es nicht funktionieren...

Ich wollte es so machen:

Drei Punkte, das ist es, was ich nicht über deine Klasse weiß :)

Ich danke Ihnen!!! Es hat funktioniert.

Ich habe unwissentlich

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

Ich habe die Nullen entfernt und es hat funktioniert.

Ich danke Ihnen vielmals.

 
MakarFX:

Ich danke Ihnen!!! Es hat alles geklappt.

Ich habe unwissentlich

Ich habe die Nullen entfernt und es hat funktioniert.

Ich danke Ihnen vielmals.

Noch eine Sache. Es ist besser, eine Initialisierung durchzuführen:

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

Andernfalls kann der Expert Advisor Zufallsdaten in Variablen vor dem Tick des Timers erhalten, wenn das Lesen in OnTick() erfolgt.

Grund der Beschwerde: