为什么 [MetaTrader 4 ] 不能 write/open 使用 FileWrite() 函数 windows 10 中的文件?

Why [ MetaTrader 4 ] can't write/open a file in windows 10 with the FileWrite() function?

我尝试实施此 post 中的解决方案

但无济于事。我不断收到 5002 错误。 (无法打开文件)在 FileWrite()

之后

即使我在 https://docs.mql4.com/files/filewrite

上试用示例脚本

我得到了同样的错误。我在管理员模式下尝试了 运行 MetaTrader Terminal 4,但也无济于事。
有人知道解决方案吗?

 #property version   "1.00"
 #property strict

 //--- show the window of input parameters when launching the script
 #property script_show_inputs

 //--- parameters for receiving data from the terminal
 input string             InpSymbolName    = "EURUSD";    // Сurrency pair
 input ENUM_TIMEFRAMES    InpSymbolPeriod  = PERIOD_H1;   // Time frame
 input int                InpFastEMAPeriod = 12;          // Fast EMA period
 input int                InpSlowEMAPeriod = 26;          // Slow EMA period
 input int                InpSignalPeriod  =  9;          // Difference averaging period
 input ENUM_APPLIED_PRICE InpAppliedPrice  = PRICE_CLOSE; // Price type

 //--- parameters for writing data to file
 input string             InpFileName      = "MACD.csv";  // File name
 input string             InpDirectoryName = "Data";      // Folder name
 //+------------------------------------------------------------------+
 //| Script program start function                                    |
 //+------------------------------------------------------------------+

 void OnStart()
 {
    bool     sign_buff[];                                 // signal array (true - buy, false - sell)
    datetime time_buff[];                                 // array of signals' appear time
    int      sign_size=0;                                 // signal array size
    double   macd_buff[];                                 // array of indicator values
    datetime date_buff[];                                 // array of indicator dates
    int      macd_size=0;                                 // size of indicator arrays

 //--- set indexing as time series
    ArraySetAsSeries( sign_buff, true );
    ArraySetAsSeries( time_buff, true );
    ArraySetAsSeries( macd_buff, true );
    ArraySetAsSeries( date_buff, true );

 //--- reset last error code
    ResetLastError();

 //--- copying the time from last 1000 bars
    int  copied = CopyTime( NULL, 0, 0, 1000, date_buff );
    if ( copied <= 0 )
    {    PrintFormat( "Failed to copy time values. Error code = %d", GetLastError() );`
         return;
      }

 //--- prepare macd_buff array
    ArrayResize( macd_buff, copied );

 //--- copy the values of main line of the iMACD indicator
    for ( int i = 0; i< copied; i++ )
    {     macd_buff[i] = iMACD( InpSymbolName, InpSymbolPeriod, InpFastEMAPeriod, InpSlowEMAPeriod, InpSignalPeriod, InpAppliedPrice, MODE_MAIN, i );
      }

 //--- get size
    macd_size = ArraySize( macd_buff );

 //--- analyze the data and save the indicator signals to the arrays
    ArrayResize( sign_buff, macd_size - 1 );
    ArrayResize( time_buff, macd_size - 1 );
    for ( int i = 1; i < macd_size; i++ )
    {   
        //--- buy signal
          if (  macd_buff[i-1] <  0
             && macd_buff[i]   >= 0 )
          {     
                sign_buff[sign_size] = true;
                time_buff[sign_size] = date_buff[i];
                sign_size++;
            }
        //--- sell signal
        if (  macd_buff[i-1] >  0
           && macd_buff[i]   <= 0 )
        {  
              sign_buff[sign_size] = false;
              time_buff[sign_size] = date_buff[i];
              sign_size++;
           }
      }

 //--- open the file for writing the indicator values (if the file is absent, it will be created automatically)
    ResetLastError();
    int file_handle = FileOpen( InpDirectoryName                    // aDirNAME
                              + "//"                                // aFileSystemTreeBranchSEPARATOR
                              + InpFileName,                        // aFileNAME
                                FILE_READ|FILE_WRITE|FILE_CSV       // fileIoMODE_FLAGs
                                );
    if (  file_handle != INVALID_HANDLE )
    {     
          PrintFormat( "%s file is available for writing", InpFileName );
          PrintFormat( "File path: %s\Files\",           TerminalInfoString( TERMINAL_DATA_PATH ) );

       //--- first, write the number of signals
          FileWrite( file_handle, sign_size );

       //--- write the time and values of signals to the file
          for ( int i = 0; i <  sign_size; i++ )
                FileWrite( file_handle, time_buff[i], sign_buff[i] );

       //--- close the file
          FileClose( file_handle );
          PrintFormat( "Data is written, %s file is closed", InpFileName );
      }
    else
          PrintFormat( "Failed to open %s file, Error code = %d", InpFileName, GetLastError() );
   }

替代。一)

该算法不会检查文件系统中是否存在 InpDirectoryName 节点。

替代。 B)

万一 Alt。 a) passes, aFilePATH + aFileNAME string 中应该使用兼容的分隔符,即 == "\", ( aFileSystemTreeBranchSEPARATOR 参考:帮助了解详细信息)
然后
a fileIO 应在 \Terminal\Common\Files 中发生(如果 FILE_COMMON 位掩码标志被添加(使用)在 int open_flags参数),
否则,
操作将在 MetaTrader 终端 4 本地文件夹
[=18= 的(子)目录中进行](直播ExpertAdvisorCustom IndicatorScript操作模式)

== MQL4\Tester\Files(如果使用 ExpertAdvisorCustom IndicatorMT4 策略测试器) 的回测框架内。