下载MetaTrader 5

请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

2013.10.25 08:46
脚本

演示_FileWriteInteger - MetaTrader 5脚本

| Chinese English Русский Español Deutsch 日本語 Português

显示:
576
等级:
投票: 29

这段脚本获取指定品种的价格, 分析并保存确定时间周期的价格走势数据到一个二进制文件。用 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 Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/1635

演示_FileTell 演示_FileTell

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

演示_FileSize 演示_FileSize

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

演示_FileReadInteger 演示_FileReadInteger

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

演示_IndicatorSetString 演示_IndicatorSetString

如何使用 IndicatorSetString() 函数的示例。一个简单的指标展示如何创建标签, 例如为每条水平线创建 "超买水平"。