Pfeile im Chart einzeichnen

 

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??
 
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)

 
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 !

 

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);
 
Du musst dir überlegen, wann ein signal geheichnet werden soll und dieses dann so einprogrammieren.
 
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?
 
Dann musst du ih, sagen, das er die buys ignorieren soll, wenn der letzte pfeil auch ein buy war
 
Mach eine Statusvariable (Kauf, Verkauf) und zeichne einen neuen Pfeil dann, wenn er dem Status widerspricht.
 
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

 
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.

 
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;                                                                                                                                                                                                                                                                         //
//===============================================================================================================================================================================================================================================================================================================================//
Grund der Beschwerde: