Избранное трейдера Petr S

по

Алгоритм по мотивам анализа объемов - продолжение

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


В  продолжении темы дорабатываем алгоритм пытаясь «снизить просадку» 
Какую работу проделываем в поисках решений — сложно описать. Мы пронаблюдали каждую сделку, при каких обстоятельствах она приносит профит, когда она чаще убыточна, есть ли логичность в ее входе, возможно есть смысл работать с частичными входами (кстати в логике скрипта увидите множество неиспользуемых блоков — их специально не удалили чтобы было видно «движение мысли»)
Пожалуй самое важное — гэпы. Практически 100% гепов попадают под нашу логику и с учетом мерзкого движения ртс в предыдущем квартале — нам это было на руку — НО как будет завтра? потому мы сделали сценарий с ограничением торговли на геп (правда не стали заморачиваться с тем что теперь 7 утра, и пока на 10.00 ограничение, которое сможете себе поправить для текущего контракта. 
(это картину не улучшило, потому ее не запостим, но в алгоритме условие оставляем — выше описание почему)



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

Концерн "Покровский" стал 6 в России по стоимости земли по оценке Forbes

Концерн "Покровский" стал 6 в России по стоимости земли по оценке Forbes

Сегодня издание обновило свой рейтинг, оценив 242 тыс. га, принадлежащие Концерну, в 36,3 млрд рублей. При этом отмечается, что спрос на землю превышает предложение, из чего следует возможные рост стоимости актива.

Самая высокая стоимость земли в РФ зафиксирована в Краснодарском крае, там она оценена в 176,6 тыс. за га по кадастровой стоимости. Однако в действительности реальная стоимость актива сильно зависит от логистики, межевания, состояния почв, погодных особенностей.

Все-таки, землю нельзя оторвать от прочих активов, которые на ней расположены. Поэтому я оцениваю реальную стоимость активов Концерна в 2 — 2,5 раза выше, с учетом синергии объектов от вертикальной интеграции

20 крупнейших землевладельцев России — 2021. Рейтинг Forbes

Облигации Концерн «Покровский» входят в портфели PRObonds на 6,5% — 7% от активов


Практический Трейдинг. Глубина Анализа Истории. Запихни в Меня Поглубже!



«Другой же из учеников Его сказал Ему: Господи! позволь мне прежде пойти и похоронить отца моего. Но Иисус сказал ему: иди за Мною, и предоставь мертвым погребать своих мертвецов» (Мат. 8: 21-22).

Практический Трейдинг. Глубина Анализа Истории. Запихни в Меня Поглубже!



     Как Вы понимаете, пришло время поговорить о физиологии.

     Как нам всем известно, ещё со Школы (Биржевой Торговли), самые возбудимые и чувственные места у Неё (у Рыночной Реальности) расположены неглубоко от поверхности. Ну просто так природой заведено. Чтобы Каждый (Трейдер) мог всегда хорошенько оттестировать Каждую (Систему). С удовольствием. Если вдруг приспичит им обоим. Ну или почти Каждый почти Каждую...

     Частенько доводится читать вопросы наших Уважаемых Читателей Смартлаба — где можно найти потиковую историю торгов с 1812 года?
Когда спрашиваю — ЗАЧЕМ??? следует ответ — чтобы запихнуть ей (Истории) свой тестер поглубже и как следует пошуровать им там

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

Данные из 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

Парный трейдинг не для всех

    • 10 февраля 2021, 12:55
    • |
    • ELab
  • Еще
Известный факт — парный трейдинг не приносит прибыли. Все модели сливают. Понятно, что или расходятся они недостаточно для того чтобы окупить спрэд (например, обычные против префок или GOOG против GOOGL) или просто не состоянии сохранить зависимость друг от друга после обнаружения таковой. Поэтому часть трейдеров ищет зависимости между ETF, а другая между ETF, фьючерсами и корзиной акций. Это так называемый классический стат. арбитраж.

Я предлагаю взглянуть на с другой стороны и торговать корзину из более чем 200 акций (да, извините, но это не для российского рынка — даже 20-30 акций недостаточно). Для начала нужно высчитать синтетик у которого будет минимальная дисперсия — всех интересующихся отсылаю к трудам hrenfx, который, впрочем, пошел путем непрозрачных и требовательных вычислений, которые требуют большое кол-во памяти и не в состоянии рассчитать синтетик для более чем 30 и более инструментов. Каждый желающий прочитав посты hrenfx может самостоятельно все вычислить используя несколько строк на Python. Чтобы не утомлять деталями в финале получим синтетик вида k1*msft + k1*aapl +… k_n*XLNX. Одна часть синтетика будет с положительными значениями, другая с отрицательными. Это и будет синтетик с минимальной дисперсией, который вы уже можете начать торговать. В реальности нужно будет нормировать коэффициенты и отсеять акции вес которых в портфеле, например, меньше 5-10% (все зависит от торгуемого капитала — ведь нужно будет на эти 5% купить минимальное кол-во акций). Так же можно убрать и дорогие акции AMZN, TESLA etc… Разумно выбрать одну часть синтетика с отрицательными или положительными коэффициентами и торговать «one leg» по оценке на основе полного синтетика. Это снизит издержки и повысит вашу прибыль.  

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

Методичка ABC of stock trading от легенды Blastarr_no_1

12 лет назад в ЖЖ блистал такой человек Blastarr_no_1. Он красочно рассказывал, как зарабатывал деньги десятками миллионов рублей, и в итоге заработал на кризисе 2008-2009 более 1 млрд рублей. Потом он сообщил всем что ушёл в политику и удалил свой ЖЖ. Выдумка или правда — так и осталось тайной. Вот тут 10 лет назад я делился у себя в блоге мыслями после прочтения его блога. По ссылке внутри поста на бластара можно не переходить, после удаления этот логин зарегали какие-то лохотронщики.

Этот человек тогда накатал методичку торговли которую назвал ABC of stock trading. Сейчас ее сложно где-либо найти кроме смартлаба. Из тех, кто сейчас на рынке, мало кто помнит такие далекие времена, поэтому я решил на всякий случай напомнить, вдруг вас заинтересует.

Итак, Методичка ABC от blastarr_no_1 «Основные принципы спекуляции» в 5 частях:

smart-lab.ru/blog/250818.php
smart-lab.ru/blog/250820.php
smart-lab.ru/blog/250824.php
smart-lab.ru/blog/250827.php
smart-lab.ru/blog/250831.php

Чтобы не просрать этот пост, добавляйте его в избранное❤️

Использование Машинного Обучения в торговых системах. Простейшее применение.

    • 18 января 2021, 14:54
    • |
    • 3Qu
  • Еще
Допустим, делаете вы торговую аж на 5 или больше индикаторах. Их как-то надо обернуть логикой принятия решений, потом как-то настроить, подобрать параметры в логике — работа большая, требующая много времени. Но вы сами эту систему разработали, и уже в основном знаете, что конкретно должна искать ваша логика. А раз так, то вы уже примерно знаете, где конкретно ваша логика должна выдавать свои сигналы.
В подобных случаях мы можем существенно облегчить себе работу, поручив построение логики методам Машинного Обучения (МО).
Входы мы знаем, выходы нам тоже примерно известны — строим обучающую последовательность для выбранного метода МО. Затем нормируем нашу обучающую последовательность к входам/выходам метода МО. Обучаем. Проверяем. Получаем готовую логику для нашей торговой системы.
Отмечу, что в данном конкретном случае нас не должны особо заботить переобучение и прочие проблемы МО — мы делаем вполне однозначную систему.
В нашем случае мы всего-навсего используем МО как обучаемую логику.

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

квик сменил кодировку роботов на луа языке

MARKET               = «SPBFUT»
TICKER               = «SiH7»
ACCOUNT              = "----"
CLIENT_CODE          = "----"

TRANS_ID             = 0
STOP_FACTOR          = 30
SPREAD_FACTOR        = 30
LAST_ORDER           = 0
TRANS_REPLY          = nil
BALANCE = 0

BEZUBYTOK=STOP_FACTOR*5--0.0014--малый шаг

TP=STOP_FACTOR*30--STOP_FACTOR*1--0.015--в % внутри дня (тейк-профит).большой шаг

SREDNSHAG=STOP_FACTOR*10---0.007--средн.шаг(0.08* STOP_FACTOR /1000)

n=3-- кол-во кругов малого BEZUBYTOK>STOP_FACTOR*(n+1)--минимально

k=4--кол-во кругов  безубытка --SREDNSHAG>STOP_FACTOR*(k+1)--минимально

run = true
function main()
   while run do
      if LAST_ORDER == 0 then     
      
         BALANCE = GetTotalnet()
         if BALANCE ~= 0 then
            LAST_ORDER = NewStopOrder(BALANCE)
         end        

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

Вот мы и добрались до Америки. Накладываем паттерны там.

Мой переход к программированию и машингленинг (случилось это где то год с небольшим), отчасти был связан с мыслями глянуть, а что там в забугорье творится. Проходить опять тот же путь ручного перелопачивания, что я прошел на отечественном рынке, понятно дело не хотелось. Но то котировок не было, то еще чего то, и вот наконец то дошли ручки до Америки, тем паче робот для автоматического скачивания котирок есть, модели для тестирования есть, осталось только пуско-наладочные работы.
К слову, по поводу выкачки американских внутридневных котирок через Питон не все так просто оказалось, как казалось раньше. Google Finance ограничивает скачивание часовиков 730 днями (а ниже — еще меньше), у Yfinance я вообще внутридневных не нашел. Была большая надежда на AlphaVantage, но и там ограничение на intraday в несколько дней. Еще и данные в каком то месте оказались кривыми, на что я даже написал кляузу им в поддержку, на что мне ответили что так и надо, это все «adjusted close» и закрыли тему. Так что у кого есть какие то секретные места, где все это можно быстро выкачать — делитесь.

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

Как устанавливать стоп-слосс в торговой стратегии

Стратегия очень простая. Дневной таймфрейм. Акции сбербанка. Ждём 4 закрытия подряд вниз (когда закрытие ниже открытия). На следующий день на открытии дня покупаем, а на закрытии продаём. Повторяем тоже самое для продаж, только наоборот. Ждём 4 закрытия подряд вверх. На следующий день продаём на открытии и откупаем на закрытии. Всё это делаем с 5 плечом. Комиссию я считал 0,06% за сделку.

Так выглядит график:
Как устанавливать стоп-слосс в торговой стратегии
График возврата при 4 одинаковых закрытиях подряд и 5 плече

Как видно до 1 октября 2020 (пунктирная линия) график выглядел отлично. Сегодня посчитал до 1 декабря и всё уже не так радужно. Но тем интереснее будет понять, как на стратегию повлияет стоп-лосс. Нужно найти такой стоп, который будет уменьшать максимальные потери, но при этом и не уменьшать возможные выигрыши. Ведь по стопу может выбить раньше, чем будет закрытие.

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

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

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