Fehler, Irrtümer, Fragen - Seite 3079

 
Der Screenshot wird nicht auf dem Marktplatz geladen. Ich habe es mit zwei Browsern versucht.
 
Dmitry Fedoseev #:
Market lädt keinen Screenshot. Ich habe es mit zwei Browsern versucht.

Ich auch...

 

Guten Tag, was könnte das Problem sein? Ich verwende dll, um in SQL Server zu schreiben (Beispiel aus Artikel https://www.mql5.com/ru/articles/2895 ).

Wenn ich bis zu 5 Threads verwende, werden die Daten korrekt geschrieben. Wenn ich mehrere Threads verwende, tritt der Fehler "Unhandled exception 0xE0434352" auf.

Интеграция эксперта на MQL и базы данных (SQL Server, .NET и C#)
Интеграция эксперта на MQL и базы данных (SQL Server, .NET и C#)
  • www.mql5.com
Статья описывает, как добавить в экспертов на MQL5 возможность работы с сервером баз данных Microsoft SQL Server. Используется импорт функций из DLL. Для создания DLL применяется платформа Microsoft .NET и язык C#. Используемые в статье методы с незначительными изменениями подходят и для экспертов, написанных на MQL4.
Dateien:
SQL.mqh  19 kb
OHLC_1.mq5  5 kb
 
SEM #:

Guten Tag, was könnte das Problem sein? Ich verwende dll, um in SQL Server zu schreiben (Beispiel aus Artikel https://www.mql5.com/ru/articles/2895 ).

Wenn ich bis zu 5 Threads verwende, werden die Daten korrekt geschrieben. Wenn ich mehrere Threads verwende, erscheint der Fehler "Unhandled exception 0xE0434352" auf einmal.

In allen Funktionen der Schnittstelle DLL sollten wir try catch verwenden, catch "unhandled exception" und schreiben Sie es in log...

Es ist eine gute Idee, alle Ausnahmen abzufangen und alle Aufrufe an die Pluspunkte auszuprobieren. Auch in der MQL-Dokumentation ist es klar geschrieben - DLLs sollten keine Ausnahmen werfen, nicht C++.

insbesondere in dem Artikel conn.Close und new SqlConnection fallen nicht unter "Exception Catching" und können potenziell Ausnahmen auslösen

 
Dmitry Fedoseev #:
Der Screenshot wird nicht auf dem Marktplatz geladen. Ich habe es mit zwei Browsern versucht.
Yury Emeliyanov #:

Ich auch...

Haben Sie versucht, das Bild einfach per Drag & Drop zu verschieben?

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Markt und Mathematik

Alexey Viktorov, 2021.08.19 21:01

Versuchen Sie, ein Bild durch einfaches Ziehen und Ablegen auf dem Text einzufügen.

Ich habe nun versucht, Änderungen im versteckten Expert Advisor vorzunehmen und habe das erste Bild, das ich sah, gezogen.



 
Alexey Viktorov #:

Haben Sie versucht, das Bild einfach per Drag & Drop zu verschieben?


von 5 Bildern wird nur eines hinzugefügt

 
Andrei Trukhanovich #:

Dies ist schon seit langem der Fall. mql-Strings mögen keine Null-Zeichen innerhalb einer Zeichenkette und in Literalen, auch in Funktionen.

Der einzige normale Weg ist die Umwandlung von drei Zeichenketten in ein Array mit einer abschließenden Null.

Das heißt, dieses Verhalten, so wie es jetzt ist, wurde vor einigen Jahren absichtlich herbeigeführt. Ich kenne die Gründe nicht.

Es gibt überall Feinde

 
Maxim Kuznetsov #:

In allen Schnittstellen-DLL-Funktionen alles in try catch verpacken, die "unbehandelte Ausnahme" abfangen und protokollieren...

Es ist eine gute Idee, alle Ausnahmen abzufangen und alle Aufrufe von Pluszeichen in try zu verpacken. Auch in der MQL-Dokumentation ist es klar geschrieben - DLLs sollten keine Ausnahmen werfen, nicht C++.

insbesondere conn.Close und new SqlConnection keine Ausnahmen auslösen und möglicherweise eine auslösen könnten

Danke! Ich habe es überprüft, Zugriffsfehler auf eine gemeinsame Variable. Der Autor hat auch darüber geschrieben.

Es muss darauf hingewiesen werden, dass das Demoprojekt eine sehr wichtige Einschränkung hat: Es erlaubt nur die Ausführung eines Expert Advisors, der mit DB in einem MetaTrader-Terminal arbeitet. Das Problem ist, dass alle EAs eine Instanz einer geladenen DLL verwenden. Da unsere Klasse statisch ist, wird sie für alle laufenden Expert Advisors gleich sein. Auch die Variablen werden gemeinsam sein. Wenn Sie mehrere Experten einsetzen, verwenden diese alle dieselbe Verbindung und ein Befehlsobjekt für alle. Wenn mehrere Experten gleichzeitig versuchen, auf diese Objekte zuzugreifen, kann es zu Problemen kommen.


F: Wie kann ich einen Multithreading-Zugriff auf die DLL implementieren (separate Instanz für jeden Funktionsaufruf und lokale Variablen für jeden Aufruf)?

 
2020.08.17 01:22:44   9842:0.8953065>0.92137
2020.08.17 01:22:44   9843:0.8953065>0.92106
2020.08.17 01:22:44   9844:0.8953065>0.92075
2020.08.17 01:22:44   9845:0.8953065>0.92045
2020.08.17 01:22:44   9846:0.8953065>0.92014
2020.08.17 01:22:44   9847:0.8953065>0.91983
        

2020.08.17 01:22:48   9842:0.8953065>0.92137
2020.08.17 01:22:48   9843:0.8953065>0.92106
2020.08.17 01:22:48   9844:1.7189865>0.92075
2020.08.17 01:22:48   Create GlobalVariables for SELL 1.7189865>0.92075
2020.08.17 01:22:48   9845:0.8953065>0.92045
2020.08.17 01:22:48   9846:0.8953065>0.92014
2020.08.17 01:22:48   9847:0.8953065>0.91983

Dieses Problem tritt bei mir im MT5-Tester auf.

Wenn Sie mit mehreren Währungen arbeiten, werden gelegentlich Daten aus einer anderen Währung ausgetauscht. Prüfen Sie das Prüfgerät. Bitte korrigieren Sie dies.

Der erste Wert istSymbolInfoDouble(Symbol,SYMBOL_BID);

2020.08.17 01:11:38   9877(EURGBP):0.8952471000000001>0.91079
2020.08.17 01:11:38   9878(EURGBP):0.8952471000000001>0.91048
2020.08.17 01:11:38   9879(EURGBP):0.8952471000000001>0.91017
2020.08.17 01:11:38   9880(EURGBP):1.7184123>0.90987
2020.08.17 01:11:38   Create GlobalVariables for SELL 1.7184123>0.90987
2020.08.17 01:11:38   9881(EURGBP):0.8952471000000001>0.90956
2020.08.17 01:11:38   9882(EURGBP):0.8952471000000001>0.90925
2020.08.17 01:11:38   9883(EURGBP):0.8952471000000001>0.90894
2020.08.17 01:11:38   9884(EURGBP):0.8952471000000001>0.90864

Als ob es keine Preise empfangen kannSymbolInfoDouble(EURGBP,SYMBOL_BID); und nimmt Wert von einem anderen Paar, das in Arbeit ist. Gibt es eine Möglichkeit zu überprüfen, ob das Zitat korrekt ist?

 
SEM #:

Ich danke Ihnen! Ich habe es überprüft, Zugriffsfehler auf eine gemeinsame Variable. Der Autor schrieb auch darüber

Es sollte beachtet werden, dass das Demoprojekt eine sehr wichtige Einschränkung hat: Es erlaubt nur einen Expert Advisor, der mit DB in einem MetaTrader-Terminal arbeitet. Das Problem ist, dass alle EAs eine Instanz einer geladenen DLL verwenden. Da unsere Klasse statisch ist, wird sie für alle laufenden Expert Advisors gleich sein. Auch die Variablen werden gemeinsam sein. Wenn Sie mehrere Experten einsetzen, verwenden diese alle dieselbe Verbindung und ein Befehlsobjekt für alle. Wenn mehrere Experten gleichzeitig versuchen, auf diese Objekte zuzugreifen, kann es zu Problemen kommen.


F: Wie kann ich einen Multithreading-Zugriff auf die DLL implementieren (separate Instanz für jeden Funktionsaufruf und lokale Variablen für jeden Aufruf)?

Es gibt fast keine Möglichkeit, dies in .NET zu tun. Die Klasse ist nicht statisch, weil der Autor des Artikels böse ist, sondern weil scharfe Klassen auf diese Weise importiert werden.

Ich sehe zwei Möglichkeiten: 1) (lange Zeit zu schreiben, funktioniert schnell) in C++ umschreiben und nicht mehr berühren .NET 2) (eher mechanisch, aber die Geschwindigkeit wird nach unten gehen und es könnte Nebenwirkungen) gedankenvoll wrap Aufrufe in Critical Section zu vermeiden, zwei Threads gleichzeitig zugreifen

wenn Sharping wichtig ist, eine andere Option - die Verbindungs-Pooling-Steuerung auf DLL-Ebene neu zu schreiben, um die Zuordnung von EA<->Verbindung_id zu erinnern und jeder EA arbeitet mit seiner Verbindung;
Ich kann nicht sagen, über .net - ist es möglich, zu erhalten und speichern Sie Verweis auf Sharp's Objekt in einige MQL-Struktur oder Skalar und übergeben Sie es hin und her. Das heißt, dass sie wie ein normaler C++-Zeiger funktionieren. Wenn das möglich ist, dann wird alles vereinfacht.