#include "EVZDefines.mqh" class YahooScraper { string symbol_read, symbol_write; public: YahooScraper(string symbolToRead, string symbolToWrite=""); #ifdef __MQL5__ bool CreateSymbol(); void SymbolCustomSettings(); bool GetWebData(int initTime, int endTime); #endif void GetWebPage(int initTime, int endTime, string &resultStr); void SaveFile(string filename, int initTime, int endTime); void UpdateFile(string filename, int endTime); string ProcessRow(string row); string nZeros(int num); }; YahooScraper::YahooScraper(string symbolToRead,string symbolToWrite="") { symbol_read = symbolToRead; symbol_write = symbolToWrite; } #ifdef __MQL5__ bool YahooScraper::CreateSymbol(void) { return CustomSymbolCreate(symbol_write); } void YahooScraper::SymbolCustomSettings(void) { //Print("Symbol " + symbol_write + " created"); CustomSymbolSetString(symbol_write, SYMBOL_DESCRIPTION, "Spain 35 Index"); CustomSymbolSetInteger(symbol_write, SYMBOL_DIGITS, 2); CustomSymbolSetString(symbol_write, SYMBOL_CURRENCY_BASE, "EUR"); CustomSymbolSetString(symbol_write, SYMBOL_CURRENCY_PROFIT, "EUR"); CustomSymbolSetString(symbol_write, SYMBOL_CURRENCY_MARGIN, "EUR"); CustomSymbolSetInteger(symbol_write, SYMBOL_TICKS_BOOKDEPTH, 10); CustomSymbolSetDouble(symbol_write, SYMBOL_TRADE_CONTRACT_SIZE, 1.0); CustomSymbolSetInteger(symbol_write, SYMBOL_TRADE_CALC_MODE, SYMBOL_CALC_MODE_CFD); CustomSymbolSetInteger(symbol_write, SYMBOL_TRADE_STOPS_LEVEL, 0); CustomSymbolSetDouble(symbol_write, SYMBOL_TRADE_TICK_SIZE, 0.01); CustomSymbolSetDouble(symbol_write, SYMBOL_TRADE_TICK_VALUE, 0.01); CustomSymbolSetInteger(symbol_write, SYMBOL_TRADE_EXEMODE, SYMBOL_TRADE_EXECUTION_MARKET); CustomSymbolSetInteger(symbol_write, SYMBOL_FILLING_MODE, SYMBOL_FILLING_IOC); CustomSymbolSetDouble(symbol_write, SYMBOL_VOLUME_STEP, 0.1); CustomSymbolSetDouble(symbol_write, SYMBOL_VOLUME_MIN, 0.1); CustomSymbolSetDouble(symbol_write, SYMBOL_VOLUME_MAX, 250); CustomSymbolSetDouble(symbol_write, SYMBOL_MARGIN_HEDGED, 0.0); } bool YahooScraper::GetWebData(int initTime, int endTime) { string tmpStr; GetWebPage(initTime, endTime, tmpStr); if (tmpStr == "") return false; string queryRows[]; StringSplit(tmpStr, '\n', queryRows); int size = ArraySize(queryRows); MqlRates ratesArray[]; ArrayResize(ratesArray, size-1); double openPrice=0, highPrice=0, lowPrice=0, closePrice=0; long volume=50000000; for (int i = 1; i=2 && queryRows[requestSize-1]==queryRows[requestSize-2]) //Prevent repeated values from weekends { requestSize--; } //Reescribir inicio FileSeek(filehandle, 0, SEEK_SET); str_size=FileReadInteger(filehandle,INT_VALUE); str = FileReadString(filehandle,str_size); int lastRows = (int)StringToInteger(str); FileSeek(filehandle, 0, SEEK_SET); //FileWrite(filehandle, IntegerToString(lastRows + requestSize - 2)); FileWriteString(filehandle, IntegerToString(lastRows + requestSize - 2)+" "); //Reescribir filas FileSeek(filehandle, -ROW_BYTE_SIZE, SEEK_END); for (int i = 1; i