TF-altProjekte/Experts/Ablage/TFApp.mqh
super.admin 84cd1a7ab0 convert
2025-05-30 16:31:33 +02:00

285 lines
22 KiB
MQL5

//+------------------------------------------------------------------+
//| TFApp.mqh |
//| Thorsten Fischer Copyright 2019 |
//| https://www.tfsystem.de |
//+------------------------------------------------------------------+
#property copyright "Thorsten Fischer Copyright 2019"
#property link "https://www.tfsystem.de"
#property version "1.00"
//#include "..\..\Include\TF-Class\TF-Funktionen.mqh"
//#include <Charts\Chart.mqh>
#include <Controls\WndContainer.mqh>
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CTFApp : public CWndContainer
{
private:
string m_program_name; // name of program
string m_file_name; // name of file
int m_file_flags_read; // flags of file
int m_file_flags_write; // flags of file
int m_deinit_reason; // deinit reason
int m_chart_number; // chart number
long m_chart_id_ea; // chart id ea
protected:
//CChart m_chart;
public:
CTFApp();
~CTFApp();
virtual int OnInitEvent(void);
virtual bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);
virtual void Destroy(const int reason=REASON_PROGRAM1);
virtual void OnTimerEvent(void);
virtual void DPrint(const string ausgabe="") { if(IS_DEBUG_MODE) Print(ausgabe); }
//virtual string getProgramName(void) const { return(m_program_name); }
//virtual int getChartNumber(void) const { return(m_chart_number); }
virtual void setChartNumber(void);
virtual string getDeInitReasonText(int reasonCode);
virtual bool IniFileSave(void); // Ini File Save
virtual bool IniFileLoad(void); // Ini File Load
//virtual bool IniFileNew(void); // Ini File New
virtual string IniFileName(void) {return(m_program_name+"_Ini");} // Ini File Name
virtual string IniFileExt(void) const { return(".dat"); } // Ini File Extension
virtual bool Load(const int file_handle); // Load Data
virtual bool Save(const int file_handle); // Save Data
void Test(void) {ChartRedraw();Sleep(1000*5);} // test ChartRedraw und Sleep 1000*5
void CAusgabe(color farbe) { DPrint(ColorToString(farbe,true)+" ist = "+ColorToString(farbe));}
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CTFApp::CTFApp() : m_program_name(MQLInfoString(MQL_PROGRAM_NAME)),
m_file_name(IniFileName()+IniFileExt()),
m_file_flags_read(FILE_READ|FILE_BIN|FILE_ANSI|FILE_COMMON),
m_file_flags_write(FILE_WRITE|FILE_BIN|FILE_ANSI|FILE_COMMON),
m_deinit_reason(WRONG_VALUE),
m_chart_id_ea(ChartID())
{
setChartNumber();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CTFApp::~CTFApp()
{
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CTFApp::OnInitEvent(void)
{
//---
if(!IniFileLoad())
{
DPrint(__FUNCTION__+" > Fehler bei dem Laden des Ini Files");
return(INIT_FAILED);
}
DPrint(" > ChartOpen = "+(string)ChartOpen(ChartSymbol(),0));
DPrint("> m_deinit_reason = "+(string)m_deinit_reason+" / m_chart_id_ea = "+(string)m_chart_id_ea+" / m_chart_number = "+(string)m_chart_number);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CTFApp::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
//---
//DPrint(__FUNCTION__+" aufgerufen mit | "+IntegerToString(id)+" | "+DoubleToString(lparam)+" | "+DoubleToString(dparam)+" | "+sparam);
//---
// apptrademanager.OnEvent(id,lparam,dparam,sparam);
//---
//DPrint(__FUNCTION__+" durchlaufen");
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CTFApp::Destroy(const int reason)
{
//---
if(m_deinit_reason==WRONG_VALUE)
return;
//---
m_deinit_reason=reason;
//---
if(!IniFileSave())
DPrint(__FUNCTION__+" > Fehler bei dem Speichern des Ini Files");
//---
//m_hauptfenster.Destroy(reason);
//---
if((reason==REASON_PROGRAM) && ((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_EXPERT))
DPrint("reason und Progam_expert (reason==REASON_PROGRAM) && ((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_EXPERT)");
//---
DPrint(__FUNCTION__+" durchlaufen | "+getDeInitReasonText(reason));
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CTFApp::OnTimerEvent(void)
{
//---
// //CTFApp.OnTimerEvent();
//---
DPrint(__FUNCTION__+" durchlaufen");
}
//+------------------------------------------------------------------+
//| Die Funktion gibt die Anzahl der Charts im Terminal zurück |
//+------------------------------------------------------------------+
void CTFApp::setChartNumber(void)
{
long currChart=ChartFirst();
int i=0;
while(currChart>=0)
{
currChart=ChartNext(currChart);
i++;
}
m_chart_number=i;
}
//+------------------------------------------------------------------+
//|gibt Reason Code als Text zurück |
//+------------------------------------------------------------------+
string CTFApp::getDeInitReasonText(int reasonCode)
{
//---
switch(reasonCode)
{
case REASON_PROGRAM:
return("0 = Das Progamm wurde durch ExpertRemove() beendet.");
case REASON_REMOVE:
return("1 = Das Programm wurde vom Chart entfernt.");
case REASON_RECOMPILE:
return("2 = Das Programm wurde neu compiliert.");
case REASON_CHARTCHANGE:
return("3 = Ein Chartsymbol oder die Chartperiode wurde geändert.");
case REASON_CHARTCLOSE:
return("4 = Das Chartfenster wurde geschlossen.");
case REASON_PARAMETERS:
return("5 = Ein Programm Eingabeparameter wurde geändert.");
case REASON_ACCOUNT:
return("6 = Eine Handelskontoeinstellung wurde geändert.");
case REASON_TEMPLATE:
return("7 = Ein Charttemplate wurde angewendet.");
case REASON_INITFAILED:
return("8 = Ein Fehler in OnInit()");
case REASON_CLOSE:
return("9 = Das Terminal wurde geschlossen.");
default:
return("Der Fehlercode ist noch unbekannt.");
}
return("");
}
//+------------------------------------------------------------------+
//| Save the current state of the program |
//+------------------------------------------------------------------+
bool CTFApp::IniFileSave(void)
{
//---
int handle=FileOpen(m_file_name,m_file_flags_write);
//---
if(handle==INVALID_HANDLE)
return(false);
//---
if(!Save(handle))
{
FileClose(handle);
return(false);
}
//---
FileClose(handle);
//---
return(true);
}
//+------------------------------------------------------------------+
//| Read the previous state of the program |
//+------------------------------------------------------------------+
bool CTFApp::IniFileLoad(void)
{
//---
int handle=FileOpen(m_file_name,m_file_flags_read);
//---
if(handle==INVALID_HANDLE)
{
DPrint(__FUNCTION__+" > kein Ini File vorhanden, Standard Ini File wird erzeugt");
if(!IniFileSave())
{
DPrint(__FUNCTION__+" > Standard Ini File konnte nicht richtig erzeugt werden");
return(false);
}
handle=FileOpen(m_file_name,m_file_flags_read);
if(handle==INVALID_HANDLE)
return(false);
}
//---
if(!Load(handle))
{
FileClose(handle);
return(false);
}
//---
FileClose(handle);
//---
return(true);
}
//+------------------------------------------------------------------+
//| Save a new state of the program |
//+------------------------------------------------------------------+
//bool CTFApp::IniFileNew(void)
// {
//---
// if(!IniFileSave())
// return(false);
//---
// return(true);
// }
//+------------------------------------------------------------------+
//| Load Data |
//+------------------------------------------------------------------+
bool CTFApp::Load(const int file_handle)
{
//---
int stringlen=0;
//--- check
if(file_handle==INVALID_HANDLE)
return(false);
//---
m_deinit_reason=FileReadInteger(file_handle);
//stringlen=FileReadInteger(file_handle);
//m_program_name=FileReadString(file_handle,stringlen);
//---
return(true);
}
//+------------------------------------------------------------------+
//| Save Data |
//+------------------------------------------------------------------+
bool CTFApp::Save(const int file_handle)
{
//---
int stringlen=0;
//--- check
if(file_handle==INVALID_HANDLE)
return(false);
//--- save
if(FileWriteInteger(file_handle,m_deinit_reason)!=sizeof(int))
return(false);
//stringlen=StringLen(m_program_name);
//if(FileWriteInteger(file_handle,stringlen)==sizeof(int))
// if(FileWriteString(file_handle,m_program_name,stringlen)!=stringlen)
// return(false);
//DPrint(__FUNCTION__+" n/"+(string)m_deinit_reason+"/"+(string)sizeof(int)+"/"+m_program_name+"/"+(string)file_handle+"/FileTell = "+(string)FileTell(file_handle));
//---
return(true);
}
//+------------------------------------------------------------------+