|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Ich verstehe den Sinn nicht!
wenn z.B. eine Pos geöffnet wird dann wollte ich per SendNotification eine eigene aus dem EA kreierte Nachricht an mein Handy zuschicken lassen. Das Problem ist das die Bedienung : aktivierte Pending Order die ganze weiter besteht also wird beim jedem durchlaufen des Programms wieder eine Nachricht schicken weil die Bedienung weiter erfüllt ist. Wenn ich es dann abhängig mache von Zeit z.B. nue 3 Sek nach der Aktivierung darf dies Mitteilung durchgehen und danach nicht wäre schon ein Fortschritt weil in diese kurze Zeit kommen nur 1-3 Nachrichten und dann nicht mehr. Wenn ich die Ticks nehme wie in deinem Beispiel dann wird - sagen wir- nach 100 Ticks immer wieder die gleiche Nachricht kommen: "Order aktiviert" obwohl zu diesem Zeitpunkt Nichts mehr aktiviert wurde. Das wäre doch keine Hilfe für mich ständig falsche Nachrichten zu bekommen. Mein EA läuft in Init() nicht OnTime oder OnTick() ! am besten wäre mit dem Array weil sogar wenn ich OrderOpenTime() nehmen würde ist diese Zeit von setzten des Pendingorders genommen und nicht vom dem Zeitpunkt der Aktivierung. Beim OrderCloseTime() wäre das schon sinnvoler! Nun jetzt habe ich die normale Metatrader Push Funktion "Über Handelstransaktionen benachrichtigen" aktiviert und irgendwie habe nicht mehr so viele Nachrichten. Nur ein Paar Buylimit gesetzt und deleted aber das ist noch zum aushalten! Also lasse ich sein das ganze! Nur schade dass es in der SendNotification so einen Parameter nicht vorgesehen wurde : wie oft soll die Nachricht gesendet werden so wie dass z.B. bei Alarm Funktion im Chart Fenster möglich ist! Gruß |
|
|||
Eigentlich habe ich Dir den Weg gezeigt. Wenn Dein Code komplett in OnInit läuft wird der Code nur ein einziges mal eben bei der EA Initialisierung durchlaufen und dann eben nicht mehr. Das macht in der Regel keinen Sinn.
Vielleicht postest Du mal Deinen Code. Würde uns allen leichter fallen Dir zu helfen. Siehst ja der Wille wäre da :-) Gruß TraumExperte Geändert von TraumExperte (13.05.20 um 15:34 Uhr) |
|
|||
Und auch ich habe bereits geschrieben, das es auf das warum ankommt.
<wenn nach einer Orderöffnung eine Nachricht kommen soll, dann kommt die bei mir nur einmal, nämlich wenn die Funktion OrderSend() die Ticketnumber zurückgegeben hat, also bool SendOrder(...) { ticket = OrderSend(.....); if (ticket > 0) { //Nachricht } } Und warum sollte bei diesem Code die Nachricht mit jedem Tick wieder gegeben werden, wenn die Funktion SendOrder() nur angesprungen wird, wenn auch tatsächlich eine Order geöffnet werden soll? Ansonsten hast Du die bool-Variante auch bereits genannt bekommen. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Ich habe doch mehrmals geschrieben dass ich OrderSend benutze nur um Pending Order typ Buylimit oder Selllimit zu setzten und dann habe ich OpenOrderTime() von setzten dieses Pendings.
Dieses Ereignis könnte ich mir tatsächlich über SendNotification nur einmalig schicken lassen! Fertig! Aber das ist für mich nicht so interessant im Vergleich wie das aktivieren dieses Orders also von Buylimit auf Buy oder Selllimit auf Sell. Diese Zeitpunkt wird nicht von Metatrader irgendwo außer in History festgehalten. Wenn ich also eine For Schleife benutze um alle Positionen zu überlaufen um dieser Zeitpunkt der Aktivierung zu ermitteln dann passiert das jedes mal beim Tick oder Event oder jede Sekunde je nach dem wie der EA lüaft. Bei mir steht nur Init() DeInit() und dann Start() kein OnTime() oder OnEvent() oder OnTick() - kenne mich nicht so aus und Ich weiss nicht warum dass bei meinem EA so ist. Ich habe mir ein anderer EA genommen und es ständig überarbeitet!! Bin kein Profi!! Und dann wird die Bedienung immer wieder erfüllt und wieder SendNotification getätigt. Bei jedem durchlaufen! Jedes mal! Wenn ich booleanische Schalter nehme dann wird einmal gesendet aber wenn neue Order aktiviert wird dann wird eben nicht mehr gesendet - wegen dem Schalter. Wie programmierst Du den Schalter ? welche Ereignis soll den Schalter wieder auf On stellen? Oh! - Ja!- das könnte gehen! - ist mir gerade eingefallen! Ich setze immer 2 Order als Pending : auf dem Höchsten Punkt der letzten 12 Stunden Selllimit und auf tiefsten Punkt Buylimit. Da könnte man tatsächlich den Schalter wieder auf On stellen und damit einmalig erlauben bei Aktivierung das SendNotification zu benutzen. - Das geht wirklich ! Gebe ich Euch Recht! Es bleibt aber noch dass Schliessen des gleichen Orders nur einmal schicken lassen. Ja - da mache ich den zweiten Schalter wenn die Position aktiviert wird ! Ja das ist die Lösung ! Ein Schalter beim setzen des Pendings und zweiten beim aktivieren. Das Aktivieren ändert nähmlich die Zahl der Aktiven Orders und Pending und diesen Zustand kann ich leicht kontrolieren und festhalten Danke für den Tipp! und viele Grüße Toll dass man irgendwo fragen kann und es findet sich fast immer jemand mit einem guten Rat! |
|
|||
Hallo!
Kann mir jemand eine Grundsatzfrage beantworten? Eine Globale Variable wird am Anfang des Programms erstellt und wird dann im ganzen Programm also auch in der Funktionen gültig! Eine Variable die Lokal d.h. in der Funktion erstellt wird - wird nur Lokal gültig sein und von den anderen Funktionen nicht akzeptiert! Richtig? Gibt es auch die Möglichkeit eine Variable in der Funktion deklarieren die dann Global d.h. von ganzen Programm gesehen und akzeptiert wird - ohne Meldung :undeclared identifier! Gruß |
|
|||
Zitat:
Lokale Variablen sind lokal und globale Variablen sind global, so einfach ist das. AVT |
|
|||
ich fragte dass nicht ohne Grund!
ich möchte einen booleanischen Schalter erstellen der für jeden Order einmalig ist also am besten wenn der Name des Schalters den Order Ticket beinhaltet und dadurch eindeutig dem Ordner zugewiesen werden kann und nicht einem anderen Order. Bei Grafischen Objecten ist es möglich ObjectCreate "name"+IntegerToString(OrderTicket()) einen eindeutigen Namen zu kreieren der NUR zu dem besagten Order passt. Nun würde ich gerne das gleiche mit dem Schalter haben! Der Schalter muss im ganzen Programm sichtbar sein also Globale Variable! Ich kann aber den Schalter mit dem OrderTicket in den Namen drin - am Anfang doch nicht deklarieren weil ja am Anfang es noch keine Order gibt und später in der Funktion kann man keine Globale Variablen deklarieren wie aus der letzten Post hervorgeht! Kann jemand helfen und sagt mir wie man es macht? |
Lesezeichen |
Stichworte |
push notification |
|
|