//+------------------------------------------------------------------+
//| MySQL.mq4 |
//| Copyright © 2007, GwadaTradeBoy Corp. |
//| racooni_1975@yahoo.fr |
//+------------------------------------------------------------------+
//| Kalenzo |
//| bartlomiej.gorski@gmail.com |
//+------------------------------------------------------------------+
//| AKA : Administrator |
//| creditbanc@worldnet.att.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, GwadaTradeBoy Corp."
#property link "racooni_1975@yahoo.fr"
#property copyright "Kalenzo"
#property link "bartlomiej.gorski@gmail.com"
#include <mysql.mqh>
/*
//+------------------------------------------------------------------+
//| **** REQUIREMENTS **** |
//| |
//| 1. Make the inputs for the database "extern". - DONE |
//| 2. Add error checking and reconnect if the Indicator loses |
//| connection with the database. - WAITING |
//| 3. Time shift, I need to shift the DateTime sent to the database |
//| by +/- x hours to adjust to GMT time. - DONE |
//| BrokerTZ - Timezone of your Broker (in hours from GMT) |
//| LocalTz - Your timezone in hours from GMT |
//+------------------------------------------------------------------+
*/
#property indicator_chart_window
//---- Variables Externes - Inputs Variables
extern string host = "localhost";
extern string user = "root";
extern string password = "";
extern string DB = "MetaTrader";
extern string table = "mqdata";
extern int port = 3306;
extern string socket = "";
extern bool UseGMT = False;
extern double BrokerTZ = 2;
extern int Waiting = 10; // Temps en seconde
extern int MaxWait = 60; // Temps en minute
extern bool Alarm = False;
//---- Variables
string IndicName, MyErrMsg;
int mysql, MyErr, res, err;
int clientflag=0;
int length=0;
string query="";
datetime BrokerTime, GMT;
int Years, Months, Days, Hours, Minutes, Secondes;
bool connect = False;
int iteration = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicName = "MetaTrader -> MySQL";
mysql = mysql_init(mysql);
res=mysql_real_connect(mysql,host,user,password,DB,port,socket,clientflag);
err=GetLastError();
if (mysql!=0)
{
Print(IndicName,"Allocated");
Comment(IndicName,"Allocated");
}
if (res==mysql)
{
Print(IndicName,"Connected");
Comment(IndicName,"Connected");
}
else
{
Print(IndicName,"Error=",mysql," ",mysql_errno(mysql)," ");
Comment(IndicName,"Error=",mysql," ",mysql_errno(mysql)," ");
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
mysql_close(mysql);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//---- GMT Calculation
BrokerTime = TimeCurrent();
GMT = BrokerTime - (BrokerTZ)*3600;
//---- Test UseGMT
if (UseGMT)
{
Years = TimeYear(GMT);
Months = TimeMonth(GMT);
Days = TimeDay(GMT);
Hours = TimeHour(GMT);
Minutes = TimeMinute(GMT);
Secondes = TimeSeconds(GMT);
}
else
{
Years = Year();
Months = Month();
Days = Day();
Hours = Hour();
Minutes = Minute();
Secondes = Seconds();
}
//---- Test
//---- SQL Query
query=StringConcatenate("insert into ",table," set symbol=\'",Symbol(),"\',open="+Open[0]+",high="+High[0]+",low="+Low[0]+",close="+Close[0]+",ask="+Ask+",bid="+Bid+",ts=\'",Years,"-",Months,"-",Days," ",Hours,":",Minutes,":",Secondes,"\'");
length=StringLen(query);
mysql_real_query(mysql,query,length);
MyErr=mysql_errno(mysql);
//if (MyErr>0)Print("error=",MyErr);
//---- Test MySQL Connection
//If the indicator is disconnected from the database then attempt to reconnect every x number of seconds.
if (
(MyErr == 2003) // MySQL Error : Can't connect to MySQL server on '%s'
|| (MyErr == 2006) // MySQL Error : MySQL server has gone away
|| (MyErr == 2013) // MySQL Error : Lost connection to MySQL server during query
)
{
connect = False;
if (MyErr == 2003)
MyErrMsg = "Can\'t connect to MySQL server : "+host;
else
if (MyErr == 2006)
MyErrMsg = "MySQL server has gone away";
else
if (MyErr == 2013)
MyErrMsg = "Lost connection to MySQL server during query";
Print(IndicName,"Connection Lost - ", MyErrMsg);
Comment(IndicName,"Connection Lost - ", MyErrMsg);
if (Alarm)
{
Alert(IndicName," - Connection Lost - ", MyErrMsg);
}
while((!connect) || (iteration * Waiting > MaxWait)) //
{
Sleep(Waiting * 1000); // Intervalle en milliseconde
Print("Connection not restored ", iteration * Waiting, " seconds passed");
mysql = mysql_init(mysql);
res=mysql_real_connect(mysql,host,user,password,DB,port,socket,clientflag);
err=GetLastError();
if (res==mysql)
{
Print(IndicName,"Connection restored");
Comment (IndicName,"Connection restored");
if (Alarm)
{
Alert(IndicName," - Connection restored");
}
connect = True;
}
if(connect)
{
mysql_real_query(mysql,query,length);
}
iteration++;
}
Print(IndicName,"Error=",mysql," ",mysql_errno(mysql)," ");
Comment (IndicName,"Error=",mysql," ",mysql_errno(mysql)," ");
if (Alarm)
{
Alert(IndicName," - Error=",mysql," ",mysql_errno(mysql)," ");
}
/*
if (MyErr>0) // MySQL Error code for not connected
{
mysql = mysql_init(mysql);
res=mysql_real_connect(mysql,host,user,password,DB,port,socket,clientflag);
err=GetLastError();
if (mysql!=0)
Print("allocated");
if (res==mysql)
{
Print("connected");
mysql_real_query(mysql,query,length);
}
else
Print("error=",mysql," ",mysql_errno(mysql)," ");
*/
}
//----
return(0);
}
//+------------------------------------------------------------------+
Comments