Chart-Event deaktivieren bei Klick auf ein Chart-Objekt

 

Hi zusammen,

ich habe ein kleines Problem, welches ich nicht gelöst bekomme.

Ich habe ein Trading-Panel, wo ich per Klick auf einen Button bspw. ein Long oder Short Trade auslösen kann.

Die Buttons sind von der Klasse CButton die wiederum in einem CAppDialog drin sind.

Nun ist es so, wenn ich auf den Chart klicke und die Maus gedrückt halte, kann ich ja den Chart nach Links oder Rechts bewegen, also horizontal um andere Zeiten im Chart anzuschauen. Dabei bewegt sich natürlich auch die Maus ... und da ist nun das Problem, wenn ich mit der Maus beim hin und her schieben des Charts, ... den Mausklick genau über einem Button wieder loslasse wird der Button getriggert und im dümmsten Fall ein Long oder Short Trade eröffnet...obwohl der Mausklick nicht auf einem Button gestartet wurde. Versteht man was ich meine? :-) 

So sieht mein Event-Handler aus:

//+------------------------------------------------------------------+
//| Event-Handler                                                    |
//+------------------------------------------------------------------+
void ClTradingPanelCTR::ChartEvent(const int iId,         // Ereignis ID
                                   const long& lParam,   // Ereignisparameter vom Typ long
                                   const double& dParam, // Ereignisparameter vom Typ double
                                   const string& sParam) {


//Click-Events
 if(iId==CHARTEVENT_OBJECT_CLICK) {
  _handle_obj_click(lParam,dParam,sParam);
 }

}

//+------------------------------------------------------------------+
//| handle Click-Event                                               |
//+------------------------------------------------------------------+
bool ClTradingPanelCTR::_handle_obj_click(const long& lParam, const double& dParam, const string& sParam) {

 ulong lv_order;

//Long -Trade
 if((StringFind(sParam,BT_LONG,0)>=0) ) {
  //Long-Trade Order senden
 }

//Short - Trade
 if((StringFind(sParam,BT_SHORT,0)>=0) ) {
  //Short-Trade Order senden
 }

}


Ich dachte eigentlich, dass CHARTEVENT_OBJECT_CLICK nur auf meinen Objekten gefeuert wird...aber scheinbar reicht das nicht aus. Weiss jemand wie ich das lösen kann, dass wenn ich den Mausklick außerhalb meines CAppDialoges halte und innerhalb des CAppDialoges wieder loslasse, hier nichts getriggert wird? Genauso etwas unschön ist es auch, dass wenn ich den Klick im CAppDialog beginne und halte....und die Maus hin und her bewege sich auch im Hintergrund das Chartbild links und rechts hin und her bewegen kann.... Also irgendwie möchte ich einfach meine Panel/Dialog-Events vom Chart-Event trennen, ... wenn das überhaupt geht :-) .

Vielen Dank im Voraus!

 
Phoenix-Trinity:

Hi zusammen,

ich habe ein kleines Problem, welches ich nicht gelöst bekomme.

Ich habe ein Trading-Panel, wo ich per Klick auf einen Button bspw. ein Long oder Short Trade auslösen kann.

Die Buttons sind von der Klasse CButton die wiederum in einem CAppDialog drin sind.

Nun ist es so, wenn ich auf den Chart klicke und die Maus gedrückt halte, kann ich ja den Chart nach Links oder Rechts bewegen, also horizontal um andere Zeiten im Chart anzuschauen. Dabei bewegt sich natürlich auch die Maus ... und da ist nun das Problem, wenn ich mit der Maus beim hin und her schieben des Charts, ... den Mausklick genau über einem Button wieder loslasse wird der Button getriggert und im dümmsten Fall ein Long oder Short Trade eröffnet...obwohl der Mausklick nicht auf einem Button gestartet wurde. Versteht man was ich meine? :-) 

So sieht mein Event-Handler aus:


Ich dachte eigentlich, dass CHARTEVENT_OBJECT_CLICK nur auf meinen Objekten gefeuert wird...aber scheinbar reicht das nicht aus. Weiss jemand wie ich das lösen kann, dass wenn ich den Mausklick außerhalb meines CAppDialoges halte und innerhalb des CAppDialoges wieder loslasse, hier nichts getriggert wird? Genauso etwas unschön ist es auch, dass wenn ich den Klick im CAppDialog beginne und halte....und die Maus hin und her bewege sich auch im Hintergrund das Chartbild links und rechts hin und her bewegen kann.... Also irgendwie möchte ich einfach meine Panel/Dialog-Events vom Chart-Event trennen, ... wenn das überhaupt geht :-) .

Vielen Dank im Voraus!

Kannst Du nicht das Verschieben so definieren, dass neben der Maustaste auch die Shift-Taste gedrückt sein muss für ein Verschieben, um so Optik und handel voneinander deutlich zu trennen?

 
Habe mich gefragt ob man durch die vorhergehende Erfassung des CHARTEVENT_OBJECT_DRAG eine Ausschlussbedingung für die Betätigung des Buttons erstellen könnte. 

Doch das wäre lediglich ein Ansatz. Denn man braucht für Drag als sparam wohl den Namen des Chartobjekts, welches man verschiebt. Stellt sich die Frage, ob sparam auch ein leerer String ="" sein kann bzw. wie man den Chart selbst als verschobenes Objekt angeben kann. Diese kann ich leider mangels Erfahrung mit dem Thema nicht beantworten.
 
Verlege das trading panel in ein indicator fenster, dann hast das problem nicht mehr und steht auch nicht im chart rum
 

Hi,

also ich habe das Problem so gelöst.

 if (ObjectGetInteger(0,"BT_BuyMarket",OBJPROP_STATE))// Abfrage, ob gedrückt
      {
      PlaySound("tick.wav");Trade_Grund = "Buy"; OrderLot = TLots; MARKET_BUY(); 
      ObjectSetInteger(0,"BT_BuyMarket",OBJPROP_STATE,false);  // Button zurücksetzen 
      }

Bei dieser Variante fragst du den Buttonstatus ab und setzt ihn nach Abschluss der Aktion wieder zurück.

Gruß Uwe

 
Hat uns pennyhunter verlassen?
 
Phoenix-Trinity:

Hi zusammen,

ich habe ein kleines Problem, welches ich nicht gelöst bekomme.

Ich habe ein Trading-Panel, wo ich per Klick auf einen Button bspw. ein Long oder Short Trade auslösen kann.

Die Buttons sind von der Klasse CButton die wiederum in einem CAppDialog drin sind.

Nun ist es so, wenn ich auf den Chart klicke und die Maus gedrückt halte, kann ich ja den Chart nach Links oder Rechts bewegen, also horizontal um andere Zeiten im Chart anzuschauen. Dabei bewegt sich natürlich auch die Maus ... und da ist nun das Problem, wenn ich mit der Maus beim hin und her schieben des Charts, ... den Mausklick genau über einem Button wieder loslasse wird der Button getriggert und im dümmsten Fall ein Long oder Short Trade eröffnet...obwohl der Mausklick nicht auf einem Button gestartet wurde. Versteht man was ich meine? :-) 

So sieht mein Event-Handler aus:


Ich dachte eigentlich, dass CHARTEVENT_OBJECT_CLICK nur auf meinen Objekten gefeuert wird...aber scheinbar reicht das nicht aus. Weiss jemand wie ich das lösen kann, dass wenn ich den Mausklick außerhalb meines CAppDialoges halte und innerhalb des CAppDialoges wieder loslasse, hier nichts getriggert wird? Genauso etwas unschön ist es auch, dass wenn ich den Klick im CAppDialog beginne und halte....und die Maus hin und her bewege sich auch im Hintergrund das Chartbild links und rechts hin und her bewegen kann.... Also irgendwie möchte ich einfach meine Panel/Dialog-Events vom Chart-Event trennen, ... wenn das überhaupt geht :-) .

Vielen Dank im Voraus!

Ich glaube das gibt es schon:

https://www.mql5.com/de/articles/7892
https://www.mql5.com/de/articles/7981

Schnelle Werkzeuge für den manuellen Handel: Grundlegende Funktionsweise
Schnelle Werkzeuge für den manuellen Handel: Grundlegende Funktionsweise
  • www.mql5.com
Heutzutage wechseln viele Händler zu automatisierten Handelssystemen, die eine zusätzliche Einrichtung erfordern oder vollständig automatisiert und einsatzbereit sein können. Es gibt jedoch einen beträchtlichen Teil der Händler, die es vorziehen, auf die altmodische Art und Weise manuell zu handeln. In diesem Artikel erstellen wir "Market Order" (Marktorder) das Toolkit für den schnellen manuellen Handel, für die Verwendung von Hotkeys und für die Durchführung typischer Handelsaktionen mit einem Klick.
 
amando #:
Hat uns pennyhunter verlassen?

Scheint fast so...
 
Nein, ich glaube nicht. Er wurde gesperrt, aber ich weiß nicht warum und von wem. Es könnte sein, dass ausschlaggebend ein Post war, den er 5 oder 6 Mal abgeschickt hat, weil der Server nicht sofort reagiert hat und daher könnte ihn 'das System' als Spammer klassifizieren und hat ihn gesperrt.
 
Carl Schreiber #:
Nein, ich glaube nicht. Er wurde gesperrt, aber ich weiß nicht warum und von wem. Es könnte sein, dass ausschlaggebend ein Post war, den er 5 oder 6 Mal abgeschickt hat, weil der Server nicht sofort reagiert hat und daher könnte ihn 'das System' als Spammer klassifizieren und hat ihn gesperrt.
Genau das war es auch. Gerade noch schlechtes W-LAN gehabt und schon wegen Spam einen Monat gesperrt. 
Das kam automatisch vom Server da die Aufträge aus der Warteschlange durch das mehrmalige drücken alle in ganz kurzer Zeit abgearbeitet wurden.
Support hat schnell geholfen, hab erst heute Nacht geschrieben und Alles erklärt. 
Danke MetaQuotes

 

Hi zusammen,

war nun doch über Weihnachten und Neujahr sehr inaktiv :-) .

Mir ist heute noch eine Lösung gekommen.

Was ich nun mache ist, ... ich prüfe den "sParam=1" im onChartEvent() ob die Maus gedrückt ist und nehme davon einmalig die X-Y Koordinaten, damit ich weiss an welcher Stelle die Maus gedrückt wurde.

Diese Prüfe ich nun, ob diese in meinem CAppDialog liegen, falls ja habe ich eine Variable die ich auf true setze und erlaube somit die Funktionen CHARTEVENT_OBJECT_CLICK meines Trading-Panels, wenn die Maus wieder losgelassen wird.

Sobald die Maus auch wieder losgelassen wird, setze ich die Variable am Ende  der onChartEvent()  Methode wieder auf false.

Das funktioniert echt super....ob es die beste Lösung ist,....keine Ahnung :-)