Use this simplest class to write CSV file with out any preparations and types casting declarations.
Find the shortest usage example below.
string Filename = "filename_writer.csv"; CDKSimplestCSVWriter CSVFile; // Create class object // Add first row and set values by column name CSVFile.AddRow(); CSVFile.SetLastRowValue("Time", TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES)); CSVFile.SetLastRowValue("Open", DoubleToString(SymbolInfoDouble(Symbol(), SYMBOL_BID), _Digits)); CSVFile.SetLastRowValue("Close", DoubleToString(SymbolInfoDouble(Symbol(), SYMBOL_ASK), _Digits)); // Add second row using returned row index and SetValue by name uint r = CSVFile.AddRow(); CSVFile.SetValue(r, "Time", TimeToString(TimeCurrent() + 60, TIME_DATE|TIME_MINUTES)); CSVFile.SetValue(r, "Open", DoubleToString(SymbolInfoDouble(Symbol(), SYMBOL_BID), _Digits)); CSVFile.SetValue(r, "Close", DoubleToString(SymbolInfoDouble(Symbol(), SYMBOL_ASK), _Digits)); // Demonstrate SetValue by column index (index 0..n-1). Here we set first column of first row to a custom value if (CSVFile.RowCount() > 0 && CSVFile.ColumnCount() > 0) CSVFile.SetValue(0, 0, "CUSTOM_TIME"); // Write CSV to file. Pass FILE_ANSI to write ANSI encoded file if desired. if (CSVFile.WriteCSV(Filename, true, ";", FILE_ANSI)) { PrintFormat("Successfully wrote %d rows with %d columns to: %s", CSVFile.RowCount(), CSVFile.ColumnCount(), Filename); } else { PrintFormat("Error writing CSV file: %s", Filename); } // Optional: clear memory CSVFile.Clear();