2

此脚本在附加到图表时 mql4不会导出到-file。为什么?CSV

static datetime check;
//+------------------------------------------------------------------+
//|   scripts/Export.mq4                  pre  Build 562-            |
//|   MQL4/Scripts/Export.mq4             post Build 562+            |
//+------------------------------------------------------------------+
void start() {                // New-MQL4 post Build 562+: void OnStart(){}
   if ( check != Time[0] ) {
        check  = Time[0];
        WriteCSV(); 
      } 
}

//+------------------------------------------------------------------+
//| WriteCSV                                                         |
//+------------------------------------------------------------------+
void WriteCSV() {
   int handle = FileOpen( StringConcatenate( Symbol(), ".csv" ),
                          FILE_CSV|FILE_READ|FILE_WRITE, ','
                          );

   if ( handle > 0 ) {
        FileSeek( handle, 0, SEEK_END ); 

        FileWrite( handle,
                   TimeToStr( TimeCurrent(), TIME_DATE ),
                   iOpen ( Symbol(), Period(), 1 ),
                   iHigh ( Symbol(), Period(), 1 ),
                   iLow  ( Symbol(), Period(), 1 ),
                   iClose( Symbol(), Period(), 1 )
                   );

        FileClose( handle );
      }
}
//+------------------------------------------------------------------+
4

3 回答 3

2

这看起来像一个旧线程,但我只是想把它扔进去,因为它的价值。这里有很多事情让我担心。

  1. 您在脚本中的第一个命令:

    int handle = FileOpen( StringConcatenate( Symbol(), ".csv" ),
                           FILE_CSV|FILE_READ|FILE_WRITE, ','
                           );
    

    应该打开文件write,如果它不存在,它将创建它。所以,如果文件不在任何地方,那么它就不会被创建。如用户3666197所述。确保您以管理员身份运行 MT4 。

  2. i在检索任何带有 ' ' 前缀的数据时,您可能希望包含一个循环。iClose, iOpen, iHigh, iLow- 因为您请求的所有数据可能都不可用。MT4 将需要从服务器中提取,在这种情况下返回的柱数将为0.

iClose() 返回值 指定交易品种柱的收盘价值,带有时间框架和班次。如果本地历史为空(未加载),则函数返回0.

要检查错误,必须调用该GetLastError()函数。因此,如果您找到了该文件并且正在创建它,但没有条形图或仅保存了几个条形图,这就是原因。

只是想我会把它扔在那里,以防它成为你的问题。

祝你好运

于 2015-06-15T15:07:13.693 回答
0

文件名可能与操作系统命名限制冲突:

首先测试一个常量 O/S 安全字符串

int handle = FileOpen( "FileOpenTest_FILENAME_FEASIBLE.CSV",
                        FILE_CSV | FILE_READ | FILE_WRITE
                        );

最后但并非最不重要的一点是,检查您的经纪人的工具命名是否不会与 O/S 发生冲突。已经看到这些停止 MQL4 代码的做法,这些代码多年来一直处于生产状态。

代理端的符号(重新)命名相似EURUSD..fileIO可能会令人惊讶地阻止您原本标准的操作 - DataCentre 托管的第一手经验,一旦代理公司营销部门Windows Server 2008,O/S 突然开始默默地拒绝打开具有类似注入工件的文件名Symbol(). 为各种账户/产品类型的外汇工具引入了新的命名约定。

fileIO 操作可能会与用户有效权限发生冲突:

检查您user对 MT4 允许fileIO发生的位置的有效权利:

  1. ~<_TerminalDIR_>\MQL4\Files
  2. ~<_TerminalDIR_>\tester\files

(有效期为 2014-10-01,Build 670)

于 2014-09-30T23:17:24.010 回答
0

您尝试导出到的目录可能没有 MT4 权限,因此不允许访问。

于 2014-03-12T22:36:43.810 回答