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: 4443
Beiträge: 40480
Benutzer: 6.832
Aktive Benutzer: 266
Links: 80
Wir begrüßen unseren neuesten Benutzer: burkijan
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- burkijan
vor 2 Tagen
- Chidiroglo...
vor 3 Tagen
- JapanTrade...
vor 5 Tagen
- chroma
vor 6 Tagen
- statisticm...

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 113
Gesamt: 115
Team: 0
Team:  
Benutzer:  dax09, Domke01
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 2 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 340
AVT befindet sich auf einem aufstrebenden Ast
Question Fehlermeldung: 8 leaked strings left

Diese Fehlermeldung bekomme ich unter "Experten".
Situation:
2 Tabellen, eine mit einer PairListe und eine mit einer AnalyseListe.
Beide Tabellen sind eigenständige Indikatoren.

1. Ich lade jede Indikator-Tabelle separat in einem eigenen Chart-Fenster.
Ich kann in jeder Tabelle nun durch Klick auf den Symbolnamen einen neuen Chart für das Symbol (samt der vorher definierten Vorlage) laden.

2. Ich lade beide Indikator-Tabellen zusammen in einem Chart-Fenster, erst die AnalyseListe und danach die PairListe.
A. Wenn ich aus der AnalyseListe durch Klick einen neuen Symbolchart aufmachen will, ist alles ok.
B. Wenn ich aber aus der PairListe durch Klick einen neuen Chart aufmachen will, bekomme ich die Fehlermeldung über "leaked strings left". Es wird zwar der Symbolchart aufgemacht, aber ohne Vorlage und das Fenster mit den beiden Tabellen verschwindet mit besagtem Abschiedsgruß

Frage:
Was bedeutet diese Meldung? Ich habe zwar schon etliche Google Resultate durchgelesen, trotzdem verstehe ich nur Bahnhof - da helfen weder eine Übersetzung noch irgendwelche Lösungsvorschläge (klaro, daß man von Lösungen nix versteht, wenn man nicht weiß, was das Problem ist - wie können denn irgendwelche Strings übrigbleiben, und was zum Teufel sind undichte Strings ).

Wäre nett, wenn jemand mich aufklären könnte, damit ich versuchen kann eine Lösung zu finden. Danke. AVT
Mit Zitat antworten
  #2 (permalink)  
Alt vor 2 Wochen
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 195
RetepM befindet sich auf einem aufstrebenden Ast
Standard

Man findet wenig zu dem Thema. In einem Thread wird der Programmierer gebeten, den Code an den Support zu schicken.
Anscheinend durchläuft der EA vor der Fehlermeldung eine Zählschleife ??daher die Zahl vor dem Error?? guck doch mal ob Du im Code einen leeren String behandelst, durch 0 teilst oder ob, wenn im Code, bei StringTrimLeft etwas schief geht.
Grüße
Mit Zitat antworten
  #3 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 932
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Lad doch mal die Quellcodes hoch.
Mit Zitat antworten
  #4 (permalink)  
Alt vor 2 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 340
AVT befindet sich auf einem aufstrebenden Ast
Standard

Danke für Deine Tips, ich bin sie durchgegangen.
Zitat:
Zitat von RetepM Beitrag anzeigen
Man findet wenig zu dem Thema. In einem Thread wird der Programmierer gebeten, den Code an den Support zu schicken.
Den hab ich auch gelesen
Zitat:
Zitat von RetepM Beitrag anzeigen
Anscheinend durchläuft der EA vor der Fehlermeldung eine Zählschleife ??daher die Zahl vor dem Error??
Das ist kein EA, das sind 2 Indikatoren (2 EAs gehen nicht zusammen auf einen Chart) - nur nebenbei, tut aber glaube ich nix zur Sache.
Zitat:
Zitat von RetepM Beitrag anzeigen
guck doch mal ob Du im Code einen leeren String behandelst, durch 0 teilst oder ob, wenn im Code, bei StringTrimLeft etwas schief geht.
1."StringTrimLeft": neg., gibt's im ganzen Code nicht
2. 0 Teilung: (neg.), nicht im Code für "neuen Chart"-Knopf
-. außerdem würde das nicht "zero division" Error ergeben?
3. leerer String: (neg.), dann würde er keinen neuen Chart öffnen

Beispiel:
Code:
// in OnChartEvent:
   if(   id==CHARTEVENT_OBJECT_CLICK                //ObjectWasClicked
      && StringFind(sparam,PFX+"pName")>= 0 )       //sparam=FullButtonName
   {
         OpenChart( FindPairNameOfButton(sparam) );
            ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
         return;         
   }//ButtonNameWasClicked

// in OnInit: Loop für alle Knöpfe 
  CreatePairButton("pName"+IntegerToString(i),xOffset,pOffset+i*LineHeight,Apairnames[i]);  //Name

// Funktion, die in OnChartEvent verwendet wird:
string FindPairNameOfButton(string ButtonName="FullButtonName")
{
   string Result="";
   int Startposition=StringLen(PFX+"pName");
   string PairNumber=StringSubstr(ButtonName,Startposition); //From"PFX_pName"ToEnd
   int    PairInteger=(int)StringToInteger(PairNumber);
   Result=SSpairTable[PairInteger].SpairName;
   return(Result);
}

// Zuweisung von Nummer zu Name über:
struct SSpair //StructSortedPair:
{
   int    SpairNo;      //PairIDnumber
   string SpairName;    //PairName
}; SSpair SSpairTable[];
Ich sehe nicht, wo hier irgendwas falsch sein soll, zudem funktioniert diese Tabelle ja einwandfrei, wenn sie alleine auf einem Chart liegt.
AVT
Mit Zitat antworten
  #5 (permalink)  
Alt vor 2 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 340
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Lad doch mal die Quellcodes hoch.
Willst Du 3000 Zeilen Code analysieren, wo möglich noch parallel ??
Mit Zitat antworten
  #6 (permalink)  
Alt vor 2 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 340
AVT befindet sich auf einem aufstrebenden Ast
Standard

Es war in den Google Ergebnisse ja die Rede von Arrays.
Zuerst habe ich sichergestellt, daß alle Arrays eindeutige Namen haben.
Das half nicht.

Dann habe ich mir die ErrorCodes vorgenommen.
Da tauchte eine 7 = ERR_NOT_ENOUGH_RIGHTS auf, und zwar für den Chart, der geöffnet werden soll. Es liegt also irgendwo in dem Aufruf der Charts ein Fehler. Den suche ich jetzt. AVT auf der Suche
Mit Zitat antworten
  #7 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.336
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Lad doch mal die Quellcodes hoch.
@MA-EA, was willst DU denn mit dem Code?

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #8 (permalink)  
Alt vor 2 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 340
AVT befindet sich auf einem aufstrebenden Ast
Standard die Buttons werden nicht erkannt

Logfile dazu (unwichtiges rausgenommen):
Code:
================ 1. Tabelle FX-PairStrength2, 4 verschiedene Button-Klicks: immer ok
FX-PairStrength2 EURUSD,H4: OnChartEvent PairStrength2 button FXpsL_11_AUDJPY button was clicked.
FX-PairStrength2 EURUSD,H4: OnChartEvent calling FindpsButtonPair(FXpsL_11_AUDJPY)
FX-PairStrength2 EURUSD,H4: FindpsButtonPair Startposition: 9
FX-PairStrength2 EURUSD,H4: FindpsButtonPair PairName: AUDJPY
FX-PairStrength2 EURUSD,H4: FindpsButtonPair Result: AUDJPY

FX-PairStrength2 EURUSD,H4: OnChartEvent PairStrength2 button FXpsL_14_EURGBP button was clicked.
FX-PairStrength2 EURUSD,H4: OnChartEvent calling FindpsButtonPair(FXpsL_14_EURGBP)
FX-PairStrength2 EURUSD,H4: FindpsButtonPair Startposition: 9
FX-PairStrength2 EURUSD,H4: FindpsButtonPair PairName: EURGBP
FX-PairStrength2 EURUSD,H4: FindpsButtonPair Result: EURGBP

FX-PairStrength2 EURUSD,H4: OnChartEvent PairStrength2 button FXpsL_22_NZDJPY button was clicked.
FX-PairStrength2 EURUSD,H4: OnChartEvent calling FindpsButtonPair(FXpsL_22_NZDJPY)
FX-PairStrength2 EURUSD,H4: FindpsButtonPair Startposition: 9
FX-PairStrength2 EURUSD,H4: FindpsButtonPair PairName: NZDJPY
FX-PairStrength2 EURUSD,H4: FindpsButtonPair Result: NZDJPY

FX-PairStrength2 EURUSD,H4: OnChartEvent PairStrength2 button FXpsL_24_USDCAD button was clicked.
FX-PairStrength2 EURUSD,H4: OnChartEvent calling FindpsButtonPair(FXpsL_24_USDCAD)
FX-PairStrength2 EURUSD,H4: FindpsButtonPair Startposition: 9
FX-PairStrength2 EURUSD,H4: FindpsButtonPair PairName: USDCAD
FX-PairStrength2 EURUSD,H4: FindpsButtonPair Result: USDCAD

================ 2. Tabelle FX-PairLists2: das Chaos beginnt
===> NEIN, das war FX-PairLists2 !! also ist auch die Namensfindung falsch
FX-PairStrength2 EURUSD,H4: OnChartEvent PairStrength2 button FXplist_pName4 button was clicked.
FX-PairStrength2 EURUSD,H4: OnChartEvent calling FindpsButtonPair(FXplist_pName4)
FX-PairStrength2 EURUSD,H4: FindpsButtonPair Startposition: 9
FX-PairStrength2 EURUSD,H4: FindpsButtonPair PairName: Name4
FX-PairStrength2 EURUSD,H4: FindpsButtonPair Result: Name4

===> jetzt hat er es kapiert, die Namensauflösung ist korrekt,
===> dieser Chart kann aufgemacht werden
FX-PairLists2 EURUSD,H4: FXplist_pName4 PairList2 button was clicked.
FX-PairLists2 EURUSD,H4: OnChartEvent substring FXplist_pName found in FXplist_pName4
FX-PairLists2 EURUSD,H4: OnChartEvent calling FindplButtonPair(FXplist_pName4)
FX-PairLists2 EURUSD,H4: FindplButtonPair Startposition: 13
FX-PairLists2 EURUSD,H4: FindplButtonPair PairNumber: 4
FX-PairLists2 EURUSD,H4: FindplButtonPair PairNumber in Table: 4
FX-PairLists2 EURUSD,H4: FindplButtonPair PairName in Table: AUDUSD

===> das ist der Fehler, der zuerst gemacht wurde, der verursacht das:
FX-PairStrength2 EURUSD,H4: uninit reason 7
FX-PairStrength2 EURUSD,H4: OnDeinit last error: internal error
FX-PairStrength2 EURUSD,H4: OnDeinit reason: 7

===> der geht dann natürlich mit
FX-PairLists2 EURUSD,H4: uninit reason 7
FX-PairLists2 EURUSD,H4: OnDeinit last error: chart not found
FX-PairLists2 EURUSD,H4: OnDeinit reason: 7

===> die dürften dann aber nicht aus FX-PairLists2 sein, sondern aus FX-PairStrength2
FX-PairLists2 EURUSD,H4: 11 leaked strings left

================ und Tschüß
Custom indicator FX-PairStrength2 EURUSD,H4: removed
Custom indicator FX-PairLists2 EURUSD,H4: removed
===> und was soll der Unsinn, dann auf dem Chart einen Indi zu laden
===> das steht nirgendwo im Code, das das passieren soll
Custom indicator FX-Pairs\MA-EMAtrend EURUSD,H4: loaded successfully
MA-EMAtrend EURUSD,H4: initialized
So, und nun bin ich endgültig mit meinem Latein am Ende. Mehr als überall eindeutige Namen vergeben kann ich nicht. Wenn der MT damit nicht klarkommt, dann weiß ich auch nicht weiter.
AVT
Mit Zitat antworten
  #9 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Apr 2020
Beiträge: 14
TraumExperte befindet sich auf einem aufstrebenden Ast
Standard

Hmmm,

liegt vermutlich an den Buttons (Objecten). Werden die sauber gelöscht (DeInit) --> (ObjectDelete)? Mal prüfen.

Gruß

TraumExperte
Mit Zitat antworten
  #10 (permalink)  
Alt vor 2 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 340
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von TraumExperte Beitrag anzeigen
Hmmm,
liegt vermutlich an den Buttons (Objecten). Werden die sauber gelöscht (DeInit) --> (ObjectDelete)? Mal prüfen.
Danke für den Hinweis, hab ich erledigt: Resultat negativ.
Sämtliche Sachen fangen bei mir an mit dem Festlegen eines PFX für Objekte:
Code:
string PFX       = "FXplist_"; //1. Indi: PairList
string PFX       = "FXpsL_"; //2. Indi: pair strength List
DeInit ist bei den meisten (wo es nicht unbedingt notwendig, daß Objekte behalten werden) auch immer dasselbe (die erste Zeile habe ich eingefügt, damit ich nicht immer die Codenummern nachsehen muß):
Code:
void OnDeinit(const int reason)
{
   Print(__FUNCTION__," last error: ",ErrorDescription(GetLastError()) );
   for(int i=0; i<ObjectsTotal(); i++)
   {
      string obj_name=ObjectName(i);
      if(StringSubstr(obj_name,0,StringLen(PFX))==PFX) // object with PFX found
      {
         if(ObjectsDeleteAll(0,PFX,-1,-1)>0) { break; }// delete until done
      }
   }
   Print(__FUNCTION__," reason: ",IntegerToString(reason));
}
Und ich habe einen komplett leeren Chart genommen, beide geladen und auf einen PairList Button gedrückt - exit wie gewohnt - der Chart wird kriegt plötzlich einen anderen Indikator und in der Objektliste ist außer dem ChartId Label Objekt nix mehr.
Der Klartext Fehler sagt, PairList "Chart not found" als LastError. In PairList wird aber der Name richtig aufgelöst (sagt ja auch das Logfile) - nur daß er zuerst die PairStrength Namensauflösung startet, was völlig falsch ist, weil ich auf einen PairList Button drücke.
AVT
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 11:54 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.
-----------------------------------------------------------------------------------------------------------------------------