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)
-   -   Textboxen verschiedener Profile schreiben (http://www.expert-advisor.com/forum/showthread.php?t=3698)

traderdoc 15.06.14 10:26

In der Tat, dank der neuen Möglichkeiten des MT4+, wäre es darüber möglich.
Ich bin noch zu sehr von der alten MT4-Variante ausgegangen und geprägt.

traderdoc

pako 15.06.14 12:59

Zitat:

Zitat von max232 (Beitrag 26451)
Hallo Leute!

Ich habe mein MT4 so eingerichtet, dass ich für jedes Währungspaar, das ich handle (ca 10 Stk) ein eigenes Profil eingerichtet habe mit jew. Tages- und Wochenchart des Paares.

Ich bin Positionstrader, deshalb ist der Swap für mich sehr relevant. Ich will also ein Script schreiben, dass den Swap aller Paare ausliest und in Textfelder die bereits in allen Profilen vorhanden sind (Name: "TextSwap") den Long und Short-Swap reinschreibt.

So weit so gut, klingt ja relativ einfach. Allerdings habe ich nichts in der Hilfe/www gefunden, das man auf Textboxen in verschiedenen Profilen zugreifen kann. Weiß jemand, ob das überhaupt geht? Wenn ja, mit welchem Befehl?

Danke im voraus!
Max

easy
Code:

string name="BLA_BLA";
  ObjectCreate(0,name,OBJ_LABEL,0,0,0);
  ObjectSetInteger(0,name,OBJPROP_XDISTANCE,10);
  ObjectSetInteger(0,name,OBJPROP_YDISTANCE,30);
  ObjectSetString(0,name,OBJPROP_TEXT,"BLA_BLA"+
                  ":SWAPLONG:"+DoubleToString(MarketInfo(Symbol(),MODE_SWAPLONG),5)+
                  ":SWAPSHORT:"+DoubleToString(MarketInfo(Symbol(),MODE_SWAPSHORT),5)
);
  ObjectSetString(0,name,OBJPROP_FONT,"Arial");
  ObjectSetInteger(0,name,OBJPROP_FONTSIZE,28);
  ObjectSetInteger(0,name,OBJPROP_COLOR,clrLime);


max232 15.06.14 13:02

Super, danke für die Info Pako!

Lt Hilfe kann man mit ObjectCreate und ObjectDelete auf Objekte in anderen Chartfenstern zugreifen. Statt ObjectGet kann man ObjectGetDouble verwenden und statt ObjectSet ObjectSetDouble. Bei all diesen Befehlen kann man die ChartID spezifizieren.

Hab ein bissl herum probiert, dürfte knifflig sein, die Logik dahinter leuchtet mir noch nicht ganz ein, aber das ist nur eine Frage der Zeit. ;)

max232 15.06.14 13:36

So ... Tests zu ChartID() beendet ... geht leider doch nicht! :(

Mit dem Scriptchen
PHP-Code:

   string name="BLA_BLA";
   
ObjectCreate(0,name,OBJ_LABEL,0,0,0);
   
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,10);
   
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,30);
   
ObjectSetString(0,name,OBJPROP_TEXT,
                   
"ChartID() :" ChartID());
   
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
   
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,14);
   
ObjectSetInteger(0,name,OBJPROP_COLOR,Black); 

hab ich mir zu jedem Chartfenster die ChartID anzeigen lassen.

Das Ergebnis ist, dass die ChartID (und ChartFirst und ChartNext usw) immer nur innerhalb eines Profiles weitergeschaltet werden können. D.h. die ChartIDs in einem Profil sind immer gleich und zwar so
1.Chart :130434380257626821
2.Chart: 130363500780287174
3.Chart: 130434380257626822
4.Chart: 130434380257626823

Was ich wollte, ist auf Charts anderer Profile (mit demselben Account) zugreifen. Zur Verständlichung Profile richtet man unter Files/Profiles ein.

pako 15.06.14 13:58

Zitat:

Zitat von max232

Ich will , dass den Swap aller Paare ausliest und in Textfelder die bereits in allen Profilen vorhanden sind (Name: "TextSwap") den Long und Short-Swap reinschreibt.

Code:

string name="TextSwap";
  ObjectCreate(0,name,OBJ_LABEL,0,0,0);
  ObjectSetInteger(0,name,OBJPROP_XDISTANCE,10);
  ObjectSetInteger(0,name,OBJPROP_YDISTANCE,30);
  ObjectSetString(0,name,OBJPROP_TEXT,"TextSwap"+
                  ":SWAPLONG:"+DoubleToString(MarketInfo(Symbol(),MODE_SWAPLONG),5)+
                  ":SWAPSHORT:"+DoubleToString(MarketInfo(Symbol(),MODE_SWAPSHORT),5)
);
  ObjectSetString(0,name,OBJPROP_FONT,"Arial");
  ObjectSetInteger(0,name,OBJPROP_FONTSIZE,28);
  ObjectSetInteger(0,name,OBJPROP_COLOR,clrLime);

in Textfelder die bereits in allen Profilen vorhanden sind

reinschreiben
Code:

+
                  ":SWAPLONG:"+DoubleToString(MarketInfo(Symbol(),MODE_SWAPLONG),5)+
                  ":SWAPSHORT:"+DoubleToString(MarketInfo(Symbol(),MODE_SWAPSHORT),5)[/SIZE]


pako 15.06.14 14:01

Zitat:

Zitat von max232 (Beitrag 26481)
So ... Tests zu ChartID() beendet ... geht leider doch nicht! :(

Mit dem Scriptchen
PHP-Code:

   string name="BLA_BLA";
   
ObjectCreate(0,name,OBJ_LABEL,0,0,0);
   
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,10);
   
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,30);
   
ObjectSetString(0,name,OBJPROP_TEXT,
                   
"ChartID() :" ChartID());
   
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
   
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,14);
   
ObjectSetInteger(0,name,OBJPROP_COLOR,Black); 

hab ich mir zu jedem Chartfenster die ChartID anzeigen lassen.

Das Ergebnis ist, dass die ChartID (und ChartFirst und ChartNext usw) immer nur innerhalb eines Profiles weitergeschaltet werden können. D.h. die ChartIDs in einem Profil sind immer gleich und zwar so
1.Chart :130434380257626821
2.Chart: 130363500780287174
3.Chart: 130434380257626822
4.Chart: 130434380257626823

Was ich wollte, ist auf Charts anderer Profile (mit demselben Account) zugreifen. Zur Verständlichung Profile richtet man unter Files/Profiles ein.

PHP-Code:

ObjectCreate(Chart_ID,...................................................

ObjectCreate(130434380257626823,......................................................... 


traderdoc 15.06.14 15:31

Aber nach dem bereits Geschriebenen müßte doch jedes!! Chart des Accounts, egal in welchem Profile es sich befindet, eine separate ID haben.

traderdoc

max232 16.06.14 19:20

@traderdoc
Eben nicht ... das is ja das blöde.

Ich habe im Profil DAX30 zwei Charts.
Der erste in diesem Profil angelegte Chart hat ChartID 130434380257626821
Der zweite in diesem Profil angelegte Chart hat ChartID 130363500780287174

In einem weiteren Profil GBPUSD hab ich ebenfalls zwei Charts und wiederum
Der erste in diesem Profil angelegte Chart hat ChartID 130434380257626821
Der zweite in diesem Profil angelegte Chart hat ChartID 130363500780287174

usw

Alle Object() Befehle die ich fand, haben nur ChartID, aber nicht "ProfilID" als Parameter ...

@Pako
Kann dir nicht ganz folgen.
Aber hab als letzten Test noch folgendes ausprobiert:
2 Profile: Adidas und EURUSD
In beiden Profilen ist ein Chart und da drauf je ein TextLabel namens "lbl_swaptest" angelegt mit Textinhalt "balablabblabla". Dann hab ich folgendes Script:
PHP-Code:

   ObjectSetString(130434380257626821,"lbl_swaptest",OBJPROP_TEXT,
                   
"SWAPLONG:"+DoubleToString(MarketInfo(Symbol(),MODE_SWAPLONG),5)+
                   
"SWAPSHORT:"+DoubleToString(MarketInfo(Symbol(),MODE_SWAPSHORT),5));
   
ObjectSetString(130434380257626821,"lbl_swaptest",OBJPROP_FONT,"Arial");
   
ObjectSetInteger(130434380257626821,"lbl_swaptest",OBJPROP_FONTSIZE,28);
   
ObjectSetInteger(130434380257626821,"lbl_swaptest",OBJPROP_COLOR,clrLime);

//Diese kryptische 130434380257626821 ist immer die ChartID vom erstangelegten Chart in einem Profil.) 

über Profil Adidas "gedragt". Wie erwartet hat sich dort der Text auf "SWAPLONG: ....usw" verändert. Dann hab ich ins Profil EURUSD geschaut und ..... dort hat sich nichts verändert. Ein ebenfalls dort befindliches TextLabel namens "lbl_swaptest" zeigte weiterhin "balablabblabla" an.

pako 16.06.14 21:01

Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von max232 (Beitrag 26494)
In beiden Profilen ist ein Chart und da drauf je ein TextLabel namens "lbl_swaptest" angelegt mit Textinhalt "balablabblabla". Dann hab ich folgendes Script:
in diesem Fall keinen Script benutzen

In Chart je ein TextLabel "TextSwap" einfügen, in diesem Fall keinen Script benutzen,
mehr brauchen Sie nicht.
Code:

//ohne Änderung
string name="TextSwap";
  ObjectCreate(0,name,OBJ_LABEL,0,0,0);
  ObjectSetInteger(0,name,OBJPROP_XDISTANCE,10);
  ObjectSetInteger(0,name,OBJPROP_YDISTANCE,30);
  ObjectSetString(0,name,OBJPROP_TEXT,"TextSwap"+
                  ":SWAPLONG:"+DoubleToString(MarketInfo(Symbol(),MODE_SWAPLONG),5)+
                  ":SWAPSHORT:"+DoubleToString(MarketInfo(Symbol(),MODE_SWAPSHORT),5));
  ObjectSetString(0,name,OBJPROP_FONT,"Arial");
  ObjectSetInteger(0,name,OBJPROP_FONTSIZE,28);
  ObjectSetInteger(0,name,OBJPROP_COLOR,clrLime);


traderdoc 16.06.14 21:36

Ich verstehe schon die Situation.
@Pako, wenn die IDs in beiden Profilen bzgl. der Charts identisch sind, wie soll er denn dann den sich unterschiedlich ändernden Inhalt der Textlabels auslesen?
Man könnte nun noch das Symbol() und Period() des Charts zur Unterscheidung mit heranziehen!? Aber der Fall, dass sich in beiden Profilen dasselbe Handelsinstrument im selben TimeFrame befindet, würde dann nicht mehr lösbar sein.

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:45 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