Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 5 > Programmierung MQL5

Programmierung MQL5 Hier gehts rund ums Programmieren in MQL5.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43249
Benutzer: 7.221
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Thomas75
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 20 Minuten
- Thomas75
vor 13 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 441
Gesamt: 442
Team: 0
Team:  
Benutzer:  Thomas75
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 28.02.21
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard Screenshots in einer Loop , schlägt fehlt

Moin Moin,

ich schildere kurz was ich machen möchte und was eben nicht klappt:

Was ich möchte:

Ich sammle mit einer Liste CandlePattern (Dojis und Hammer) von denen ich dann einen Screentshot machen möchte, den ich mir dann per Email zusenden lassen möchte. Bevor die Screenshots gemacht werden, soll erst mal der Chart den TimeFrame und das Symbol des Signales laden/selektieren.

Was nicht klappt:

Obwohl ich die Abfolge Loope, werden sie anscheinend nicht prozedual abgearbeitet. So werden die Charts nicht sauber selektiert und die Screenshots passen nicht zu den Signalen. Beim Debuggen ist mir aufgefallen das bei aktuell 4 Signalen, die ersten 2 nacheinander abgearbeitet werden und die restlichen 2 nicht. Auch wenn ich am Haltepunkt stehen bleibe, läuft die Ausgabe weiter. Bedeutet bevor ich überhaupt die Charts selektieren kann, werden die restlichen Signale bereits weiterverarbeitet, was ich an der Print-Ausgabe im Terminal erkennen konnte, die bereits erfolgt obwohl ich erst beim 2ten Signal bin und dort am Haltepunkt beim Debuggen warte. Die Emailfunktion ist abgekoppelt, die kann da nicht in die quere kommen.

Soweit ich es in Erinnerung habe, unterstützt MQL5 keine Multithreathing oder asnyc funktionen. Hat sich das geändert? So up to date bin ich da nicht.

Code:
   for(int i=0;i<signalList.Total();i++)
     {
         CandlePattern *o=signalList.GetNodeAtIndex(i);  
         MakeSH(o.wert,GetPeriodEnum(o.signalTF));  

         Print("Symbol:--  > "+o.patternName+"     Wert:--  > "+o.wert+"   TF:--  > "+o.signalTF+"    Time:--  > "+o.signalTime);
         delete o;
         
     }
      signalList.Clear();
      delete signalList;



     //+------------------------------------------------------------------+
      //| Macht einen Screenshot des aktuellen Charts und speichert diesen |
      //+------------------------------------------------------------------+
         bool MakeSH(string wert, ENUM_TIMEFRAMES tf )
         {
         
            PrepareChartForScreenshot(wert,tf);   
            string chartSymbol = ChartSymbol(0);
            ENUM_TIMEFRAMES period = ChartPeriod(0);
            if(chartSymbol != wert && period != tf)
              {
                PrepareChartForScreenshot(wert,tf);   
              }

            
            ENUM_ALIGN_MODE  align_mode = ALIGN_RIGHT;
            long width = ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
            long height = ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0);
            string fileName=wert+GetPeriodString(tf)+".gif";
            //--- Show the name on the chart as a comment
            //  Comment(name);
            if(!ChartScreenShot(0,fileName,(int)width,(int)height,align_mode))
              {
                  Print("ScreenShot failed: "+IntegerToString(GetLastError()));
                  return false;
              }      
            return true;
         }  
     
     //+------------------------------------------------------------------+
     //|  Wählt den Chart + TF  aus mit speziellen Settings               |
     //+------------------------------------------------------------------+     
     void PrepareChartForScreenshot(string wert, ENUM_TIMEFRAMES tf )
     {
         
         ChartSetSymbolPeriod(0,wert,tf);
         ChartSetInteger(0,CHART_SHOW_GRID,false);
         ChartSetInteger(0,CHART_MODE,CHART_CANDLES);         
         ChartSetInteger(0,CHART_SCALE,3);         
         ChartSetInteger(0,CHART_AUTOSCROLL,true);         
         ChartSetInteger(0,CHART_SHIFT,true);
         ChartSetInteger(0,CHART_COLOR_BACKGROUND,clrBlack);       
         ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,clrLimeGreen);
         ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,clrRed);      
         ChartSetInteger(0,CHART_COLOR_CHART_UP,clrLimeGreen);
         ChartSetInteger(0,CHART_COLOR_CHART_DOWN,clrRed);                     
         ChartSetInteger(0,CHART_COLOR_BID,clrWhite);           
     }

     //+------------------------------------------------------------------+
     //| Gibt den TF als ENUM zurück                                      |
     //+------------------------------------------------------------------+     
     ENUM_TIMEFRAMES GetPeriodEnum(string val)
     {
                        
         if(val == "M1")
           {
               return PERIOD_M1;
           }
         if(val == "M5")
           {
               return PERIOD_M5;
           }
         if(val == "M15")
           {
               return PERIOD_M15;
           }
         if(val == "H1")
           {
               return PERIOD_H1;
           }
         if(val == "H4")
           {
               return PERIOD_H4;
           }
         if(val == "D1")
           {
               return PERIOD_D1;
           }               
         return -1;
     }
   //+------------------------------------------------------------------+
   //| Klasse um ein ChartPattern Signal abzubilden                     |
   //+------------------------------------------------------------------+

   class CandlePattern : public CObject
     {
   public:
         string patternName;
         string wert;
         datetime signalTime;
         string   signalTF;
         
                        CandlePattern(void){};
                       ~CandlePattern(void){};
     };
Sleep() Funktionen werden auch komplett ignoriert. In der Loop hab ich nen 5sec Sleep gesetzt aber der is komplett durchgerauscht.

Weiß ehrlich gesagt nicht mehr was ich probieren soll.
Was überseh ich??
  #2 (permalink)  
Alt 05.03.21
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

Für alle die das gleiche Problem haben/hatten:

Die FunktionChartSetSymbolPeriod war das problem.
Diese wird async ausgeführt und verrichtet erst sein werk, wenn
alle vorangegangenen Befehle ausgeführt wurden.

Wenn Ihr einfach einen neuen Chart öffnet mit ChartOpen
könnt ihr über die erhaltene ChartID auch Modifikationen vornehmen am
Chart und Ihn dann auch wieder schließen.

Anderer Weg aber verlässlich und sauber.

In dem Sinne....
Thema geschlossen

Lesezeichen

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 11:50 Uhr.





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