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 MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   extern oder input (http://www.expert-advisor.com/forum/showthread.php?t=6788)

Max2018 28.09.20 10:48

extern oder input
 
Hallo
ich habe eine Frage. Was ist der Unterschied zwischen einer input Variable und einer extern Variable . Wann wird welche genutzt und warum?
Z.B.
Code:

extern int    Magicnummer                =12;
extern double AnfangsBetrag              =1400;

oder
Code:

input int    Magicnummer                =12;
input double AnfangsBetrag              =1400;

Danke :confused:

Ca$hDigger 28.09.20 16:48

"input" ist read only und so nicht durch das mql Programm änderbar. Ähnlich dem const anderer Programmiersprachen.

"extern" ist durch das mql Programm änderbar.

Gruß

Max2018 28.09.20 17:00

Heisst das, daß bei der Angabe "extern" diese im laufenden Betrieb bei eingestellten
"Import von externen Advisors zulassen"
und/oder
"Import von DLLs zulassen"
von einem Dritten geändert werden können?:confused:

Ca$hDigger 28.09.20 18:15

input und extern heißt nur, dass die Variablen über die grafische Oberfläche vom user einstellbar sind. Bei extern kann eben das mql-Programm diese Variable verstellen wie eine normale Variable.

Wegen Zugriff von Dritten, input, extern und normale Variablen sind immer im "Besitz" des entsprechenden Programms/EAs. Ein anderer EA etc kann darauf nicht ohne Weiteres zugreifen.

Zum Thema DLL, diese muss immer von einem EA bewusst eingebunden werden und kann, sofern es so programmiert ist, Zugriff auf Daten des EAs bekommen. Ich würde eine DLL aber deswegen nicht als "Dritte" bezeichnen da sie wie eine Funktion für den entsprechenden EA als Verbund genutzt wird.
Unseriöse DLLs können aber natürlich Schaden anrichten aber wer sowas nutzt bekommt dann sowieso ganz andere Probleme als den Zugriff auf Variablen in EAs.
Ich setzte mal voraus man nutzt nur Codes die man kennt oder von seriöser Quelle sind dann gibt es von "Dritten" auch nichts zu befürchten.

Max2018 29.09.20 07:54

Ich habe meine Frage wahrscheinlich falsch gestellt. Ich möchte in bestehenden EAs - ohne diese zu verändern - (!!) die externen Variablen beim starten des EAs automatisch anpassen. z.B. soll eine Variable durch die Abhängigkeit zum VIX oder VDAX sich entsprechend anpassen. Diese Berechnung der neuen Variablen wird von einem anderen Programm übernommen und an den MT4 übermittelt. Da diese Anpassung aber eine große Anzahl an EAs betrifft möchte ich diese eben nicht einzeln ändern, sondern diese externe Variable global über eine andere Methode ändern und einlesen - eben über die externen Variablen..... Geht so was und wenn ja wie? Offenbar hat MetaQuotes ja so etwas über die externen Variablen vorgesehen: https://docs.mql4.com/basis/variables/externvariables

RetepM 29.09.20 10:11

Hi, das ist allerdings eine ganz andere Baustelle... Wenn ich deine Frage richtig verstehe, hast du einen EA (über dessen Quellcode du nicht verfügst?) und der beim Starten eine globale Variable anlegt. Hast du schon einmal versucht diese Variable händisch zu ändern? Bleibt sie im Programmlauf geändert bestehen oder setzt sie der Original-EA im Laufe des Handels wieder zurück?

Wenn der EA den Wert der globalen Variable nicht zurücksetzt, dann kannst du mit deinem externen Programm eine .csv -Datei anlegen, diese mit einem noch zu erstellenden, neuen EA einlesen und dann durch den neuen EA die Variable ändern.
Grüße

Ca$hDigger 29.09.20 11:14

Wenn die Values der Variablen von außen zugewiesen werden dann ist input und extern sowieso nicht nötig (und input nicht möglich da read only).
Mach einfach eine normale Variable und übergebe auf dem gewünschtem Wege den Wert.

Wenn der Quelltext nicht bekannt ist bzw der EA nur in komplilierter Form vorliegt dann ist der einzige offizielle Weg zum einstellen von input und extern Variablen die GUI. Variablen einer Blackbox auf anderem Wege zu ändern ist nicht ohne Weiteres möglich.

Max2018 29.09.20 18:30

Zitat:

Zitat von RetepM (Beitrag 44480)
Hi, das ist allerdings eine ganz andere Baustelle... Wenn ich deine Frage richtig verstehe, hast du einen EA (über dessen Quellcode du nicht verfügst?) und der beim Starten eine globale Variable anlegt. Hast du schon einmal versucht diese Variable händisch zu ändern? Bleibt sie im Programmlauf geändert bestehen oder setzt sie der Original-EA im Laufe des Handels wieder zurück?

Wenn der EA den Wert der globalen Variable nicht zurücksetzt, dann kannst du mit deinem externen Programm eine .csv -Datei anlegen, diese mit einem noch zu erstellenden, neuen EA einlesen und dann durch den neuen EA die Variable ändern.
Grüße

Hi, doch, den Quellcode aller EAs habe ich...... Ich wollte aber nicht alle ändern, sondern die dort hinterlegten externen Variablen über einen "eleganteren" Weg global ändern.

Ca$hDigger 29.09.20 21:33

Ohne Eingriff in den Quellcode geht das nicht.
Die EAs müssen sich die Daten selbst holen, denn etwas von Außen hat gar nicht die Berechtigung auf die Variablen des EAs zuzugreifen. Was du vor hast ist im Grunde eine Speicherzugriffsverletzung was nicht geht und auch gut so ist.
https://de.wikipedia.org/wiki/Speicherschutz

MA-EA 29.09.20 21:59

@ Max2018

Könntest vielleicht in jedem EA das jeweilige Symbol() abfragen und die gewünschten GV dementsprechend vom EA ändern/einstellen lassen.
Code:

if( Symbol() == "A" ){

GV_eins = Wert-für-Symbol A...

GV_zwei = Wert-für-Symbol A...



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