Блог им. elektroyar |Продолжаем сливать бабосики на бинарках 2

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

Победоносный слив бабосиков

Начну в хронологическом порядке. Тут график из прошлой статьи и моя дорисовка по памяти, так как сейчас построить нормальный график уже не могу, данные утеряны. Получив где-то минус 20% к депо, я остановил реальную торговлю (хотя был готов и к -50%). Но все потом стало хорошо, правда я уже не торговал на тот момент.
Продолжаем сливать бабосики на бинарках 2

Непростые заказчики

Дальше было интересней. Чтобы не проедать деньги зря на период допиливания торговой системы, я начал фрилансить кодером в теме трейдинга бинарками. Как оказалось, в бинарках нужны кодеры, которые умеют в С++ и прочие языки высокого уровня, а не только костыльный MQL. Для интересующихся, поднимать 70-100к в месяц тут можно. Но я считаю что не нужно. Почему? Будет рассказано дальше, тогда поймете.



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

Блог им. elektroyar |Пошел сливать бабосики на бинарках

В общем, угрохав на исследования 2-3 года (не ну конечно за 2-3 года я еще успел сделать несколько безуспешных проектов инвесторов) я таки запустил наконец-то реальную торговлю сразу на двух брокерах бинарок.

Поковырявшись в 264 стратегиях я выяснил, что хорошо себя ведут стратегии, которые были изобретены еще 2 года назад. Ну то есть сильные закономерности существуют до сих пор и уверенно себя чувствуют. С тех пор конечно что-то было улучшено, но сами закономерности остались те же. Даже обидно, мог бы раньше запуститься.

В итоге решил убрать стратегии, которые работают сейчас не очень, и картина не сильно поменялась в плане прибыли. Зато повысилась стабильность и повысился винрейт.

Если торговать с коэффициентом ослабления критерия Келли 0.2 и процентами выплат 82% у одного брокера и 80% у другого, получается неплохой результат. Винрейт у сигналов разный, но в среднем он 59%. Вот результат теста с начала 2020 года по 26.05.2020. Т.е. этот период вообще никак не участвовал в настройке стратегий. 

Пошел сливать бабосики на бинарках



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

Блог им. 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 |Как дела обстоят в "лохотронах" во время начинающегося кризиса

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

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

Систему все еще тестирую, большие деньги не тороплюсь вкладывать. Решил использовать двух брокеров с выбором наилучшего условия. Писать названия брокеров не буду, чтоб не рекламировать. Для первого сделки на тесте и реале совпадают почти идеально, для второго брокера пока не проверял, но думаю, что задержка открытия сделки на 2-3 секунды погоду в целом не поменяет.

С начала 2020 года по 12.03.2020 имеем такой график эквити
Как дела обстоят в "лохотронах" во время начинающегося кризиса

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

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

Часто можно услышать, что на форексе, опционах и т.д. не заработать, так как это все равно что пытаться заработать на подкидывании монетки или в казино. В качестве аргумента часто говорят, что монетка может и 10 000 раз  подряд выпасть одной стороной, чем и объясняется «успех» некоторых трейдеров.
Почему нельзя заработать на трейдинге или в чем секрет успеха

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

Второй момент: в отличии от монетки, на реальном рынке любую продолжительную тенденцию заметят игроки и начнут ее использовать, что и приводит в итоге к "отсутствию продолжительных тенденций", рынок же эффективный. Если взять генератор случайных котировок, то он может выдать сколь угодно длинный тренд, на котором правда не получится заработать в долгосроке. На реальном рынке такое едва ли возможно, потому что любой рост будет использован трейдерами и они его убьют, если он конечно не обусловлен каким-то сильным влиянием из вне, как в случае золота. Грубо говоря, в реальности рынок это «монетка, чья многократно повторяющийся сторона становится легче». Но это не значит, что прогнозировать рынок легко или возможно. 

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

Блог им. elektroyar |Супер ускорение расчета индикаторов

Когда-то давно я занимался распознавание образов и использовал такую вещь как интегральное представление изображения. И на самом деле этот же метод применим и в алготрейдинге, например для быстрого расчета SMA, или сбора статистики винрейта за указанный период. 

Например, был ценовой ряд из 6-ти элементов:

1.104, 1.102, 1.105, 1.106, 1.103, 1.101 

Найдем его интегральное представление (начнем с нуля):

0.0, 1.104, 2.206, 3.311, 4.417, 5.52, 6.621

Чему будет равно SMA за последние 3 элемента? Достаточно посчитать разницу: 6.621 - 3.311 и разделить ее на 3.

SMA(3) = (6.621 - 3.311)/3 = 1.103

Убедимся, что SMA(3) найдено верно. 

(1.106 + 1.103 + 1.101)/3 = 1.103

Таким образом можно найти SMA с любым периодом, совершив всего навсего одну операцию вычитания и одну операцию деления. Это позволит гораздо быстрее получить набор значений индикаторов типа SMA, RSI, STD_DEV.
Вроде все хорошо, НО НАДО ПОМНИТЬ, что если использовать тип данных с плавающей точкой, то у нас будет накапливаться ошибка. Поэтому ценовой ряд лучше сначала преобразовать в целочисленный тип. Для этого достаточно для 5-ти значных котировок умножить цену на число 100 000.

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




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

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

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

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

Блог им. elektroyar |Бизнес в России VS "лохотроны"

Достаточно многочисленное население (в основном это люди старого возраста) считают лохотроном не только МММ, бинарки, форекс, крипту, но и инвестиции в акции и облигации. При этом к бизнесу они относятся более лояльно, возможно потому что бизнес — это понятно. Купил что-нибудь из Китая подешевле, потом продал подороже — все понятно и просто, и товар можно потрогать руками. Ну или можно производить свой товар — опять же, все честно и понятно (есть товар — есть деньги, он же должен что-то стоить).

Но на практике все не так однозначно, и порой даже в казино шансы отбить деньги могут быть выше, чем отбить деньги вложенные в бизнес.

Потапенко в одном из видео рассказывает: "За 9 месяцев 2019 года зарегистрировано 227 юридических лиц и ликвидировано 529. Убыль — прямая. В обрабатывающей промышленности 15 плюс 33 минус, строительство 42 плюс 74 минус, торговля 75 плюс и 230 минус..."



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

Блог им. elektroyar |Про программирование в алготрейдинге и полезные навыки

По моему опыту в алготрейдинге (под алготрейдингом я подразумеваю поиск закономерностей и их использование) большая часть времени уходит на исследования, это примерно 90% времени. Однако, часто можно услышать критику примерно следующего плана.
  • Нужно писать код на питоне/джаве, можно в два счета набросать торгового робота. Нафиг Си и С++, сложна.
  • Не нужно изобретать велосипеды, все уже сделано за нас. Зря потратить время, бери готовое и действуй. Метатрейдер в помощь.
  • Нужно всегда писать чистый код, а не говнокод. 
Если все это верно, то получается, что успех в алготрейдинге (да и в IT) должен зависеть от этих факторов. Однако, к примеру, на практике большая часть доли в проекте принадлежит обычно не программистам (т.е. людям, которые вообще могут не уметь программировать), хороший код не обязательно принесет много денег, да и сложные алгоритмы порой без разницы, на каком языке реализовывать, быстрее они не напишутся.

Если объяснить проще, то успех не равен чистоте, хорошести и прочим характеристикам кода. Тогда почему происходит акцентуация на подобные факторы? 

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

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

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

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

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