Git Product home page Git Product logo

olymptrade_historical_data's Introduction

Исторические данные брокера OlympTrade

Описание

РЕПОЗИТОРИЙ БОЛЬШЕ НЕ ОБНОВЛЯЕТСЯ!

Данный репозиторий содержит исторические данные котировок и процентов выплат брокера OlympTrade

  • Файлы обновляются в репозитории каждый торговый день в 00:00 GMT
  • Один файл соответствует одному дню, название файла формируется из даты
  • Файлы содержат информацию о следующих валютных парах или индексов (см. parameters.json)

Структура файлов исторических данных по процентам выплат брокера

Папка proposal_data содержит файлы с процентами выплат для нескольких валютных пар. Однин сэмпл файла соответствует одной секунде. Один файл соответствует одному дню, название файла формируется из даты. Проценты выплат хранятся в двоичном формате для уменьшения размера файлов. В начале файла есть заголовок-строка, оканчивающееся символом \n и содержащая в формате JSON информацию. Пример заголовка:

{"sample_len":84,"symbols":["EURRUB","CHFJPY","HG","GBPCHF","GBPAUD","USDRUB","AUDUSD","TSLA","ETCUSD","BTGUSD","CADCHF","FCE","TF","DASHUSD","EURCAD","ES","XAGUSD","LTCUSD","CADJPY","BMW","NZDJPY","USDTRY","AUDJPY","Z","USDNOK","EURUSD","LTCBTC","ZECUSD","USDCAD","XMRUSD","MSFT","NINTENDO_JP","BA","USDCHF","NZDUSD","FB","USDJPY","AUDCHF","EURCHF","V","ETHUSD","NKD","GBPNZD","GBPUSD","FDAX","_BRN","AUDNZD","HSI","MCD","SBUX","USDMXN","EURJPY","EURAUD","NZDCHF","Bitcoin","KO","XAUUSD","IBM","NG","AAPL","FESX","EURGBP","ETHBTC","BCHUSD","XRPUSD","GBPCAD","NQ","USDCLP","PL","EURNZD","GBPJPY","NZDCAD","GOOGL","YM","USDSGD","AUDCAD"]}
  • sample_len - длина одного сэмпла соответствующего одной секунде дня, в байтах
  • symbols - массив валютных пар

После заголовка идет массив бинарных данных, состоящий из сэмплов. Каждый сэмпл содержит значения процентов выплат для всех валютных пар в порядке их чередования, указанном в заголовке, а также содержит timestamp длиной 8 байт в конце сэмпла. Для сокращения данных проценты выплат хранятся в виде одного байта данных. Чтобы получить значение типа float или double, необходимо разделить считанное из файла значение на 100. Пример:

unsigned char raw_proposal;
// читаем данные в raw_proposal
file.read(reinterpret_cast<char *>(&raw_proposal), sizeof (raw_proposal));

//...

// восстанавливаем данные
float proposal = (float)raw_proposal / 100.0f;

Пример кода, который читает файл целиком:

	// загружаем настройки
	std::ifstream fin(file_name);
	std::string _s;
	std::getline(fin, _s);
	// парсим JSON строку
	json j_pp = json::parse(_s);
	// запоминаем смещение в файле (нужно так как бинарные данные расположены после заголовка)
	unsigned long start_pos = _s.size();
	fin.close();

	unsigned long sample_size = j_pp["sample_len"]; // длина одного сэмпла
	// читаем бинарные данные
	std::ifstream i(file_name, std::ios_base::binary);

	i.seekg (0, std::ios::end); // смещаемся в конец файла
	unsigned long data_size = i.tellg(); // получаем размер файла
	// 2- это магическое число появляется из-за символов переноса строки
	data_size = data_size - start_pos - 2; // получаем размер файла без заголовка
	i.seekg (start_pos + 2, std::ios::beg); // смещаемся в начало бинарных данных
	i.clear(); // очищаем флаги, навсякий случай

	// проверяем кратность размера данных размеру сэмпла
	if(data_size % sample_size != 0) {
		// если кратности нет, то дела плохи
		return false;
	}
	// получаем количество эсмплов
	unsigned long sample_num = data_size / sample_size;
	// получаем количество валютных пар
	unsigned long symbols_size = j_pp["symbols"].size();

	for(unsigned long n = 0; n < sample_num; ++n) { // читаем все сэмплы
		for(unsigned long s = 0; s < symbols_size; ++s) { // в каждом сэмпле читаем все валютные пары
			unsigned char temp = 0;
			i.read(reinterpret_cast<char *>(&temp), sizeof (temp));
			double proposal_data = (double)temp / 100.0d;
			/* делаем что хотим с данными процентов выплат (proposal_data)
			 * данные представлены от 0.0 (0%) до 1.0 (100%)
			 */
		}
		unsigned long long timestamp = 0;
		// читаем временную метку
		i.read(reinterpret_cast<char *>(&timestamp), sizeof (timestamp));
		// в переменной timestamp находится время, когда данные процентов выплат были актуальны
	}
	i.close();
	// конец

olymptrade_historical_data's People

Contributors

newyaroslav avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.