Fehler, Irrtümer, Fragen - Seite 2449

 
Alexey Navoykov:

Jemand hier hat empfohlen, den Hash aus den Quellen zu berechnen. Dazu muss man alle Quellen (includniki) kennen, die das Programm verwendet, d.h. man muss den Code genau parsen. Sie müssen nicht unbedingt explizit angegeben werden (#include <file.mqh>), sondern können als Makros angegeben werden.

Nun, wenn etwas von Makros abhängt, dann muss man, um das Ergebnis zu ändern, die Makros, d.h. die Quelle, ändern. Ich habe in dem Artikel alle Abhängigkeiten von include-ums aufgelistet. Dort werden übrigens die Kommentare entfernt, so dass der reine Code übrig bleibt.

#property script_show_inputs

input string SourceFile = "filename.txt";
input string IncludesFolder = "";
input bool LoadIncludes = false;

void OnStart()
{
  Preprocessor loader(SourceFile, IncludesFolder, LoadIncludes);
  
  if(!loader.run())
  {
    Print("Loader failed");
    return;
  }

  // output entire data as it is assembled from one or many files
  int handle = FileOpen("dump.txt", FILE_WRITE | FILE_TXT | FILE_ANSI, 0, CP_UTF8);
  FileWriteString(handle, loader.text().get());
  FileClose(handle);
}
Aber ich stimme zu, dass es bequemer ist, alles im Editor selbst zu haben, als manuell.
 
Stanislav Korotky:

Nun, wenn etwas von Makros abhängt, dann müssen die Makros, d.h. der Quellcode, geändert werden, um das Ergebnis zu ändern. Ich habe alle Abhängigkeiten durch include-ums in dem Artikel angegeben. Dort werden übrigens die Kommentare herausgenommen, so dass der reine Code übrig bleibt.

Danke, das war selbst mir nicht bewusst. Es stimmt, Sie schrieben dort, dass man über Makros stolpern kann. Wir werden es aber sorgfältig prüfen.

Die Entwicklung dieses Projekts hat noch ein riesiges Potenzial, vor allem in Bezug auf die Verbesserung der Sprache intern, weil viele Dinge in MQL noch nicht implementiert worden sind und viele Dinge schlecht funktionieren (Bugs) und die Entwickler, soweit ich weiß, keine Pläne haben, etwas in der Sprache selbst zu verbessern.

 
In der CCanvas-Klasse sind die Methoden FontGet, TextWidth, TextHeight und TextSize aus irgendeinem Grund als nicht konstant deklariert, obwohl sie keine Änderungen an der Klasse vornehmen. Sie arbeiten nur, um Daten zu erhalten.
 

Ich verstehe nicht, ist es unmöglich, eine Eigenschaft wie Enabled=false für das grafische Element "Button" zu setzen, so dass der Button nicht mehr gedrückt werden kann?

D.h. der Benutzer drückt zunächst die Taste, es wird eine Art Prozess gestartet und die Taste sollte in der gedrückten Position verbleiben, ohne auf weitere Betätigungen zu reagieren. Ist dies möglich?

p.s. Ich habe es gefunden. Setzen Sie die Priorität für das Objekt auf negativ.
 

Wie können Sie Daten (Text) aus dieser Liste abrufen?

 
fxsaber:

Können Sie mir sagen, wie ich Daten (Text) aus dieser Liste abrufen kann?

https://www.mql5.com/ru/docs/convert/enumtostring

Документация по MQL5: Преобразование данных / EnumToString
Документация по MQL5: Преобразование данных / EnumToString
  • www.mql5.com
//| Script program start function                                    |
 

Ich brauche eine Liste aller Aufzählungen in der QuickInfo.

Ich habe mehrere Fensterprogramme ausprobiert. Funktioniert nicht, da die Liste verschwindet, wenn der Fokus weggeht.
Программы для работы с окнами приложений | Темная сторона Силы | Blog. Just Blog
  • ManHunter / PCL
  • www.manhunter.ru
В процессе разработки программ, а также их исследования, очень часто приходится работать с окнами приложений на уровне системы. То есть просматривать или менять стили окон, передавать или отслеживать сообщения и уведомления, обрабатывать другие параметры окон. У меня накопилась небольшая подборка программ, значительно облегчающих выполнение...
 

Helfen Sie mir mit OnTradeTransaction() weiter. Ist das unten beschriebene Verhalten normal? Ich habe es im Tester überprüft - es ist so :( Und auf einem "Live"-Konto?

OnTick() hat eine Schleife, die die Positionen der Reihe nach schließt.

Mit OnTradeTrancaction() wird die Anzahl der offenen Positionen berechnet.

Der Expert Advisor geht folgendermaßen vor: Er schließt zuerst die Schleife bis zum Ende, dann geht er zu OnTradeTransaction und führt die Berechnungen in derselben Reihenfolge durch.

Mit anderen Worten, es gibt keine

закрытие тикета #1 -> подсчёт с учетом закрытия тикета #1 -> закрытие тикета #2 -> подсчёт с учетом закрытия тикета #2 -> ...

а

закрытие тикета #1 -> закрытие тикета #2 -> ... -> подсчёт с учетом закрытия тикета #1 -> подсчёт с учетом закрытия тикета #2 -> ...

d.h. er arbeitet sequentiell statt parallel.

Wenn das oben beschriebene normal ist, stellt sich heraus, dass OnTradeTransaction() nur in Expert Advisors, die nur eine Order öffnen/schließen, sicher verwendet werden kann. Wenn es ein Raster oder ein Raster mit mehreren Symbolen gibt (oder ein Raster mit mehreren Symbolen, wie es hier zu finden ist :) ) - bricht der Algorithmus zusammen.

 
Igor Zakharov:

Helfen Sie mir mit OnTradeTransaction() weiter. Ist das unten beschriebene Verhalten normal? Ich habe es im Tester überprüft - es ist so :( Und auf einem "Live"-Konto?

Auf einem echten Konto ist immer alles komplizierter als auf einem Demokonto und im Tester.

Das OnTradeTransaction-Konzept ist schlecht durchdacht, aber die Meinung "Sie wissen einfach nicht, wie man sie kocht" ist ständig zu hören.


Entweder schreiben Sie ohne Transaktionsdaten, oder Sie holen sie von außen an beliebiger Stelle im Programm, ohne auf die Eingabe von OnTradeTransaction zu warten.

Asynchronität ist gut für ein Multisymbolnetz. Daher würde ich mich für die zweite Option entscheiden.
 
Befindet sich terminal64.exe oder metatester64.exe dort, wo der Tester sitzt? Ich muss herausfinden, welche Datei ich ändern muss, um den Fehler zu beseitigen.