- 显示:
- 1863
- 等级:
- 已发布:
- 2013.10.24 15:58
- 已更新:
- 2016.11.22 07:33
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
自动交易程序得到每个即时价格的买、卖价位,并记忆在 "价格" 结构数组中。每第二十个即时价格,自动交易程序用 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 Ltd译自俄语
原代码: https://www.mql5.com/ru/code/1620