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.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4484
Beiträge: 40720
Benutzer: 6.868
Aktive Benutzer: 253
Links: 80
Wir begrüßen unseren neuesten Benutzer: huseceti
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 15 Stunden
- huseceti
vor einem Tag
- petra25
vor 4 Tagen
- hk0163
vor 4 Tagen
- magnr1
vor 5 Tagen
- boypac007

Onlineuser
'Wer ist online' anzeigen Benutzer: 4
Gäste: 95
Gesamt: 99
Team: 0
Team:  
Benutzer:  Anja, AVT, Indikator-Trading, MA-EA
Freunde anzeigen

Empfehlungen

Like Tree2Likes
  • 1 Post By Indikator-Trading
  • 1 Post By AVT
Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 4 Wochen
AVT AVT ist gerade online
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 376
AVT befindet sich auf einem aufstrebenden Ast
Angry GlobalVariables nicht alle gelöscht

Ich verstehe die Welt nicht mehr. Ich versuche ein Set von GlobalVariablen zu löschen, der MT macht aber was er grad mal so als lustig empfindet.
Code:
// string PFX="OSCVolDir";
// string GPFX=PFX+"_"+_Symbol+"_";

void DeleteGlobals()
{
   ResetLastError();
   Print(" total Glob vars=",IntegerToString( GlobalVariablesTotal() ),
         " StringLen(",GPFX,")=",IntegerToString( StringLen(GPFX) )    );
   for(int i=0; i<GlobalVariablesTotal(); i++ )
   {
      string glob_name=GlobalVariableName(i);
      if(StringSubstr(glob_name,0,StringLen(GPFX))==GPFX)
      {
         Print(" i=",IntegerToString(i),
               " GlobalVariableName=",GlobalVariableName(i) );
         if( GlobalVariableDel(GlobalVariableName(i)) )
              Print(" i=",IntegerToString(i)," deleted: ",GlobalVariableName(i));
         else Print(" i=",IntegerToString(i)," delete error, code: ",IntegerToString(_LastError));
      }
   }
}
In dem Logfile MQL4/Logs/JJJJMMDD.log wird auch nichts mehr eingetragen - darum die Meldungen im Anhang.
In der GlobVarList sieht man, daß alle Globals gesetzt wurden, 18 Stück.
In der GlobVarDels wurde die Anzahl richtig erkannt, aber der Durchlauf in der Schleife ist nicht korrekt - dabei sind die Klammern doch eindeutig.

Meiner Meinung nach ist der Code korrekt - oder bin ich etwa schon wieder an allem Schuld ??
Hat jemand einen Kommentar dazu, dann bitte her damit AVT
Angehängte Grafiken
Dateityp: jpg GlobVarList.JPG (90,5 KB, 2x aufgerufen)
Dateityp: jpg GlobVarDels.JPG (176,0 KB, 2x aufgerufen)
Mit Zitat antworten
  #2 (permalink)  
Alt vor 4 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.376
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Probiere es mal mit

if(StringSubstr(glob_name,0,StringLen(GPFX)-1)==GPFX)

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 29
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Es liegt es daran, dass du die For-Schleife mit 0 anfängst, anstatt bei der Max-Position der externen Variablen.



Ist dann das gleiche Problem, welches du hättest, wenn du z.B. alle Orders Closen willst, aber bei der Ersten anfängst.

Du löschst ja eine globale Variable. Dann nimmt die nächste in der Reihe direkt den Platz der gerade gelöschen ein. Diese fragst du im Schleifendurchlauf aber nicht mehr ab, sondern springst zur nächsten!

Var0 ist gelöscht -> Var1 geht an i =0. for-schleife springt auf i = 1, var2 wird jetzt gelöscht, da var1 ja auf i =0 sitzt, var3 nimmt die Position von Var2 ein usw.

Daher löscht du nur 9 Variablen, obwohl 18 vorhanden waren. Außerdem fragt deine For-Schleife ja auch jedes mal die Anzahl der vorhandenen externen Variablen ab, daher halt auch nur die 9 Durchläufe!

Lösung zum Problem:
Code:
for(int i=GlobalVariablesTotal()-1; i>=0; i--)
Außerdem könntest du deine If-Abfrage sicherer gestalten, wenn du das folgendermaßen machst, zumindest solange der jeweilige SubString nicht nochmal irgendwo auftaucht!

Code:
if(StringFind(glob_name,GPFX,0)>=0)
AVT likes this.
Mit Zitat antworten
  #4 (permalink)  
Alt vor 4 Wochen
AVT AVT ist gerade online
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 376
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Probiere es mal mit

if(StringSubstr(glob_name,0,StringLen(GPFX)-1)==GPFX)

traderdoc
Danke für den Vorschlag. Das klappt nicht.
Der Substring ist ja genau 17 Zeichen lang (hab ich auch noch mal manuell nachgezählt) - und wenn ich von 0 beginnend 17 Zeichen haben will (die den GPFX ergeben müssen), dann ist das letzte Zeichen zwar an Position 16 (wegen der Null), aber ich will damit ja nicht weiter arbeiten, sondern nur wissen ob die Buchstabenfolge stimmt, damit ich löschen kann.
Wenn ich die Länge, wie Du vorgeschlagen hast auf 16 kürze, dann entsprechen diese 16 Zeichen nicht mehr dem GPFX (denn der ist 17 lang und somit == nicht erfüllt).
Der Test zeigt, daß alle Variablen noch vorhanden sind.
Aber nochmal danke, daß Du Dir die Zeit genommen hast. AVT
Mit Zitat antworten
  #5 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 29
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AVT Beitrag anzeigen
Danke für den Vorschlag. Das klappt nicht.
Der Substring ist ja genau 17 Zeichen lang (hab ich auch noch mal manuell nachgezählt) - und wenn ich von 0 beginnend 17 Zeichen haben will (die den GPFX ergeben müssen), dann ist das letzte Zeichen zwar an Position 16 (wegen der Null), aber ich will damit ja nicht weiter arbeiten, sondern nur wissen ob die Buchstabenfolge stimmt, damit ich löschen kann.
Wenn ich die Länge, wie Du vorgeschlagen hast auf 16 kürze, dann entsprechen diese 16 Zeichen nicht mehr dem GPFX (denn der ist 17 lang und somit == nicht erfüllt).
Der Test zeigt, daß alle Variablen noch vorhanden sind.
Aber nochmal danke, daß Du Dir die Zeit genommen hast. AVT
das das nicht klappt wird daran liegen, dass du die Lösung aus einer Antwort nutzen solltest ?!?
Mit Zitat antworten
  #6 (permalink)  
Alt vor 4 Wochen
AVT AVT ist gerade online
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 376
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Indikator-Trading Beitrag anzeigen
Es liegt es daran, dass du die For-Schleife mit 0 anfängst, anstatt bei der Max-Position der externen Variablen.
Danke Dir, Du hast Recht mach ich ja bei Orders und anderen Sachen, die eine Gesamtmenge untersuchen ja sonst auch !!

Zitat:
Außerdem könntest du deine If-Abfrage sicherer gestalten, wenn du das folgendermaßen machst, zumindest solange der jeweilige SubString nicht nochmal irgendwo auftaucht!
Code:
if(StringFind(glob_name,GPFX,0)>=0)
Dann sind sie wenigstens weg AVT
Mit Zitat antworten
  #7 (permalink)  
Alt vor 4 Wochen
AVT AVT ist gerade online
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 376
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Indikator-Trading Beitrag anzeigen
das das nicht klappt wird daran liegen, dass du die Lösung aus einer Antwort nutzen solltest ?!?
So schnell bin ich nicht
Indikator-Trading likes this.
Mit Zitat antworten
  #8 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 29
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

sorry, dachte du hättest es übersehen, sonst hätte ich auch nicht so forsch geantwortet
Mit Zitat antworten
Antwort

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 +2. Es ist jetzt 19:22 Uhr.





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