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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 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