285 lines
22 KiB
MQL5
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);
|
|
}
|
|
//+------------------------------------------------------------------+
|