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)
-   -   Senkrechte Linie oder Pfeil bei Positionseröffnung zeichnen (http://www.expert-advisor.com/forum/showthread.php?t=7196)

Casch 12.06.22 16:12

Senkrechte Linie oder Pfeil bei Positionseröffnung zeichnen
 
Hallo,

ich möchte gerne meinen EA mit dem Abschicken eines OrderSend Befehls eine Senkrechte Linie in den Chart zeichnen lassen. Gerne aber auch einen Pfeil in Richtung der Position (also long oder short) einzeichnen lassen. Gerne aber auch beides.

Irgendwie bekomme ich das nicht hin und wäre für Hilfe dankebar!

Danke und Tschüß
Casch

Bobs 23.06.22 10:52

Schematisch könnte es so aussehen:
if(OrderSend(...)>0) ObjectCreate(...);

AVT 26.06.22 13:57

Zitat:

Zitat von Casch (Beitrag 46079)
ich möchte gerne meinen EA mit dem Abschicken eines OrderSend Befehls eine Senkrechte Linie in den Chart zeichnen lassen. Gerne aber auch einen Pfeil in Richtung der Position (also long oder short) einzeichnen lassen. Gerne aber auch beides.

Der MT kann von sich aus schon kleine Pfeile setzen (sieht aus wie WingDings Nummer 240, nur halt kleine Größe von ca. Arial/7). Dazu definierst Du einfach die Farbe, z.B grün für buy und rot für sell und setzt das in die OrderSend() Funktion mit ein, etwa so:
Code:

// ===== Benutzereingabe, damit man es ändern kann
extern color ARROWGREENCOLOR = clrLime;    // green arrow
extern color ARROWREDCOLOR  = clrMagenta; // red arrow
// ===== Prefix für all unsere Objekte festlegen
string PFX = "MyEA_";                      //ForVerticalLine

// ===== Order aufgeben
int op_tkt = 0;    // opening position ticket number
op_tkt=OrderSend(Symbol(),OP_BUY,LotSize,
                Ask,3,            //OpenPrice,Slippage
                0,0,              //SL,TP
                "",0,0,            //Comment,Magic,Expire
                ARROWGREENCOLOR);  //ArrowColor

// ===== nach erfolgreicher Order
if(op_tkt>0)                                //OrderSendSuccess

  if(OrderSelect(op_tkt,SELECT_BY_TICKET) ) //SelectTicket
  {
      MarkCreate(OrderTicket(),              //ForUniqueName
                OrderOpenTime(),            //LineData
                ARROWGREENCOLOR);          //LineColor
  }
}

// ===== Markierung erzeugen (hier vertikale Linie)
bool MarkCreate(int TckNo, datetime time, color dircol)
{
  string name  = PFX+"#"+IntegerToString(TckNo); //expl:MyEA_#123456
  string vistxt = "";                            //VisibleTextAtLine
  if(dircol==ARROWGREENCOLOR) vistxt="long";
  if(dircol==ARROWREDCOLOR  ) vistxt="short";

  ResetLastError();
  if(ObjectFind(0,name)!=0)
      if(!ObjectCreate(0,name,OBJ_VLINE,0,time,0))
        { Print(__FUNCTION__," failed, Code=",_LastError); return(false); }

  ObjectSetInteger(0,name,OBJPROP_COLOR,dircol);        //LineColor
  ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DASHDOT); //SameAsOrderLines
  ObjectSetInteger(0,name,OBJPROP_WIDTH,1);            //SameAsOrderLines

  ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);        //KeepObjectListClean
  // ===== hat Vor- und Nachteile
  ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);    //CanUserDeleteLine?
  ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
  // ===== true geht auch über alle Unterfenster
  ObjectSetInteger(0,name,OBJPROP_BACK,false);          //TimeStampVisible?
  // ===== sichtbare Hilfe
  ObjectSetString(0,name,OBJPROP_TEXT,vistxt);          //DescriptionOnLine
  // ===== unsichtbare Hilfe
  ObjectSetString(0,name,OBJPROP_TOOLTIP,vistxt);      //Tooltip
  return(true);
}

Wenn Du die Linien behalten willst, solltest Du SELECTABLE,true machen, damit Du sie wenigstens schnell manuell löschen kannst. Sollen die Linien verschwinden, sobald Du die Order geschlossen hast, machst Du umgekehrt dasselbe wie bei der Aufgabe:
Code:

// === .... OrdersSelect ....
if( OrderClose(OrderTicket(),OrderLots(),                //CloseSuccess
              OrderClosePrice(),0,clrNONE) )            //NoArrow
{
  ObjectDelete( PFX+"#"+IntegerToString(OrderTicket() ); //DeleteLine
}
else                                                      //CloseError
{
    Print("OrderClose failed, Code=",_LastError);
}

Hoffentlich ist bei dem Copy&Paste nix daneben gegangen.
AVT


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