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
|