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)

max232 12.06.14 19:48

Textboxen verschiedener Profile schreiben
 
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

pako 13.06.14 11:53

Liste der Anhänge anzeigen (Anzahl: 1)
EA :rolleyes::D

max232 13.06.14 15:07

Danke Pako!

Soweit bin ich aber eh schon selbst gewesen.

Ich formulier meine Frage anders:
Kann ich per EA/Script auf Objekte (zB eine Textbox) in anderen Profilen (wo also der EA/Script nicht läuft;das was man mit Strg+F5 weiterschaltet) zugreifen?

traderdoc 13.06.14 15:47

Nein, ich denke, dass das nicht geht, weil Objekte immer chartgebunden sind und die Abfrage über ObjectGet() nur in dem Chart funktioniert, in dem auch der EA oder das Script läuft.

traderdoc

max232 13.06.14 17:35

Schade!
Danke traderdoc ...

pako 14.06.14 19:21

Zitat:

Zitat von traderdoc (Beitrag 26456)
Nein, ich denke, dass das nicht geht, weil Objekte immer chartgebunden sind und die Abfrage über ObjectGet() nur in dem Chart funktioniert, in dem auch der EA oder das Script läuft.

traderdoc

Stimmt nicht!

pako 14.06.14 19:24

Zitat:

Zitat von max232 (Beitrag 26455)
Danke Pako!

Soweit bin ich aber eh schon selbst gewesen.

Ich formulier meine Frage anders:
Kann ich per EA/Script auf Objekte (zB eine Textbox) in anderen Profilen (wo also der EA/Script nicht läuft;das was man mit Strg+F5 weiterschaltet) zugreifen?

Ja natürlich

pako 14.06.14 19:42

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

quellcode von Textfelder ??

traderdoc 14.06.14 20:59

@Pako, wie lautet denn nun die Lösung?

pako 14.06.14 23:20

Zitat:

Zitat von traderdoc (Beitrag 26468)
@Pako, wie lautet denn nun die Lösung?

Code:

bool  ObjectCreate(
  long          chart_id,      // chart ID
  string        object_name,  // object name
  ENUM_OBJECT  object_type,  // object type
  int          sub_window,    // window index
  datetime      time1,        // time of the first anchor point
  double        price1,        // price of the first anchor point
  ...
  datetime      timeN=0,      // time of the N-th anchor point
  double        priceN=0      // price of the N-th anchor point
  );

chart ID die Lösung

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

pako 16.06.14 22:08

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

Zitat von traderdoc (Beitrag 26496)
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

null problem, Jeder Chart hat seine ID, egal symbol() und period()

traderdoc 16.06.14 22:55

Zitat:

Zitat von pako (Beitrag 26497)
null problem, Jeder Chart hat seine ID, egal symbol() und period()

Das ist schon klar, innerhalb!! eines Profiles.
@max232 meint aber nun, dass in einem anderen!! Profil dieselben IDs vergeben werden!
Wie soll er dann eine Unterscheidung treffen, zu welchem Profil z.B. die ID130363500780287174 gehört, wenn diese ID in beiden!! Profilen vorkommt?

traderdoc

pako 16.06.14 22:57

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

Zitat von traderdoc (Beitrag 26496)
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

warum auslesen?, wenn Sie sofort erstellen und schreiben können???

1. Zwei Charts open
2. Script anwenden

für beide Charts wird erstellt und geschrieben

traderdoc 16.06.14 23:12

Sorry, das mit dem Auslesen hatte ich nicht mehr richtig in Erinnerung.
Er schrieb, dass er den Swap der WP auslesen will und in die vorgefertigten Textlabels schreiben lassen will.
So weit so gut, wenn es nur ein Profil gäbe.
Wie soll er es aber nun machen, wenn er mit einem Script in mehreren Profilen den Swap schreiben will und die Chart-IDs in den jeweiligen Profilen gleich ist?

traderdoc

pako 16.06.14 23:31

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

Zitat von traderdoc (Beitrag 26499)
@max232 meint aber nun, dass in einem anderen!! Profil dieselben IDs vergeben werden!

traderdoc

glaube ich nicht

pako 16.06.14 23:35

Zitat:

Zitat von traderdoc (Beitrag 26501)
Sorry, das mit dem Auslesen hatte ich nicht mehr richtig in Erinnerung.
Er schrieb, dass er den Swap der WP auslesen will und in die vorgefertigten Textlabels schreiben lassen will.
So weit so gut, wenn es nur ein Profil gäbe.
Wie soll er es aber nun machen, wenn er mit einem Script in mehreren Profilen den Swap schreiben will und die Chart-IDs in den jeweiligen Profilen gleich ist?

traderdoc

Eine andere Lösung , indicator schreiben

pako 16.06.14 23:48

Zitat:

Zitat von traderdoc (Beitrag 26501)
Er schrieb, dass er den Swap der WP auslesen will und in die vorgefertigten Textlabels schreiben lassen will.
traderdoc

bei erstellen Textlabels, sofort schreiben Swap
wozu erst erstellen, und dann schreiben???

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);


max232 17.06.14 10:46

Pako, kannst du mir das Script "Script_Von_Chart1_In Chart2_schreiben.ex4" bitte in Klartext schreiben ... nicht das wir an einander vorbeireden.
Ich kann die Ergebnisse aus deinem Expert-Log nämlich nicht nachvollziehen.

Welche MT4 Version verwendest du?


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