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)
-   -   #import verstehen (http://www.expert-advisor.com/forum/showthread.php?t=7225)

AVT 11.08.22 22:55

#import verstehen
 
Könnte mir bitte jemand erklären, wie ich die #import bei einem Indikator benutze?

Ich habe folgendes vor:
Ein Haupt-Indikator soll einen anderen Neben-Indikator importieren, der nur die reinen Berechnungen macht und die Ergebnisse in seine Buffer packt. Anstatt nun den ganzen Kram aus dem Neben-Indiktor in den Haupt-Indikator zu packen, müßte es doch möglich sein, den Neben-Indikator einfach zu importieren.

Mein Problem dabei ist:
In der Referenz wird zwar gesagt, die Funktionen des Importierten müssen mit ihrem vollständigen Funktionsname(Typ Zusatz1, Typ Zusatz2, ...) gelistet werden, wenn man sie benutzen will - aber die Funktion, die ich aus dem Neben-Indikator brauche, ist die OnCalculate, denn da werden ja die ganzen Berechnungen gemacht. (ja, ich habe gesehen, daß alles, was innerhalb #import steht, auch denselben Namen haben kann wie Funktionen, die im Haupt-Indikator stehen)
:confused: 1.
Wie soll das gehen, etwa so:
#import Neben-Indikator
OnCalculate(const int rates_total,const int prev_calculated,...,const int &spread[])
#import

:confused: 2.
Was ist mit der OnInit(), muß die da auch rein?
Und was ist mit den Hilfsfunktionen, die der Neben-Indikator innerhalb der OnCalculate(...) aufruft, müssen die auch noch gelistet werden oder ist das durch OnCalculate(...) schon abgedeckt.

:confused: 3.
Und wie binde ich die Ausgaben des Neben-Indikators dann in den Haupt-Indikator ein?
Kann der iCustom(NULL,0, "Neben-Indikatorname", Zusätze, Buffer,Barindex) dann so bleiben?

Wäre nett, wenn jemand mir da beim Verständnis helfen könnte, die Reihenfolge die bei solch einem Import passiert, zu verstehen.
AVT

TraumExpert 19.08.22 15:35

Hallo AVT,

sollte für Dein Vorhaben nicht die iCustom () Funktion das richtige Mittel sein?

Wenn Du was importieren willst muss du es auch exportieren z.b. aus einer Test.dll

dort wird dann die Funktion die Du importieren wirst wie folgt hinterlegt:

string IchBinEinString() export {

return ("Ich bin ein Test String");

};


In dem File in dem Du dann importieren möchtest

steht oben

#import "Test.dll"
string IchBinEinString();
#import


Ab jetzt kannst Du die Funktion an der benötigten Stelle mit

IchBinEinString();

verwenden.

Grüße

TraumExpert

AVT 20.08.22 02:03

Danke für Deine Antwort.
Zitat:

Zitat von TraumExpert (Beitrag 46245)
sollte für Dein Vorhaben nicht die iCustom () Funktion das richtige Mittel sein?

Sobald ich iCustom(...,Indikatorname,...) verwende, muß dieser Indikator auch zwingend da vorhanden sein, wo er mit "Indikatorname" gerufen wird. Nun packe ich meine eigenen Indikatoren aber nicht einfach wild unter Indicators rein, sondern in geordnete Unterstrukturen. So, und was passiert, wenn ich die Unterstruktur ändere oder den so kompilierten "nackten" Hauptindikator weitergebe? "cannot load /Pfad/zu/Indikatorname" - funktioniert also nicht.

Zitat:

Zitat von TraumExpert (Beitrag 46245)
Wenn Du was importieren willst muss du es auch exportieren z.b. aus einer Test.dll
dort wird dann die Funktion die Du importieren wirst wie folgt hinterlegt:
string IchBinEinString() export {
return ("Ich bin ein Test String");
};

Beispiele, wie das mit einer .dll funktioniert habe ich schon gesehen. ABER, und nun kommt das große Aber: In der Dokumentation ist die Rede von einem kompilierten Programm (nix anderes ist ja eine .dll). Ich habe aber keine .dll, sondern eine .ex4. Auch das ist ein kompiliertes Programm. Und da sollte es doch keinen Unterschied geben.

Und eine #export gibt es in MQL nicht. Darum meine Fragen, wie ich das denn einbinden (also wie Du schreibst erst mal exportieren) soll. Ich hoffe, Du verstehst wo bei mir die Probleme liegen.

Natürlich könnte ich hergehen und die komplette Berechnung in eine Funktion CalcNebenIndikator(...) packen und damit den iCustom Aufruf vermeiden: durch den Aufruf von CalcNebenIndikator(). Wenn ich aber mehrere Hauptindikatoren habe, die allesamt denselben Nebenindikator verwenden, dann ist es schlicht unnütze Aufblähung, das in jedem Hauptindikator immer wieder zu wiederholen. Genauso ist es (meiner Meinung nach) völlig hirnrissig, für jeden Hauptindikator ein eigenes Verzeichnis zu machen, in dem dann die verwendeten iCustom Indikatoren liegen, nur damit dieses "cannot load" vermieden wird. Und diese Überlegungen haben mich auf die #import Idee gebracht - platt gesagt, wenn ich mit #include Quellcode einbinden kann, dann geht das mit #import für Programmcode.

AVT

TraumExpert 20.08.22 12:23

Hmmm, ja Du kannst auch eine ex4 als Library hernehmen.

export siehe https://docs.mql4.com/basis/function/export

Schreibe eine library mit den benötigten Funktionen für Deine Indikatoren, dass Template sieht wie folgt aus:

//+------------------------------------------------------------------+
//| test.mq4 |
//| Copyright 2022, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property library
#property copyright "Copyright 2022, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| My function |
//+------------------------------------------------------------------+
// int MyCalculator(int value,int value2) export
// {
// return(value+value2);
// }
//+------------------------------------------------------------------+


Grüße

TraumExpert

AVT 21.08.22 19:28

Zitat:

Zitat von TraumExpert (Beitrag 46248)
Hmmm, ja Du kannst auch eine ex4 als Library hernehmen.
export siehe https://docs.mql4.com/basis/function/export

Danke für den Link, ich werde mir das mal reinziehen und dann versuchen, einen kleinen Test-Indie zu basteln. Kann allerdings sein, daß ich da dann noch mal nachfragen muß. ;)
AVT


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