Блог им. 3Qu |Теперь я владею стратегией Hamster (наименование условное)

    • 29 мая 2020, 22:28
    • |
    • 3Qu
  • Еще
Все совпадения с реальными именами и событиями случайны.
На днях написал топик — Модель идеального трейдера — Hamster. И вот оно, ушел в магазин, и 20 Кг сахара  стратегия. Она давно вынашивалась, тестировалась, и пора ее выводить на реал. Для того и писался индикатор, показанный в предыдущем топике.
Не все так просто, конечно, как показано на картинке, детали опущены, но стратегия — вот она:
Теперь я владею стратегией Hamster (наименование условное)
Картинка, кстати, никак не подбиралась, просто последняя (сегодняшний день), на первом попавшемся инструменте.
А че, хорошее название для стратегии. Главное, редкое.

Блог им. 3Qu |Экспорт данных Quik -> DDE -> Ваша программа.

    • 26 мая 2020, 13:56
    • |
    • 3Qu
  • Еще

После написания топика «Quik, DDE, Excel» [1], где была поставлена задача вывода данных доски опционов не непосредственно в Excel, что является очень неудобным для конкретных приложений, а в свой DDE-сервер. Свой DDE-Сервер обладает тем преимуществом, что данные из него можно направлять куда угодно, и как угодно.

С тех пор прошло 3 дня. Черновая болванка программы уже написана, отлажена, работает, и выполняет все возложенные на нее задачи. Как я опрометчиво обещал, проект DDE-Сервера будет предоставлен всем желающим [2](см. список ссылок). Проект выполнен на C++ в среде VS2017. DDE-Сервер на данном этапе выполнен в виде консольного приложения, и все что он делает, это выводит получаемые из Quik по DDE данные на консоль. В принципе, он должен работать с любой таблицей Quik, но делался под вывод доски опционов.

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



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

Блог им. 3Qu |Моделирование Торговых Систем на Python. 2.

    • 12 мая 2020, 10:29
    • |
    • 3Qu
  • Еще

Тем, кто не читал предыдущий топик этой темы, рекомендую для начала ознакомиться с ним [1].

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

Ну, а сейчас мы займемся разработкой и тестированием индикаторов. Для начала нам нужна простейшая стратегия с использованием МА — его и построим. Самой лучшей по характеристикам МА является ЕМА. Формула ЕМА:



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

Блог им. 3Qu |Моделирование Торговых Систем на Python. 1.

    • 09 мая 2020, 19:31
    • |
    • 3Qu
  • Еще

Для моделирование ТС на Python, прежде всего нужен сам Python. Pythonы бывают очень разные.

Самый большой и длинный Python — Anaconda (https://anaconda.org/). Скачать дистрибутив Anaconda можно здесь — Индивидуальное издание -https://www.anaconda.com/products/individual.
Я работаю именно с Anaconda. Установив Anaconda мы получаем сам Python, уже установленные значительную часть нужных и ненужных пакетов с библиотеками Python, и несколько сред разработки. И все это сразу готово к работе, и нам, по большей части, уже не придется дополнительно устанавливать пакеты и среды.

Самый маленький Python последней версии 3.8.2. скачивается с сайта самого Python — https://www.python.org/. Это, практически, только сам язык, компилятор и минимальный набор пакетов. Сделать с ним практически ничего невозможно, и для работы придется постоянно устанавливать нужные пакеты. Среду разработки придется также устанавливать самостоятельно.
Этот Python больше подходит для запуска и работы с уже отлаженными законченными программами.



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

Блог им. 3Qu |Имеет ли смысл писать о моделировании ТС на Python?

    • 08 мая 2020, 21:01
    • |
    • 3Qu
  • Еще

Имеет ли смысл писать о моделировании ТС на Python?

Имеет смысл
Не интересно
Всего проголосовало: 213
Стоит ли посвятить несколько топиков моделированию стратегий на Python? Не о программировании на Python — это в книгах можно прочесть, а именно о методах моделирования и тестирования стратегий.
Можно начать, скажем с двух ЕМА. Стратегия изначально дохлая, но может послужить шаблоном для разработки ваших собственных стратегий. Для этого потребуется несколько топиков. Если интереса не будет, то и заморачиваться не имеет смысла. Может вы и сами с усами.)

Блог им. 3Qu |Алготрейдинг, Quik и Visual Studio 2017.

    • 24 марта 2020, 14:04
    • |
    • 3Qu
  • Еще
Делаю новую алгоритмическую торговую систему (АТС) под Quik. Базовой в системе является достаточно сложная многопоточная C++ DLL, связывающаяся с Quik через Lua. Для разработки с самого начала использовалась VS 2015. Т.к. в настоящее время перешел на х64 Quik занялся перекомпиляций всего своего х86 софта под Quik на платформу х64.
Все бы ничего, но при больших рыночных потоках данных Quik начинал подтормаживать, а при подключении DDL, Quik подтормаживал еще сильнее и через некоторое время падал вместе с DLL. Переход на х64 существенно улучшил ситуацию, Однако эпизодические падения, значительно реже, но продолжались.
Надо сказать, что все эти многопоточности и были ранее введены в DLL для снижения нагрузки на Quik, чтобы не грузить поток событий терминала. Вся обработка событий заключалась лишь в том, чтобы преобразовать данные получаемые из Lua и отдать их соответствующему потоку для дальнейшей обработки.
В общем, о стабильной АТС приходилось только мечтать, и думать что дальше с этим делать.
У меня на компе давно без дела пылилась Visual Studio 2017. Требований к железу она предъявляет больше чем VS 2015, и я ее использовал считанные разы, скорее, чтобы посмотреть что в ней нового и отличия от VS 2015. Существенных отличий не заметил, и продолжал работать на старой VS 2015.

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

Блог им. 3Qu |Переход на 64-бит Quik. Пляски с DLL. 2.

    • 22 марта 2020, 18:00
    • |
    • 3Qu
  • Еще

Не далее как вчера опубликовал топик "Смена x86 Quik 7.27.2.1 на x64 Quik 8.4.1.6. Пляски вокруг DLL", где кратко рассказывалось как перекомпилировать проект С++ с платформы х86 на х64. Надеюсь, что у вас все уже получилось или получится.
Но я «крутой» программист, и, естественно, у меня вначале вообще ничего и никак не получалось. А так как проект большой, да еще и непонятно в чем дело, а своими экспериментами я могу вообще все испортить, то решил сделать маленькую простенькую DLL LuaProba.dll, на ней отработать переход на х64, и потом перенести это в большой проект.
Привожу код С++ DLL целиком:

// LuaProba.cpp: определяет экспортированные функции для приложения DLL.
//

#include "stdafx.h"
#include <stdio.h>
#include <string.h>

//=== Необходимые для Lua константы ============================================================================//
#define LUA_LIB
#define LUA_BUILD_AS_DLL

//=== Заголовочные файлы LUA ===================================================================================//
extern "C" {
#include "Lua\lua.h"
#include "Lua/lauxlib.h"
}

static int forLua_TestFunc(lua_State *L) // Возвращает заданный текст
{
        const char *cc = "Привет из C/C++ и от меня 2 раза"; //str.c_str();
        lua_pushstring(L, cc);
        return(1);
}

//= == Регистрация реализованных в dll функций, чтобы они стали "видимы" для Lua == == == == == == == == == == == == == == == ==//
static struct luaL_reg ls_lib[] =
{
        { "TestFunc", forLua_TestFunc },
        { NULL, NULL }
};

//=== Регистрация названия библиотеки, видимого в скрипте Lua ==================================================//
extern "C" LUALIB_API int luaopen_LuaProba(lua_State *L)
{
        luaL_openlib(L, "LuaProba", ls_lib, 0);
        return 0;
}
Весь проект DLL для VS 2015 можно скачать по ссылке - 

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

Блог им. 3Qu |И опять про монетку.

    • 22 января 2020, 02:21
    • |
    • 3Qu
  • Еще
Сижу, изучаю рыночные временные ряды. Уперся вот во что:
Излагаю в очень упрощенном виде.
Имеются 3 монетки — одна честная и две нечестных, с симметричным перекосом, одна в сторону орла, другая в сторону решки. Без разницы, но пусть вероятности будут 0.75 и 0.25.
В основном бросается честная монетка, но время от времени она подменяется одной из нечестных. Выбор одной из нечестных с вероятностью 0.5.
Таким образом, в любой серии вероятность выпадения орла/решки не изменится и останется 0.5.
Вопрос к читателям — возможно ли в каком либо наблюдении или серии наблюдений установить сам факт использования нечестных монеток? И каким образом?
А если бросать только нечестные и выбирать между ними с вероятностью 0.5. Можно это обнаружить? Сам факт, что с монеткой что-то не так?
Что-то мне сдается, что способов нет.
 
PS Когда уже опубликовал пост понял, что решения у этой задачи нет. Распознать подмену монеток невозможно никаким способом. Это свойство широко используется в технике связи. Процесс называется скремблированием. При этом любая произвольная последовательность двоичных символов превращается в последовательность нулей-единиц с вероятностью 0.5.

Блог им. 3Qu |Коммуникации Quik Lua с внешним миром.

    • 14 декабря 2019, 20:42
    • |
    • 3Qu
  • Еще

Мне нравится Lua. Lua хороший компактный язык на котором можно сделать индикаторы, различные вспомогательные программы, помогающие трейдеру и даже несложные торговые системы (ТС, роботы). Пожалуй единственная книга по Lua — Роберту Иерузалимски: Программирование на языке Lua. Ее можно найти в интернете.

Lua имеет также несложный C-API позволяющий связать программы Quik Lua с внешним миром через DLL и получить доступ практически ко всему, в том числе к любым математическим библиотекам обработки данных, что необходимо для сколь-нибудь сложным ТС. Однако, для этого уже необходимо знание не только Lua, но и Lua C-API, языка С/С++, а также умения писать DLL. При этом надо будет решить еще ряд проблем, которые возникнут по ходу пьесы в процессе этой деятельности. Далеко не каждый пользователь Quik и Lua может все это реализовать в обозримое время.
У Quik Lua (QLua) есть еще недостатки — все события терминала в Lua работают в потоке терминала, и получив из них данные надо как можно быстрей завершать функции обработки этих данных и освобождать поток терминала, иначе терминал просто повиснет. Единственная функция QLua работающая в собственном потоке — это main() и вся сколь-нибудь сложная обработка может находиться только в ней.
Кроме того, для Lua крайне мало библиотек, а существующие работают оч не быстро. В принципе, это и не нужно, если можно организовать связь с внешним миром через C-API. Но нам от этого легче не становится.) Короче, для написания хорошей сложной ТС нам надо выйти за пределы QLua и установить связь с внешним миром, и сделать это доступными средствами.
Сейчас наиболее продвинутым языком, включающим в себя массу библиотек обработки данных является Python. По применимости для обработки данных он, пожалуй, занимает первое место в мире, а по распространенности входит в первую пятерку. В числе библиотек — математические, статистические, машинного обучения и пр., и пр. Таких библиотек более тысячи только в Anaconda, большинство из которых устанавливается при ее инсталяции. Вы можете не использовать Anaconda и скачать Python с сайта



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

Блог им. 3Qu |Применение Машинного Обучения в Торговых Стратегиях

    • 13 декабря 2019, 19:20
    • |
    • 3Qu
  • Еще
В прошлом посте  Мода на Машинное Обучение мы выяснили, что Машинное Обучение (МО) может решить только конкретные задачи, т.к. единственное чем занимается, так это подбором решения под заранее известные ответы, но делает это оч качественно. Посмотрим, где в ТС можно найти такие задачи.
Пусть у нас возникла идея замечательной ТС. Мы накидали на график всяческих индикаторов, ну, и прям видно — вот оно, счастье. Начали долго и муторно писать логику входов в сделку и пр. Параметры индикаторов и их сочетания неизвестны, логику еще продумывать надо, количество if зашкаливать начинает — эт только на глаз все хорошо и просто.
Подождите, так нам нужно найти всего лишь некоторый набор математических выражений для описания нашей стратегии, а это как раз задача для МО, и, по идее, МО должно с такой задачей хорошо справиться.
Итак, берем нашу стратегию, пишем несложную логику в общих чертах описывающую нашу стратегию — получаем как-бы упрощенный вариант стратегии. С помощью этой логики (упрощенной стратегии) выделяем интервалы обучения и генерируем обучающие последовательности. Подготавливаем данные — приводим все это к виду понятному МО. Обучаем на этих данных МО, проверяем на независимых данных — получаем готовую стратегию. Естественно, упрощенную логику (стратегию) оставляем как часть стратегии, ограничивающую область применения МО.
Собственно, сэкономили на написании логики стратегии.
Ну, а будет работать такая стратегия или нет — это уже зависит не от МО, а от идеи самой стратегии. Естественно, предполагаем, что как готовить данные, обучать-проверять — это мы хорошо знаем и все правильно делаем.

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