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

по

Данные из QUIK в Python. Построение Дельта графика.

Данные из QUIK в Python. Построение Дельта графика.Построение нестандартных графиков в Python при помощи библиотеки finplot.
Можно строить почти любые нестандартные графики: Range, Renco, Delta.
В качестве примера скрипт для построения Дельта графика.
График строиться с момента запуска по поступающим данным из таблицы обезличенных сделок.
Для получения данных из КВИКа используется PythonServer Евгения Шибаева (огромное спасибо автору!!!)

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

# В КВИКе запускаем луа-скрипт QuikLuaPython.lua
import socket
import threading
from datetime import datetime, timezone
import pandas as pd
import finplot as fplt

fplt.display_timezone = timezone.utc


class DeltaBar():
    def __init__(self):
        self.df = pd.DataFrame(columns='date_time open high low close delta delta_time_sec'.split(' '))
        self.df.loc[len(self.df)] = [0, 0, 0, 0, 0, 0, 0]

    def parser(self, parse):
        if parse[0] == '1' and parse[1] == 'RIH1':
            if abs(self.df.iloc[len(self.df) - 1]['delta']) >= 500:
                self.df.loc[len(self.df)] = [0, 0, 0, 0, 0, 0, 0]  # Добавляем строку в DF

            self.df.iloc[len(self.df) - 1]['close'] = float(parse[4])  # Записываем последнюю цену как цену close бара

            if self.df.iloc[len(self.df) - 1]['date_time'] == 0:
                self.df.iloc[len(self.df) - 1]['date_time'] = \
                    datetime.strptime(f'{parse[7]} {parse[8][0:-1]}', "%d.%m.%Y %H:%M:%S.%f").replace(microsecond=0)

            if self.df.iloc[len(self.df) - 1]['open'] == 0:
                self.df.iloc[len(self.df) - 1]['open'] = float(parse[4])

            if float(parse[4]) > self.df.iloc[len(self.df) - 1]['high']:
                self.df.iloc[len(self.df) - 1]['high'] = float(parse[4])

            if (float(parse[4]) < self.df.iloc[len(self.df) - 1]['low']) or \
                    (self.df.iloc[len(self.df) - 1]['low'] == 0):
                self.df.iloc[len(self.df) - 1]['low'] = float(parse[4])

            if parse[5] == '1026':
                self.df.iloc[len(self.df) - 1]['delta'] += float(parse[6])

            if parse[5] == '1025':
                self.df.iloc[len(self.df) - 1]['delta'] -= float(parse[6])

            self.df.iloc[len(self.df) - 1]['delta_time_sec'] = \
                datetime.strptime(f'{parse[7]} {parse[8][0:-1]}', "%d.%m.%Y %H:%M:%S.%f") - \
                self.df.iloc[len(self.df) - 1]['date_time']
            self.df.iloc[len(self.df) - 1]['delta_time_sec'] = self.df.iloc[len(self.df) - 1]['delta_time_sec'].seconds


def service():
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind(('127.0.0.1', 3587))  # Хост-этот компьютер, порт - 3587
    while True:
        res = sock.recv(2048).decode('utf-8')
        if res == '<qstp>\n':  # строка приходит от клиента при остановке луа-скрипта в КВИКе
            break
        else:
            delta_bar.parser(res.split(' '))  # Здесь вызываете свой парсер. Для примера функция: parser (parse)
    sock.close()


def update():

    df = delta_bar.df
    # Меняем индекс и делаем его типом datetime
    df = df.set_index(pd.to_datetime(df['date_time'], format='%Y-%m-%d %H:%M:%S'))
    # print(delta_bar.df)

    # pick columns for our three data sources: candlesticks and TD
    candlesticks = df['open close high low'.split()]
    volumes = df['open close delta_time_sec'.split()]
    if not plots:
        # first time we create the plots
        global ax
        plots.append(fplt.candlestick_ochl(candlesticks))
        plots.append(fplt.volume_ocv(volumes, ax=ax.overlay()))
    else:
        # every time after we just update the data sources on each plot
        plots[0].update_data(candlesticks)
        plots[1].update_data(volumes)


if __name__ == '__main__':
    delta_bar = DeltaBar()
    # Запускаем сервер в своем потоке
    t = threading.Thread(name='service', target=service)
    t.start()

    plots = []
    ax = fplt.create_plot('RIH1', init_zoom_periods=100, maximize=False)
    update()
    fplt.timer_callback(update, 2.0)  # update (using synchronous rest call) every N seconds

    fplt.show()
  • обсудить на форуме:
  • QUIK

Уменьшаем количество транзакций, перестроением алгоритма

Приветствуем Всех!

Кто торгует через TSLab, знают о ситуациях в «реверсных» алгоритмах, когда необходимо переворачивать позу. Сначала выставляется закрытие для текущей позиции, далее открытие для новой. В большинстве случаев, конечно это происходит крайне быстро и без проблемно, но любая транзакция имеет задержки, пусть 100-300мс но все же задержки есть. Этого не избежать в принципе никак. Но можно перестроить алгоритм, таким образом, чтобы вместо закрытий позиций, были просто «задвоеные» заявки. То есть получается, открыли лонг, далее например открываем шорт +1 к лонгу.

В итоге получим просто перевесы в размере позиции, то есть лонгов 144 шортов 145, в итоге текущая позиция просто 1лот шорт. Это слегка не привычно с точки зрения восприятия, но главное избегаем двух транзакций!
Скрипт построен на фьючерсе ртс, индикаторов в принципе нет, простенький паттерн используется для демонстрации системы.
Так выглядит график при таком «фокусе»
Уменьшаем количество транзакций, перестроением алгоритма



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

Пробуем "умный" стоп-лосс

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


Начальный алгоритм достаточно прост и стандартен — хай/лоу с периодом в 2000 баров. Тикер РТС Фьючерс. Специально был взят отрезок из прошлого, так как на нем он лучше всего «летал».

Параметр не подогнанный — начальный период в блоках TSLab обычно 20 и мы приписали пару нулей для увеличения продолжительности сделки.
Эквити в начальном виде.
Пробуем "умный" стоп-лосс
Результаты показывать не будем, так как они будут более интересными, чем график дохода. Рекомендуем посмотреть как это работает на практике лично, если вы уже пользователь нашей программы)

Да — это не плохой график, но попытаемся сделать лучше! Выводим следующую формулу — открываем позицию, считаем доход/количество удерживаемых баров. Если значение растет, — значит рынок двигается с хорошей скоростью в нашу сторону. Если же начинает медленно падать или уходит в минус — значит перестал двигаться в нужном направлении. Пользуясь таким методом, алгоритм приближает стоп-лосс на 1 шаг цены с каждым баром. Для заметки: если работаете с историческими данными, то перепроверьте какой шаг цены вы указали. Иначе рискуете искать долго причину почему стоп не двигается ближе,  как это было у меня!)



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

Запись вебинара Павла Целищева "Автоматизация торговли для не программистов с использованием TSLab"

Доброго дня и продуктивной трудовой недели!

На нашем YouTube канале TSLab Live добавлена запись вебинара Павла Целищева «Автоматизация торговли для не программистов с использованием TSLab».



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

Вебинар был организован нашими коллегами из SR Solutions
srsolutions.ru
bot-adviser.ru
t.me/srsolutions
t.me/SowaTrends
  • обсудить на форуме:
  • TSLab

Логические и математические рассуждения при реализации алгоритма

Приветствуем.

Работая с программой TSLab, иногда, а иногда часто), возникают пожелания, в виде необходимости новых блоков, которые в составе софта отсутствуют. Многие сложности, на самом деле решаемы имеющимся функционалом, хотя иногда конечно не обойтись без программирования.
В комментариях к предыдущей статье, попросили добавить блок — месяц года. Просто взять и добавить блок — чаще всего это цикл через 6 рук пройдет от тикета с требованием к реализации, далее принятие решение о срочности и тд и тп. не суть важна в бюрократии, а в том что сделать можно все своими руками!

Итак начнем. В тслаб имеется блок — дата, который транслирует дату в формате ггммдд, его и будем использовать чтобы получить месяцы.
Первый и самый важный шаг — вывести блок дата на график, чтобы узнать о формате, так как в разных блоках могут быть разные вариации написания.
Логические и математические рассуждения при реализации алгоритма
Следующий шаг — построить логику в голове, каким образом достать месяц из данного варианта формата. Прежде всего не воспринимаем это как дату, а принимаем ее за обычную цифру. 161122. Чтобы добраться до месяцев — мне нужно прежде всего исключить год.



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

ЛЧИ 2020. Торгуем как Alanes.

    • 16 января 2021, 20:13
    • |
    • FatCat
  • Еще
Дисклеймер: Со смартлабовскими графоманами, которые умудряются днями напролёт писать простыни обо всём и в то же время ни о чём, мне не сравниться, поэтому пост будет максимально сухим и сжатым.

Смартлабовская опционная тусовка достаточно узкая, интересных участников, способных продемонстрировать свои торговые подходы и результаты по сделкам ещё меньше. Одним из этих участников является ALANES. На последнем ЛЧИ 2020 он продемонстрировал практически образцово показательную эквити, как и в раннее проводимом местном конкурсе Игры Разума.
ЛЧИ 2020. Торгуем как Alanes.

Есть обоснованное предположение, что Аланес получил сильного лося на мартовском падении рынка. Несмотря на это, способность генерить хороший профит в спокойные времена подталкивает детальнее разобраться в его торговле и постараться понять что можно в ней улучшить.
Коллега KarL$oH уже делал пост по разбору торговых подходов Аланеса в

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

Совершенствуем Exponential Moving Average (EMA).

    • 16 января 2021, 00:04
    • |
    • 3Qu
  • Еще
На днях написал топик с описанием своей старой стратегии - Ретростратегия ретро ТС., снятой с эксплуатации в далеком 2014 г, которая, как оказалось, даже в упрощенном виде может работать и сегодня. Не собирался ее использовать, но в ходе обсуждений решил потратить на нее пару вечеров, восстановить по памяти до последней ее версии, и посмотреть, не стоит ли отложить текущие дела, и быстренько вывести ее на рынок.
В ходе восстановления пришлось также дорабатывать фильтры ФНЧ, простейшим из которых является ЕМА. Я дорабатывал свои фильтры, а вам покажу, что можно сделать с ЕМА, чтобы ее усовершенствовать и улучшить.
В комментариях к топику о ретростратегии упомянули некоего Jurik (jurikres.com) и его JMA. Думал, что он уже забыт, но, жив — курилка. То, что мы получим будет не хуже его индикаторов и подобрав периоды сглаживания можете сами в этом убедиться. Вообще, все поделки Jurikа — это где-то на уровне лабораторных работ студентов 4-го курса института по курсу ТАУиР. Наши сегодняшние тоже сложностью не отличаются, но может даже лучше, хотя бы потому, что не являются черными ящиками, и вы знаете как это устроено.

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

+64% на акциях АФК Система за 2 месяца. Рассказываю, как это сделал я.

+64% на акциях АФК Система за 2 месяца. Рассказываю как это сделал я. 

Существует мнение, что компания АФК Система растет от новости до новости. На самом деле, это не совсем так. А точнее, для меня совсем не так. Я не торгую новости, эмоции и индикаторы. Я всегда стараюсь увидеть ценовой график, прочитать его логику и сделать свой ход. Как в шахматах. И статистика говорит о том, что чаще я прав, чем не прав. Однако, количество сделок у меня небольшое. Сделки редкие, а торгую я на больших масштабах времени, поскольку считаю что за ними стоят просто огромные деньги, а значит они более обоснованы для меня. И перебить тот сигнал, который для меня является спусковым или триггером, очень непросто.

Итак, одна из ярких и последних моих сделок — это сделка по покупке акций АФК Система, которая принесла результат в 64% мне и тем людям, которые находятся у меня на доверительном управлении.



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

Карта рынка, обновленная версия

    Продолжаю «точить свой топор». Выпустил новую версию «Карты рынка» — программу, которая получает данные из Quik и представляет их в простой графической форме, например вот так:
Карта рынка, обновленная версия

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

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

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