Раскрываю небольшую часть своей торговли в прошлом.
Система старая, где-то с 2013 года, но всё ещё рабочая…
Предоставляется для рассмотрения возможностей. Сразу дисклаймер: я не программист! Это может быть интересно новичкам и таким же не программерам как и я.
В спекулятивном портфеле у меня от 30 до 60 разных ценных бумаг. Многие из них относятся к низколиквидным акциям второго, третьего эшелона, есть облигации.
Иногда по низколиквидным бумагам случаются «спайки» — краткосрочные задёрги вверх или проливы вниз. Как это можно отрабатывать: выставляем заявку на продажу в начале сессии сильно выше рыночной котировки (+10%, +20% или +40%) и ждём всю сессию или наоборот на покупку сильно ниже рыночной.
И если срабатывает, то забираем разницу как чистую прибыль или свободный денежный поток, который дальше можно инвестировать в покупку новых ценных бумаг.
Вот так это выглядит на графике одной акции с фри-флоутом менее 5%:
«На эти два процента и живём»
Если у нас диверсификация и много бумаг, то нужно очень много заявок… У меня в день может быть 100-200 заявок на открытии. Срабатывает 3-4 раза в неделю.
Несколько лет назад на просторах интернета нашёл код на qpile и адаптировал его под эту свою торговую систему.
Делюсь как есть, для ознакомительных целей и для своего архива.
основной код простой:
PORTFOLIO_EX InitNormalSession;
DESCRIPTION Initialization session with normal bonds and stocks;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
INCLUDE auxiliary_funcs_v200.qlib;
PROGRAM
NEW_GLOBAL («INIT_NORMAL_SESSION_DONE», 0)
CLIENT_CODE = "Код Клиента"
CLIENT_ACCOUNT = "торговый счет"
' Checking the time
CurrentHour = GET_VALUE(GET_DATETIME(), «Hour»)
CurrentMin = GET_VALUE(GET_DATETIME(), «Min»)
CurrentTime=str2num(fTextTime(CurrentHour,CurrentMin) & "")
'------------------------------------------------
IF INIT_NORMAL_SESSION_DONE == 0
IF CurrentTime > 100000 AND CurrentTime < 230000
DELETE_ALL_ITEMS()
'-- основные продажи:
send_order(«S»,«0.55»,«L»,«TQBR»,«UNAC»,«1»,«77») 'sell ОАК
send_order(«S»,«0.0054»,«L»,«TQBR»,«TGKDP»,«1»,«84») 'sell Квадра пр
send_order(«S»,«0.34»,«L»,«TQBR»,«MRKC»,«1»,«101») 'sell МРСК Центр
send_order(«B»,«0.45»,«L»,«TQBR»,«UNAC»,«1»,«215») 'buy ОАК
MESSAGE («Заявки на Мосбирже выставлены!»,1)
INIT_NORMAL_SESSION_DONE = 1
'------------------Конец проверки времени торгов
END IF
IF CurrentTime > 110005 AND CurrentTime < 120000
END IF
END IF
' ----------
END_PROGRAM
PARAMETER LASTPRICE1;
PARAMETER_TITLE LASTPRICE1;
PARAMETER_DESCRIPTION LASTPRICE1;
PARAMETER_TYPE NUMERIC(10,2);
END
END_PORTFOLIO_EX
Данный код выставляет четыре заявки по акциям UNAC, TGKDP, MRKC — три на продажу и одна на покупку.
Так можно копировать и вставлять сколько угодно заявок.
Для выполнения нужна библиотека auxiliary_funcs_v200.qlib, отправлю каждому желающему личным сообщением по запросу.
Основные достоинства:
- Простота кодирования
- Быстрое выставление (сравнивая с ручными действиями)
Недостатки:
- Цены необходимо корректировать вручную. Это важно при изменении рыночных условий
- Проданные цб не откупает автоматически назад. Откупал руками вводом лимитированных заявок через квик или мобильное приложение.
- Нет вычисления лимитов по ценным бумагам, по денежным средствам. Если лимиты не соответствуют, то заявка игнорировалась системой
- нет проверок на ошибки в ценовых уровнях
- скорость исполнения ниже, чем у кода на языке lua
Вчера переписал этот скрипт на lua с дополнением функций анализа лимитов, анализа ценовых уровней закрытия предыдущего дня и максимальной возможной цены. Поэтому скрипт прекращает работать.
Не является рекомендацией. Для общеобразовательных целей.
это в один прекрасный момент ппц депозиту даже без плечей.
Не просто ппц, а останетесь должны брокеру!
Полагаю, вы ошиблись минимум лет на 100 )))
А про возраст системы — это знание букварей.
Эти шпили обычно одной заявкой по рынку рисуются, так что как только вы ее зафиксируете, то поздно будет уже ловить. А если все же это импульс, а не одна заявка, то движение против вас
п.с. увидел что заявки в начале сессии ставятся. Но тогда у вас обеспечение под заявки должно лежать грузом
1) Система без шортов. Акции свои портфельные. При выносе вверх на импульсе можно остаться без акций. Это минус и такое случалось. Печалился и ждал снижение. Иногда снижение приходит спустя пару месяцев. Но есть и примеры такие как ТГК-2 преф, которые так и не снизились к уровням моей продажи. Там я заработал всего около 100% ROE, а мог больше 500%.
2) При проливах вниз я получал небольшой выход в плечо под залог ликвидных голубых фишек, которые не лежат с инвестиционным горизонтом. Небольшой займ закрывается в течении сессии или двух.
3) Ну и как мы знаем на медвежьем рынке лучше не ловить ножи. Например, в марте 2020 года просто снял все покупки из скрипта. Точнее разделил на два — один скрипт на продажу и один покупки. Скрипт «ловлю ножи» в марте не запускал. В марте работал скрипт продажи своих бумаг.
У сбербанк брокера есть встроенный в квик аналог. Называется алго-заявки. Оформляешь алго-заявку и она в 9:55 выставляет в стакан обычные лимитные заявки. даже если квик не запущен, а инвестор вообще на работе :)
Алго-заявку можно выставить максимум на месяц.
Сопли ловит отлично.
Ну осторожность нужна, конечно. В марте 2020-го я чуть крепко не прилип, сколько напокупала...
В этом окне окне:
Новая алго-заявка.
smart-lab.ru/blog/737046.php
class=get_class(code)
SecInfo = GET_SECURITY_INFO("", code)
message(«Вход в лонг позицию»,1)
как в сообщение добавить Тикер инструмента? Спасибо