Stefano Cerbioni:
#property strict double spreadSumCurrentMinute = 0.0; datetime currentM1BarTime = 0; string FileName; //+------------------------------------------------------------------+ int OnInit() { string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH); FileName=terminal_data_path+"\\MQL5\\Files\\"+"SpreadSumPerMinute.csv"; Print("EA avviato, salvataggio spread in: ", FileName); return INIT_SUCCEEDED; } //+------------------------------------------------------------------+ void OnTick() { MqlRates m1Rates[]; if(CopyRates(_Symbol, PERIOD_M1, 0, 2, m1Rates) < 2) return; datetime barTime = m1Rates[0].time; if(currentM1BarTime == 0) currentM1BarTime = barTime; // Se siamo in un nuovo minuto if(barTime != currentM1BarTime) { // Salva la somma dello spread del minuto appena finito SaveSpreadSum(currentM1BarTime, spreadSumCurrentMinute); // Resetta contatori per nuovo minuto currentM1BarTime = barTime; spreadSumCurrentMinute = 0.0; } double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); if(ask == 0 || bid == 0) return; double spread = ask - bid; spreadSumCurrentMinute += spread; } //+------------------------------------------------------------------+ void SaveSpreadSum(datetime time, double spreadSum) { // FILE_WRITE apre e sovrascrive sempre il file, quindi per appendere si usa FILE_READ|FILE_WRITE con FileSeek a fine // Per sicurezza: apriamo in modalità FILE_READ|FILE_WRITE (file deve esistere o verrà creato) int file_handle = FileOpen(FileName, FILE_WRITE|FILE_CSV); if(file_handle == INVALID_HANDLE) { // Se non esiste il file, apriamo in FILE_WRITE per crearlo file_handle = FileOpen(FileName, FILE_WRITE|FILE_CSV); if(file_handle == INVALID_HANDLE) { Print(" Errore apertura file ", FileName, ", errore: ", GetLastError()); return; } } else { // Se il file esiste, posizioniamoci in fondo per appendere FileSeek(file_handle, 0, SEEK_END); } // Scriviamo data e spread sommato in CSV (es. "2025.05.28 12:30", "0.00023") FileWrite(file_handle, TimeToString(time, TIME_DATE|TIME_MINUTES), DoubleToString(spreadSum, 10)); FileClose(file_handle); Print("Salvato spread somma: ", spreadSum, " alle ", TimeToString(time, TIME_MINUTES)); }
#property strict double spreadSumCurrentMinute = 0.0; datetime currentM1BarTime = 0; string FileName; //+------------------------------------------------------------------+ int OnInit() { string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH); FileName=terminal_data_path+"\\MQL5\\Files\\"+"SpreadSumPerMinute.csv"; Print("EA avviato, salvataggio spread in: ", FileName); return INIT_SUCCEEDED; } //+------------------------------------------------------------------+ void OnTick() { MqlRates m1Rates[]; if(CopyRates(_Symbol, PERIOD_M1, 0, 2, m1Rates) < 2) return; datetime barTime = m1Rates[0].time; if(currentM1BarTime == 0) currentM1BarTime = barTime; // Se siamo in un nuovo minuto if(barTime != currentM1BarTime) { // Salva la somma dello spread del minuto appena finito SaveSpreadSum(currentM1BarTime, spreadSumCurrentMinute); // Resetta contatori per nuovo minuto currentM1BarTime = barTime; spreadSumCurrentMinute = 0.0; } double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); if(ask == 0 || bid == 0) return; double spread = ask - bid; spreadSumCurrentMinute += spread; } //+------------------------------------------------------------------+ void SaveSpreadSum(datetime time, double spreadSum) { // FILE_WRITE apre e sovrascrive sempre il file, quindi per appendere si usa FILE_READ|FILE_WRITE con FileSeek a fine // Per sicurezza: apriamo in modalità FILE_READ|FILE_WRITE (file deve esistere o verrà creato) int file_handle = FileOpen(FileName, FILE_WRITE|FILE_CSV); if(file_handle == INVALID_HANDLE) { // Se non esiste il file, apriamo in FILE_WRITE per crearlo file_handle = FileOpen(FileName, FILE_WRITE|FILE_CSV); if(file_handle == INVALID_HANDLE) { Print(" Errore apertura file ", FileName, ", errore: ", GetLastError()); return; } } else { // Se il file esiste, posizioniamoci in fondo per appendere FileSeek(file_handle, 0, SEEK_END); } // Scriviamo data e spread sommato in CSV (es. "2025.05.28 12:30", "0.00023") FileWrite(file_handle, TimeToString(time, TIME_DATE|TIME_MINUTES), DoubleToString(spreadSum, 10)); FileClose(file_handle); Print("Salvato spread somma: ", spreadSum, " alle ", TimeToString(time, TIME_MINUTES)); }
double spreadSumCurrentMinute = 0.0; datetime currentM1BarTime = 0; string FileName; int OnInit() { FileName="SpreadSumPerMinute.csv"; Print("EA avviato, salvataggio spread in: ", FileName); return INIT_SUCCEEDED; } void OnTick() { MqlRates m1Rates[]; if(CopyRates(_Symbol, PERIOD_M1, 0, 2, m1Rates) < 2) return; datetime barTime = m1Rates[0].time; if(currentM1BarTime == 0) currentM1BarTime = barTime; // Se siamo in un nuovo minuto if(barTime != currentM1BarTime) { // Salva la somma dello spread del minuto appena finito SaveSpreadSum(currentM1BarTime, spreadSumCurrentMinute); // Resetta contatori per nuovo minuto currentM1BarTime = barTime; spreadSumCurrentMinute = 0.0; } double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); if(ask == 0 || bid == 0) return; double spread = ask - bid; spreadSumCurrentMinute += spread; } //+------------------------------------------------------------------+ void SaveSpreadSum(datetime time, double spreadSum) { // FILE_WRITE apre e sovrascrive sempre il file, quindi per appendere si usa FILE_READ|FILE_WRITE con FileSeek a fine // Per sicurezza: apriamo in modalità FILE_READ|FILE_WRITE (file deve esistere o verrà creato) int file_handle = FileOpen(FileName, FILE_WRITE|FILE_READ|FILE_CSV); if(file_handle!=INVALID_HANDLE){ ulong size=FileGetInteger(file_handle,FILE_SIZE); // Se il file esiste, posizioniamoci in fondo per appendere FileSeek(file_handle, size, SEEK_SET); // Scriviamo data e spread sommato in CSV (es. "2025.05.28 12:30", "0.00023") FileWrite(file_handle, TimeToString(time, TIME_DATE|TIME_MINUTES), DoubleToString(spreadSum, 10)); FileClose(file_handle); Print("Salvato spread somma: ", spreadSum, " alle ", TimeToString(time, TIME_MINUTES)); }else{ Print("Cannot save"); } }
It needed to have the property FILE_READ too to be able to get file size
File size is then used to move the cursor
thanks
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Hi guys nayone can help me to understund why not write the file .csv in File foder?
this is my code