//+------------------------------------------------------------------+ //| 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 /* //+------------------------------------------------------------------+ //| **** 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); } //+------------------------------------------------------------------+