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

Хорошо бы иметь возможность наглядно показать свою проблему брокеру, коллегам на форумах, в отзывах к рейтингам брокеров, инвесторам и т.д.
Ничего удивительного, когда MT5-версия советника проверяется на реальных тиках в MT5-тестере, но отчет выкладывается из MT4, где котировки совсем другие. Въехать в стиль торговли советника возможно только по MT4-statement.

Предлагаю использовать скрипт TesterReport, который создает html-отчет для одиночного прогона MT5-тестера.
Для MetaTrader 5 написана торговая библиотека MT4Orders.
Начиналось так.
// Список изменений: // 03.08.2016: // Релиз - писался и проверялся только на оффлайн-тестере.
Сегодня библиотеке ровно пять лет. Продолжает развиваться. Перечислим ее достижения.
В подарок начинающим, а также продолжающим астрологам.
Показываю на графике биткойна точность попадания прогнозов.

Очень простая, многопоточная серверная и клиентская библиотека 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;
}