Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/metatrader-4/programmierung-mql4/)
-   -   Rectangles = optimale, graph. Darstellg. von TradingResults (http://www.expert-advisor.com/forum/metatrader-4/programmierung-mql4/4949-rectangles-optimale-graph-darstellg-von-tradingresults.html)

piptrade 18.05.16 13:02

Rectangles = optimale, graph. Darstellg. von TradingResults
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, ...!

Nun also das neue Thema: Wie kann man TradingResults graphisch optimal darstellen ?

Anstatt der bereits erörterten Graph-Standarddarstellungen (letztes Thema) für Open, Close, TP und SL, mittels kleiner Markierungen (welche sich kaum verändern lassen), sollen nun hinzugesetzte, farblich unterschiedene Rectangles (Red/Green), eine optisch wesentlich bessere TradeAuswertung ermöglichen.
In diesem Zusammenhang sind also Rectangles zu kreieren, welche die Profit- oder LossTrades, einschl. ihres Wert-Umfanges, darstellen.

(Zur besseren Veranschaulichung - siehe Picture im Anhang)

Die ersten Überlegungen könnten dann ggf., wie folgt, aussehen:
Ermittlung 1. Koordinate: OpenOrderTime und OpenOprderPrice
2. Koordinate: OrderCloseTime und OrderClosePrice
3. Bedingung: wenn das so ist: if(...) == true ( = Green )
wenn nicht: else == false ( = Red )

Ist diese Herangehensweise soweit richtig und sinnvoll.
Wie auch in der vorherigen Beiträgen wäre ich für Eure Unterstüzung sehr dankbar.

LG. piptrade

piptrade 21.05.16 00:37

Also: - die ersten Versuche, meinen Wunsch Wirklichkeit werden zu lassen, würden darin bestehen,
die ganze Angelegenheit erst einmal zu vereinfachen, so dass sie möglichst schnell im MT4 überprüft werden kann:
Und dies würde zu 1. bedeuten, dass vorerst nicht von einem Trade mit Open und Close usw. ausgegangen wird, sondern erst einmal nur ein Rectangle überhaupt / und dass zwischen zwei Zeitbestimmungen / erzeugt wird.
Das könnte in einem 1. Schritt dann ggf. "SO" aussehen:

// 1. Step; Deklaration der Variablen:
extern string TimeOpen = "13:55";
extern string TimeClose = "14:35";
double PriceOpen;
double PriceClose;
extern color ProfitCLR = Green;
extern color LossesCLR = Maroon;

... wird "SO" ev. ein "Schuh" daraus ?

In einem 2. Schritt sollte dann wahrscheinlich Time/string in Time/Integer umgewandelt werden ?

Sind diese ersten Ansätze soweit richtig ?

In optimistischer Stimmung und mit LG: piptrade

piptrade 24.05.16 18:52

Liste der Anhänge anzeigen (Anzahl: 1)
Da sich keiner so richtig an das Thema heranzutrauen scheint (vielleicht wird aber auch nur mehr Eigeninitiative erwartet), habe ich nunmehr versucht, die ersten Schritte alleine zu gehen:

1.Um eine sehr langwierige Kontrolle an aktuellen Trades zu umgehen, wurde vorerst alles etwas vereinfacht: als Time_1 und Time _2 wurden extern einstellbare, fixe Zeiten deklariert und Price_1 mit „Open" / Price_2 mit „Close" vorgegeben.

2. So dann: Create Rectangle - mit Time_1 und Price_1 bzw. Time_2 und Price_2 für die notwendigen Koordinaten.

3. Fast analog dann: Create Text - mit Open_Price und Close_Price.

Bis alles wunschgemäß funktionierte, war ich mehrmals der Verzweiflung nahe: - dennoch kann sich das erreichte (Zwischen-) Ergebnis erst einmal sehen lassen (siehe Picture im Angang).

Und hier der entsprechende, komplette Code:

Code:

#property indicator_chart_window

//--- parameter timezones------------------------------------------------+
extern int    NumberOfDays =  1;     
extern string TimeOpen    =  "02:52";
extern string TimeClose    =  "03:21";
extern color  LossesCLR    =  Maroon;
//extern color  ProfitCLR    =  DarkGreen;

extern bool  ShowPrice    =  True;
extern color  clFont      =  Silver;
extern int    SizeFont    =  9;
extern int    OffSet      =  10;

//+--- initialization TimeFunction -------------------------------------+
void init() {
  DeleteObjects();
  for (int i=0; i<NumberOfDays; i++) {
    CreateObjects("ST_1"+i, LossesCLR);    // "ST_1" = ShortTrade_1
  }
  Comment("");
}
//+--- deinitialization TimeFunction -----------------------------------+
void deinit() {
  DeleteObjects();
  Comment("");
}
//+--- create object ----------------------------------------------------+
void CreateObjects(string no, color cl) {
  ObjectCreate(no, OBJ_RECTANGLE,0, 0,0, 0,0);
  ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
  ObjectSet(no, OBJPROP_COLOR, LossesCLR);
  ObjectSet(no, OBJPROP_BACK, True);
}
//+--- object delate ----------------------------------------------------+
void DeleteObjects() {
  for (int i=0; i<NumberOfDays; i++) {
    ObjectDelete("ST_1"+i);
  }
    ObjectDelete("ST_1up");  // NEU
    ObjectDelete("ST_1dn");  // NEU
}
//+--- interation function ----------------------------------------------+
void start() {
  datetime dt=CurTime();
 
  for (int i=0; i<NumberOfDays; i++){
    if (ShowPrice && i==0) {
      DrawPrices(dt,"ST_1",TimeOpen,TimeClose);
    }
    DrawObjects(dt, "ST_1"+i,TimeOpen,TimeClose);
    }
}
//+--- draw objects -----------------------------------------------------+
void DrawObjects(datetime dt, string no, string tb, string te)
{
  datetime t1, t2;
  double  p1, p2;
  int      b1, b2;

  t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
  t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
  b1=iBarShift(NULL, 0, t1);
  b2=iBarShift(NULL, 0, t2);
  p1=Open[b1];
  p2=Close[b2];
  ObjectSet(no, OBJPROP_TIME1 , t1);
  ObjectSet(no, OBJPROP_PRICE1, p1);
  ObjectSet(no, OBJPROP_TIME2 , t2);
  ObjectSet(no, OBJPROP_PRICE2, p2);
}

//+--- draw prices -------------------------------------------------------+
void DrawPrices(datetime dt, string no, string tb, string te) {
  datetime t1, t2;
  double  p1, p2;
  int      b1, b2;

  t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
  t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
  b1=iBarShift(NULL, 0, t1);
  b2=iBarShift(NULL, 0, t2);
  //p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
  p1=Open[b1];
  //p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2, b2)];
  p2=Close[b2];
 

//+--- obere Price-Angabe
  if (ObjectFind(no+"up")<0) ObjectCreate(no+"up", OBJ_TEXT, 0, 0,0);
  ObjectSet(no+"up", OBJPROP_TIME1  , t2);
  ObjectSet(no+"up", OBJPROP_PRICE1  , p1+OffSet*Point);
  ObjectSet(no+"up", OBJPROP_COLOR  , clFont);
  ObjectSet(no+"up", OBJPROP_FONTSIZE, SizeFont);
  ObjectSetText(no+"up", DoubleToStr(p1, Digits));// p1"+Ask-Bid" entnommen / jetzt Price-Angaben = ok.

//+--- untere Price-Angabe
  if (ObjectFind(no+"dn")<0) ObjectCreate(no+"dn", OBJ_TEXT, 0, 0,0);
  ObjectSet(no+"dn", OBJPROP_TIME1  , t2);
  ObjectSet(no+"dn", OBJPROP_PRICE1  , p2);
  ObjectSet(no+"dn", OBJPROP_COLOR  , clFont);
  ObjectSet(no+"dn", OBJPROP_FONTSIZE, SizeFont);
  ObjectSetText(no+"dn", DoubleToStr(p2, Digits));
}
//+----------------------------------------------------------------------+


Kann der o.a. Code einfacher, ggf. ev. auch eleganter, programmiert werden? Ist diese Programmierung überhaupt sinnvoll, wenn der vollendete Indikator nach Long- oder ShortOrder unterscheiden und dementsprechend nur noch eine Ziffer (Loss oder Profit) darstellen soll?

And but last not least: Wo muß ich jetzt für die Unterscheidung Long-/ShortOrder ansetzten und wie realisiere ich die Loss-/Profit Darstellung am besten?

Ohne Eure Unterstützung komme ich hier wahrscheinlich nicht weiter, so dass ich mich riesig über eine helfende Hand freuen würde. Hierfür schon `mal ein kleines Dankeschön.

LG: piptrade

piptrade 25.05.16 17:41

Liste der Anhänge anzeigen (Anzahl: 1)
... und wieder ein wichtiger Schritt in Richtung "Erfolg":

Profit- und LossTrades werden in unterschiedlichen Farben angezeigt (siehe Picture im Anhang) !

Und das alles mit minimalstem Aufwand:
Code:

extern bool  LongOrder  =  true;
extern bool  ShortOrder  =  false;

if((LongOrder  &&  Close[1] >= Open[2])  || (ShortOrder  &&  Close[1] < Open[2]))
  {
        cl=ProfitCLR; // Green
  }
  else cl=LossesCLR; // Maroon

Anstatt der 2 Price-Angaben darf jetzt nur noch eine Wertangabe erfolgen, entweder die für Loss oder die für Profit. Das wäre die nächste Herausforderung, bei der ich für etwas Unterstützung sehr dankbar wäre.

LG. piptrade

piptrade 26.05.16 02:19

Wie bekomme ich das nur hin? - nur eine einzige Price_Differenz für Losses bzw. Profit ?
Pleace help, pleace, pleace help !

LG. piptrade

piptrade 26.05.16 21:15

Liste der Anhänge anzeigen (Anzahl: 1)
Wenn Dir keiner hllft, so hilf Dir selbst, in dem das Ziel den Weg beschreibt!

Unter diesem Motto konnte ich den kleinen Indikator nunmehr fertigstellen (siehe Picture im Anhang).
Den Code ein wenig "aufräumen", ggf. von "Ballast" befreien, Variablen von "Simulieren" auf "Live" ändern und dann die ersten Tests an realen Trades - werden die abschließenden Schritte sein.

Anbei bedanke ich mich für das rege Interesse an diesem Beitrag, wünsche der TraderGemeinde allzeit TopPips und verbleibe bis zum nächsten Thema mit

LG. piptrade ;)

Fakt ist und bleibt, ich hab` ne Menge dazu gelernt und damit letztendlich selbst von diesem Beitrag profitiert.


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:51 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2018 vbdesigns.de
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum