Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL5 (http://www.expert-advisor.com/forum/forumdisplay.php?f=221)
-   -   DLL Werte behalten (http://www.expert-advisor.com/forum/showthread.php?t=5001)

marquez 15.06.16 08:06

DLL Werte behalten
 
Hi,

ich habe mal wieder eine Frage an die programmier Profis hier.

Und zwar habe ich im moment eine kleine Herausforderung:

Ich habe eine DLL in C++ erstellt, die ein Array enthält, was maximal 256 Werte aufnehmen kann (default Wert: 0).

Code:

long ChartId[255] = { 0 };

Jetzt wollte ich es so gestalten, dass ein Indikator von seinem Chart die ChartID ins Array beginnend mit Index 0 reinschreibt. Im nächsten Chart dann entsprechend Index 1 die Chart ID usw.

Dabei stoße ich auf folgendes Problem:
Wenn ich den Indikator nur in ein Chart hineinlade, den Wert schreiben lasse, und danach die Timeframe wechsel, initialisiert mir der Indikator alles komplett neu, also auch die DLL.

Habe ich jedoch den gleichen Indikator bereits in mehrere Charts geladen, und wechsel ich die Timeframe in irgend einem Chart, wirkt sich der re-init auf die DLL nicht mehr aus.

zum Verständnis für was es sein soll:

Ich erhalte per httprequest Rückgabewerte die ich zum späteren Zeitpunkt für eine Weiterverarbeitung innerhalb des MQL Codes benötige. Da der Indikator nun beim Timeframe wechsel, soweit mir bekannt ist, immer alles Values neu initialisiert, wollte ich dies anhand der DLL umgehen und die Werte dort zwischenspeichern um sie hinterher wieder auslesen zu können.


Hat irgend wer einen Tipp, wie ich das lösen kann ?


Vielen Dank für Antworten und Anregungen.
marquez

Kronenchakra 30.07.16 20:52

Werte behalten
 
Wären Globalvariablen nicht die einfachere Lösung?

marquez 31.07.16 19:19

Zitat:

Zitat von Kronenchakra (Beitrag 35188)
Wären Globalvariablen nicht die einfachere Lösung?

Nein, da leider beim umschalten der Periode durch den Benutzer der ganze Indikator neu initalisiert wird, und somit auch die Globalen Variablen einen reset erleiden. Außerdem habe ich bei einer globalen Variable nur innerhalb des einen asset Zugriff auf die Werte.

Wenn ich eine DLL nutze, kann ich die Werte bei jedem Chart auslesen und nutzen, und nicht nur in dem einem Asset.

Oder weiss ich da irgendwas nicht mit globalen Variablen ?

yytrader 31.07.16 20:09

Hallo marquez,

ich denke Kronenchakra meinte diese globalen Variablen:
https://docs.mql4.com/globals
Diese sind global im Terminal und werden durch Neuinitialisierungen von EAs nicht resettet.

Gruß

yytrader

Kronenchakra 31.07.16 20:25

Reset bei Periodenwechsel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo marquez!

Also beim MT5 bleiben die Globalen Variablen erhalten.
Hab da schnell einen Testindikator gebastelt, da ich die globalen Variablen ja auch brauche.
Ich steuere damit die Indikatoren die mir meine eigenen Tickdaten speichern.
Somit kann ich beliebig viele Indis ein- oder ausschalten.

LG Otto

marquez 01.08.16 16:52

Hi,

In der Tat muß ich zugeben, diese globalen kannte ich noch gar nicht.


Danke für Eure Hinweise. Die sind echt Gold wert. Alle Daumen hoch die ich habe dafür.

Aber eine Frage hätte ich dann dazu noch eben. Sind die dann nur innerhalb des Charts abrufbar, oder von jedem Tab alle benutzbar ?

Bsp: Tab1 setzt Value1 , und tab3 soll Value1 abfragen können

Kronenchakra 01.08.16 17:11

Globale Variable
 
Die sind von allen Tabs(Charts) aufrufbar.
Wie schon beschrieben, steuere ich damit Indikatoren auf mehreren Charts.

LG Otto

marquez 15.08.16 05:38

Danke für Eure Antworten.

Die haben mir echt geholfen.


Eine kurze Frage hätte ich dann zu den globalen Variablen noch :)

Können globale Variablen nur als Double benutzt werden ? Oder gibt es ne Möglichkeit, in globalen Variablen auch andere formate abzuspeichern wie strings o.ä. ?

Zudem, kann man auch echte Arrays mit globale Variablen erzeugen ? Oder muss man die wirklich erzeugen a la "globaleVariable1, globaleVariable99" etc ?

Kronenchakra 16.08.16 01:00

Die globalen Variablen können nur double.
Falls du was anderes brauchst, schreib es in Dateien.
Ist zwar langsam, aber wenn du ssd hast, erträglich.

marquez 18.08.16 04:03

Ok,

danke nochmal für die Auskünfte.

Eine (hoffentlich abschliessende) Frage habe ich noch.


Ich habe jetzt meinen Code soweit umprogrammiert, so dass ich mit den globalen Variablen arbeiten kann. Soweit so gut, ABER:

wenn ich die compilierte Datei weiter gebe, gibt es Anwender, bei denen es damit zu Probleme führt. Das einzige was ich rückschliessen konnte bisher, diese Anwender haben allesamt (soweit ich verfolgen konnte) Windows 10.

Ist irgendwas bekannt, dass es mit Windows 10, oder eine bestimmten Metatraderversion Probleme gibt mit den globalen Variablen ?

Ich habe bei mir alles unter Windows 7 erstellt und fehlerfrei gestestet. Daher stehe ich damit jetzt ein wenig auf dem Schlauch.

Und ich kann mir keins von den Windows 10 Systemen oder Computern beschaffen um diesen Fehler nachstellen zu versuchen.


DANKE NOCHMAL FÜR HINWEISE.

RetepM 18.08.16 08:40

Hi, ich denke, das hat mit den "Rechten unter Win 10, aber machmal auch Win 8 zu tun. Widerlich, es lebe MS!

marquez 20.08.16 05:37

Gibts ne Möglichkeit zuverlässig gegenzuprüfen ?

Wie gesagt, habe selbst nicht Zugriff auf alle Windows Systeme, und die anderen, bei denen dieses Problem herrscht, kann ich nicht zu Beta tester degradieren.

RetepM 20.08.16 10:15

Ich bin ziemlich sicher, dass Win 10 das Schreiben der globalen Variablen in C:\Users\DeinUser\AppData\Roaming\MetaQuotes\Termi nal\UserMetatrader\MQL4\Files verhindert.
Siehe auch hier:
AppData-Ordner: Finden, öffnen und löschen ? GIGA

Kronenchakra 03.09.16 04:16

Globale Variable
 
War gerade auf Urlaub, deswegen leider die Verspätung.
Habe Windows 10 und verwende MT5.
Funktioniert alles ordnungsgemäß.
Habe allerdings die versteckten Dateien eingeschaltet.
Sonst kommt man ja garnicht auf die "Appdata".
LG

marquez 03.09.16 07:47

Ok,

also wenn Du auf Appdata alles hast, bist Du wohl als Benutzer angemeldet. Damit erübrigt sich meine Frage ob Du admin oder Benutzer in Windows bist.

Aber lotst Dich der MT nicht in den richtigen Pfad wenn Du darauf klickst ?

http://image.prntscr.com/image/58e0f...0607fa73ef.png

Also ich weiß nicht wie das genau ist, ich hab auch immer alles an, aber normalerweise kommste da doch hin ??!?

Zu meiner weiteren Problematik hierbei:

Kann es sein, dass Du statische Globale Variablen nutzt ?
Ich wollte es mit temporären Globalen Variablen machen, so dass nach einem MT restart die Values neu initailisert sind, und da kommen diese Probleme (außer bei mir :) )

https://www.mql5.com/en/docs/globals/globalvariabletemp

Vielleicht kommen wir der Sache ja doch noch irgendwie auf die Schliche, so dass ich es noch nachstellen und beheben kann.


Thx...

Kronenchakra 03.09.16 23:35

Globale Variable
 
Bin als Benutzer mit Administratorrechten angemeldet.
Die Berechtigung für Verzeichnis MQL5 ist Vollzugriff(Eigenschaften->Reiter Sicherheit). Unter Eigenschaften->Reiter Allgemein ist Schreibgeschützt markiert. Ist halt Windows. :D
Das kann aber nur beim Dateischreiben relevant sein.
Die globalen Variablen, egal ob statisch oder temporär, kann das nicht betreffen, weil die ja nur im Speicher sind. MT5 speichert die statischen selbständig.
Gibts ein Fehlerlog?
Was sagt LastError?
Wie äussert sich der Fehler?

marquez 16.09.16 07:46

Ich werde wohl nicht drum rum kommen mir ein Windows 10 System zu installieren um den Fehler nachzustellen (irgendwie).

Im moment kann ich leider nur die kompilierten Sachen weitergeben, und zum testen freigeben. Wie Du Dir sicher vorstellen kannst, ist das jedoch nicht der Weisheit letzter Schluss. Da das debugging so ziemlich uneffektiv ist.

marquez 22.09.16 19:16

Hallo,

kurzes Update:

ich habe jetzt Windows 10 installiert um den Fehler nachstellen zu können.

Aber egal was ich auch anstelle. Also sowohl als Administrator, als auch mit einem normalen Benutzeraccount, ich kriege den Fehler nicht nachgestellt ... :mad:

Und ich habe keine Ahnung, was die anders machen, um den Fehler hinzubekommen.

Mir gehen die Ideen aus...

Kronenchakra 22.09.16 21:32

Ist doch nett, das Windows 10 :rolleyes:

Also ich verwende die statischen Globalen.
Nocheinmal: Wie äussert sich der Fehler, was sagt LastError?
Zeig doch das Codefragment das die Probleme macht.

Grüße Otto

marquez 22.09.16 22:46

Hi Otto,

statische Globale verwende ich extra nicht, da diese beim beenden vom MT5 nicht gelöscht werden.

Ich hätte gerne bei jedem Neustart vom MT5 frische Variablen und Werte.

Zu LastError kann ich nix genaues sagen,weil:
Ich nicht genau weiß wo der Fehler herkommt, also ob die Variablen bei denjenigen erst gar nicht angelegt werden, oder es beim schreiben probleme gibt. Daher lese ich LastError auch nicht aus.

Interessant ist jedenfalls, ich habe an dem Code in Sachen Globalvars nichts geändert und rausgegeben an jemand, der den Fehler hatte. Bei ihm geht es jetzt (auch) merkwürdigerweise.

Das ganze wird mir immer mehr suspekter.

Was ich mir auch schon überlegt hab, ob es vllt. an 32 / 64 Bit liegen kann ??!?

So wie mir das jedenfalls aussieht, muss ich die Version so rausgeben, und mit jemandem, bei dem es Fehler wirft zusammen die Ursache ausarbeiten (per Fernwartung oder wie auch immer).

Anders scheine ich der Sache nicht habhaft zu werden.


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:06 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum