MQL4 to SQL

 

I have an EA that sends trade information to database when trade closes, it sends open and close data to one row

I want to send open data when trade opens and close data when they close to the same 1 row, so leave some column empty after sending open and fill it after trades close

the code is below 

void sendDataToDatabase()
{



 string Query;
 
 if ( dropTable == true )
 {
 Query = "DROP TABLE IF EXISTS `wp_data_signal`";
 MySqlExecute(DB, Query);
 }
 
 if ( dropTable == false )
 {
 Query = "DELETE FROM `wp_data_signal`";
 MySqlExecute(DB, Query);
 }
 
 /* ====================================================================== */
/* ====================================================================== */
/* ====================================================================== */


 Query = "CREATE TABLE IF NOT EXISTS `wp_data_signal`   (id int, duration varchar(50), category varchar(50), symbol varchar(50), order_type varchar(50), start_date varchar(50), start_price varchar(50), stop_loss varchar(50), take_profit varchar(50), profit_loss varchar(50), close_date varchar(50), closed_price varchar(50) )";
 if (MySqlExecute(DB, Query))
    {
     
     
     // Inserting data 1 row
     Query = "INSERT INTO `wp_data_signal` (id,duration,category,symbol,order_type,start_date,start_price,stop_loss,take_profit,profit_loss,close_date,closed_price) "+GetInformation();
     if (MySqlExecute(DB, Query))
        {
         if ( showBaseInformation == true ) Print ("Succeeded: ", Query);
        }
     else
        {
         Print ("Error: ", MySqlErrorDescription);
         Print ("Query: ", Query);
        }
        
    }
     
 else
    {
     Print ("Table `wp_data_signal` cannot be created. Error: ", MySqlErrorDescription);
    }

  
/* ====================================================================== */
/* ====================================================================== */
/* ====================================================================== */

 int        i,Cursor,Rows;
 int        tradeId = -1;
 string     duration ="";
 string     category ="";
 string     symbol ="";
 string     order_type ="";
 string     start_date ="";
 string     start_price ="";
 string     stop_loss ="";
 string     take_profit ="";
 string     profit_loss ="";
 string     close_date ="";
 string     closed_price ="";
// id,duration,category,symbol,order_type,start_date,start_price,stop_loss,take_profit,profit_loss,close_date,closed_price
 
 
 if ( showBaseInformation == true )
  {
 Query = "SELECT * FROM `wp_data_signal`";
 Cursor = MySqlCursorOpen(DB, Query);
 
 if (Cursor >= 0)
    {
     Rows = MySqlCursorRows(Cursor);
     Print (Rows, " row(s) selected.");
     for (i=0; i<Rows; i++)
         if (MySqlCursorFetchRow(Cursor))
            {
             tradeId = MySqlGetFieldAsInt(Cursor, 0); // Trade ID 
             duration = MySqlGetFieldAsString(Cursor, 1); // Trade Duration
             category = MySqlGetFieldAsString(Cursor, 2); // Trade Duration
             symbol = MySqlGetFieldAsString(Cursor, 3); // Trade Duration
             order_type  = MySqlGetFieldAsString(Cursor, 4); // Trade Duration
             start_date  = MySqlGetFieldAsString(Cursor, 5); // Trade Duration
             start_price  = MySqlGetFieldAsString(Cursor, 6); // Trade Duration
             stop_loss  = MySqlGetFieldAsString(Cursor, 7); // Trade Duration
             take_profit  = MySqlGetFieldAsString(Cursor, 8); // Trade Duration
             profit_loss  = MySqlGetFieldAsString(Cursor, 9); // Trade Duration
             close_date  = MySqlGetFieldAsString(Cursor, 10); // Trade Duration
             closed_price  = MySqlGetFieldAsString(Cursor, 10); // Trade Duration
             
             Print ("ROW[",i,"]: ","   "+tradeId+"    ","   "+duration+"   ","   "+category+"   ","   "+symbol+"   ","   "+order_type+"   ","   "+start_date+"   ","   "+start_price+"   ","   "+stop_loss+"   ","   "+take_profit+"   ","   "+profit_loss+"   ","   "+close_date+"   ","   "+closed_price+"   ");

            }
         Print ("ROW[Number ]: Trade id , Duration , Category , symbol , order type , start date , start price , stop loss , take profit , profit loss , close date , closed_price ");

     MySqlCursorClose(Cursor); // NEVER FORGET TO CLOSE CURSOR !!!
    }
 else
    {
     Print ("Cursor opening failed. Error: ", MySqlErrorDescription);
    }
    
  }   

   
}


string GetInformation()
{
int visualisation = 0;

      int hstTotal= OrdersHistoryTotal();
      string typeOrder = "";
      string duration = "";
      string restQuery = "";
      
      for(int i=0;i<hstTotal;i++)
         {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
            {
            if ( OrderOpenTime() >= dtStart && OrderCloseTime() <= dtEnd && ( (OrderSymbol() == pairName && filtreDataBySymbol == true) || filtreDataBySymbol == false ) && (( OrderMagicNumber() == MagicNumber && filtreDataByMagicNumber == true ) || filtreDataByMagicNumber == false) )
                              if ( (filtreDataByResult == OnlyProfit && OrderProfit() >= 0 ) || ( filtreDataByResult == OnlyLoss && OrderProfit() < 0 ) || ( filtreDataByResult == Both) )

               {
               if ( OrderType() == OP_BUY ) typeOrder = "BUY";
               if ( OrderType() == OP_SELL ) typeOrder = "SELL";
               
               if ( TimeDay(OrderOpenTime()) != TimeDay(OrderCloseTime()) )
                  duration = "DAYTRADE";
               else
                  duration = "SWINGTRADE";
                  
               if ( OrderType() == OP_BUY || OrderType() == OP_SELL )
               {
                  int digits = (int)MarketInfo(OrderSymbol(), MODE_DIGITS);


                  double decmal = (( OrderProfit() -OrderCommission()) / OrderLots() / MarketInfo( OrderSymbol(), MODE_TICKVALUE )) / selection();
                  string profit = DoubleToStr(( OrderProfit() - OrderCommission()) / OrderLots() / MarketInfo( OrderSymbol(), MODE_TICKVALUE ), 0 );

                  int profit_number = StringLen( profit );
                  string prodec = DoubleToStr( decmal, profit_number / 2 );

                  if(! ProfitDouble )
                  {
                  profit = profit;
                  }
                  else
                  {
                  profit = prodec;
                  }
      
      /* ====================================================================== */
      /* ====================================================================== */
      /* ====================================================================== */
         
               if ( visualisation == 0 )
                  {      
                  restQuery = " VALUES ("+IntegerToString(OrderTicket())+",'"+
                  duration+"','"+
                  GetCategory(OrderSymbol())+"','"+
                  OrderSymbol()+"','"+
                  typeOrder+"','"+
                  TimeToStr(OrderOpenTime(),TIME_DATE|TIME_MINUTES)+"','"+
                  DoubleToStr(OrderOpenPrice(),MarketInfo(OrderSymbol(),MODE_DIGITS))+"','"+
                  DoubleToStr(OrderStopLoss(),MarketInfo(OrderSymbol(),MODE_DIGITS))+"','"+
                  DoubleToStr(OrderTakeProfit(),MarketInfo(OrderSymbol(),MODE_DIGITS))+"','"+
                  profit+"','"+
                  TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+"','"+
                  DoubleToStr(OrderClosePrice(),MarketInfo(OrderSymbol(),MODE_DIGITS))+"')";
                  visualisation++;
                 }
   /* ====================================================================== */
   /* ====================================================================== */
   /* ====================================================================== */                
                 if ( visualisation > 0 ) 
                 {
                  restQuery += ", ("+IntegerToString(OrderTicket())+",'"+
                  duration+"','"+
                  GetCategory(OrderSymbol())+"','"+
                  OrderSymbol()+"','"+
                  typeOrder+"','"+
                  TimeToStr(OrderOpenTime(),TIME_DATE|TIME_MINUTES)+"','"+
                  DoubleToStr(OrderOpenPrice(),MarketInfo(OrderSymbol(),MODE_DIGITS))+"','"+
                  DoubleToStr(OrderStopLoss(),MarketInfo(OrderSymbol(),MODE_DIGITS))+"','"+
                  DoubleToStr(OrderTakeProfit(),MarketInfo(OrderSymbol(),MODE_DIGITS))+"','"+
                  profit+"','"+
                  TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+"','"+
                  DoubleToStr(OrderClosePrice(),MarketInfo(OrderSymbol(),MODE_DIGITS))+"')";
                 }
               
               }
              }
            }
         }
         


return(restQuery);      
}