Trade List

 

Hi, I tried to make a trade list for my EA I use the two following functions

1)GetSymbolString in order to have an multicurrency EA

2)Terminal in order to save the orders characteristics

extern string symbol             ="EURUSD";
extern int    MultiCurrencyMode  =1       ;
extern int    Symbols            =10      ;




//=======Δημιουργία της συνάρτησης GetSymbolString η οποία επιστρέφει ένα symbol================================================//
string GetSymbolString(int Number,string symbol,int mode)
{

if (mode!=1&&mode!=2)
{Print("error in built-in function: GetSymbolString,Parameter:mode");}

if (Number>10)
{Print("error in built-in function: GetSymbolString,Parameter:Number");}



//=======αν το mode=1 τότε επιστρέφεται το δηλωθέν extern symbol π.χ. EURUSD====================================================//

if (mode==1) 

{
return(symbol); 

}

//=======αν το mode=2 τότε επιστρέφεται το symbol ανάλογα το number=============================================================//
//=======δηλαδή για 1 επιστρέφει EUSRUSD, για 2 επιστρέφει GBPUSD κτλ===========================================================//

if (mode==2)
{

// 1  - EURUSD
// 2  - GBPUSD
// 3  - USDCHF
// 4  - USDJPY
// 5  - EURJPY
// 6  - EURCHF
// 7  - EURGBP
// 8  - GBPJPY
// 9  - CHFJPY
// 10 - GBPCHF
   switch(Number)
   {
      case 1:
         return ("EURUSD");
      case 2:
         return ("GBPUSD");
      case 3:
         return ("USDCHF");
      case 4:
         return ("USDJPY");
      case 5:
         return ("EURJPY");
      case 6:
         return ("EURCHF");
      case 7:
         return ("EURGBP");
      case 8:
         return ("GBPJPY");
      case 9:
         return ("EURAUD");
      case 10:
         return ("GBPCHF");
   }
  } 
}
 
int Terminal(string symbol)
   {
/*------------------------------------------------------------------------------------------------------------------------------*/   

//========Μηδενίζουμε το νέο array μέσω του Orderselect θα ξαναγραφτούνε όλες οι live(OrdersTotal) εντολές======================//
 //  if (Mas_Ord_New[0][0][0]!=0) 
 { ArrayInitialize(Mas_Ord_New,0);// 
 
//========Μηδενίζουμε τον αριθμό των νέων εντολών θα ξαναγραφτεί μέσω του for loop και των δύο==================================// 
//========εντολών 1)Mas_Ord_New[0][0][0]++  και 2)Kol=Mas_Ord_New[0][0][0]======================================================//   
   int Kol=0;                    
   }
   
 //  if (Mas_Ord_New[0][0][0]!=0) 
//=======Μηδενίζουμε το παλιό array μέσω του orderselect θα ξαναγραφτούνε όλες οι παλιές(OrdersHistoryTotal)εντολές=============// 
  {ArrayInitialize(Mas_Ord_Old, 0);
  
//========Μηδενίζουμε τον αριθμό των παλιών εντολών θα ξαναγραφτεί μέσω του for loop και των δύο================================// 
//========εντολών 1)Mas_Ord_Old[0][0][0]++; και 2)Old_Kol=Mas_Ord_Old[0][0][0]==================================================//    
   int Old_Kol=0;}              
/*------------------------------------------------------------------------------------------------------------------------------*/   




/*------------------------------------------------------------------------------------------------------------------------------*/   


//==============Δημιουργία for loop για να επιλέξουμε όλες τις live εντολές οι οποίες επιλέγονται από τις OrdersTotal===========//
   
   for (int i=OrdersTotal()-1;i>=0;i--)  

     {
      if(OrderSelect(i, SELECT_BY_POS)==true)
      
      
//=======Ενώ παράλληλα ορίζουμε τη μεταβλητή SymbolIndex η οποία αποθηκεύει στο array===========================================//
//=======τις  εντολές για το κάθε σύμβολα ξεχωριστά.============================================================================//
//=======Η μεταβλητή Symbols είναι extern και έχει δηλωθεί στο include <GetSymbolString.mq4>====================================//  
//=======αν δηλαδή έχουμε δηλώσει extern Symbols=3 δηλαδή τα 3 πρώτα σύμβολα 1  - EURUSD, 2  - GBPUSD, 3  - USDCHF==============//
//=======ο δείκτης SymbolIndex θα πάει μέχρι το 3 δηλαδεί η μία διάσταση του array θα είναι 3===================================//       
     
      
      for (int SymbolIndex=1; SymbolIndex<=Symbols; SymbolIndex++) 
   // For all symbols in the terminal
     {
          if( symbol==GetSymbolString(SymbolIndex,symbol,2))
           break;    }      
                                                                                      //If there is the next and our currency pair
       { 
       
       
       

//=======Αύξηση του αριθμού των εντολών κατά μία στο for loop όσες εντολές έχουμε πόσες φορές θα τρέξει το for loop=============//       
       Mas_Ord_New[0][0][0]++ ;
       
//=======Αύξηση του αριθμού των εντολών για το κάθε Symbol χωριστά==============================================================//       
       Mas_Ord_New[SymbolIndex][0][0]++; 
  
         
     
//=======Ορίζουμε τη μεταβλητή Mas_Ord_New[SymbolIndex][0][0] σαν Kol για να μπορεί να χρησιμοποιηθεί στο array.================//
//=======Έτσι αποθηκεύονται και τα 14 χαρακτηριστικά των εντολών ανά Symbol ανάλογα τον SymbolIndex=============================//
//=======και ανά αριθμού εντολής ανάλογα το  Kol=Mas_Ord_New[SymbolIndex][0][0];================================================//                                                                           
        Kol=Mas_Ord_New[SymbolIndex][0][0]; 

        Mas_Ord_New[SymbolIndex][Kol][1] = NormalizeDouble(OrderOpenPrice (),Digits); // Order open rate 
        Mas_Ord_New[SymbolIndex][Kol][2] = NormalizeDouble(OrderStopLoss  (),Digits); // SL rate
        Mas_Ord_New[SymbolIndex][Kol][3] = NormalizeDouble(OrderTakeProfit(),Digits); // ?? rate
        Mas_Ord_New[SymbolIndex][Kol][4] = OrderTicket                    ()        ; // Order number
        Mas_Ord_New[SymbolIndex][Kol][5] = OrderLots                      ()        ; // Count of lots
        Mas_Ord_New[SymbolIndex][Kol][6] = OrderType                      ()        ; // Order type
        Mas_Ord_New[SymbolIndex][Kol][7] = OrderMagicNumber               ()        ; // Magic number
        Mas_Ord_New[SymbolIndex][Kol][8] = NormalizeDouble(OrderOpenTime  (),Digits);
        Mas_Ord_New[SymbolIndex][Kol][9] = NormalizeDouble(OrderProfit    (),Digits); 
        Mas_Ord_New[SymbolIndex][Kol][10]= NormalizeDouble(OrderClosePrice(),Digits); 
        Mas_Ord_New[SymbolIndex][Kol][11]= NormalizeDouble(OrderCloseTime (),Digits);  
        Mas_Ord_New[SymbolIndex][Kol][13]= NormalizeDouble(OrderCommission(),Digits);
        Mas_Ord_New[SymbolIndex][Kol][14]= NormalizeDouble(OrderSwap      (),Digits);  
      
      }
     }

/*------------------------------------------------------------------------------------------------------------------------------*/   
   


/*------------------------------------------------------------------------------------------------------------------------------*/   


//=======Η ίδια διαδικασία επαναλαμβάνεται και για τις παλιές εντολές μέσω του for loop και του OrdersHistoryTotal==============//
      
     for ( i=OrdersHistoryTotal()-1; i>=0; i--) 

     { 
      if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY)==true)
      
      
      
      for (SymbolIndex=1; SymbolIndex<Symbols; SymbolIndex++) 

     {
           if( symbol==GetSymbolString(SymbolIndex,symbol,2))
           break;    }     
                                                                                      //If there is the next and our currency pair
       { 
      
     
        Mas_Ord_Old[0][0][0]++ ;
        Mas_Ord_Old[SymbolIndex][0][0]++; 
    
                                                                           
        Old_Kol=Mas_Ord_Old[SymbolIndex][0][0];  // Count the total amount of orders
        
      

        Mas_Ord_Old[SymbolIndex][Old_Kol][1] = NormalizeDouble(OrderOpenPrice (),Digits); // Order open rate 
        Mas_Ord_Old[SymbolIndex][Old_Kol][2] = NormalizeDouble(OrderStopLoss  (),Digits); // SL rate
        Mas_Ord_Old[SymbolIndex][Old_Kol][3] = NormalizeDouble(OrderTakeProfit(),Digits); // ?? rate
        Mas_Ord_Old[SymbolIndex][Old_Kol][4] = OrderTicket                    ()        ; // Order number
        Mas_Ord_Old[SymbolIndex][Old_Kol][5] = OrderLots                      ()        ; // Count of lots
        Mas_Ord_Old[SymbolIndex][Old_Kol][6] = OrderType                      ()        ; // Order type
        Mas_Ord_Old[SymbolIndex][Old_Kol][7] = OrderMagicNumber               ()        ; // Magic number
        Mas_Ord_Old[SymbolIndex][Old_Kol][8] = NormalizeDouble(OrderOpenTime  (),Digits);
        Mas_Ord_Old[SymbolIndex][Old_Kol][9] = NormalizeDouble(OrderProfit    (),Digits); 
        Mas_Ord_Old[SymbolIndex][Old_Kol][10]= NormalizeDouble(OrderClosePrice(),Digits); 
        Mas_Ord_Old[SymbolIndex][Old_Kol][11]= NormalizeDouble(OrderCloseTime (),Digits);  
        Mas_Ord_Old[SymbolIndex][Old_Kol][13]= NormalizeDouble(OrderCommission(),Digits);
        Mas_Ord_Old[SymbolIndex][Old_Kol][14]= NormalizeDouble(OrderSwap      (),Digits);  
           
                                                                                                                                                   

       }
     }
     
/*------------------------------------------------------------------------------------------------------------------------------*/   
     
     
      Kol=Mas_Ord_New[0][0][0];     // Save to the zero cell
     
      
      Old_Kol=Mas_Ord_Old[0][0][0]; // Save to the zero cell

                                                              return(0);
   }

And I have created another function in order to export the orders characteristics in a txt file

void Trade_List (string report_name, string symbol)
  { 
  
        for (int SymbolIndex=1; SymbolIndex<=Symbols; SymbolIndex++) 
   // For all symbols in the terminal
     {
          if( symbol==GetSymbolString(SymbolIndex,symbol,2))
           break;    }      
                                                                                      //If there is the next and our currency pair
       { 
      

  
       for (int i=Mas_Ord_Old[SymbolIndex][0][0]-1;i>=0;i--)  
     {
  
  
 int Old_Kol=Mas_Ord_Old[SymbolIndex][0][0];  // Count the total amount of orders
  
  
  int handle=FileOpen(report_name,FILE_CSV|FILE_WRITE,';');
   Print("handle:",handle);
   Print("File REPORT not found, the last error 1 is ", GetLastError());
   if(handle<1) return;
 

   
 FileWrite(handle,"Buy/Sell","Market","Entry Date","Size","Entry Price","Exit Date","Size","Exit Price","Trade P/L","Running P/L");
 FileWrite(handle,Mas_Ord_Old[SymbolIndex][i][6],symbol,TimeToStr(Mas_Ord_Old[SymbolIndex][i][8],TIME_SECONDS),Mas_Ord_Old[SymbolIndex][i][5],
 Mas_Ord_Old[SymbolIndex][i][1],TimeToStr(Mas_Ord_Old[SymbolIndex][i][11],TIME_SECONDS),Mas_Ord_Old[SymbolIndex][i][5],Mas_Ord_Old[SymbolIndex][i][10]);
 Print("File REPORT not found, the last error 2 is ", GetLastError());
 
 
  } 
 
 } 
   }
 

And I have this code on the deinit function


int deinit()
  {
//----
for (int SymbolIndex=1;SymbolIndex<=Symbols;SymbolIndex++) 
      { 
 
 
 
 Trade_List(GetSymbolString(SymbolIndex,symbol,MultiCurrencyMode),GetSymbolString(SymbolIndex,symbol,MultiCurrencyMode));


}


//----



    
     
   return(0);
  }
 
But there is nothing produced fron the Trade_List function can anyone help me please.
 
fx11:
But there is nothing produced fron the Trade_List function can anyone help me please.


what is insider your start() function?

FileClose() is missing in Trade_List?

FileFlush you can take a look also, maybe interesting...

in rest i was not looking and not testing :-)