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

 
Andrey Sokolov:

Grüße. Können Sie mir bitte etwas sagen?

Ist es möglich, den Namen einer Variablen anstelle ihres Wertes abzurufen? Drucken Sie zum Beispiel einen Variablennamen.

#define PRINTVAR(x) Print(" " ##x); Print(x)
void OnStart()
  {
      long anyvar=(long)TimeLocal();
      PRINTVAR(anyvar);
  
  }

Ergebnis:

2020.08.24 14:46:05.394    test (USDCHF,H1)     anyvar
2020.08.24 14:46:05.394    test (USDCHF,H1)    1598280365

Möglicherweise ein Feature von unpublished :-) ähnlich wie "C", aber noch nicht nutzbar

 
Andrey Sokolov:

Sie müssen den Namen der Variablen selbst ermitteln.

Ohne den Namen zu kennen und ohne jegliche Unterscheidungsmerkmale ist dies nicht möglich. Sie können zum Beispiel die Namen aller Variablen, die gleich 5 sind, ermitteln und ihre Namen, gefunden, gedruckt ausgeben. Oder die Namen aller String-Variablen. In jedem Fall handelt es sich aber um eine variable Aufzählung.

 
Maxim Kuznetsov dankt Ihnen
 
Andrey Sokolov:
Maxim Kuznetsov Dank


Ja, es geht auch darum, eine Variable nach ihrem Namen auszuwählen.

Es gibt zum Beispiel die Variablen a1, a2, a3, a4, a5, usw. Sie müssen auch diese Variablen durchsuchen, diejenige auswählen, die "a" und 5 enthält, und sie verwenden.

dann gibt es fast keine Möglichkeit. Variablennamen sind nur über den Präprozessor zugänglich (#macros).

Wir müssen die interne Logik ändern, z. B. ein Objekt-Hash-Array mit Namen anstelle von Variablen verwenden. Dann sind sowohl Schlüssel als auch Wert sofort verfügbar. Oder verwenden Sie SQLite für die langfristige Speicherung. Oder kombinieren Sie sie :-)

Aber es ist so, ohne Kenntnis des Algorithmus, Beratung vergeblich.

 
Andrey Sokolov:

Ja, es geht auch darum, eine Variable nach ihrem Namen auszuwählen.

Es gibt zum Beispiel die Variablen a1, a2, a3, a4, a5, usw. Wir müssen auch diese Variablen aufzählen, diejenige auswählen, die "a" und 5 hat, und sie verwenden.

Schreiben Sie die Namen in ein Feld und gehen Sie das Feld durch.

 

Guten Tag zusammen, meine Frage bezieht sich auf MT4 tester, mql4 language
Bitte sagen Sie mir, was mein Fehler bei der Initialisierung eines Arrays ist. Ich habe ein eindimensionales Array mit 750 Elementen erstellt. Ich habe alle 750 Elemente mit dem Wert 50,0 initialisiert.

Das bedeutet, dass beim ersten und den folgenden Ticks das erste Array-Element mit dem Index 0 den Wert 50,0 und das letzte Array-Element mit dem Index 749 den Wert 50,0 haben muss.

Es stellt sich nämlich heraus, dass das letzte Element der Matrix den Wert 0 hat. Und die erste ist, wie es sich gehört, 50,0.

Die Frage. Wie kann man erreichen, dass alle Werte des Arrays (einschließlich des letzten) nach der Initialisierung den Wert 50.0 haben?

Hier ist mein Code

double S_L[750]={50.0};

void OnTick()
{
if (Day()==4&&Month()==1&&Year()==2010&&Hour()==0&&Minute()==0)

Print("=========================749======= ",S_L[749]," =0= ",S_L[0]);

}

Am Ende des Print()-Werts aus dem Journal

2020.08.24 17:43:55.427 GBPUSD,M1: 52255 Tick-Ereignisse (1440 Takte, 53256 Taktzustände) verarbeitet in 0:00:00.047 (Gesamtzeit 0:00:02.422)

2020.08.24 17:43:55.407 2010.01.04 00:00:53 TESTER(B.ORG) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:52 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:50 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:47 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:45 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:43 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:41 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:40 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:37 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:35 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:32 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:30 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:28 TESTER(B.ORDERS) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:26 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:25 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:22 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:20 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:17 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:15 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:13 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:11 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:10 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:07 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:05 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:02 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00 TESTER(B.ORDERS) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.385 2010.01.01 00:00:00 Tester(B.ORD.) Test gestartet


Danke für die Hilfe


Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
 
ANDREY:

Hier ist meine.

Wo?))

 
Alexey Viktorov:

Wo?)))

Oben in meinem bearbeiteten Beitrag. Vielen Dank für die Antwort.

 

ANDREY:

Frage. Wie kann ich erreichen, dass alle Werte meines Arrays (einschließlich des letzten) nach der Initialisierung den Wert 50,0 haben?

int OnInit()
{
   ArrayInitialize(S_L, 50.0);
}
 
Igor Makanu:

Danke für den Hinweis. Übrigens wollte ich klären..... In Kovalevs Tutorial heißt es, dass das Array gleichzeitig mit seiner Deklaration initialisiert werden kann (so wie ich es getan habe), ohne eine spezielle Funktion. Ich weiß, dass die Anleitung von Kovalev etwas veraltet ist. F. Verstehe ich das richtig, dass Arrays in mql4 nur noch mit einer Funktion initialisiert werden sollten?

ArrayInitialize(S_L, 50.0)

Ich danke Ihnen.

Документация по MQL5: Операции с массивами / ArrayInitialize
Документация по MQL5: Операции с массивами / ArrayInitialize
  • www.mql5.com
Функция ArrayResize() позволяет задать для массива размер с некоторым запасом для его будущего увеличения без физического перераспределения памяти. Это сделано для улучшения быстродействия, так как операции по распределению памяти...