Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3872
Beiträge: 37190
Benutzer: 6.156
Aktive Benutzer: 437
Links: 80
Wir begrüßen unseren neuesten Benutzer: kraus10
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 10 Stunden
- kraus10
vor 18 Stunden
- ultragrass...
vor einem Tag
- shanmughav...
vor 3 Tagen
- Aline
vor 4 Tagen
- GPCecchett...

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 44
Gesamt: 44
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Werbung

Like Tree1Likes
Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 16.01.18
Neues Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 20
Angel befindet sich auf einem aufstrebenden Ast
Thumbs up

@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
Mit Zitat antworten
  #12 (permalink)  
Alt 19.01.18
Neues Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 20
Angel befindet sich auf einem aufstrebenden Ast
Standard

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..
Mit Zitat antworten
  #13 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 20
Angel befindet sich auf einem aufstrebenden Ast
Standard

Hallo!

Wie kann ich denn eine Sounddatei mit PlaySound eigentlich für eine definierte Zeit abspielen, sagen wir 5 Sekunden lang? Geht das überhaupt???
Mit Zitat antworten
  #14 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: May 2015
Beiträge: 271
next user befindet sich auf einem aufstrebenden Ast
Standard

Mocwoc hat dir schon gut geholfen.
Ich wollte trotzdem noch kurz meinen Senf dazugeben

Zitat:
Zitat von Angel Beitrag anzeigen
Code:
if (iMA(Symbol(),0,10,0,1,0,0)>iMA(Symbol(),0,20,0,1,0,0))
   
 {
  ...
   }
    else ObjectDelete(name);
Die Bedingung ist nicht gut. Falls sie zutrifft, wird dein Rechteck erstellt, auch wiederholt!
Falls die Bedingung nicht zutrifft, so löscht du das Objekt, auch wenn keines vorhanden ist. Und das immer wieder und wieder...

Zitat:
Zitat von mocwoc Beitrag anzeigen
1. Ich würde Dir empfehlen, das Zeichnen von Chart-Objekten zumindest in eine Include-Datei auszulagern...
Grundsätzlich schon, allerdings macht es auch nur Sinn, wenn man es auch wirklich benötigt.
Bei seinem Test-EA und seinen Kentnissen ist das allerdings wahrscheinlich noch nicht der Fall. Das verwirrt ihn vielleicht sogar ein bischen...

Zitat:
Zitat von mocwoc Beitrag anzeigen
5. In der OnTick()-Funktion musst Du das creierte Objekt zunächst mal löschen mit ObjectDelete(0,"ObjectName"), dann mit der ausgelagerten ObjectCreate-Funktion neu zeichnen.
Das würde ich nicht machen, schon garnicht in OnTick(). Es ist überhaupt nicht nötig, das Objekt zu löschen und neu zu zeichnen.
Dafür gibt es die Funktion "ObjectMove()"!

Zitat:
Zitat von Angel Beitrag anzeigen
Nach Kompilierung tritt ein gelbes Ausrufezeichen auf mit dem Satz "return value of "OrderSend" should be checked"
"Void" verlangt keinen Rückgabewert, soviel ich weiß. Dennoch soll ich den Wert von "OrderSend" checken? Un dwie mache ich das?
Deine Funktion "Kaufen()" hat den Typ "Void", daher hat DEINE Funktion keinen Rückgabewert, wohl aber die Funktion "OrderSend()", auf welche
sich der Warnhinweis bezieht. Diese Funktion hat einen Int-Rückgabewert und liefet die Tecketnummer bei Erfolg, -1 bei Problemen.

Zitat:
Zitat von Angel Beitrag anzeigen
Falls Kaufen() fehlschlug, zB durch zu große Slippage (Hier 3 Pips), wie soll ich denn die Anweisung dazu geben, es nochmal zu versuchen, Kaufen() durchzuführen bzw. die vorhergegangene Kaufbedingung (liegt im void OnTick()-Bereich) nochmals anzulaufen?
Z.B. durch einen einfachen Schalter (bool-Variable), oder der Überprüfung der vorhandenen Orders.

Zitat:
Zitat von Angel Beitrag anzeigen
Es soll nur das Problem - die aufgerufene (Bool-)Funktion "kaufen" - betrachtet werden...
... "Void" verlangt keinen Rückgabewert, soviel ich weiß...
Code:
void Kaufen()
   {
   OrderSend(Symbol(),OP_BUY,LotSize,Ask,3,Ask-(StopLoss*pips),Ask+(TakeProfit*pips),NULL,MagicNumber,0,Green);
   //   if(OrderSend = true)
   //         {
   //         }
   }
Wiederspricht sich bischen, deine aufgerufene Bool-Funktion "void Kaufen()"

=== === === === === === === === === === === === ===

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...
}
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
chart, chart linie, chart zeichnen, mql4, programmierung, programmierung metatrader, programmierung mql4, zeichen


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 01:20 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2018 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------