下载MetaTrader 5

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

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

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

2013.10.24 15:58
EA

演示_FileWriteArray - MetaTrader 5EA

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

显示:
435
等级:
投票: 21

自动交易程序得到每个即时价格的买、卖价位,并记忆在 "价格" 结构数组中。每第二十个即时价格,自动交易程序用 FileWriteArray() 函数写结构对象数据至文件。数据将保存在二进制文件中,位于客户端本地文件夹下的子目录中。客户端的本地文件夹位置包含在 TerminalInfoString() 函数。

PrintFormat("客户端本地文件夹路径: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); 
当从图表中删除自动交易程序时, 自动交易程序会在中断工作后将未保存数据写至文件。

代码:

//--- 输入参数
input string InpFileName="data.bin";
input string InpDirectoryName="SomeFolder";
//+------------------------------------------------------------------+
//| Structure for storing price data                                 |
//+------------------------------------------------------------------+
struct prices
  {
   datetime          date; // 日期
   double            bid;  // 卖价格
   double            ask;  // 买价格
  };
//--- 全局变量
int    count=0;
int    size=20;
string path=InpDirectoryName+"//"+InpFileName;
prices arr[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 为数组分配内存
   ArrayResize(arr,size);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- 写剩余字符如果 count<n
   WriteData(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 保存数据至数组
   arr[count].date=TimeCurrent();
   arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
//--- 显示当前数据
   Print("日期 = ",arr[count].date," 卖 = ",arr[count].bid," 买 = ",arr[count].ask);
//--- 增加计数
   count++;
//--- 如果数组填满, 写文件并清空数组
   if(count==size)
     {
      WriteData(size);
      count=0;
     }
  }
//+------------------------------------------------------------------+
//| Write n elements of the array to the file                        |
//+------------------------------------------------------------------+
void WriteData(const int n)
  {
//--- 打开文件
   ResetLastError();
   int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- 写数据至文件尾
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arr,0,n);
      //--- 关闭文件
      FileClose(handle);
     }
   else
      Print("打开文件失败, 错误 ",GetLastError());
  }

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/1620

加速震荡(AC) 加速震荡(AC)

加速/减速技术指标(AC)用于衡量当前驱动力的加速和减速。

平均趋向指数(ADX) 平均趋向指数(ADX)

平均趋向指数指标(ADX)用来帮助判断市场是否存在趋势。

60 EMA profit 60 EMA profit

直观显示60EMA均线交易系统的赢利和亏损。

Ticks Volume 指标 Ticks Volume 指标

在期货市场上,交易量的数据会有一天的延迟,为了解决这个问题,许多分析员使用 tick volume 指标 (tick volume,订单交易量).