elektroyar

Читают

User-icon
30

Записи

29

Ошибки в MQL5

Как-то раз решил перенести свой советник с МТ4 на МТ5. И все было по началу хорошо, пока не обнаружил странное поведение в коде. При помощи записи состояния всех переменных стратегий в лог я выяснил, что некоторые условия срабатывали тогда, когда не надо. И наоборот, некоторые условия не срабатывали.

Самый простой пример:

double a = 5;
double b = 10;

if (a > b) {

}

В любом языке программирования такое условие не выполнится. Но в MQL5 подобные условия иногда выполняются. И от чего это зависит — не понятно.

Тогда мне помогло лишь одно: я переехал с терминала МТ5 от брокера Альпари (он не хотел обновляться до свежей версии) на оригинальный МТ5 последней (на тот момент) версии. И это помогло, подобные баги исчезли. Менять что либо в коде было бесполезно.

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

Опустим такую деталь, что в очень удобном МТ5 нет специальной переменной в запросе, чтобы можно было однозначно судить о том, ответ на какой именно запрос открыть позицию пришел от сервера.



( Читать дальше )
  • обсудить на форуме:
  • MQL5

Как я предлагал другу инвестировать

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

И вот одна тема у меня хоть и выросла за год в 7.18 раз, а это где-то 22680$ чистыми, но мне было этого мало, особенно когда другие, но более опасные темы из-за риска блокировки счета, приносят куда больше.

И решил я тогда предложить одному другу, который работает в IT, инвестировать в себя, в  первую тему, чтобы быстрее нарастить депозит под 150-200к$.

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

Не, мне не интересно

Сама тема вот этого вот
На столько, что я даже не хочу быть с ней никак связан
Даже если это приносит доход
Я избавляю себя от всего, что мне не нравится

Мы поднимали миллионы за ночь просто продавая чек лист
Сорян, но даже как финансовое предложение для меня мелковато
Плюс я люблю пускать деньги только на траты

Я прогер в нашей команде
Я ботов пишу
Для рассылки там

И такое вот бывает. Не только в трейдинге можно поднимать


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

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

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

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

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


Описание


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

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


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

Kurlyk - еще одна С++ обертка для curl

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

И придумал тогда я библиотеку Kurlyk.
Kurlyk - еще одна С++ обертка для curl

Описание

Братишка, я тебе покушать принёс


Фраза из артхаусного фильма “Зелёный слоник”

Что такое kurlyk? Да это же еще одна библиотека для более простой работы с curl! Если вас по тем или иным причинам не устроили библиотеки easyhttp-cpp, curl_request, curlpp-async, curlwrapper, curl-Easy-cpp, curlpp11, easycurl, curl-cpp-wrapper... То может быть, стоит попробовать эту?

Использование

Чтобы сделать запрос, достаточно создать объект класса kurlyk::Client и настроить все необходимое в 



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

Как продаваны сами себя обломали

Бытует мнение, что продажи рабочих роботов убивают закономерности или ломают схему заработка, если она основана не на закономерностях. И сегодня я расскажу вам одну эпичную историю, которая произошла совсем недавно.

Я сам торговал у одного брокера бинарных опционов, и неплохо зарабатывал. Но мои доходы были хоть и выше средних доходов по России в несколько раз, тем не менее, они были лишь мелочью по сравнению с доходами других трейдеров, у которых только на одном аккаунте могло быть 1000-5000$ против моих 70-80$. И множили они депозит не за 2-3 дня, как я, а за час, в худшем случае несколько часов. В общем обували брокера как могли.

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

В итоге брокер прикрыл лавочку. Теперь после регистрации нового аккаунта он начал ставить лимит сразу в течении нескольких минут, даже если на аккаунте ты сделал 0 сделок. Раньше он ставил лимит после х3-х6, в зависимости от скорости роста депозита.

Лимит не позволяет торговать, ведь его размер это 2-3$ суточного оборота. Лишь один трейдер, по рассказу знакомого, занимается таким извращением, что заводит 1000$ и делает одну ставку, а потом выводит. Всего лишь одну ставку.



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

Зашифрованный и сжатый JSON с комментариями в качестве файла конфигурации

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

Для файлов конфигурации я уже давно использую файлы с JSON. Очень удобная вещь. Осталось лишь добавить поддержку комментариев и зашифровать текст при помощи алгоритма AES. А для большей красоты еще и сжать текст перед шифровкой алгоритмом brotli.

Сказано — сделано. Встречайте — crypto-jsonпроект на гитхабе. Репозиторий содержит готовый редактор JSON с комментариями, который может также сохранить текст в зашифрованном виде. Настройки сжатия и шифрования можно задать перед сохранением файла и во время открытия. Также редактор позволяет сделать проверку JSON и может подсвечивать проблемные места.



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

Продолжаем сливать бабосики на бинарках 2

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

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

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

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

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



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

Расчет HMAC в С++

Расчет HMAC в С++


Всем привет! Продолжаем курс велосипедостроения. И на этот раз зачем-то решил  сделать простенький алгоритм расчета HMAC для SHA256 и SHA512. А то иногда бывает нужно подключить какую нибудь криптобиржу, а там нужен этот самый HMAC. Вот ссылка на репозиторий самой либы.

Для расчета HMAC надо вызвать функцию get_hmac, которая имеет несколько параметров:

std::string get_hmac(
	std::string key, 
	const std::string &msg, 
	const TypeHash type, 
	const bool is_hex = true, 
	const bool is_upper = false);
  • key — Строка, содержащая секретный ключ.
  • msg — Строка, содержащая сообщение.
  • type — Тип хеш-функции. Указать hmac::TypeHash::SHA256 или hmac::TypeHash::SHA512.
  • is_hex — Флаг, который отвечает за формат ответа. Чтобы получить строку, содержащую HMAC в шестнадцетиричном формате, данный параметр должен быть указан как true. Иначе строка будет содержать числовое значение HMAC по 8 бит в каждом элеименте строки. По умолчанию данный параметр true.
  • is_upper — Флаг, который отвечает за регистр символов ответа (нижний или верхний). Данный флаг влияет на ответ функции только если установлен флаг is_hex. По умолчанию данный параметр false.
Простой пример кода для расчета HMAC SHA256 и SHA512:

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

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

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

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

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

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

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



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

С++ Библиотека для сервера и клиента 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

....все тэги



UPDONW
Новый дизайн