Prüfen ob ein Template vorhanden ist - wie ?

 

Hallo!

Nachdem es hier kein Kapitel für MQL5 gibt (eigentlich pervers im MQL5 Forum, aber mich überrascht immer weniger) poste ich meine Frage halt hier.

Die Funktionen ChartSaveTemplate() und ChartApplyTemplate() sind mir bekannt.

Wie kann ich vor ChartApplyTemplate() überprüfen ob das zu ladende Template überhaupt vorhanden ist?

ChartApplyTemplate() gibt ja true zurück wenn in der Warteschlange eingereiht. Also immer! imho Ziemlich schräg!

Gibt's irgendeine Funktion wie ChartTemplateExists() oder muss ich auf die WinApi zurückgreifen ?


Grüße Otto

 

Ist doch ganz eindeutig! Die Dok. überlässt es Dir es auszuprobieren, da es ein ..exist.. wie auch immer nicht gibt. Ist die Methode learning by doing ;)

Ich würde es mal mit einem 'falschen' namen versuchen und sehen, was 'rauskommt.

Aber berichte mal, wie Deine Experimente so liefen ;)

Calli,

PS Ich habe mich heute auch über mangelhaft Doku. geärgert.

 

Hallo Otto,

das Template hast Du ja in einem File.

Du kannst also die Existenz dieses Files überprüfen.

bool  FileIsExist( 
   const string  file_name,       // File name 
   int           common_flag=0    // Search area 
   );
Grüße!
 

Danke für Infos!

@Calli - die Funktion ChartApplyTemplate() gibt imme true zurück, egal ob das Template vorhanden ist oder nicht. Sie prüft laut Dok ja nur das eingereiht werden in der Warteschlange.

@Lars - FileIsExist() ist dafür leider nicht brauchbar weil ich nicht in den richtigen Verzeichnisast gelange.
Die Templates stehen in: C:\Users\Otto\AppData\Roaming\MetaQuotes\Terminal\FE0E65DDB0B7B40DE125080872C34D61\MQL5\Profiles\Templates
ohne Common_flag land ich in: C:\Users\Otto\AppData\Roaming\MetaQuotes\Terminal\FE0E65DDB0B7B40DE125080872C34D61\MQL5\Files
mit Common_flag lande ich in: C:\Users\Otto\AppData\Roaming\MetaQuotes\Terminal\Common

Also bei beiden Verzeichnissen lande ich im Aus, weil ja ..\ Konstruktionen nicht akzeptiert werden.

Mit der Kernel32.dll bin ich auch gescheitert, obwohl der Code von Metaquotes ist (oder vielleicht gerade deswegen). https://www.mql5.com/de/articles/1540

void OnStart()
{
   string buffer=ReadFile("c:\\users\\otto\\test.txt");
   int count=StringLen(buffer);
   Print("Bytes counted:",count);
   WriteFile("c:\\users\\otto\\test2.txt",buffer);   
}
Funktioniert einfach nicht.


Mittlerweile habe ich einen dicken Hals, weil wegen solchen Blödheiten soviel Zeit draufgeht.

Vielleicht hat doch jemand eine Lösung !?

Grüße Otto

Dateioperationen über WinAPI
Dateioperationen über WinAPI
  • 2016.03.28
  • MetaQuotes Software Corp.
  • www.mql5.com
Die Umgebung MQL4 basiert auf der Konzeption der sicheren "Sandbox": Lesen und Speichern von Dateien mit der Sprache ist nur in einigen vo0rdefinierten Ordnern zulässig. Dies schützt den Benutzer von MetaTrader 4 vor der potentiellen Gefahr wichtige Daten auf der Festplatte zu beschädigen. Manchmal ist es jedoch notwendig diesen sicheren Bereich zu verlassen. Dieser Artikel widmet sich dem Problem, wie man es einfach und richtig macht.
 
Lars Rompe:

Hallo Otto,

das Template hast Du ja in einem File.

Du kannst also die Existenz dieses Files überprüfen.

Hallo Lars,

Dein Hinweis und der Service-Desk hat mich letztendlich doch auf eine Lösung gebracht https://www.mql5.com/en/docs/chart_operations/chartapplytemplate

Ganz unten im Beispiel wird ein Template aus dem Ordner 'MQL5\Files' geladen, das lässt sich natürlich mit FileIsExist() abfragen.

Ich wusste nicht das man die Templates irgendwohin speichern kann. Die erscheinen zwar nicht in der Liste der Templates, aber das macht in diesem Fall nichts.

Grüße Otto

Documentation on MQL5: Chart Operations / ChartApplyTemplate
Documentation on MQL5: Chart Operations / ChartApplyTemplate
  • www.mql5.com
Chart Operations / ChartApplyTemplate - Reference on algorithmic/automated trading language for MetaTrader 5
 
Otto Pauser:

Hallo Lars,

Dein Hinweis und der Service-Desk hat mich letztendlich doch auf eine Lösung gebracht https://www.mql5.com/en/docs/chart_operations/chartapplytemplate

Ganz unten im Beispiel wird ein Template aus dem Ordner 'MQL5\Files' geladen, das lässt sich natürlich mit FileIsExist() abfragen.

Ich wusste nicht das man die Templates irgendwohin speichern kann. Die erscheinen zwar nicht in der Liste der Templates, aber das macht in diesem Fall nichts.

Grüße Otto

Das Problem einer solchen Lösung ist, dass Du irgendwann später uU. dieses Teplate suchst und nicht findest oder es änderst (im Template-Ordner) und dann verrückt wirst, weil sich doch nichts ändert!

Das ist manchmal so bei Sonderlösungen!

 
Otto Pauser:

Hallo Lars,

Dein Hinweis und der Service-Desk hat mich letztendlich doch auf eine Lösung gebracht https://www.mql5.com/en/docs/chart_operations/chartapplytemplate

Ganz unten im Beispiel wird ein Template aus dem Ordner 'MQL5\Files' geladen, das lässt sich natürlich mit FileIsExist() abfragen.

Ich wusste nicht das man die Templates irgendwohin speichern kann. Die erscheinen zwar nicht in der Liste der Templates, aber das macht in diesem Fall nichts.

Grüße Otto


Freut mich, dann klappt jetzt alles?

Das Codebeispiel macht ja genau die Überprüfung, Anwendung bei Existenz (true) oder entsprechende Fehlerrückmeldung (false) - fertig.