|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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 |
|
|||
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 |
|
|||
Lad doch mal die Quellcodes hoch.
|
|
|||
Danke für Deine Tips, ich bin sie durchgegangen.
Zitat:
Zitat:
Zitat:
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[]; AVT |
|
|||
Willst Du 3000 Zeilen Code analysieren, wo möglich noch parallel ??
|
|
|||
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 |
|
|||
@MA-EA, was willst DU denn mit dem Code?
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
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 AVT |
|
|||
Hmmm,
liegt vermutlich an den Buttons (Objecten). Werden die sauber gelöscht (DeInit) --> (ObjectDelete)? Mal prüfen. Gruß TraumExperte |
|
|||
Zitat:
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 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)); } 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 |
Lesezeichen |
|
|