Избранное трейдера MrD

по

Подстройка параметров ТС в процессе торговли

Доброй ночи, коллеги!

Сам то я вроде противник curve fitting.
С другой стороны, все, что делает алготрейдер в процессе поиска Грааля — есть чистый curve fitting (IMHO).

Спешу поделиться собственным успехом.
Уже 3 года как практикую подстройку ТС по предыдущим итогам ее работы.

Подробнее:

1. Гуры СЛ ищут идеальную ТС методом WFT (это к 100 грамм золота — сам я этот метод называю WTF))) ). В действительности все такие шевеления имеют единственной целью поиск стационарного индикатора, который кроет все остальные, как тузик — грелку.
2. Мои скромные вычисления способны убедительно показать, что Грааля идеального стационарного индикатора не существует.

Что остается нам, простым алготрейдерам?

Регулярно подстраивать параметры ТС (IMHO).

Теперь докладываю, коллеги — в этом вопросе я преуспел )))

Мои алго, так же, как в WFT, анализируют прошедший интервал, и оптимизируют параметры торгового алго по его итогам. Ну, т.е. меняют их.
На выходе я имею более стабильную систему, нежели стационарный индикатор, прошедший тест WFT (а такие есть?).

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

Qlua: пишем скринер акций Московской биржи

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

Нам понадобятся:

1. Таблица для вывода данных (строить уже умеем).

2. Получение данных из таблицы текущих торгов через getParamEx (проходили там же).

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

Через sec_list = getClassSecurities(«TQBR») можно получить строку с тикерами акций на Московской бирже, которые будут разделены запятыми. Чтобы пройтись по всем элементам и записать их в массив используем цикл:

for TIKER in string.gmatch(sec_list, "[^,]+") do
  tikers[#tikers + 1]=TIKER
end


Отслеживать будем параметр LASTCHANGE – процент изменения цены от цены закрытия:



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

Вопрос к алготрейдерам про оптимизацию эквити

Доброй ночи, коллеги!

Все из нас так или иначе пытаются оптимизировать эквити.

Наиболее модными способами являются:

1. Максимизация результата (значение эквити в конце интервала)
2. Максимизация результата по отношению к просадке

Кстати, в последнем вопросе бытуют разные точки зрения.
К примеру, покойный Марковиц в своей революционной работе максимизировал МО-СКО (отсюда и определенная корявость его формул).
Лично я считаю, что оптимально максимизировать МО/СКО, но это моя личная точка зрения (IMHO).

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

Так, ваш покорный слуга уже 4+ года разрабатывает и использует в торговле ТС для торговли лимитными ордерами. Лимитная эквити — это очень сложная штука (формула для эквити не только зависит от всего предыдущего массива цен HLC, но еще и нелинейно зависит от индикатора), но она еще и очень чувствительна к количеству совершаемых сделок.

Если не вдаваться в детали, то вкратце — из 2-х ТС при одинаковой доходности на обычном маркетном исполнении при лимитном исполнении будет более доходна та, которая совершает меньшее количество сделок. Т.е. та, которая имеет максимальный показатель прибыль/сделка.

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

Qlua: завершаем апгрейд советника.

Сегодня дополним наш алгоритм советника следующими пунктами:

1. Пропуск «поздних» сигналов на старте.
2. Обработка советником обрыва связи.
3. Сохранение сигналов и логов в файл.


Еще один пункт, связанный со временем, который был выбран для апгрейда советника – это пропуск сигналов на старте, если запуск скрипта состоялся не в начале торговой сессии (например любой старт после 10:30). Это может быть полезным, если выбрана активная внутридневная стратегия и сигналы полученные на старте скрипта, например в середине дня, могут быть уже не актуальными (с низким потенциалом прибыли) и лучше дождаться новых. Т.е. необходимо разделить сигналы на те, которые сгенерировались на старте и остальные сигналы, которые будем далее брать в работу. Сигнал на старте может закрыться (по обратному/сигналу выхода) и если переоткроется снова, то его уже можно брать в работу как новый.

В нашем скрипте сигналы по каждому инструменту (массив signal) ранее могли принимать значение:

0 – вне позиции по инструменту



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

Вопрос к А.Г. по нелинейным индикаторам

Добрый вечер, коллеги!

Как можно понять из моего блога, я люблю изучать разнообразные линейные и нелинейные индикаторы, равно как связанные с ними ТС.
Линейный индикатор — это линейная функция приращений цен. Если она положительна — покупаем, если нет — продаем.
С полиномиальными (квадратичными, кубическими etc.) индикаторами все устроено ровно так же.

К примеру — моментум, пересечение МА с ценой, пересечение двух и более МА — это все линейные индикаторы.
Пересечение курсом полос Боллинджера — это квадратичный индикатор.

Индикаторы можно комбинировать.
Например, трендовый индикатор (МАшки?), совмещенный с полосами Боллинджера, это кубический полином от приращений цен.

Теперь вопрос к уважаемому А. Г.

1. С одной стороны, А. Г., ссылаясь на ЦПТ (центральную предельную теорему), принимает за разумную модель процесс с нормальными приращениями цен (возможно зависимыми) и нестационарными МО и дисперсией.

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

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

Определение тренда - опыт дискуссии с уважаемым 3Qu

Добрый вечер, коллеги!

Дискуссия навеяна smart-lab.ru/blog/923792.php#comment15897236

Уверен, на СЛ 99.9% резидентов (кроме меня, а нас всего около 1000 ))) ) знают, что такое тренд.

Но, обычно, либо приводят классическое определение Доу (нестрогое), либо объясняют на пальцах, либо дают расплывчатые определения.

Для работы же и формализации определение должно (желательно) быть четким.

В математике для этого присутствуют 2 метода — аналитический и синтетический.

Аналитический — это явное вычислительное определение.
Вариант — тренд — это угол наклона линиии регрессии (больше 0 — тренд, меньше 0 — контртренд, 0 — боковик).

Плюс — все четко и понятно.
Минус — большинство боковиков будет классифицировано как тренд.

Синтетический — желаемый набор аксиом (свойств).
Вариант — аксиома T3: если на каждом из двух пересекающихся интервалов тренд растущий, то на совокупном объединенном интервале он также растущий. Ну или если на двух интервалах растущий, а на их пересечении растущий/боковик/падающий (нужное подчеркнуть), то на объединенном интервале растущий.

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

Пара строк в гроб теоретико-вероятностному подходу к рынкам

Доброй ночи, коллеги!

Я не перестаю удивляться количеству людей, которые пытаются лечить свои фрустрации от рыночных лоссов путем изучения учебников по ТВиМС. Ну т.е. я ни разу не против любой научной и околонаучной деятельности (успешно тренирует мозг), но всячески не рекомендую рассчитывать на будущие профиты на основании вновь приобретенных знаний.

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

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

Пусть x(i) — это цены
Пусть d(i) = x(i) — x(i-1) — это приращения цен

Составим 2 выражения (формульный синтаксис взял из Excel — чтобы было меньше вопросов)

1. сумм(d(n)*(ЗНАК(d(n-1))+ЗНАК(d(n-2)))*abs(d(n-1)))
2. сумм(d(n)*(ЗНАК(d(n-1))+ЗНАК(d(n-2)))*abs(d(n-2)))

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

Qlua: получение данных из таблицы текущих торгов, создание таблиц в торговом терминале.

Сегодня рассмотрим:

1. Получение биржевых данных через функцию getParamEx
2. Выгрузка списка параметров функции getParamEx через DDE из торгового терминала
3. Создание пользовательских таблиц в торговом терминале


Одна из особенностей работы через квик это то, что можно получать достаточно большой объем биржевой информации по интересуемым инструментам. Большинство других платформ для алгоритмической торговли и терминалов в РФ будут выдавать только цену открытия, максимум/минимум дня, последнюю цену, цену закрытия, объемы по инструментам и максимум еще 3-5 каких-то дополнительных пунктов. В распоряжении тех, кто использует qlua огромная матрица параметров таблицы текущих торгов.


Получить их можно через функцию getParamEx:

getParamEx(код класса актива, инструмент, параметр), где:

код класса: например в случае акций это «TQBR», а в случае срочного рынка «SPBFUT».
инструмент: тикер.
параметр – один из параметров для соответствующей группы инструментом (об этом подробнее ниже).


Функция возвращает таблицу со следующими полями:



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

Получение тикеров торгуемых бумаг через getClassSecurities

Благодаря наводке @quant_trader (за что отдельное спасибо!), переписал свой первый скрипт из поста https://smart-lab.ru/blog/916765.php по выгрузке из терминала всех торгуемых бумаг. Теперь всё выполняется штатными средствами с помощью getClassSecurities.

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

Особенности запроса. Если ввести:

sec_list = getClassSecurities("TQBR")<br />message(sec_list)

то терминал выдаст строку, где через запятую будут все тикеры, при этом видим, что список не полон, обрывается на RTSB:

Получение тикеров торгуемых бумаг через getClassSecurities

Как выяснилось, это связано только с ограничением самого терминала на вывод строки (не более 899 символов).

При этом если посмотреть длину строки, то будет видно, что символов больше:

sec_list = getClassSecurities("TQBR")
message(tostring(string.len(sec_list)))

выдаст 1281

Разбив строку по запятым получим весь массив тикеров для дальнейшей работы:



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

Доходность к получению

Напомним основные различия между YTM и HPR. 

YTM (yield to maturity)  — доходность к погашению, номинальная или эффективная, в зависимости от контекста. Это ставка дисконтирования, при которой приведенная стоимость потока платежей по облигации равна ее рыночной цене. Методики расчета YTM есть на сайте Мосбиржи. В Quik и брокерских приложениях указывается эффективная доходность. Ее можно вычислить и самостоятельно при помощи функции Excel ЧИСТВНДОХ(..) /XIRR(..)/ При расчете YTM  неявно предполагается, что облигация удерживается до погашения и все получаемые купоны реинвестируются под эту же ставку. Иными словами, это априорная оценка доходности, рассчитываемая заранее. 

HPR  (holding period return) — реализованная доходность за время удержания позиции. Именно она важна для инвестора, так как отражает  финансовый результат в течение срока владения облигацией. Этот срок может быть любым; предполагается, что по его истечении облигация продается или погашается.



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

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