智能交易网,程序化交易,自动交易,量化交易

 找回密码
 注册

QQ登录

只需一步,快速开始

手机短信登录

参加MT4智能交易编程培训,7课免费在线试听MT4指标,EA代写,或EA指标加密账户远程验证服务 最完善商业MT4跟单系统(0.1秒极速响应不漏单)为论坛做贡献有奖学金,奖学金可直接换真钱
扫本站微信公 众号部分视频课程指标EA免费得智能交易网MT4操盘神器,扫公众号免费得苏城码APP 
查看: 1576|回复: 2

请教个问题,关于MT5的函数webrequest网站抓取tick数据并随后加入自定义品种的行情数

[复制链接]
发表于 2018-6-16 07:24:50 | 显示全部楼层 |阅读模式
赵老师您好,我用MT5的函数webrequest()抓取某财经网站实时更新的tick数据并每5秒钟加入到自定义品种tick数据中,数据能成功抓取,但是就是加入不了自定义品种中,EA运行后
显示数据添加数是0,tick数据没有加到自定义品种中。附上我的代码,敬请指点

//+------------------------------------------------------------------+
//|                                                 FuturesChina.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//#include "CustomSymbol.mqh"
//#include "Array.mqh"
//#include "Rates.mqh"
//#include "Ticks.mqh"
//#include "Data.mqh"
//---
#property description "This Expert Advisor loads and displays Sina Finance quotes of China's Futures using WebRequest.";
//---

//+------------------------------------------------------------------+
//| TestWebRequest                                                   |
//+------------------------------------------------------------------+
int GlobalFlag=100;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool TestWebRequest()
  {
   string cookie=NULL,headers;
   char post[],result[];
   int res;
//---
   string mb;
   string google_url="http://hq.sinajs.cn/list=I1809";//http://finance.sina.com.cn/futures/quotes/RB1810.shtml//"http://finance.sina.com.cn/futuremarket/";//"http://quotes.money.163.com/old/#FU";//"https://www.google.com/finance";
//---

   ResetLastError();
   int timeout=5000; //--- timeout less than 1000 (1 sec.) is not sufficient for slow Internet speed
   res=WebRequest("GET",google_url,cookie,NULL,timeout,post,0,result,headers);
   if(res==-1)
     {
      Print("Error in WebRequest. Error code  =",GetLastError());
      return(false);
     }
   mb=CharArrayToString(result,0,-1,CP_ACP);
   Print(mb);
   Print(res);
   Print(GetLastError());
//--- 加载成功
   PrintFormat("The file has been successfully loaded, File size =%d bytes.",ArraySize(result));
//--- 保存数据到文件
   int filehandle=FileOpen("IB1810Future.htm",FILE_WRITE|FILE_BIN);
   Print("filehandle=",filehandle);
//--- 检查错误
   if(filehandle!=INVALID_HANDLE)
     {
      //--- 保存result[]数组内容到文件
      FileWriteArray(filehandle,result,0,ArraySize(result));
      //--- 关闭文件
      FileClose(filehandle);
     }
   else Print("Error in FileOpen. Error code=",GetLastError());
//printf("52111");
   return(true);
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(!TestWebRequest())
     {
      MessageBox("Add address 'http://hq.sinajs.cn/list=RB1810' in Expert Advisors tab of the Options window","Information",MB_ICONINFORMATION);
      return(INIT_FAILED);
     }
//---
//--- create timer
   EventSetTimer(15);
   OnTimer();

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   static long last_time=0;
   if(GetTickCount()+5000>last_time) last_time=GetTickCount(); else return;

   Print(TimeLocal());
   UpdateQuotes();

  }
//+------------------------------------------------------------------+
bool UpdateQuotes(void)
  {

//---
   string cookie=NULL,headers;
   char post[],result[];
   int res,abc=0;;
//---
   string google_url="http://hq.sinajs.cn/list=I1809";//"http://quotes.money.163.com/old/#FU";//"https://www.google.com/finance";
   string response,strvalue[];
//--- get data from Sina
   ResetLastError();
   res=WebRequest("GET",google_url,cookie,NULL,50,post,0,result,headers);
//--- check error
   if(res==-1) return(false);
//--- convert to string
   response=CharArrayToString(result,0,-1,CP_ACP);
//Print("response=",response);
//Print("headers of response=",headers);
   GetTag(response,strvalue);
   for(int a=0;a<27;a++)
      Print(a,".",strvalue[a]);
//string hhh;
//hhh=(int)StringSubstr(strvalue[0],0,2)+":"+StringSubstr(strvalue[0],2,2)+":"+StringSubstr(strvalue[0],4,2);
// string aaa="D'2015.01.01 00:00'";
//datetime xxx="19.07.1980 12:30:27";
//int ccc=(int)StringSubstr(strvalue[0],0,2);
//int ddd=(int)StringSubstr(strvalue[0],2,2);
//int eee=(int)StringSubstr(strvalue[0],4,2);

// datetime aaa=(datetime)TimeLocal();
//_Symbol
   MqlDateTime bbb;
   TimeToStruct(TimeLocal(),bbb);

   bbb.hour=(int)StringSubstr(strvalue[0],0,2);
   bbb.min=(int)StringSubstr(strvalue[0],2,2);
   bbb.sec=(int)StringSubstr(strvalue[0],4,2);

   datetime aaa=StructToTime(bbb);
//CopyBuffer
   Print(aaa);
//CUSTOMSYMBOL cust;
//AddTicks

   MqlTick ticks[];
   const int arr=0;
   const int reser=1;

   ArraySetAsSeries(ticks,true); //ArrayResize(ticks,100,100);
   Print("tick[] buffer is timeseries = ",ArrayGetAsSeries(ticks));
  
   ArrayResize(ticks,reser);
   Print("array size=",ArraySize(ticks));

// ArraySetAsSeries(ticks,true); //ArrayResize(ticks,100,100);

   ticks[arr].time=aaa;
// ticks[arr].time=(datetime)"2018.06.12 21:00:5";
   ticks[arr].bid=(double)strvalue[6];
   ticks[arr].ask=(double)strvalue[5];
   ticks[arr].last=(double)strvalue[7];
   ticks[arr].volume=(ulong)strvalue[13];

   Print("last price=",ticks[arr].last);
   Print("tick time=",ticks[arr].time);

   ResetLastError();
   SymbolSelect(Symbol(),true);
//GlobalFlag++;
//ResetLastError();
//arr++;

   abc=CustomTicksAdd(Symbol(),ticks);
   Print("add return count= ",abc);
   Print("error code=",GetLastError());
//etime bbb=aaa+ccc*
//aaa+=" ";
// aaa+=hhh;
// datetime bbb=aaa+(datetime)hhh;

   return(true);
  }
//---
void GetTag(string responname,string  &result[])
  {
   ArrayResize(result,27);
   string text=responname;
   int pos=0,end=0;
//---  

   pos=StringFind(text,",",0);
//Print("attr=",pos);
//--- tag start found
   text=StringSubstr(text,pos);

   for(int i=0;i<27;i++)
     {
      end=StringFind(text,",",1);
      //Print("pos=",pos,"end=",end);
      //--- tag end
      if(end!=-1)
        {
         result=StringSubstr(text,1,end-1);
         //Print("substr=",result);
         text=StringSubstr(text,end);
        }
      else
        {
         end=StringFind(text,"\"",1);
         result=StringSubstr(text,1,end-1);
         //Print("substr=",result);
         text=StringSubstr(text,end);

        }
     }
  }
//+------------------------------------------------------------------+



回复

使用道具 举报

发表于 2018-6-19 09:05:34 | 显示全部楼层
先抓取整个页面的数据,然后 再检索出 你想要的那条新闻。就是这样,检索到了 新闻 然后 你再考虑显示的问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-19 09:40:34 | 显示全部楼层
MT4MT5 发表于 2018-6-19 09:05
先抓取整个页面的数据,然后 再检索出 你想要的那条新闻。就是这样,检索到了 新闻 然后 你再考虑显示的问 ...

数据能成功抓取,但是用CustomTicksAdd()函数无法加到tick时间序列中,这个函数是将MqlTick 类型的数组加到自定义品种数据中,但是每次抓取的数据只是单个MqlTick 类型数据,加不成功,日志提示加载数据数是0,不知道怎么回事
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|sitemap| 智能交易网,程序化交易,自动交易,量化交易 ( 苏ICP备08108698号,苏州智德金网络科技股份有限公司版权所有 )

GMT+8, 2020-6-4 07:24 , Processed in 0.082973 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表