Jump to content
Tom Next - Daytrading Community

Metatrader 4 - Undock/ Detach Charts


Vola

Recommended Posts

Auf der Suche nach einem Script bin ich zur Seite von MT4i gelangt und habe da ne ganze Menge Tools entdeckt, die für den einen oder anderen vllt. von Interesse sein könnten. (Siehe Bild)

 

Auch ein Tool um den Sread für den Backtest einzufrieren ist vorhanden.

 

mm.01.png mm1.01.png

 

 

Das Script was ich suche (von MT4i) ist leider nicht zum Download aufzufinden. (Undock Chart)

Daher gleich mal ne Frage an die Cracks.

 

Warum läuft das Script nicht auf einer anderen Plattform, als z.B. nur bei IBFX ?

Liegt das an der .dll oder kann man das irgendwie ändern das es auf anderen Plattformen ebenfalls läuft ?

 

Anbei der Code:

 

#property copyright "(c) MT4i.com"
#property link      ""

#import "MT4iConnect.dll"
  int DetachChart2(int a0, int a1);
#import

void start() {
  if (!IsDllsAllowed()) {
     MessageBox("Please turn on \"Allow DLL imports\" in order to undock charts");
     return;
  }
  DetachChart2(WindowHandle(Symbol(), Period()), 3);

Edited by whipsaw
Titel und Beschreibung geändert; Original: MT4i |MT4 Service Grund: SEO und Erleichtern der Suche nach Schlüsselbegriffen
Link to comment
Share on other sites

Auf der Suche nach einem Script bin ich zur Seite von MT4i gelangt und habe da ne ganze Menge Tools entdeckt, die für den einen oder anderen vllt. von Interesse sein könnten.

 

Ich denke auch dass es an der DLL liegt.

 

Ein Fenster zu entkoppeln dürfte eine Funktion aus dem Windows-API sein, das sollte sich also auch mit einer eigenen DLL ohne viel Aufwand machen lassen. Wenn es jemandem wirklich wichtig ist müsste man da weiter graben.

 

Lutz

Edited by ronner
Zitat wg Überlänge gekürzt.
Link to comment
Share on other sites

das sollte sich also auch mit einer eigenen DLL ohne viel Aufwand machen lassen. Wenn es jemandem wirklich wichtig ist müsste man da weiter graben.

Naja, schön wäre es schon. (hescheln)

Man wäre halt unabhängig vom Broker und wäre nicht gezwungen auf bestimmte Plattformen zugreifen zu "müssen".

Link to comment
Share on other sites

Naja, schön wäre es schon. (hescheln)

Man wäre halt unabhängig vom Broker und wäre nicht gezwungen auf bestimmte Plattformen zugreifen zu "müssen".

 

Ich kenne mich im Windows API nicht sonderlich aus, aber der Punkt 43 könnte die richtige Funktion sein:

Windows API

 

'SetWindowRgn-Funktion

Diese Funktion setzt eine Region für ein Fenster. Nach erfolgreichem Aufruf der Funktion wird das Fenster nur noch innerhalb der zugewiesenen Region angezeigt.'

 

Wenn man das auf 0 setzt wird die Beschränkung aufgehoben und das Fenster sollte frei auf dem ganzen Desktop beweglich sein.

 

Auch Nr. 41 (Set-Parent Funktion) käme in Frage: 'hWndNewParent Das Handle des neuen Elternfensters. Ist dieser Wert NULL, wird der Desktop zum neuen Elternfenster.'

 

Ist jemand hier der sich da besser auskennt?

 

Lutz

  • Upvote 1
Link to comment
Share on other sites

Auch Nr. 41 (Set-Parent Funktion) käme in Frage: 'hWndNewParent Das Handle des neuen Elternfensters. Ist dieser Wert NULL, wird der Desktop zum neuen Elternfenster.'

 

Ich habe mal noch ein wenig weiter gesucht. Microsoft erklärt das hier:

 

Window Features

 

'An application can change the parent window of an existing child window by calling the SetParent function. In this case, the system removes the child window from the client area of the old parent window and moves it to the client area of the new parent window. If SetParent specifies a NULL handle, the desktop window becomes the new parent window. In this case, the child window is drawn on the desktop, outside the borders of any other window. '

 

Also müsste der Script SetParent aus der DLL user32.dll aufrufen. Um das Fenster später ohne Neustart wieder anzudocken wäre entweder das Handle des ursprünglichen Fensters zu speichern (wo?) oder man ermittelt das Handle des Metatrader-Fensters später im Script für das andocken neu.

 

Lutz

  • Upvote 1
Link to comment
Share on other sites

Hier zumindest schon mal ein rudimentärer Script der das Fenster herauslöst. Die Darstellung danach klappt aber noch nicht, dazu muss der Stil des Fensters von WS_CHILD auf WS_POPUP geändert werden. Mal sehen ob ich noch herausfinde wie man das macht.

 

//+------------------------------------------------------------------+
//|                                                   Chart2Desk.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""

#include <WinUser32.mqh>

#import "user32.dll"
 int     SetParent(int hWndChild, int hWndNewParent);

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
 {
//----

int hwnd = WindowHandle (Symbol(),Period());
SetParent(hwnd,NULL);

// hier noch Stil ändern, WS_CHILD durch WS_POPUP ersetzen

//----
  return(0);
 }
//+------------------------------------------------------------------+

 

Lutz

  • Upvote 2
Link to comment
Share on other sites

Hehe,

Super ! wäre ja echt toll wenn das klappt :top:

 

Bin ein Stück weiter, der Chart ist jetzt im Fenster sichtbar. Es fehlt aber noch der Rand oben um das Fenster verschieben zu können, ausserdem muss das alte Fenster gelöscht werden.

 

Ich wühle mich weiter durch die Untiefen von Windows und wie man das dann aus MQL aufruft.

 

Lutz

Link to comment
Share on other sites

Ich wühle mich weiter durch die Untiefen von Windows und wie man das dann aus MQL aufruft.

 

Im Ansatz funktioniert es, das Fenster ist erst mal aussen verschiebbar, wenn auch etwas schmucklos.

 

Aber: die Mausereignisse des jetzt verwaisten Fensters usw. müssten jetzt wieder zum ehemaligen Fenster geleitet werden. Ich glaube hier brauchen wir jemanden der sich gut mit Windows-Programmierung auskennt.

 

//+------------------------------------------------------------------+
//|                                                   Chart2Desk.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""

#import "user32.dll"
 int     SetParent(int hWndChild, int hWndNewParent);
 int     GetWindowLongA (int hWnd ,int index);
 int     SetWindowLongA (int hWnd ,int index, int style);
 int     SetWindowPos(int hWnd, int hWndInsertAfter,int X, int Y, int cx, int cy, int uFlags);
 
#define GWL_STYLE -16
#define WS_CHILD 0x40000000
#define WS_POPUP 0x80000000
#define WS_CAPTION 0x00C00000
#define HWND_TOPMOST 0

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
 {
//----

int hwnd = WindowHandle (Symbol(),Period());
SetParent(hwnd,NULL);

//hier Stil ändern, WS_CHILD durch WS_POPUP ersetzen
int style = GetWindowLongA(hwnd, GWL_STYLE);
style = style & (0xffffffff-WS_CHILD);
style = style | WS_POPUP;
style = style | WS_CAPTION;
SetWindowLongA(hwnd, GWL_STYLE, style);
SetWindowPos(hwnd, HWND_TOPMOST,0,0,0,0,0x0027);

//----
  return(0);
 }
//+------------------------------------------------------------------+

 

Lutz

  • Upvote 1
Link to comment
Share on other sites

Im Ansatz funktioniert es, das Fenster ist erst mal aussen verschiebbar, wenn auch etwas schmucklos.

 

Vielen Dank für deine Mühe :10points:

 

Habe den Code mal ausprobiert, auf meinen Plattformen ist das Fenster aber noch nicht verschiebbar. Der Code lässt sich zwar kompilieren und abspeichern, aber beim

einfügen in den Chart passiert gar nichts

Link to comment
Share on other sites

Vielen Dank für deine Mühe :10points:

 

Habe den Code mal ausprobiert, auf meinen Plattformen ist das Fenster aber noch nicht verschiebbar. Der Code lässt sich zwar kompilieren und abspeichern, aber beim

einfügen in den Chart passiert gar nichts

 

Schau mal unten im Reiter 'Experten'. Da könnte nach der Ausführung eine Fehlermeldung sein dass die DLL nicht geöffnet werden konnte.

Das lässt sich unter 'Extras' 'Optionen' 'Expert Advisors' aktivieren (Häkchen bei 'Import von DLLs zulassen'), dabei das Häkchen unter 'Funktionsaufrufe von DLLs bestätigen' entfernen.

 

Ich komme aber im Moment leider nicht weiter, bin in den Tiefen von Windows nicht so fit.

 

Lutz

Link to comment
Share on other sites

Ich komme aber im Moment leider nicht weiter, bin in den Tiefen von Windows nicht so fit.

Ich glaube ich habe da jemanden gefunden...

 

Aber: die Mausereignisse des jetzt verwaisten Fensters usw. müssten jetzt wieder zum ehemaligen Fenster geleitet werden. Ich glaube hier brauchen wir jemanden der sich gut mit Windows-Programmierung auskennt.

Funktioniert in der Trialversion einwandfrei.

 

Ich habe gestern noch ein bisschen mit den englischen Suchbegriffen für "Trennen, Abtrennen" usw. rumgespielt

 

Bei "Undock Charts" kam ich immer auf das gleiche Ergebnis, nämlich zu MT4i

 

Aber mit "Detached Chart" hatte ich dann endlich Erfolg. Das fertige Tool gibt es also bereits, man muß nur wissen wie es heisst...

Funktioniert für MT4, aber auch für MT5 einwandfrei.

 

http://www.youtube.com/watch?v=v_yyUgwmS6M&feature=plcp&context=C3919361UDOEgsToPDskIbloxt6989bj3PzwhS3aGA

 

 

Der Anbieter tools4meta bietet eine Trialversion an, wobei nirgendwo steht wie lange diese gilt.

 

Man kann das Tool auch nur auf einer Plattform, an einem Rechner installieren, mehrere Installationen sind auf dem gleichem Rechner nicht möglich.

(Weiß nicht wie das bei der Kaufversion ist)

 

Zum Download ist eine Anmeldung erforderlich, danach kann man eine .exe Datei laden, diese wiederum installiert den Indikator und 4 verschiedene .dlls

Review:

Das Tool lässt sich sehr gut und einfach bedienen, jeder Chart hat eigenständige Funktionen oben im Fenster (siehe Bild).

 

jj01.png

Wenn der Indikator aus dem abgetrennten Fenster wieder entfernt wird, ordnet sich das ehemals abgetrennte Fenster automatisch wieder an seinen ürsprünglichen Platz in der MT Plattform ein.

 

Kleines Manko:

Die MT4 Plattform darf nicht minimiert laufen, ansonsten sind die abgetrennten Charts sofort eingefroren und erst wieder benutzbar, wenn MT wieder hergestellt ist.

 

Kosten soll das ganze 69 , meiner Meinung ist es angemessen, wenn man viel mit Metatrader arbeitet und Multimonitorlösungen betreibt. (Und Brokerunabhängig diese Funktion nutzen möchte)

 

Fast vergessen:

Es ist für die Software .NET Framework 4.0 erforderlich, sollte dies nicht vorhanden sein, versucht die .exe Datei diese auf dem Rechner zu installieren.

Bei mir klappte das mehrmals nicht, ich habe .NET Framework dann direkt von Microsoft installiert.

 

NET Framework 4.0

 

 

@Lutz

Danke nochmals für deine Mühe, konnte ja niemand ahnen das es das schon gibt :door:

  • Upvote 1
Link to comment
Share on other sites

Ne Eigenentwicklung wäre ein ziemlich cooles Projekt gewesen.

Meinen Segen dazu hast du ganz sicher, ist halt die Frage ob derjenige der sich mit Windows Programmierung und Mausgesten etc. auskennt dazu Lust hat.

Wie der Indikator aussieht weiß ich ja jetzt schon, aber die Hürde von 4 verschiedenen .dlls ist bestimmt auch nicht ganz ohne zu nehmen.

 

Eigenes Projekt wäre natürlich cool, auch grade weil Lutz schon angefangen hat. :flowers:

Kann man vorhandene Credits eigentlich auch für so etwas nutzen ?

Link to comment
Share on other sites

...und ich wollte gerade einen Aufruf für ein Parallelprojekt zum Goldesel starten.

Ne Eigenentwicklung wäre ein ziemlich cooles Projekt gewesen.

 

Mir fiel diese Nacht plötzlich noch ein warum das herausgelöste Fenster so seltsam aussieht, das war noch nicht das komplette Fenster.

Wenn man sich mit GetParent ein Fenster höher hangelt wird der Chart komplett herausgelöst und reagiert auch auf Mausklicks, leider chrasht MT aber kurz danach.

 

Ich stell das trotzdem mal als kleine Grundlage um alle Schnörkel bereinigt hier ein, vielleicht fällt noch jemandem was ein, ich forsche auch mal weiter dran. Als nächstes werde ich mal die Extended Styles des Fensters untersuchen, vermutlich ist das dort als MDI-Child gekennzeichnet was ja dann auch noch aufgehoben werden muss.

 

//+------------------------------------------------------------------+
//|                                                   Chart2Desk.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""

#import "user32.dll"
 int     SetParent(int hWndChild, int hWndNewParent);
 int     GetParent(int hWndChild);
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
 {
//----

int hwnd = GetParent(WindowHandle (Symbol(),Period()));
SetParent(hwnd,NULL);

//----
  return(0);
 }
//+------------------------------------------------------------------+

 

Lutz

  • Upvote 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...