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

 
yiduwi:

Hilfe, wie kann ich die erste Zeitkoordinate der Trendlinie herausfinden?

long  ObjectGetInteger( 
   long     chart_id,         // идентификатор графика 
   string   object_name,      // имя объекта 
   int      prop_id,          // идентификатор свойства 
   int      prop_modifier=0   // модификатор свойства, если требуется 
   );
 

Ich deklariere eine Variable und ein Array global und möchte den Wert der Variablen sofort dem Array zuweisen.

int yo=6;
int masss[4]={0,0,yo,0};

Und das gleiche Problem mit Funktionen, wenn Sie eine Variable einem Argument zuweisen, schlägt es fehl

void Fulr(int ty=yo){}
 
Seric29:

Ich deklariere eine Variable und ein Array global und möchte den Wert der Variablen sofort dem Array zuweisen.

Und das gleiche Problem mit Funktionen, wenn Sie eine Variable einem Argument zuweisen, schlägt es fehl

Документация по MQL5: Основы языка
Документация по MQL5: Основы языка
  • www.mql5.com
Язык MetaQuotes Language 5 (MQL5) является объектно-ориентированным языком программирования высокого уровня и предназначен для написания автоматических торговых стратегий, пользовательских технических индикаторов для анализа разнообразных финансовых рынков. Он позволяет не только писать разнообразные экспертные системы, предназначенные для...
 
Alekseu Fedotov:

Ich danke Ihnen.

 
Artyom Trishkin:

Offenbar ist es unmöglich, das normal zu sagen. In C++ kann man das tun, ich denke, es liegt daran, dass mql4 über einen Deskriptor arbeitet, d.h. es hat keinen direkten Zugriff auf den Speicher, denn jeder Wert hat eine Adresse und wenn man auf diese Adresse zugreift, kann man herausfinden, was dort ist, das macht mql4 übermäßig statisch und schränkt viele Möglichkeiten ein, insbesondere die Arbeit mit Arrays.

 

Ist es möglich, zwei Timer im EA zu erstellen? Aus irgendeinem Grund dachte ich, OnTimer() würde in einem separaten Thread aufgerufen. Aber ich habe versucht, eine Endlosschleife in OnInit() einzufügen und den Timer davor zu setzen, nur die Schleife hat funktioniert, OnTimer() wurde nicht aufgerufen.

Ich benötige zwei unabhängige Aktionen, die ständig mit einem Timer ausgeführt werden. Jedes mit seinem eigenen Intervall. Wissen Sie, wie dies umgesetzt werden kann?

 
leonerd:

Ist es möglich, zwei Timer im EA zu erstellen? Aus irgendeinem Grund dachte ich, OnTimer() würde in einem separaten Thread aufgerufen. Aber ich habe versucht, eine Endlosschleife in OnInit() einzufügen und den Timer davor zu setzen, nur die Schleife hat funktioniert, OnTimer() wurde nicht aufgerufen.

Ich benötige zwei unabhängige Aktionen, die ständig mit einem Timer ausgeführt werden. Jedes mit seinem eigenen Intervall. Wissen Sie, wie dies umgesetzt werden kann?

Zum Beispiel: bis hundert zählen und den ersten Code ausführen, bis 150 zählen und den zweiten Code ausführen. Aber auf eine gute Art und Weise, sollten Sie sich eine Multitimer-Klasse machen.
 
Artyom Trishkin:

In diesem Thread möchte ich damit beginnen, denjenigen zu helfen, die wirklich das Programmieren in der neuen MQL4 verstehen und lernen wollen und einfach zu MQL5 wechseln wollen - die Sprachen sind sehr ähnlich.

Dieser Blog ist ein guter Ort, um Probleme, Algorithmen zu ihrer Lösung und alle anderen Fragen zur MT-Programmierung zu diskutieren.

Ich hoffe, dass sich andere erfahrene Mitglieder unseres Forums an der Diskussion beteiligen werden und dass die Branche für alle interessant sein wird.

Guten Tag. Ich schreibe einen Expert Advisor zum Selbststudium und für praktische Erfahrungen. Jetzt kann er ein Signal vom Indikator empfangen und verfügt über die Funktion zur Eröffnung von KAUF- und VERKAUFS-Positionen ( Open_BUY_SELL() ). Ich habe diese Funktion aus einigen in CodeBase veröffentlichten Skripten erstellt.

FRAGE - darf ich eine sachkundige Person in diesem Thread bitten, diesen Code auf Umständlichkeit zu prüfen? ???

Ich habe an diesen Orten besondere Zweifel und Ängste:

    m_trade         = new CTrade();
    m_symbol        = new CSymbolInfo();   
    m_position_info = new CPositionInfo();   
    m_account       = new CAccountInfo();
    
    m_symbol.Name(Symbol());
    m_symbol.RefreshRates();

Ist es angemessen, dies innerhalb einer Funktion zu schreiben? Lohnt es sich, sie in OnInit() zu verschieben? Ich habe die Funktion aus zwei Skripten erstellt, die Dateien sind an den Beitrag angeheftet

CEngine        engine;
CTrade         trade;
CPositionInfo  apos;
CSymbolInfo    asymbol;

CTrade         *m_trade;
CSymbolInfo    *m_symbol;
CPositionInfo  *m_position_info; 
CAccountInfo   *m_account;

Diese Stelle ist auch verwirrend, wenn ich das richtig verstehe - Objekte der gleichen Klassen duplizieren sich gegenseitig. Ich habe nur einige Deklarationen aus der Arbeit mit dem Indikator und andere aus der Umgestaltung der Skripte in eine Funktion übrig gelassen.


Ich habe die Funktion noch nicht mit dem Signal verbunden, ich möchte den Code erst verstehen und bereinigen. Mir ist klar, dass ich irgendwo einen Fehler gemacht habe, aber mir fehlt noch das Wissen und die Erfahrung, um genau zu verstehen, wo und wie ich es richtig machen kann.

Bitte unterstützen Sie uns.

 

Angehängte Dateien - EA, zwei Skripte und Indikator.

Der Compiler wird nicht fluchen, es gibt keine Fehler zu suchen, nur einige strategische/taktische Überlegungen, ob es OK ist, dies zu tun, und wenn nicht, wie es hätte getan werden sollen.

Ich bitte Sie.

Dateien:
 
Artyom Trishkin:
Aber auf eine gute Art und Weise - die Klasse multitimer machen müssen.

man darf einfache Aufgaben nicht verkomplizieren! ... sagte ich, der die neue Funktion zur Definition von Balken untätig in eine Klasse )))) verpackte.

auf den Punkt gebracht:

leonerd:

Ist es möglich, zwei Timer in einem EA zu erstellen? Aus irgendeinem Grund dachte ich, OnTimer() würde in einem separaten Thread aufgerufen. Aber ich habe versucht, eine Endlosschleife in OnInit() einzufügen und den Timer davor zu setzen, nur die Schleife hat funktioniert, OnTimer() wurde nicht aufgerufen.

Ich benötige zwei unabhängige Aktionen, die ständig mit einem Timer ausgeführt werden. Jedes mit seinem eigenen Intervall. Wissen Sie, wie dies umgesetzt werden kann?


#property strict
//--- input parameters
input int      Timer1=13;
input int      Timer2=21;
static int timer1=0,timer2=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if((timer1++)>Timer1) { timer1 = 0; Print("Timer №1"); }
   if((timer2++)>Timer2) { timer2 = 0; Print("Timer №2"); }
  }
//+------------------------------------------------------------------+
Grund der Beschwerde: