Избранное трейдера Маркин Павел

по

TurboMartin, обновление

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

Чуть допилил и выложил на гитхаб.

Самая большая проблема и опасность любого Мартина — это слив депо.
Защитимся от этого параметром MaxDrillDown (суть стоплосс).
Если сумма всех убыточных позиций по деньгам достигает этого значения, то вся набранная поза сбрасывается, все счетчики обнуляются, и поиск начальной точки входа начинается заново.

Теперь скрипт лежит, однако, здеся: https://github.com/tp55/TurboMartin/blob/master/TurboMartin.lua

Пользуйтесь, не обляпайтесь.

Будут ошибки — обязательно пишите, хоть сюда, хоть в личку.

Робот-усреднятор (с исходниками)

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

Больше тебе, дорогой инвестор, не надо приглашать каких-то мошенников, чтобы слить свой депозит. Это, в полностью автоматическом режиме, можно сделать самому!
Заработать также можно самому. С какой-то вероятностью. Ну как всегда.

Представляю: TurboMartin. Настоящий, суровый, классический усреднятор.

Как работает алгоритм:
1) Робот ищет точку входа на основании простейшего пересечения ценой скользящей средней снизу вверх. Робот работает только в лонг.
2) Робот, находясь в режиме набора позиции, усредняется при выполнении двух условий: падении цены не менее, чем на параметр StepSize от последней сделки, и плюс, опять же, должно быть пересечение ценой скользящей средней вверх. Таким образом мы пропускаем длительные вертикальные ножи, стараясь растянуть усреднение как можно шире.

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

Об оценивании волатильностей и ковариаций

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

Где это можно применить?
1) Оптимизация портфелей из инструментов или стратегий;
2) Оценивание рисков портфелей;
3) Статистическое извлечение факторов из рынка;
4) Оценивание параметров линейных моделей зависимостей между временными рядами;
5) Извлечение из временных рядов зависимостей типа ведущий-ведомый (lead-lag);
6) Торговля опционами.

Основы

Начнём с формул, которые известны всем, кто изучал теорию вероятностей и математическую статистику:
Об оценивании волатильностей и ковариаций

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

Робот "Два Боллинджера" с исходниками

Хорош философствовать. Давайте писать более полезные посты.
Итак, робот на двух графиках Боллинджера.
Общий принцип:
1) На цену накладываются два графика Боллинджера: с периодами 20 и 120 (назовем их local и global).
2) В зависимости от параметра внутри робота, входим либо когда цена входит внутрь local-Боллинджера (ContrTrendFlag=1), либо выходит из него (ContrTrendFlag=0).
3) Дополнительный фильтр: Лонг только когда когда мы в верхней половине global-Боллинджера, шорт — если в нижней.
Данные робот берет из графиков, так что график должен быть открыт, и прописаны идентификаторы.

График с двумя Боллинджерами выглядит примерно так:

Робот "Два Боллинджера" с исходниками

Настройки на цене и индикаторах не забудьте:

Робот "Два Боллинджера" с исходниками

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

О вычислении дельты опциона


О вычислении дельты опциона 

Дискуссии о правильных и неправильных методах вычисления дельты опциона. Дошел до темы «Липкая денежность» против «липкого страйка».

Больше всего смущает то, что в работе Блэка и Шолеса, на которую постоянно ссылаются оппоненты, нет вообще никаких упоминаний о «кривой волатильности», волатильность у БШ есть константа. Чем «кривее» кривая IV для конкретного рынка, тем меньше модель БШ подходит для его описания, это вся информация, которую кривая IV в себе содержит.

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

Напомню об одном из возможных подходов к такой модификации.

1.            Собираем статистику — набор исторических пар {d(Fut),d(ImpVol)};

Где d(Fut) – дневное приращение БА

d(ImpVol) – приращение волатильности опционов на центральном страйке за тот же день.



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

Изучаем QLua: Ассиметричные фракталы

Добрый.
В одном из видео автор рассказывал об уровнях и использовал индикатор фрактал. Но для того чтобы потенциальные точки находились быстрее, он использовал ассиметричный показатель, например, 4 слева и 3 справа.
Такой индикатор можно построить с помощью Lua.
Параметры: количество свечей слева и справа
Отображение в виде треугольников. Один треугольник было плохо видно, я добавил несколько )
Второй раз пошло легче. Работаем дальше

Исходник (версия «лесенкой»)

скачать

Версия, реализующая логику схожую с типовым индикатором

скачать

  • обсудить на форуме:
  • Quik Lua

Прочёл первую книжку про Телеграм. Что нового узнал?

Поскольку я занимаюсь социальными медиа де-фактор, я считаю своим долгом читать практически всё, что написано на бумаге и касается соцсетей.
Книжку написали три молоденьких мальчика для телеграм-чайников вроде меня. Но это не снижает полезность, которую я приобрел.
Прочёл первую книжку про Телеграм. Что нового узнал?
Мне понравилась простая мысль в начале книги, которая очевидна, летает где-то вокруг, но я наверное её не сформулировал. Можно тратить время на:
1. Создание ценности.
2. Создание актива.

Можно создавать ценность и получать деньги за это. Зависимость линейная. А можно создать актив, который будет создавать ценности, которые будут приносить деньги. Это бизнес-подход. Развитие бизнеса — это накопление активов. Почему я обращаю на это внимание? Потому что я всегда старался сам создавать ценность, а не активы. Хороший бизнесмен — все свое время посвящает созданию активов.

Идеи:

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

Вопрос по ISS серверу ММВБ

Привет всем!

Хочу получить данные по свечам СБЕРа с сервера ISS ММВБ.

Кто может подсказать — что я неправильно указываю в своем запросе?

iss.moex.com/iss/engines/stock/markets/shares/boards/TQBD/securities/SBER/candles.csv?from=2015-04-04&till=2015-04-15&interval=10



Fn044.lua, версия 2.1

В своей торговле применяю комбинации рыночных и лимитированных заявок, (методику описывал ранее, "Настоящая торговая стратегия."  и "US500: Объемы больше, спреды уже!" ). Временами количество одновременно работающих стратегий зашкаливало за сотню и на некоторые из них не хватало денег под выставление заявок, они отключались, иногда ломая логику работы связанных с ней стратегий. В QUIK в таблице «Состояние счета» считается цифра — «Свободно» — свободные средства под заявки, но сходу вытащить ее из Lua у меня не получилось. И пришлось вписать расчет этой величины в робота.
Сегодня предлагаю вашему вниманию доработанный скрипт Fn044.lua (https://yadi.sk/d/O-6JzZdXkOxyow)
Fn044.lua, версия 2.1

в котором реализован расчет свободных средств для заявок на ФОРТС с учетом имеющихся контрактов и заявок.
Один в один вывести не получилось, как смог.
As is, и все такое!

  • обсудить на форуме:
  • Quik Lua

QUIK: Бенчмарк ОФЗ к ставке ЦБ

    Может кому будет интересен скрипт на QLUA, который выступает простым бенчмарком ОФЗ с постоянным купоном к ставке ЦБ.
Основные параметры доходность и премия к ставке ЦБ, с учетом дюрации.
Скрипт не работает онлайн (оперативность тут не принципиальна), при запуске собирает параметры в таблицу и выводит на экран.
В дальнейшем планируется эти данные использовать для анализа премии доходности по дюрации для муниципальных и корпоративных облигаций к ОФЗ.

QUIK: Бенчмарк ОФЗ к ставке ЦБ


    Код скрипта на github (на github две версии одна в utf-8 для просмотра и основная версия в win1251, т.к. quik понимает только его):
github.com/trantor77/lua_scripts/boundsOFZ.lua

    Код скрипта:
--переменные
keyRateCB = 7.5
classCode = "TQOB"

function CreateTable()
    t_id = AllocTable()
    AddColumn(t_id, 0, "Бумага", true, QTABLE_STRING_TYPE, 15)
    AddColumn(t_id, 1, "Цена", true, QTABLE_DOUBLE_TYPE, 15)
    AddColumn(t_id, 2, "Доходность, %", true, QTABLE_DOUBLE_TYPE, 15)
    AddColumn(t_id, 3, "Дюрация, лет", true, QTABLE_DOUBLE_TYPE, 15)
    AddColumn(t_id, 4, "Купон, %", true, QTABLE_DOUBLE_TYPE, 15)
    AddColumn(t_id, 5, "Премия к ЦБ, бп", true, QTABLE_INT_TYPE, 15)
    AddColumn(t_id, 6, "Погашение", true, QTABLE_STRING_TYPE, 15)
    t = CreateWindow(t_id)
    SetWindowCaption(t_id, "ОФЗ")
end

function string.split(str, sep)
    local fields = {}
    str:gsub(string.format("([^%s]+)", sep), function(f_c) fields[#fields + 1] = f_c end)
    return fields
end

function getParamNumber(code, param)
    return tonumber(getParamEx(classCode, code, param).param_value)
end

function formatData(prm)
    return string.format("%02d.%02d.%04d", prm%100, (prm%10000)/100, prm/10000)
end

CreateTable()

arr = {}
sec_list = getClassSecurities(classCode)
sec_listTable = string.split(sec_list, ',')
j = 0
for i = 1, #sec_listTable do
    secCode = sec_listTable[i]
    securityInfo = getSecurityInfo(classCode, secCode)
    short_name = securityInfo.short_name
    if short_name:find("ОФЗ 26") ~= nil then
        j = j + 1
        r = {}
        r["short_name"] = short_name
        r["price"] = getParamNumber(securityInfo.code, "PREVPRICE")
        r["yield"] = getParamNumber(securityInfo.code, "YIELD")
        r["duration"] = getParamNumber(securityInfo.code, "DURATION")/365
        couponvalue = getParamNumber(securityInfo.code, "COUPONVALUE")
        couponperiod = getParamNumber(securityInfo.code, "COUPONPERIOD")
        r["coupon"] = ((365/couponperiod) * couponvalue)/10
        r["bonus"] = (r["yield"] - keyRateCB)*100
        r["mat_date"] = getParamNumber(securityInfo.code, "MAT_DATE")
        table.insert(arr, j, r)
    end
end

table.sort(arr, function(a,b) return a["duration"] < b["duration"] end)

for j = 1, #arr do
    row = InsertRow(t_id, -1)
    SetCell(t_id, row, 0, arr[j]["short_name"])
    price = arr[j]["price"]
    SetCell(t_id, row, 1, string.format("%.2f", price), price)
    yield = arr[j]["yield"]
    SetCell(t_id, row, 2, string.format("%.2f", yield), yield)
    duration = arr[j]["duration"]
    SetCell(t_id, row, 3, string.format("%.2f", duration), duration)
    coupon = arr[j]["coupon"]
    SetCell(t_id, row, 4, string.format("%.2f", coupon), coupon)
    bonus = arr[j]["bonus"]
    SetCell(t_id, row, 5, string.format("%.0f", bonus), bonus)
    mat_date = arr[j]["mat_date"]
    SetCell(t_id, row, 6, formatData(mat_date), mat_date)
end
  • обсудить на форуме:
  • Quik Lua

....все тэги
UPDONW