Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36908
Benutzer: 6.076
Aktive Benutzer: 496
Links: 80
Wir begrüßen unseren neuesten Benutzer: Spitzmaus
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 2 Stunden
- Spitzmaus
vor 5 Stunden
- juleslesqu...
vor einem Tag
- hmf44
vor einem Tag
- Crossa
vor einem Tag
- snatshit

Onlineuser
'Wer ist online' anzeigen Benutzer: 3
Gäste: 35
Gesamt: 38
Team: 0
Team:  
Benutzer:  Domke01, Mogli, Stier
Freunde anzeigen

Empfehlungen

Werbung

Like Tree5Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 12.10.15
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 220
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard dll Frage

Guten Tag,

ist es bei der Verwendung einer dll, um eine Berechnung durchzuführen, möglich das eine dll einen bestimmten Wert aus MT4 bekommt ohne das dieser vorher in mql definiert wurde? (da die Parameter der Variablen durch die dll vorgegeben werden).

Beispiel:
die dll durchläuft irgendeine Logik und braucht darin mehrfach unterschiedlichste Werte aus iMA(NULL,timeframe,ma_period,ma_shift,ma_method,ap plied_price,shift) in verschiedenen Kombinationen wo timeframe, periode, shift etc sich immer wieder ändern.

thx im voraus
lg
  #2 (permalink)  
Alt 13.10.15
Mitglied
 
Registriert seit: May 2015
Beiträge: 124
yytrader befindet sich auf einem aufstrebenden Ast
Standard

Hallo Ca$hDigger,

wenn ich deine Frage richtig verstanden habe, willst du innerhalb einer DLL, wenn diese Code durchführt auf Werte von Metatrader zugreifen.
Das ist nicht möglich. Es müssen alle Daten per Funktionsargumenten vom Metatrader in die DLL übergeben werden.

Gruß

yytrader
Ca$hDigger likes this.
  #3 (permalink)  
Alt 13.10.15
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 220
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Ok danke, ich habe mir schon gedacht das das Auslesen von zB iMA(...) mit den entsprechend unterschiedlichen Parametern nur durch ex4/mt4 ausgelesen werden kann. Ich überlege eben ob es ein Trick gibt den Programmablauf in der dll zu haben und trotzdem an die Werte heranzukommen...
  #4 (permalink)  
Alt 13.10.15
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 220
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

und noch eine Frage: ist es möglich mehrdimensionale Arrays über die Funktion zu transferieren?
  #5 (permalink)  
Alt 14.10.15
Mitglied
 
Registriert seit: May 2015
Beiträge: 124
yytrader befindet sich auf einem aufstrebenden Ast
Standard

Hallo Ca$hDigger,

ja das ist möglich, allerdings must du einiges beachten. Die zweite Seite des Arrays sollte vorher bekannt sein.
Versuche zuerst mal mit fixen Werten. Im MQL Sample gibt es dazu ein Beispiel.

Versche mal folgende Funktion zu integrieren. void func(int x[5][5])

Gruß

yytrader
Ca$hDigger likes this.
  #6 (permalink)  
Alt 23.10.15
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 220
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Hallo,
ich hab das nochmal probiert aber hat nicht hingehauen. Habe anhand dieses Schemas Creating Metatrader DLLs with Lazarus / Free Pascal @ Forex Factory (Lazarus) versucht Arrays zu übertragen aber ich will das in C++ machen, habe es leider nicht hinbekommen. Stand der Dinge ist folgender:

MQL:
Code:
#import "test.dll"
void VarsByReference(double& a[], int& b[]);
#import

int init()
{
   double foo[2]; // define pair of doubles
   int bar[2];    // define pair of integers
   
   foo[0] = 1.23;
   foo[1] = 4.56;
   
   bar[0] = 42;
   bar[1] = 23;
   
   VarsByReference(foo, bar);
}
Der C++ Versuch:

Code:
MT4_EXPFUNC int _cdecl VarsByReference(double &a, int &b) 
{
  a[0] += a[1];
  a[1] -= a[0];
  b[0] += b[1];
  b[1] -= b[0];

  Return(VarsByReference);
}
Gruß
  #7 (permalink)  
Alt 23.10.15
Mitglied
 
Registriert seit: May 2015
Beiträge: 124
yytrader befindet sich auf einem aufstrebenden Ast
Standard

Hallo Ca$hDigger,

hier ein Beispiel:
MQL4:
Code:
#import "Project1.dll"
int Arrays (double a[], int b[]);
#import

int init()
{
   int tmp;
   double a[10]={2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
   int b[10]={1,2,3,4,5,6,7,8,9};
   
   tmp = Arrays(a, b); 
   Print("tmp:",tmp);
   return(0);
}
C-Code:
Code:
__declspec (dllexport) int Arrays (double *a, int *b)
{
 a[0] += a[1];
 a[0] += a[2];
 
 b[0] += b[1];
 b[0] += b[2];
 
 return ((int)a[0] + b[0]);
}
Gruß

yytrader
Ca$hDigger likes this.
  #8 (permalink)  
Alt 28.10.15
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 220
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von yytrader Beitrag anzeigen
MQL4:
Code:
#import "Project1.dll"
int Arrays (double a[], int b[]);
#import

int init()
{
   int tmp;
   double a[10]={2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
   int b[10]={1,2,3,4,5,6,7,8,9};
   
   tmp = Arrays(a, b); 
   Print("tmp:",tmp);
   return(0);
}
Hallo, danke für das Beispiel. Ich bekomme nur beim kompilieren zwei mal die Fehlermeldung:
'a' - arrays are passed by reference only
'b' - arrays are passed by reference only

Gruß
  #9 (permalink)  
Alt 28.10.15
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 220
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Hab es hinbekommen da hatte noch das & gefehlt Prima das funktioniert jetzt schon mal sehr gut.

Ist das gleiche auch umgedreht möglich, also ein beliebiges Array von der dll wieder ins mql zu transportieren?

Gruß
  #10 (permalink)  
Alt 29.10.15
Mitglied
 
Registriert seit: May 2015
Beiträge: 124
yytrader befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

das kannst du nicht über die return Funktion machen. Da du Aufrufparameter als adressen übergeben hast, kannst du in der DLL einfach das Aufrufarray ändern und dann kannst du die geänderten Werte im Metatrader verwenden.
Beispiel wie vorher:

MQL4-Code:
Code:
int init()
{
   int tmp;
   double a[10]={2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
   int b[10]={1,2,3,4,5,6,7,8,9};
   
   tmp = Arrays(a, b); 
   Print("tmp:",tmp," a:",a[0]," ",a[1]," ",a[2]," ",a[3]," ",a[4]);
   return(0);
}
C-Code:
Code:
__declspec (dllexport) int Arrays (double *a, int *b)
{
 a[0] += a[1];
 a[0] += a[2];
 
 b[0] += b[1];
 b[0] += b[2];
 
 a[0] = 1.1;
 a[1] = 2.2;
 a[2] = 3.3;
 a[3] = 4.4;
 a[4] = 5.5;
 
 
 return ((int)a[0] + b[0]);
}
Gruß

yytrader
Ca$hDigger likes this.
Thema geschlossen

Lesezeichen

Stichworte
dll, dll metatrader, mql4, mql4 dll, programmierung, programmierung metatrader


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------