MetaTrader 4 Build 529 beta mit neuem Compiler veröffentlicht - Seite 105

 
Night63:

Kolleginnen und Kollegen, bei der Zusammenstellung erscheint eine Warnmeldung:

mögliche Verwendung einer nicht initialisierten Variable 'PipStep'

für einen Brocken wie diesen:

Alle Variablen sind als double initialisiert, was ist daran falsch?

Sie haben Variablen vom Typ double deklariert, die Initialisierung ist die Zuweisung von Werten an die deklarierten Variablen

double PipStep=0 ; make

 
Ich verstehe nicht, bin ich der Einzige, der die Indikator-Demos im 555er Build nicht testen kann, oder ist das für das Marktdebüt gar nicht so wichtig?
 
Candid:
Ich verstehe nicht, bin ich der Einzige, der die Indikator-Demos im 555er Build nicht testen kann, oder ist das für das Marktdebüt gar nicht so wichtig?

werden sie in 5 getestet?
 

ArrayCopyRates() также изменила свое поведение, раньше она производила виртуальное копирование в массив double[][6], теперь же производится виртуальное копирование в массив MqlRates[]. Для совместимости осталось копирование в массив double[][6], но это копирование не виртуальное, а реальное.

https://www.mql5.com/ru/forum/148325

MqlRates

Struktur zur Speicherung von Preis-, Volumen- und Spread-Informationen.

https://www.mql5.com/ru/docs/constants/structures/mqlrates

Ist MqlRates in MetaTrader 4 build 555 ein Array oder eine Struktur?

Dieses Beispiel aus der Hilfe (MetaTrader 4 build 555) funktioniert nicht, da es keine Funktion CopyRates gibt

void OnStart()
  {
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,100,rates);
   if(copied>0)
     {
      Print("Скопировано баров: "+copied);
      string format="open = %G, high = %G, low = %G, close = %G, volume = %d";
      string out;
      int size=fmin(copied,10);
      for(int i=0;i<size;i++)
        {
         out=i+":"+TimeToString(rates[i].time);
         out=out+" "+StringFormat(format,
                                  rates[i].open,
                                  rates[i].high,
                                  rates[i].low,
                                  rates[i].close,
                                  rates[i].tick_volume);
         Print(out);
        }
     }
   else Print("Не удалось получить исторические данные по символу ",Symbol());
  }
 

//+------------------------------------------------------------------+
//|                                                     my_test1.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property  strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   ArrayCopyRates(rates,"EURUSD",PERIOD_M1);
   //int copied=CopyRates(Symbol(),0,0,100,rates);

   Print(
         " спред ",rates[6].spread               
         );
  }
//+------------------------------------------------------------------+
Dies funktioniert auch nicht, können Sie ein funktionierendes Beispiel in MetaTrader 4 Build 555 mit MqlRates sehen?
 
ALXIMIKS:

Testen sie in 5?

Gibt es auch Leute, die nicht in 5 Jahren testen?
 
ALXIMIKS:

Sie deklarieren Variablen vom Typ double, die Initialisierung ist die Zuweisung von Werten an die deklarierten Variablen

double PipStep=0 ; do


Es hat funktioniert!!!

Lebe und lerne!

Herzlichen Dank!

 
serferrer:

Ist MqlRates in MetaTrader 4 build 555 ein Array oder eine Struktur?

Dieses Beispiel aus der Hilfe (MetaTrader 4 build 555) funktioniert nicht, da es keine Funktion CopyRates gibt

Dies funktioniert auch nicht, können wir ein funktionierendes Beispiel in MetaTrader 4 Build 555 mit MqlRates sehen?


MqlRates - Struktur

MqlRates[] - Array von Strukturen

Ein Beispiel für die Arbeit mit der MqlRates-Struktur finden Sie im Skript period_converter_new

Ein Beispiel für eine ArrayCopyRates Operation (Dokumentation wird aktualisiert)

MqlRates array1[];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",array1[0].time,"  цена открытия ", array1[0].open);
 
MetaQuotes:

Änderungen in MQL4

  • ArrayCopyRates() hat auch sein Verhalten geändert: Früher wurde virtuell in das Array double[][6] kopiert, jetzt wird virtuell in das Array MqlRates[] kopiert. Jetzt wird das Kopieren in das Array double[][6] durchgeführt, aber nicht virtuell, sondern real.

Ich habe eine beträchtliche Anzahl von Expert Advisors, die DLLs verwenden, und sie wurden schon vor langer Zeit an Kunden weitergegeben. Wir haben Arrays double[][6] verwendet, um Parameter an die DLL zu übergeben , die während der Initialisierung von ArrayCopyRates() virtuell hineinkopiert wurden. Beim Aufruf von Funktionen aus der DLL wurden dann diese Arrays und ihre aktuelle Größe als Parameter per Referenz übergeben.

Es stellt sich heraus, dass alle diese EAs nicht mehr funktionieren, wenn das Terminal auf eine neue Version aktualisiert wird. Das ist bedauerlich.

Verstehe ich richtig, dass zu halten Sie arbeiten, ohne den DLL-Code zu ändern, sollten wir ArrayCopyRates() vor jedem Aufruf einer Funktion aus der DLL aufrufen?

 
stringo:
In der MqlRates-Strukturgibt es jetzt keinen Spread-Wert (möglicherweise auch keinBörsenvolumen ), wird dieser später hinzugefügt?
 
Patrol:

Ich habe eine beträchtliche Anzahl von EAs, die DLLs verwenden, die schon vor langer Zeit an Kunden weitergegeben wurden. Zur Übergabe von Parametern an die DLL haben wir Arrays double[][6] verwendet , in die während der Initialisierung die Funktion ArrayCopyRates() virtuelle Zeitreihen kopiert hat. Und dann wurden diese Arrays und ihre aktuelle Größe als Parameter beim Aufruf von Funktionen aus der DLL per Referenz übergeben.

Es stellt sich heraus, dass alle diese EAs nicht mehr funktionieren, wenn das Terminal auf eine neue Version aktualisiert wird. Das ist bedauerlich.

Verstehe ich richtig, dass, um zu halten Sie arbeiten, ohne den DLL-Code zu ändern, sollten wir ArrayCopyRates() vor jedem Aufruf einer Funktion aus der DLL aufrufen?


Es ist etwas komplizierter als das. Auch die Struktur der DLL hat sich geändert.

Sie müssen also ArrayCopyRates in MqlRates Struktur Array umschreiben. Auch in Ihrer DLL müssen Sie die Beschreibung der entsprechenden Struktur ersetzen