Pfeile im Chart einzeichnen

Markus Wilhelm
116
Markus Wilhelm  

Hi,
ich möchte mir gerne bei einem Ver-/Kaufsignal einen Pfeil ins Chart einzeichnen lassen.

Leider habe ich trotz der Bibliotheken, YouTube etc. noch keine richtige Hilfe gefunden.

Ich möchte, dass bei jedem neuen Signal, ein Pfeil eingezeichnet wird (und die vorherigen PFeile natürlich bestehen bleiben).

Hier mal der ganz einfache Code

if(Close[1]>Close[2])  ObjectCreate(0,"ObjectBUY",OBJ_ARROW_UP,0,TimeCurrent(),Ask);
if(Close[1]<Close[2])  ObjectCreate(0,"ObjectSELL",OBJ_ARROW_DOWN,0,TimeCurrent(),Bid);

Leider zeichnet er nur einmal jeweils einen Pfeil ein und danach nicht mehr... was mache ich denn falsch??
Carl Schreiber
Moderator
11461
Carl Schreiber  
Markus Wilhelm:

Hi,
ich möchte mir gerne bei einem Ver-/Kaufsignal einen Pfeil ins Chart einzeichnen lassen.

Leider habe ich trotz der Bibliotheken, YouTube etc. noch keine richtige Hilfe gefunden.

Ich möchte, dass bei jedem neuen Signal, ein Pfeil eingezeichnet wird (und die vorherigen PFeile natürlich bestehen bleiben).

Hier mal der ganz einfache Code


Leider zeichnet er nur einmal jeweils einen Pfeil ein und danach nicht mehr... was mache ich denn falsch??

Verwendest Du einen Namen erneut, schlägt das fehl (steht auch in der Dok: Kursor auf ObjevtCreate stellen und F1 drücken), also erstelle den Namen mit zB. "buy "+TimeToString(TimeCurent(), TIME_DATE|TIME_MINUTES). (ungetestet)

Markus Wilhelm
116
Markus Wilhelm  
Carl Schreiber:

Verwendest Du einen Namen erneut, schlägt das fehl (steht auch in der Dok: Kursor auf ObjevtCreate stellen und F1 drücken), also erstelle den Namen mit zB. "buy "+TimeToString(TimeCurent(), TIME_DATE|TIME_MINUTES). (ungetestet)

Spitze, vielen Dank !

Markus Wilhelm
116
Markus Wilhelm  

noch eine weitere Frage...


hast du einen Tipp wie der Code lauten würde wenn ich nur bei einem Signalwechsel einen neuen Pfeil möchte?


In etwa:

     if(lastObject==OBJ_ARROW_UP   && signal=="verkaufen")      ObjectCreate(0,"ObjectSELL, "+TimeToString(TimeCurrent()),OBJ_ARROW_DOWN,0,TimeCurrent(),Bid)

else if(lastObject==OBJ_ARROW_DOWN && signal=="kaufen")         ObjectCreate(0,"ObjectBUY, " +TimeToString(TimeCurrent()),OBJ_ARROW_UP,0,TimeCurrent(),Ask);
amando
3389
amando  
Du musst dir überlegen, wann ein signal geheichnet werden soll und dieses dann so einprogrammieren.
Markus Wilhelm
116
Markus Wilhelm  
amando:
Du musst dir überlegen, wann ein signal geheichnet werden soll und dieses dann so einprogrammieren.

ja das ist klar, aber es kann ja auch 2-3x hinter einander BUY sein, ich möchte aber nur dass er dann einen neuen Pfeil einzeichnet, wenn das neue Siganl != dem vorherigen war


Zb wenn der Preis über MovingAverage ist, dann würde er bei jeder neuen Kerze oder Tick erneut einen BUY Pfeil einzeichnen.... das überlagert dann das Chart...deswegen nur dann wenn der neue Pfeil != dem alten Pfeil wäre


Bei Orders kann man ja einfach OrderSelect() machen und sich dann den gewünschten OrderType raussuchen, geht das auch bei Objekten?
amando
3389
amando  
Dann musst du ih, sagen, das er die buys ignorieren soll, wenn der letzte pfeil auch ein buy war
Carl Schreiber
Moderator
11461
Carl Schreiber  
Mach eine Statusvariable (Kauf, Verkauf) und zeichne einen neuen Pfeil dann, wenn er dem Status widerspricht.
Markus Wilhelm
116
Markus Wilhelm  
Carl Schreiber:
Mach eine Statusvariable (Kauf, Verkauf) und zeichne einen neuen Pfeil dann, wenn er dem Status widerspricht.

verstehe leider nicht wie der Code dann wäre

Ich habe jetzt folgenden Code:


double   MovingAverage         =  iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE,0);


static string signal="";
   if(Close[1]>MovingAverage)   signal="kaufen";
   if(Close[1]<MovingAverage)   signal="verkaufen";

if(signal == "kaufen")     ObjectCreate(0,"BUY, "+TimeToString(TimeCurrent()),OBJ_ARROW_UP,0,TimeCurrent(),Ask);
if(signal == "verkaufen")  ObjectCreate(0,"SELL,"+TimeToString(TimeCurrent()),OBJ_ARROW_DOWN,0,TimeCurrent(),Bid);


Daher die Fragen

1) kann man auch Objekte sowie Orders wählen und einen Wert/Eigenschaft zurückgeben lassen (zB ObjectSelect()-1...,  lastObject = OBJ_Type())

2) zeichne nur, wenn das Signal ungleich dem bisherigen Signal ist

Carl Schreiber
Moderator
11461
Carl Schreiber  
Markus Wilhelm:

verstehe leider nicht wie der Code dann wäre

Ich habe jetzt folgenden Code:



Daher die Fragen

1) kann man auch Objekte sowie Orders wählen und einen Wert/Eigenschaft zurückgeben lassen (zB ObjectSelect()-1...,  lastObject = OBJ_Type())

2) zeichne nur, wenn das Signal ungleich dem bisherigen Signal ist


static ENUM_ORDER_TYPE lastSig = ORDER_TYPE_CLOSE_BY; //ORDER_TYPE_CLOSE_BY=undef hilfsweise
...
actSig = ...
if ( actSig != lastSig ) { 
    //paint
    lastSig = actSig;
}

ungetestet, wäre doch ganz einfach.

Markus Wilhelm
116
Markus Wilhelm  
Carl Schreiber:

ungetestet, wäre doch ganz einfach.

double   MovingAverage         =  iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE,0);

static string signal;
   if(Close[1]>MovingAverage)   signal="kaufen";
   if(Close[1]<MovingAverage)   signal="verkaufen";


//===============================================================================================================================================================================================================================================================================================================================//    Ver-/Kauf Pfeile einzeichnen
static string                       Old_signal;                                                                                                                                                                                                                                                                                  //
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
if(signal=="kaufen"    && signal != Old_signal) {ObjectCreate(0,"BUY, "+TimeToString(TimeCurrent()),OBJ_ARROW_UP,0,TimeCurrent(),Low[1]-MathAbs(High[1]-Low[1]));    ObjectSetInteger(0,"BUY, "+TimeToString(TimeCurrent()),OBJPROP_WIDTH,7); ObjectSetInteger(0,"BUY, "+TimeToString(TimeCurrent()),OBJPROP_COLOR,clrGreen);}   //
if(signal=="verkaufen" && signal != Old_signal) {ObjectCreate(0,"SELL,"+TimeToString(TimeCurrent()),OBJ_ARROW_DOWN,0,TimeCurrent(),High[1]+MathAbs(High[1]-Low[1])); ObjectSetInteger(0,"SELL,"+TimeToString(TimeCurrent()),OBJPROP_WIDTH,7); ObjectSetInteger(0,"BUY, "+TimeToString(TimeCurrent()),OBJPROP_COLOR,clrRed);}     //
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
if(signal != Old_signal)            Old_signal = signal;                                                                                                                                                                                                                                                                         //
//===============================================================================================================================================================================================================================================================================================================================//