|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
@mocwoC saugeil, es klappt, nachdem ich Deinen Code übernommen und die letzte geschweifte Klammer entfernt habe! Danke!
Dann kann ich heute und morgen mal so richtig ausgiebig experimentieren |
|
|||
So... nun bin ich mit viel Kampfgeist ein wenig weiter.. jetzt brauche ich jedoch mal wieder Hilfe.
Ich möchte bei Erscheinen eines Kauf- oder Verkaufssignals eine Sounddatei abspielen. Das Kauf / Verkaufssignal wird bei mir mit jedem Tick auf Vorliegen geprüft. Somit liegt die Prüfroutine in der OnTick-Funktion. Die Anweisung PlaySound() liegt jedoch auch dort. Wie kann ich es denn verhindern, dass der Sound nicht bei jedem Tick abgespielt wird bzw. wie kann denn ich nur eine bestimmte Anzahl von Sounds nach Erreichen der Ein / Ausstiegslogik abspielen? Für Hilfe wäre ich dankbar.. dann kann ich über das WE mir Gedanken machen.. denn der Markt ist ja zu und testen kann ich es aufgrund fehlender Ticks nicht.. |
|
|||
Hallo!
Wie kann ich denn eine Sounddatei mit PlaySound eigentlich für eine definierte Zeit abspielen, sagen wir 5 Sekunden lang? Geht das überhaupt??? |
|
||||||
Mocwoc hat dir schon gut geholfen.
Ich wollte trotzdem noch kurz meinen Senf dazugeben Zitat:
Falls die Bedingung nicht zutrifft, so löscht du das Objekt, auch wenn keines vorhanden ist. Und das immer wieder und wieder... Zitat:
Bei seinem Test-EA und seinen Kentnissen ist das allerdings wahrscheinlich noch nicht der Fall. Das verwirrt ihn vielleicht sogar ein bischen... Zitat:
Dafür gibt es die Funktion "ObjectMove()"! Zitat:
sich der Warnhinweis bezieht. Diese Funktion hat einen Int-Rückgabewert und liefet die Tecketnummer bei Erfolg, -1 bei Problemen. Zitat:
Zitat:
=== === === === === === === === === === === === === Also zusammengefasst (Kommentare beachten!): Zusammen mit dem Beispiel bzgl. von PlaySound(), welches ich dir hier gepostet habe, würde eine mögliche Umsetzung so aussehen: Code:
#property copyright "Copyright No Matter" #property version "1.00" #property strict long chart_ID = ChartID(); string name = "ObjektQ"; bool OBJECT_EXIST = false; datetime LAST_BAR = Time[0]; int SEC_ON_START = 0; int SEC_CUR = 0; bool SOUND_ACTIVE = false; int OnInit() { // Timer setzen, um PlaySound() zu managen... EventSetTimer(1); return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { ObjectDelete(name); EventKillTimer(); } void OnTimer() { if(SOUND_ACTIVE) { SEC_CUR = TimeSeconds(TimeCurrent()); if(SEC_ON_START < 55) { if((SEC_CUR >= SEC_ON_START+5) || (SEC_CUR < SEC_ON_START)) {PlaySound(NULL); SOUND_ACTIVE = false;} } else if(SEC_CUR < SEC_ON_START && SEC_CUR+60 >= SEC_ON_START+5) {PlaySound(NULL); SOUND_ACTIVE = false;} } } void OnTick() { // Objekt NUR EINMAL erstellen! if(!OBJECT_EXIST && iMA(Symbol(),0,10,0,1,0,0) > iMA(Symbol(),0,20,0,1, 0,0)) { ObjectCreate(chart_ID,name,OBJ_RECTANGLE,0,Time[5],Close[5]-0.0001,Time[0],Close[0]+0.0001); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,C'100 ,40,100'); ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,STYLE_SOLID); ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,5); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,true); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE, true); OBJECT_EXIST = true; // Sofern dieselben Bedingungen für deine Funktion "Kaufen()" gelten... // Eine Funktion, die einfach nur eine andere aufruft, ist unnötig! ResetLastError(); // Hier würde ich unbedingt noch auf deinen StopLoss und TakeProfit achten. // Üblicherweise nutzt man z.B. "Ask/Bid +/- StopLoss * Point" if(OrderSend(Symbol(),OP_BUY,LotSize,Ask,3,Ask-(StopLoss*pips),Ask+(TakeProfit*pips),NULL,MagicNumber,0,Green) == -1) { // Fehler bei Orderausführung. Ausgabe des Fehlers mit z.B. einer MessageBox: MessageBox("Order konnte nicht ausgeführt werden. Fehler: "+IntegerToString(GetLastError())); // Vor einem erneuten Versuch Fehler beachten. // Bei falschen Bedingungen und entsprechendem Fehler (falscher Stop, Traden deaktiviert, ect...) // könnte es schnell zu einer Endlosschleife von Versuchen führen !!! } else { // Order wurde gesetzt. // PlaySound() aufrufen und nach 5 Sekunden beenden. PlaySound("DEINE DATEI"); SEC_ON_START = TimeSeconds(TimeCurrent()); SOUND_ACTIVE = true; } } else { // Da du nicht angegeben hast, wo genau das Rechteck aufhören soll, // Zeichnet es sich einfach bei jeder neuen Kerze mit weiter. // Hier müsstest du bestimmte Bedingungen setzen... if(Time[0] != LAST_BAR) { ObjectMove(chart_ID,name,1,Time[0],ObjectGetDouble(chart_ID,name,OBJPROP_PRICE2)); LAST_BAR = Time[0]; } // === === === === === === === === === === // Die Bedingung oben trifft nur einmal zu. // Danach musst du Order hier managen. // Je nach Vorhaben halt mit erneuter iMA-Prüfung... if(OrdersTotal() == 0 && iMA(Symbol(),0,10,0,1,0,0) > iMA(Symbol(),0,20,0,1, 0,0)) { // Order wurde offenbar nicht gesetzt. // Hier darauf reagieren mit z.B. einem erneuten Versuch. // Bei erfolgreichem OrderSend() dann auch PlaySound() setzen... } else { // Vorhandene Order managen. // Falls mehrere Orders vorhanden, so mit der Ticketnummer filtern } } } void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { // Für zukünftiges... } |
|
|||
Nochmal das Rechteck-Problem...
So, jetzt fuchst mich das Rechteck nun doch.
Die Hilfen hier waren aufschlussreich, jedoch komme ich nicht recht weiter. Nocheinmal zu der Problemstellung EURUSD: Ich habe vor, zB im M15-Chart die Tageskerze abbilden zu lassen. Oder später, wenn ich es verstanden habe, im M15 die Stundenkerzen. Aber daher erstmal zu der einen Tageskerze. Ich möchte dies durch ein einfaches Rechteck zwischen Open und Close der aktuellen Tageskerze verwirklichen. Somit bewegt sich das Rechteck nicht einfach, sondern es wird mit zunehmender Zeit größer. Die Lunte und den Docht kann ich sicher irgendwie auf eine andere Weise "dranfriemeln", aber das größer werdende Rechteck erscheint mir erstmal wichtiger. Ich habe das Problem, nicht zu wissen, wie ich die Ankerpunkte bzw. die Zeit der Ankerpunkte beschreibe. PHP-Code:
Also Time[10] ist natürlich nur beispielhaft für den 10.ten Bar vor dem aktuellen Bar. Ich hoffe, mir kann jemand auf die Spünge helfen?! Also wie zu sehen ist, mache ich im 3.ten Monat Fortschritte ;-) (Ist aber schon hart ... ) |
|
|||
Zitat:
Zitat:
nach Links hin schon zum Start einen Körper hat. Außerdem, wann willst du dein Rechteck aktualisieren? Soll es durchgehend mit der Kerze wachsen, also bei jedem einzelnen Tick? Zitat:
an Close der Tageskerze anpasst. Code:
ObjectCreate(0,"RECHTECK",OBJ_RECTANGLE,0,Time[10],iOpen(Symbol(),PERIOD_D1,0),Time[0],iClose(Symbol(),PERIOD_D1,0)); ObjectSetInteger(0,"RECHTECK",OBJPROP_BGCOLOR,clrTurquoise); ObjectSetInteger(0,"RECHTECK",OBJPROP_COLOR,clrRed); ObjectSetInteger(0,"RECHTECK",OBJPROP_SELECTABLE,false); ObjectSetInteger(0,"RECHTECK",OBJPROP_SELECTED,false); ObjectSetInteger(0,"RECHTECK",OBJPROP_FILL,true); ObjectSetInteger(0,"RECHTECK",OBJPROP_BACK,true); // In OnTick() ObjectMove(0,"RECHTECK",1,Time[0],iClose(Symbol(),PERIOD_D1,0)); |
|
|||
Hallo und vielen Dank für die rasche Antwort!!!
Ja, ich möchte damit quasi die Tageskerze in unteren Timeframes abbilden. Die Zeitkoordinaten sollen mit der Tageskerze beginnen, bei EURUSD also bei 23:00 Uhr MEZ und es soll mit jedem Tick aktualisiert werden - was mit dem Code innerhalb der void OnTick-Funktion bereits erreicht wurde. Dein Beispiel ist Weltklasse und brachte mich schon weiter! Vielen Dank dafür! Wenn Du mir nun noch mit den Zeitkoordinaten der beginnenden Tageskerze auf die Sprünge helfen könntest...?! |
|
|||
Zitat:
Code:
iTime(Symbol(),PERIOD_D1,0) Geändert von next user (13.03.18 um 11:07 Uhr) Grund: N' Wort vergessen ;) |
|
|||
Was soll ich sagen...?
Endgeil...! Danke!!!
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang |
|
|||
In der Zeile
PHP-Code:
PHP-Code:
Nun versuchte ich, clrRed durch eine string-Variable "Col" zu ersetzen, über deren Inhalt wie oben entschieden wird. Nur: Dann zeigt sich das Rechteck farblos. Was mache ich nur falsch?
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang |
Lesezeichen |
Stichworte |
chart, chart linie, chart zeichnen, mql4, programmierung, programmierung metatrader, programmierung mql4, zeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|