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

 
Igor Zakharov:

Dies ist kein Ersatz - MB funktioniert nicht in Indikatoren, da es den Durchfluss stoppt, bis die Taste gedrückt wird!

Ich habe versehentlich darauf hingewiesen, aber das ist nicht das, was in der Notiz steht:

Hinweis

Es wird nicht empfohlen, diese Funktion in benutzerdefinierten Indikatoren zu verwenden, da der Aufruf von MessageBox() die Ausführung des Indikator-Threads für die gesamte Zeit des Wartens auf die Antwort des Benutzers anhält. Und da alle Indikatoren für jedes Symbol in einem einzigen Thread ausgeführt werden, werden alle Charts für alle Zeitrahmen für dieses Symbol angehalten.

Bei der Arbeit im Strategietester wird die Funktion MessageBox() nicht ausgeführt.

 
MakarFX:

Ich bin kein Programmierer, ich bearbeite den Indikator für meine eigene Bequemlichkeit. Ich habe es nicht im Testgerät, sondern in Echtzeit überprüft.

Übrigens, es gibt keine Telepathen.

Wenn Sie wissen, welche der hier verfügbaren Indikatoren diese Funktion nutzen, sagen Sie es mir bitte, vielleicht finde ich es dann selbst heraus.

Danke

Wir haben alles.

Клуб Телепатов
Клуб Телепатов
  • 2011.05.08
  • www.mql5.com
Клуб телепатов Вас послали сюда? Тогда давайте знакомиться! Как же такое могло случиться со мной...
 
Artyom Trishkin:

Sie deklarieren eine Variable mit dem Strukturtyp im lokalen Bereich, die Sie an die Funktion senden. In demselben lokalen Bereich.

Wenn Sie eine Variable für eine Struktur im Feld anlegen, bezieht sich ihr Geltungsbereich auf die gesamte Funktion und nicht auf einen lokalen Bereich. Hier ist ein Beispiel.

int OnInit()
  {
{int In=8;
 MyPoint qr;}
qr - видна здесь
In - здесь не видна
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason){}

struct MyPoint
{
    int x[5];
    int y;
};

Es hat sich herausgestellt, dass es nicht mehr möglich ist, vor Ort zu arbeiten.

 

Ich versuche, Daten aus einer CSV-Datei in einem Skript zu lesen. Ich habe kein Glück und verstehe überhaupt nicht, warum.

Ich verwende ein einfaches Verfahren, um sie zu lesen:

bool GetBiFromFile(string InFNam,int& alBars,double& xClose[],datetime& xTime[])
{  int  InHndl,nBars;
   bool fset;
   double aval;
   
   InHndl = FileOpen(InFNam+".csv",FILE_READ|FILE_CSV,",");
   if (InHndl==INVALID_HANDLE) {
       Print("File "+InFNam+" does not open. Error: ", GetLastError()); 
       return(false); 
   } else {
      fset = FileSeek(InHndl,0,SEEK_SET);
      ArrayResize(xClose,alBars);      
      ArrayInitialize(xClose,0.0);  
      ArrayResize(xTime,alBars);       
      ArrayInitialize(xTime,0);  
      nBars = 0;
      while (!FileIsEnding(InHndl)) {
         nBars++;
         xTime[nBars-1]  = FileReadDatetime(InHndl);;
         xClose[nBars-1] = FileReadDouble(InHndl);
         aval = FileReadDouble(InHndl);
         if (nBars>=alBars) break;
      }
   }
   Print("nBars = ",nBars,"   allBars = ",alBars);
   Print("Start: ",xClose[0],"   " + TimeToString(xTime[0],TIME_DATE|TIME_SECONDS));
   Print("End: ",xClose[nBars-1],"   " + TimeToString(xTime[nBars-1],TIME_DATE|TIME_SECONDS));
   return(true);
}

Die Datei mit den Daten hat die folgende Form:

2012.01.02 02:00:02,1.293240,1.293410

2012.01.02 02:00:52,1.293330,1.293500

2012.01.02 02:00:55,1.293810,1.293980

....

Und das Ergebnis der Print()-Anweisungen der Prozedur ist

nBars = 1000 alBars = 1000

Start: 0.0 2020.01.29 01:00:00

Ende: 0.0 2020.01.29 01:00:00

Das heißt, alle Zeilen werden in der Leseschleife verarbeitet, aber es wird nichts gelesen. Und keine Fehlermeldung.

Kann mir das jemand erklären?


 
Yurixx:

Kann mir das jemand erklären?

Binäre Funktionen lesen eine Textdatei.

 
Alexey Viktorov:

Wir haben alles.

Du bist böse!

 
MakarFX:

Du bist gemein!

Ich tue nur so.

Wenn Sie das Programmieren verstehen wollen, sollten Sie versuchen, es selbst herauszufinden. Wenn Sie es einfach tun müssen, gehen Sie zu dem Thread, in dem sie anbieten, es kostenlos zu schreiben, posten Sie dort Ihren Indikator und beschreiben Sie Ihr Anliegen.


ps: Ich habe alles überprüft. Alert() spielt aus irgendeinem Grund den ausgewählten Sound nicht ab, selbst wenn sie vor PlaySound() platziert wurde. Vielleicht ist mein Gedächtnis schlecht, aber das ist nicht der Punkt.

Sie können Alert() stummschalten, indem Sie es doppelt antippen, um ein rotes Kreuz zu erhalten


und in diesem Fall spielt es keine Rolle, was vor Alert() oder PlaySound() geschrieben wird

 
Alexey Viktorov:

Ich tue nur so.


und in diesem Fall macht es keinen Unterschied, ob Alert() oder PlaySound() davor steht

In diesem Fall wird das Warnfenster nicht geöffnet.(

 
fxsaber:

Sie lesen eine Textdatei mit Binärfunktionen.

Über die FunktionFileReadDouble() heißt es, dass sie aus einer Binärdatei liest.

Aber überFileReadDatetime() heißt es: "Liest aus der CSV-Datei eine Zeichenkette in einem der folgenden Formate: "JJJJ.MM.TT HH:MI:SS", "JJJJ.MM.TT" oder "HH:MI:SS" - und wandelt sie in einen Datumswert um".

Das gleiche Bild ergab sich auch, wenn ichFileReadString() verwendete und dann die Zeichenketten selbst in den richtigenTyp konvertierte.

Wie sollte ich es Ihrer Meinung nach tun?


 
Yurixx:

Wie sollte es Ihrer Meinung nach gemacht werden?

void OnStart()
{
  datetime time;
  
  double PriceBid;
  double PriceAsk;
  
  string Str = "2012.01.02 02:00:02,1.293240,1.293410";
  string StrArray[];
  
  if (StringSplit(Str, ',', StrArray) > 2)
  {
    time = (datetime)StrArray[0];
    
    PriceBid = (double)StrArray[1];
    PriceAsk = (double)StrArray[2];
  }
}
Grund der Beschwerde: