Einzelnen Beitrag anzeigen
  #3 (permalink)  
Alt 26.06.22
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Casch Beitrag anzeigen
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