Как-то раз решил перенести свой советник с МТ4 на МТ5. И все было по началу хорошо, пока не обнаружил странное поведение в коде. При помощи записи состояния всех переменных стратегий в лог я выяснил, что некоторые условия срабатывали тогда, когда не надо. И наоборот, некоторые условия не срабатывали.
Самый простой пример:
double a = 5; double b = 10; if (a > b) { }
В любом языке программирования такое условие не выполнится. Но в MQL5 подобные условия иногда выполняются. И от чего это зависит — не понятно.
Тогда мне помогло лишь одно: я переехал с терминала МТ5 от брокера Альпари (он не хотел обновляться до свежей версии) на оригинальный МТ5 последней (на тот момент) версии. И это помогло, подобные баги исчезли. Менять что либо в коде было бесполезно.
И вот недавно я решился сделать заказ для знакомого. По началу все шло хорошо, но вот захотелось добавить асинхронное открытие и закрытие сделок. Казалось бы, что может быть проще?
Опустим такую деталь, что в очень удобном МТ5 нет специальной переменной в запросе, чтобы можно было однозначно судить о том, ответ на какой именно запрос открыть позицию пришел от сервера.
Перед прочтением этой статьи — ВАЖНО следующее: основная цель данной статьи заключается в том, чтобы показать как просто можно создать торгового робота, который может торговать российскими акциями или зарубежными акциями. Важно понимать, что создавая бота, вы лично несете ответственность за принимаемые им решения, инвестиционные операции и связанные с ними риски. Я не несу ответственности за решения, которые вы можете принять после прочтения этого материала. И я не даю никаких инвестиционных рекомендаций или советов. Не забывайте, что боты способны принести большие убытки, поэтому используйте их с осторожностью.
Программирование для меня это хобби и любимое дело. А так я сертифицированный системный архитектор. Поэтому прошу не особо ругать за код:‑)
Выбор брокера и библиотекКак вы знаете, брокеров много))) но нам нужны те, у которых есть API — программный интерфейс через который наш торговый робот сможет отправлять заявки на покупку и продажу акций.
Инструменты для анализа и защиты смарт-контрактов в блокчейне.
Привет, друзья! Хотим с вами поделиться теми улучшениями, которые мы добавили в терминал. Они помогут вам получить еще больше преимуществ на рынке вместе с Go Invest.
Вот что мы поменяли и добавили в терминале
Новая визуализация торгового стакана:
сжаты ценовые уровни
появилась цветовая дифференциация уровней Bid\Offer
добавлена совокупная гистограмма спроса\предложения
появилось контекстное меню для работы с правой кнопкой мыши
добавлена возможность поменять тип заявок LMT и STP на трейлинговые версии
Доработана таблица “Позиции” — добавлены фильтры по типам активов и информационная строка, в которой суммируется информация по выбранным счетам в части стоимости, НПУ за день и НПУ за все время.
Если вы не только что стали моим подписчиком, то наверняка в курсе, что я полностью перешел на Linux и даже написал пост о моем опыте: Месяц на ALT Linux на рабочей машине...
Но сейчас хотел поделиться кое-чем полезным, а заодно останется это в ленте, потому что когда ты редко пользуешься чем-то, то забываешь, и нужно снова вспоминать. Поэтому данный пост также послужит лично мне напоминалкой.
Сейчас люди настолько привыкли к графическим оболочкам (линуксоиды их называют ГУИ, GUI — Graphical user interface), что мало кто представляет себе возможность что-то делать на компьютере с помощью командной строки. А между тем, командная строка очень мощный и в определенных случаях очень полезный инструмент. В Linux его довели до совершенства. Конечно, большинству людей она не понадобится, но при этом она остается очень полезной сисадминам и программистам.
Мои программы написаны на python и их очень удобно запускать прямо из командной строки. Достаточно написать:
python3 my_python_script.py
20220915,090000,61420,61497,61406,61464,241
20220915,090100,61460,61476,61420,61451,160
20220915,090200,61444,61489,61436,61479,185
Осмелюсь предположить, что эти строки ты заливаешь в массив с помощью string.match. Это готовый парсер строки с разделителем. Работает достаточно шустро. Я на нем сидел пару лет.
Когда данных не много, такой метод загрузки не напрягает. Но когда за день 20-30 раз загружаешь сотни тысяч или миллион строк, то потери времени становятся невыносимыми.
Стал искать способ ускорить этот процесс. И он таки нашелся. Выяснил следующее:
Если строки в файле истории сконвертировать в такой вид (делается 1 раз):
table.insert(MyTable,{«20220915»,«090000»,61420,61497,61406,61464,241})
table.insert(MyTable,{«20220915»,«090100»,61460,61476,61420,61451,160})
table.insert(MyTable,{«20220915»,«090200»,61444,61489,61436,61479,185})