Author: Kalenzo
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
MySQL
//+------------------------------------------------------------------+
//|                                                        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