Раскрываю небольшую часть своей торговли в прошлом.
Система старая, где-то с 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 с дополнением функций анализа лимитов, анализа ценовых уровней закрытия предыдущего дня и максимальной возможной цены. Поэтому скрипт прекращает работать.
Не является рекомендацией. Для общеобразовательных целей.
Очень ценная тема, надо в этом направлении мне попытаться освоить. Тоже не программист и не умею, хочется разобраться, чтобы начать зарабатывать на бирже и жить с рынка.
Андрей, помоги!