Блог им. elektroyar |Библиотека для работы с временем и датой ztime

 С++ библиотека для работы с датой и временем Z-time

Библиотека для работы с временем и датой ztime

Всем привет! Ранее я уже писал про библиотеку для работы с датой и временем. С тех пор я добавил в нее новый функционал и адаптировал под использование в VS (оказалось, что в VS имя xtime уже занято). Эта библиотека очередной велосипед, но что поделать, люблю делать велосипеды
boost::posix_time, std, boost ::chrono… надо учиться эффективно использовать чужие велосипеды, иначе легко завязнуть в своих...

В трейдинге данная библиотека может быть полезна, если нужно измерять точное время в программе при помощи NTP без корректировки времени самого сервера/ПК, для проверки взаимосвязи настроения рынка с фазами Луны, для различных преобразований времени в разные форматы.


Описание


Данная библиотека представляет собой сборник алгоритмов, классов, функций и констант для удобной работы с временем:

  • Измерение точного времени при помощи NTP
  • Получение реального времени компьютера с точностью до микросекунд
  • Преобразование даты в метку времени и обратно
  • Парсинг строк или формирование строки из даты
  • Расчет фаз Луны, поиск следующего новолуния
  • Преобразование UINX времени в OLE Automation Date и обратно
  • Получение секунды, минуты, часа дня из метки времени, получение последней метки времени месяца и т.п.
  • И многие другие возможности...


( Читать дальше )

Блог им. elektroyar |С++ Библиотека для сервера и клиента Named Pipe

В общем, сделал библиотеку simple-named-pipe-server для  работы с именованными каналами. Библиотека содержит сервер и клиент для C++11, а также клиент для MQL4.

С++ Библиотека для сервера и клиента Named Pipe


Очень простая, многопоточная серверная и клиентская библиотека Named Pipe, реализованная с использованием C++11. Проект был проверен на компиляторе mingw 7.3.0 x64. Папка code_blocks содержит примеры для IDE Code::Blocks. Не забудьте в проектах указать свой компилятор, иначе проект не соберется. Сделал либу только сегодня, так что в ней могут быть ошибочки.

Пример сервера
#include <iostream>
#include "named-pipe-server.hpp"

int main() {
    /* в конструкторе сервера можно также задать размер буфера */
    SimpleNamedPipe::NamedPipeServer server("my_server");

    /* обработчики событий */
    server.on_open = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection) {
        std::cout << "open, handle: " << connection->get_handle() << std::endl;
    };
    server.on_message = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection, 
			const std::string &in_message) {
        /* обрабатываем входящие сообщения */
        std::cout << "message " << in_message << ", handle: " << connection->get_handle() << std::endl;
        connection->send("ok");
    };
    server.on_close = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection) {
        std::cout << "close, handle: " << connection->get_handle() << std::endl;
    };
    server.on_error = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection, const std::error_code &ec) {
        std::cout << "error, handle: " << connection->get_handle() << ", what " << ec.value() << std::endl;
    };

    /* запускаем сервер */
    server.start();
    std::system("pause");

    /* останавливаем сервер 
     * (деструктор класса сам выполнит остановку, вызывать не обязательно)
     */
    server.stop();
    std::cout << "close program" << std::endl;
    return EXIT_SUCCESS;
}


( Читать дальше )

Блог им. elektroyar |Библиотека OpenBoApi для работы с лохотронами

Кто-то этого давно ждал, кто-то не ждал, кому-то вообще параллельно. Тем не менее, встречайте: библиотека для работы с брокерами бинарных опционов OpenBoApi. Не благодарите.

Библиотека OpenBoApi для работы с лохотронами

Либа написана на С++, почему? Потому что это не питон. Либа пока еще сырая, тем не менее я сам ее использую, тут я как сыроед, в кодинге, ну. Либа будет дальше там, ну, улучшаться, дополняться и т.д.

Лирическое отступление


Обычно у библиотек и языков программирования есть какой нибудь талисман, ну там хомяк, лисичка, еще что нибудь безобидное. И тут я вспомнил, что был один в истории человек, который прям как в бинарках обещал 100% в месяц. Многие его называли мошенником, однако он всю жизнь проходил в трениках, был далеко не дурак, хотя, судя по всему, верил в свои пирамиды. И вообще о народе думал. В общем, нестандартная личность. 

Ближе к телу


OpenBoApi - это C++ header-only библиотека для работы с API брокеров бинарных опционов. С помощью этой библиотеки выполняется правило трех сигм, тфу, то есть, трех 



( Читать дальше )

Блог им. elektroyar |"Мост" между MetaTrader и программой через socket

В жизни бывают такие моменты, когда очень хочется торговать из программы на С++, но по каким-то причинам у брокера нет API, зато есть MetaTrader. Конечно, можно просто писать код на MQL4/MQL5, на этом урезанном варианте-мутанте Си и С++, но мне как-то не в кайф это делать. Поэтому я решил сделать «мост» между MetaTrader и программой через socket. Встречайте — MT-Bridge
"Мост" между MetaTrader и программой через socket

На данный момент MT-Bridge позволяет только передавать поток котировок в программу с заданной частотой + добавлена инициализация исторических данных. Пока мне этого достаточно, но возможно в будущем функционал MT-Bridge будет расширен. Поэтому извиняйте, если здесь вы не нашли полноценного функционала, что есть то есть пока. Библиотека для подключения к советнику написана на С++11 и зависит от boost.asio, но нужны только файлы-заголовки. Вот github репозиторий с советником и библиотекой. Передача данных реализована через сокеты, советник является клинетом, а программа на С++ — сервером. Данные передаются через сокет в бинарном виде. 

( Читать дальше )

Блог им. elektroyar |Рисование графиков в С++

Однажды мне нужно было отрисовать пару графиков в консольной программе, написанной на С++. Можно было решить эту проблему двумя способами:
  1. Сохранить график в файле и нарисовать его в экселе или другой софтине, м.б. даже в онлайн рисовалке
  2. Рисовать график прямиком из программы
Первый способ мне не подходил, так как я проводил тестирование алгоритмов, и лишней возней с копированием данных заниматься не хотелось. Второй способ имеет множество решений, но увы я не нашел быстрого решения, чтобы библиотека для рисования не требовала целую кучу зависимостей. Обычно библиотеки для рисования из С++ программы хотят OpenCV или питон с матлабом. Еще как вариант я знаю SFML и ImGUI. Вопрос — нафига столько всего нужно для обычного графика, если по сути нужен OpenGL и все. Решил исправить эту проблему и набросал header-only С++ библиотеку, которая работает в отдельном потоке и способна рисовать графики зависимостей X от Y и тепловые карты. Из зависимостей библиотека требует FreeGLUT.

( Читать дальше )

Блог им. elektroyar |Библиотека С++ для загрузки экономических новостей

Есть один хороший сайт www.investing.com с экономическими новостями, которым пользуются многие трейдеры на Форексе. И решил я как-то раз попробовать посмотреть, что будет на бэктестинге торговли по новостям. Поковырявшись в страничке экономического календаря сделал в итоге С++ библиотеку для загрузки новостей. Для http запросов библиотека использует curl. Новости загружаются по UTC времени, загрузить их можно со времен начала эпохи UNIX

Класс для хранения одной новости:
/** \brief Класс Новостей
*/
class News
{
public:
	std::string name;          /**< Имя новости */
	std::string currency;      /**< Валюта новости */
	std::string country;       /**< Страна новости */
	int level_volatility = -1; /**< Уровень волатильности (-1 не инициализировано,  низкий уровень = 0, средний 1, высокий 2) */
	double previous;           /**< Предыдущее значение */
	double actual;             /**< Актуальное значение */
	double forecast;           /**< Предсказанное значение */
	bool is_previous = false;  /**< Наличие предыдущего значения */
	bool is_actual = false;    /**< Наличие актуального значения */
	bool is_forecast = false;  /**< Наличие предсказанного значения */
	uint64_t timestamp = 0;    /**< Метка времени новости */

	News() {};
};
Для хранения массива исторических данных новостей используется библиотека 

( Читать дальше )

Блог им. elektroyar |Работа с датой и временем в С++

В свое время для алготрейдерских задач мне нужно было много оперировать датой и временем. Конечно, в С++ и Си есть библиотеки для работы с датой и временем. Но мне захотелось сделать свой велосипед, который бы мог легко и удобно превращать строковое представление времени в метку времени, менять часовой пояс, получать время UTC компьютера, преобразовывать метку времени в стандартный формат даты и времени и обратно и т.д. и т.п. Одним словом, целый спектр задач.

В итоге я сделал библиотеку xtime (ну, громко сказано «библиотека», это всего лишь два файла .cpp и .hpp). Для хранения и преобразования меток времени используется тип данных uint64 либо double, поэтому у данной библиотеки нет проблемы 2038 года.

Используемые типы данных:
  • timestamp_t — тип длиной 64 бита для хранения метки времени.
  • ftimestamp_t - тип с плавающей точкой длиной 64 бита для хранения метки времени с дробной частью секунд.
  • oadate_t - тип с плавающей точкой длиной 64 бита для хранения даты автоматизации (OADate)


( Читать дальше )

Блог им. elektroyar |Универсальный индикатор для С++

Еще давно у меня возникла потребность получать сразу массивы значений различных индикаторов. Можно конечно создавать массив индикаторов, и затем прогонять котировки через него. Но я решил пойти другим путем и сделал индикатор «скользящее окно» или сокращенно MW, который может рассчитывать сразу массивы RSI, SMA, STD_DEV от тех значений, что содержатся в его буфере.

При этом при расчете массивов значений обычно используются предыдущие посчитанные данные, что ускоряет процесс расчета. 

Также я добавил возможность найти MIN, MAX, STD_DEV значения окна с заданным периодом и смещением внутри буфера индикатора. Это делает индикатор еще более универсальным. 

В дальнейшем планирую расширять функционал индикатора в рамках своей C++ header-only библиотеки технического анализа

Подписывайтесь на мой телеграм-канал бинарные опционы по научному, где периодически публикуются новые библиотеки и описывается ход запуска робота на «бинарках».

Блог им. elektroyar |Тестирование стратегий для бинарных опционов на истории. Библиотека для С++ и пример с "граалем".

В данной статье будет рассмотрен только технический аспект тестирования стратегий для бинарных опционов. Если вы считаете, что бинарные опционы не предсказуемы, или что брокеры «разводят» трейдеров, то данный пост будет не об этом и просьба не обращать на него внимания. Здесь будет рассмотрен только технический аспект для тех, кто хочет сам тестировать стратегии и проводить эксперименты на БО. Впрочем, используемый код можно адаптировать при желании и под форекс.

Итак, математика бинарных опционов не очень сложная. Тем не менее, проводить тесты будет гораздо  проще, если сделать отдельную библиотеку для тестирования и вообще подготовить «среду», где проводить свои изыскания. Не всегда же строить «велосипед» заново. К тому же, могут быть ситуации, когда ТС использует несколько экспираций опционов во время тестирования сразу, или может отличаться процент выплат и ставок. Поэтому есть смысл выделить «тестер» в виде отдельной библиотеки, несмотря на то что его задача по сути банально считать результат.

( Читать дальше )

....все тэги
UPDONW
Новый дизайн