Vola Posted January 13, 2012 Report Share Posted January 13, 2012 (edited) 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. 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 January 14, 2012 by whipsaw Titel und Beschreibung geändert; Original: MT4i |MT4 Service Grund: SEO und Erleichtern der Suche nach Schlüsselbegriffen Quote Link to comment Share on other sites More sharing options...
WOGO Posted January 13, 2012 Report Share Posted January 13, 2012 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 ?Ja, einen anderen Grund kann's fast nicht geben. Quote Link to comment Share on other sites More sharing options...
lutzs Posted January 13, 2012 Report Share Posted January 13, 2012 (edited) 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 January 13, 2012 by ronner Zitat wg Überlänge gekürzt. Quote Link to comment Share on other sites More sharing options...
Vola Posted January 13, 2012 Author Report Share Posted January 13, 2012 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". Quote Link to comment Share on other sites More sharing options...
lutzs Posted January 13, 2012 Report Share Posted January 13, 2012 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-FunktionDiese 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 1 Quote Link to comment Share on other sites More sharing options...
lutzs Posted January 14, 2012 Report Share Posted January 14, 2012 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 1 Quote Link to comment Share on other sites More sharing options...
lutzs Posted January 14, 2012 Report Share Posted January 14, 2012 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 2 Quote Link to comment Share on other sites More sharing options...
Vola Posted January 14, 2012 Author Report Share Posted January 14, 2012 Mal sehen ob ich noch herausfinde wie man das macht.Hehe, Super ! wäre ja echt toll wenn das klappt Quote Link to comment Share on other sites More sharing options...
lutzs Posted January 14, 2012 Report Share Posted January 14, 2012 Hehe, Super ! wäre ja echt toll wenn das klappt 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 Quote Link to comment Share on other sites More sharing options...
lutzs Posted January 14, 2012 Report Share Posted January 14, 2012 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 1 Quote Link to comment Share on other sites More sharing options...
Vola Posted January 14, 2012 Author Report Share Posted January 14, 2012 Im Ansatz funktioniert es, das Fenster ist erst mal aussen verschiebbar, wenn auch etwas schmucklos. Vielen Dank für deine Mühe 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 Quote Link to comment Share on other sites More sharing options...
lutzs Posted January 14, 2012 Report Share Posted January 14, 2012 Vielen Dank für deine Mühe 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 Quote Link to comment Share on other sites More sharing options...
Vola Posted January 14, 2012 Author Report Share Posted January 14, 2012 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 .dllsReview:Das Tool lässt sich sehr gut und einfach bedienen, jeder Chart hat eigenständige Funktionen oben im Fenster (siehe Bild). 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 @LutzDanke nochmals für deine Mühe, konnte ja niemand ahnen das es das schon gibt 1 Quote Link to comment Share on other sites More sharing options...
whipsaw Posted January 14, 2012 Report Share Posted January 14, 2012 Danke nochmals für deine Mühe, konnte ja niemand ahnen das es das schon gibt ...und ich wollte gerade einen Aufruf für ein Parallelprojekt zum Goldesel starten.Ne Eigenentwicklung wäre ein ziemlich cooles Projekt gewesen. Quote Link to comment Share on other sites More sharing options...
Vola Posted January 14, 2012 Author Report Share Posted January 14, 2012 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. Kann man vorhandene Credits eigentlich auch für so etwas nutzen ? Quote Link to comment Share on other sites More sharing options...
lutzs Posted January 14, 2012 Report Share Posted January 14, 2012 Eigenes Projekt wäre natürlich cool, auch grade weil Lutz schon angefangen hat. Danke für die Blümchen. Aber so viel Arbeit steckt da noch nicht drin, ausserdem interessieren mich immer mal die Möglichkeiten von MT. Lutz 1 Quote Link to comment Share on other sites More sharing options...
lutzs Posted January 15, 2012 Report Share Posted January 15, 2012 ...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 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.