請教高手 MT4 FileFuntion的使用方法

 

想不出正確使用方法 

煩請各路高手協助指導

思路 在關閉EA時將需要的數據寫出到檔案 重啟時將讀取數據供EA使用 

主要使用在EA重啟時能延續先前計算好的參數 或是跨EA共用計算後的參數

按照幫助文件範本編輯 本來可以順利寫出到檔案 只有讀取時失敗

後來連創建新檔都不成功 

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

   double Date=Open[1],Date1=Open[2];                                   //定義局部變數 用來寫入數據使用
   string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);    //獲取目前程序的路徑
   string filename=terminal_data_path+"\\MQL4\\Files\\"+"FileTest.csv"; //指定讀取的當案名稱
   int filehandle=FileOpen(filename,FILE_WRITE|FILE_CSV);               //打開文件 設為可寫的CSV檔案
   
   if(filehandle<0) 
        { 
         Print("Failed to open the file by the absolute path "); 
         Print("Error code ",GetLastError()); 
        } 
   //--- correct way of working in the "file sandbox" 
      ResetLastError(); 
   
   if(filehandle!=INVALID_HANDLE)                              //確定寫入文件已經存在
     {
      FileWrite(filehandle,Date,Date1);                        //將局部變數寫入檔案
      FileClose(filehandle);                                   //關閉檔案
     }
   else
     printf("Date Wrong Write");                               //判斷文件讀取或是創建失敗標示

    }

//+------------------------------------------------------------------+
double Read,Read1;                                             //設置全局變數 供後面程序使用
int OnInit()
  {
   string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);    //獲取目前程序的路徑
   string filename=terminal_data_path+"\\MQL4\\Files\\"+"FileTest.csv"; //指定讀取的當案名稱 
   int filehandle=FileOpen(filename,FILE_READ|FILE_CSV);                //打開文件 指定為可讀的CSV檔案
  
   if(filehandle!=INVALID_HANDLE)                                       //確定讀取的文件已經存在
     {
      Read  = FileReadDouble(filehandle,DOUBLE_VALUE);         //將讀取的數據賦值到全局變數Read  ======> 讀取失敗 數值為零
      Read1 = FileReadDouble(filehandle,DOUBLE_VALUE);         //將讀取的數據賦值到全局變數Read1 ======> 讀取失敗 數值為零
      FileClose(filehandle);                                   //關閉檔案
     }
      
    else 
      Print("Operation FileOpen failed, error ",GetLastError()); 

   return(INIT_SUCCEEDED);
  }
 

建议使用二进制文件,而不是csv文件。

你恰好用了帮助文档中指出的错误的方式。

看文档要仔细。

 
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

   double Date=Open[1],Date1=Open[2];                                   //定義局部變數 用來寫入數據使用
   string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);    //獲取目前程序的路徑
   //string filename=terminal_data_path+"\\MQL4\\Files\\"+"FileTest.csv"; //指定讀取的當案名稱
   string filename = "FileTest.csv";
   int filehandle=FileOpen(filename,FILE_WRITE|FILE_CSV);               //打開文件 設為可寫的CSV檔案

   if(filehandle<0)
   {
      Print("Failed to open the file by the absolute path ");
      Print("Error code ",GetLastError());
   }
   //--- correct way of working in the "file sandbox"
   ResetLastError();

   if(filehandle!=INVALID_HANDLE)                              //確定寫入文件已經存在
   {
      FileWrite(filehandle,Date,Date1);                        //將局部變數寫入檔案
      FileClose(filehandle);                                   //關閉檔案
   }
   else
      printf("Date Wrong Write");                               //判斷文件讀取或是創建失敗標示

}

//+------------------------------------------------------------------+
double Read,Read1;                                             //設置全局變數 供後面程序使用
int OnInit()
{
   string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);    //獲取目前程序的路徑
   //string filename=terminal_data_path+"\\MQL4\\Files\\"+"FileTest.csv"; //指定讀取的當案名稱
   string filename = "FileTest.csv";
   int filehandle=FileOpen(filename,FILE_READ|FILE_WRITE|FILE_CSV);                //打開文件 指定為可讀的CSV檔案

   if(filehandle!=INVALID_HANDLE)                                       //確定讀取的文件已經存在
   {
      //Read  = FileReadDouble(filehandle,DOUBLE_VALUE);         //將讀取的數據賦值到全局變數Read  ======> 讀取失敗 數值為零
      //Read1 = FileReadDouble(filehandle,DOUBLE_VALUE);         //將讀取的數據賦值到全局變數Read1 ======> 讀取失敗 數值為零
        Read  = FileReadString(filehandle);
        Read1 = FileReadString(filehandle);
      FileClose(filehandle);                                   //關閉檔案
   }

   else
      Print("Operation FileOpen failed, error ",GetLastError());

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
{
      Comment("Read = ",Read,"  Read1 = ",Read1);
}  
//+------------------------------------------------------------------+
 

謝謝指導 經過指點已經確定可以使用了 

有時候 看不到錯誤 就是一直看不到  

下次會試著更仔細地閱讀文檔 並重複試驗