ผู้เขียน หัวข้อ: โค้ด ffcal  (อ่าน 361 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ admin

  • Administrator
  • Full Member
  • *****
  • กระทู้: 183
  • i ma forex trader
    • ดูรายละเอียด
โค้ด ffcal
« เมื่อ: พฤศจิกายน 14, 2017, 09:26:31 PM »
ffcal เป็นชื่อ อินดี้ที่เรียกอ่านข่าวจาก forexfactory.com

"Copyright © 2006, Derk Wehler"

เรียกได้ว่าปล่อยออกมานานแล้ว ตั้งแต่ปี 2006 สามารถ google หาเอามาเล่นได้ฟรีๆ

แหล่งข่าวก็ดึงมาจากfeed xml ของทางเวป ff เองนั่นแหละ ที่ "http://forexfactory.com/ffcal_week_this.xml"
ซึ่งจะทำการอัพเดทให้เป็นรายสัปดาห์
แล้วก็จะไม่มีข้อมูลย้อนหลัง

ถ้าต้องการก็อาจจะต้องไปหาจากเวปอื่นเอาแทน เช่น http://tradingeconomics.com/

ในโค้ด ffcal นั้นจะมีการ strip XML format ออกมาเห็นได้จากการประกาศตัวแปร
โค๊ด: [Select]
string sTags[7] = { "<title>", "<country>", "<date><![CDATA[", "<time><![CDATA[", "<impact><![CDATA[", "<forecast><![CDATA[", "<previous><![CDATA[" };
string eTags[7] = { "</title>", "</country>", "]]></date>", "]]></time>", "]]></impact>", "]]></forecast>", "]]></previous>" };

โดยจะต้องทำการ Allow .DLL ให้ทำงานก่อนด้วย ก่อนที่จะใช้งาน

เห็นได้จาก
โค๊ด: [Select]
#import "wininet.dll"

   #define INTERNET_FLAG_PRAGMA_NOCACHE    0x00000100 // Forces the request to be resolved by the origin server, even if a cached copy exists on the proxy.
   #define INTERNET_FLAG_NO_CACHE_WRITE    0x04000000 // Does not add the returned entity to the cache.
   #define INTERNET_FLAG_RELOAD            0x80000000 // Forces a download of the requested file, object, or directory listing from the origin server, not from the cache.

   int InternetOpenW( string sAgent, int lAccessType, string sProxyName, string sProxyBypass, int lFlags );
   int InternetOpenUrlW(int hInternetSession,string sUrl,string sHeaders="",int lHeadersLength=0,int lFlags=0,int lContext=0);
   int InternetReadFile(int hFile, uchar &sBuffer[],int lNumBytesToRead,int &lNumberOfBytesRead[]);
   int InternetCloseHandle(int hInet);

ต่อมาเจ้า wininet.dll นั้น จะเรียกหาไฟล์ข่าว xml ได้ตรงๆ มาเก็บไว้เป็นไฟล์บนเครื่องก่อนที่จะอ่านและกรองออกมาเฉพาะที่เราสนใจเท่านั้น

ฟังก์ชั่นในการอ่านเวปถ้าเราจะเอามาเล่นใน mql4 ผมก็ว่าน่าจะลอง InternetOpenUrlW เหมือนตัวอย่างข้างบนที่ import มาจาก wininet.dll นี้แหละ


ตัวอย่างที่เป็น function การอ่านเวปมาเก็บไว้เป็น char array ซึ่งเราเอาไปใช้งานต่อได้

โค๊ด: [Select]
bool GrabWeb(string strUrl, string& strWebPage)
{
int hInternet;
int iResult;
int lReturn[] = {1};
uchar sBuffer[1024];
int bytes;
   uint flags=INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD;

   hInternet = InternetOpenUrlW(hSession(FALSE), strUrl, NULL, 0, flags);
//hInternet = InternetOpenUrlW(hSession(FALSE), strUrl, "0", 0,
// INTERNET_FLAG_NO_CACHE_WRITE |
// INTERNET_FLAG_PRAGMA_NOCACHE |
// INTERNET_FLAG_RELOAD, 0);

if (bWinInetDebug)
Log("hInternet: " + hInternet);   
if (hInternet == 0)
return(false);

Print("Reading URL: " + strUrl);    //added by MN
iResult = InternetReadFile(hInternet, sBuffer, Buffer_LEN, lReturn);

if (bWinInetDebug) Log("iResult: " + iResult);
if (bWinInetDebug) Log("lReturn: " + lReturn[0]);
if (bWinInetDebug) Log("iResult: " + iResult);
if (bWinInetDebug) Log("sBuffer: " +  CharArrayToString(sBuffer, 0, lReturn[0]));
if (iResult == 0)  return(false);
bytes = lReturn[0];
strWebPage = CharArrayToString(sBuffer, 0, lReturn[0]);

//If there's more data then keep reading it into the buffer
while (lReturn[0] != 0)
   {
iResult = InternetReadFile(hInternet, sBuffer, Buffer_LEN, lReturn);
if (lReturn[0]==0) break;
bytes = bytes + lReturn[0];
strWebPage = strWebPage + CharArrayToString(sBuffer, 0, lReturn[0]);
    }
Print("Closing URL web connection");   //added by MN
iResult = InternetCloseHandle(hInternet);
if (iResult == 0) return(false);

return(true);
}

ออฟไลน์ isuccess

  • Newbie
  • *
  • กระทู้: 1
    • ดูรายละเอียด
Re: โค้ด ffcal
« ตอบกลับ #1 เมื่อ: ธันวาคม 19, 2017, 10:51:31 AM »
สวดยอด

ออฟไลน์ admin

  • Administrator
  • Full Member
  • *****
  • กระทู้: 183
  • i ma forex trader
    • ดูรายละเอียด
Re: โค้ด ffcal
« ตอบกลับ #2 เมื่อ: ธันวาคม 19, 2017, 09:31:27 PM »
ก๊อปเค้ามาอีกทีครับ  8)