- 显示:
- 1621
- 等级:
- 已发布:
- 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
![演示_FileReadDatetime](https://c.mql5.com/i/code/indicator.png)
这段脚本简单示例如何使用 FileReadDatetime() 函数
![演示_FileWriteDouble](https://c.mql5.com/i/code/script.png)
这段脚本简单示例如何使用 FileWriteDouble() 函数