- 显示:
- 1638
- 等级:
- 已发布:
- 2013.10.25 08:46
- 已更新:
- 2016.11.22 07:33
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
这段脚本获取指定品种的价格, 分析并保存确定时间周期的价格走势数据到一个二进制文件。用 FileWriteInteger() 函数输出所有数据。
数据值预先转换为字符串, 切分为 uchar 类型数组并用函数写至文件。
代码:
//--- 当脚本启动时显示输入参数窗口 #property script_show_inputs //--- 输入参数 input string InpSymbolName="EURUSD"; // 货币对 input ENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_H1; // 时间帧 input datetime InpDateStart=D'2013.01.01 00:00'; // 数据复制开始时间 //--- parameters for writing data to the file input string InpFileName="Trend.bin"; // 文件名 input string InpDirectoryName="Data"; // 目录名 //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { datetime date_finish=TimeCurrent(); double close_buff[]; datetime time_buff[]; int size; //--- 重置错误代码 ResetLastError(); //--- 复制每根柱线的收盘价 if(CopyClose(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,close_buff)==-1) { PrintFormat("复制收盘价失败。错误代码 = %d",GetLastError()); return; } //--- 复制每根柱线的时间 if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1) { PrintFormat("复制时间失败。错误代码 = %d",GetLastError()); return; } //--- 缓存区尺寸 size=ArraySize(close_buff); //--- 打开写文件 (如果文件缺失, 自动创建) ResetLastError(); int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN); if(file_handle!=INVALID_HANDLE) { PrintFormat("%s 文件可用于输出",InpFileName); PrintFormat("文件路径: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); //--- int up_down=0; // 趋势标志 int arr_size; // 分配数组大小 uchar arr[]; // uchar 类型数组 //--- 写时间值至文件 for(int i=0;i<size-1;i++) { //--- 比较当前和下一根柱线的收盘价 if(close_buff[i]<=close_buff[i+1]) { if(up_down!=1) { //--- 写数据至文件 FileWriteInteger StringToCharArray(TimeToString(time_buff[i]),arr); arr_size=ArraySize(arr); //--- 首先, 写商品符号数量至数组 FileWriteInteger(file_handle,arr_size,INT_VALUE); //--- 写商品符号 for(int j=0;j<arr_size;j++) FileWriteInteger(file_handle,arr[j],CHAR_VALUE); //--- 改变趋势标志 up_down=1; } } else { if(up_down!=-1) { //--- 写数据至文件 FileWriteInteger StringToCharArray(TimeToString(time_buff[i]),arr); arr_size=ArraySize(arr); //--- 首先, 写商品符号数量至数组 FileWriteInteger(file_handle,arr_size,INT_VALUE); //--- 写商品符号 for(int j=0;j<arr_size;j++) FileWriteInteger(file_handle,arr[j],CHAR_VALUE); //--- 改变趋势标志 up_down=-1; } } } //--- 关闭文件 FileClose(file_handle); PrintFormat("数据写完毕, %s 文件关闭",InpFileName); } else PrintFormat("打开文件失败 %s , 错误代码 = %d",InpFileName,GetLastError()); }
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/1635
![演示_FileReadInteger](https://c.mql5.com/i/code/indicator.png)
这段脚本简单示例如何使用 FileReadInteger() 函数
![演示_IndicatorSetString](https://c.mql5.com/i/code/indicator.png)
如何使用 IndicatorSetString() 函数的示例。一个简单的指标展示如何创建标签, 例如为每条水平线创建 "超买水平"。