请观看如何免费下载自动交易
请在Facebook上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
显示:
1575
等级:
(28)
已发布:
2013.10.24 16:01
已更新:
2016.11.22 07:33
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

这段脚本记录 MACD 指标形成的信号并将之保存于文件。脚本的输入参数可以指定 MACD 指标的参数, 货币对的名字和时间帧, 以及数据分析的开始日期。记录指标信号的文件位于 "Data" 客户端本地文件夹下的子目录。

代码:

首先, 我们要得到指定时间帧的指标值数组和时间数组:

//--- 结束时间设置为当前时间
   date_finish=TimeCurrent();
//--- 接收 MACD 指标句柄
   ResetLastError();
   int macd_handle=iMACD(InpSymbolName,InpSymbolPeriod,InpFastEMAPeriod,InpSlowEMAPeriod,InpSignalPeriod,InpAppliedPrice);
   if(macd_handle==INVALID_HANDLE)
     {
      //--- 接收指标句柄失败
      PrintFormat("接收指标句柄失败. 错误代码 = %d",GetLastError());
      return;
     }
//--- 循环直到指标计算所有数值
   while(BarsCalculated(macd_handle)==-1)
      Sleep(10); // 暂停等待指标计算
//--- 复制确定时间周期的指标值
   ResetLastError();
   if(CopyBuffer(macd_handle,0,InpDateStart,date_finish,macd_buff)==-1)
     {
      PrintFormat("复制指标值失败。错误代码 = %d",GetLastError());
      return;
     }
//--- 复制接近时间的指标值
   ResetLastError();
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1)
     {
      PrintFormat("复制时间值失败。错误代码 = %d",GetLastError());
      return;
     }

之后定义指标信号以及它们的时间格式:

//--- 接收缓冲区尺寸
   macd_size=ArraySize(macd_buff);
//--- 分析数据并保存指标信号至数组
   ArrayResize(sign_buff,macd_size-1);
   ArrayResize(time_buff,macd_size-1);
   for(int i=1;i<macd_size;i++)
     {
      //--- 买信号
      if(macd_buff[i-1]<0 && macd_buff[i]>=0)
        {
         sign_buff[sign_size]=true;
         time_buff[sign_size]=date_buff[i];
         sign_size++;
        }
      //--- 卖信号
      if(macd_buff[i-1]>0 && macd_buff[i]<=0)
        {
         sign_buff[sign_size]=false;
         time_buff[sign_size]=date_buff[i];
         sign_size++;
        }
     }

最后, 我们写获得的信号数值至文件,使用 FileWrite() 函数:

//--- 打开用于写指标数值的文件 (如果文件缺失, 自动创建)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s 文件可用于输出",InpFileName);
      PrintFormat("文件路径: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- 首先, 写信号数量
      FileWrite(file_handle,sign_size);
      //--- 写信号时间和数值至文件
      for(int i=0;i<sign_size;i++)
         FileWrite(file_handle,time_buff[i],sign_buff[i]);
      //--- 关闭文件
      FileClose(file_handle);
      PrintFormat("数据输出完毕, %s 文件关闭",InpFileName);
     }
   else
      PrintFormat("打开失败 %s 文件, 错误代码 = %d",InpFileName,GetLastError());

由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/1626

演示_FileReadArray 演示_FileReadArray

这段脚本简单示例如何使用 FileReadArray() 函数

演示_FileWriteArray 演示_FileWriteArray

这段脚本简单示例如何使用 FileWriteArray() 函数

演示_FileReadDatetime 演示_FileReadDatetime

这段脚本简单示例如何使用 FileReadDatetime() 函数

演示_FileWriteDouble 演示_FileWriteDouble

这段脚本简单示例如何使用 FileWriteDouble() 函数