Хотите научиться торговать, напишите нам
Хотите научиться прогнозировать, напишите нам
Хотите научиться анализировать, напишите нам
НаписатьРобот1
Робот-это программа, написанная на специальном языке, который воспринимается терминалом-оболочкой для совершения сделок. Будем рассматривать терминал:Quik и язык для написания робота Qpile. При изучении особенностей программирования будем опираться на руководство по программе Quik: документ2(**) и руководство по языку Qpile:документ1 (*).
Рассмотрим самый простой робот, который в определенное время выставляет заявку по определенной цене "Х" и в определенном направлении(покупка или продажа).
И так нам нужно запросить время в программе. Делается это через сервисную функцию:GET_DATETIME(). В результате выполнения функции получим так называемый ассоциативный массив (MAP). Элементами этого массива будут являться последовательность значений по текущей дате и времени. (более подробно см в п.8.23.2 документа1(*))
Пусть у нас переменная "time" будет типа MAP.(типы данных в п.8.4.1 документа1 (*))
time=GET_DATETIME()
Чтобы узнать значение текущих минут, обратимся к элементу массива с ключом "MIN" при помощи функции: get_value:minute=get_value(time, "MIN")
выставлять заявку будем при помощи функции:
ФУНКЦИЯ ОТПРАВКИ ТРАНЗАКЦИЙ
FUNC ORDER(FPRICE,FLOTS,FDIRECTION,FTYPE,FTRID)
NEW_GLOBAL("TRANS_PARAMS", "")
NEW_GLOBAL("TRANS_RESULT", "")
TRANS_PARAMS = ""
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACCOUNT", ACCOUNT&"") ' наш счёт на ММВБ
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "CLIENT_CODE", CLIENTCODE&"") ' клиентский код
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "CLASSCODE", CLASSCODE&"") ' код класса
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "SECCODE", INSTRUMENT&"") ' инструмент
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACTION", ACTION&"") ' вид заявки (обычная, стоп, условная)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "PRICE", FPRICE&"") ' цена
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "QUANTITY", FLOTS&"") ' лот
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "OPERATION", FDIRECTION&"") ' направление
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "TYPE", FTYPE&"") ' тип заявки (лимитированная или "по рынку")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "TRANS_ID", FTRID&"") ' ID транзакции
IF GET_VALUE (TRANS_PARAMS, "ACTION") = "KILL_STOP_ORDER"
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "STOP_ORDER_KEY", GET_VALUE (GET_ITEM ("STOP_ORDERS", M), "NUMBER")&"") ' снимаем предыдущий стоп-лосс
END IF
IF GET_VALUE (TRANS_PARAMS, "ACTION") = "NEW_STOP_ORDER"
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "STOPPRICE", FPRICE&"") ' стоп-цена
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "EXPIRY_DATE", CURDATE&"") ' заявка действует в течение ТС
END IF
TRANS_RESULT = SEND_TRANSACTION (30, TRANS_PARAMS) ' отправляем заявку в систему
ORDERCOUNT=ORDERCOUNT+1 ' увеличили счётчик заявок на единицу
END FUNC
В основе этой функции лежит правило создания строки для импорта транзакции из файла
(см. раздел 6 п.6.8 файла документа2(**)), пример использования в п.8.21.1 документа1(*)).
При помощи функции set_value добавляем новые строки в переменную TRANS_PARAMS
(переменная типа MAP).
параметры робота:
1)заявка выставляется по времени(например в 10.00(мск)-при открытии сессии;
минута равна 0: m0=0.
в m1 минут: заявка0 выставляется, т.е. m0=m1, где m1-задается в настройках
2)стоп-заявки (покупка и продажа) выставляется по цене p10 и закрывается по цене p20.
3)уровни p1 и p2 рассчитываются по правилу треугольника по 30 значениям часовых данных в начале дня и затем корректируются на цену открытия, где h=open1-close0, p10=p1+2*h, p20=p2+2*h, close0, p1 и p2 задаются в настройках, open1-цена открытия в 10.00(мск).
Чтобы найти open1-цену открытия в 10.00(мск) воспользуемся графиком цены и индикатором SMA.
и так, что мы делаем, чтобы найти open1:
2.1. строим в программе Quik график бумаги и накладываем технический индикатор, SMA-скользящее среднее.с периодом 1 по цене OPEN (принципиально, так как нам нужна цена открытия),
и в настройках индикатора во вкладке "дополнительно" прописываем его идентификатор "SMA1".
2.2. обращаемся к данным графика при помощи функции GET_CANDLE_EX(более подробно см п.8.20.2 документа1(*)).
2.3. в переменной MOVING1 у нас будет находится значение технического индикатора.
2.4. текст программы выглядит следующим образом:
MOVING1=GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE (GET_CANDLE_EX("SMA1", DATE, TIME),"LINES"),0),"OPEN") +0
В коде робота p1 p2 обозначены в начале программы в разделе "настройки", как
3.1.p1=close0-130
3.2.p2=close0+80
, где значения 130 и 80 - это отступы от цены закрытия и рассчитаны по правилу треугольника. Можно заменить р1 и р2 на значения из строк, полученных после нажатия "рассчитать".
р1 соответствует меньшему значению, р2 соответствует большему значению.
После запуска робота в программе Quik появляется таблица, состоящая из столбцов:
Инструмент
Спрос
Предложение
Цена Last
open
p10
p20
Добавление строк происходит при помощи следующей команды на примере первого столбца:
string=set_value(string, "ins", code)
где "ins"-переменная, в которой выводится название инструмента (code).
Так же в таблице есть строка"остаток"- остаток бумаг в портфеле,
строка "остаток денег"-сколько денег осталось после сделок.
Остаток денег в портфеле определяется при помощи переменной: "TOTAL_NET", значение ее определяется кодом:
TOTAL_NET=get_total_net(market,client,code)+0
Остаток бумаг в портфеле определяется при помощи переменной: "CBPLPLANNED", значение ее определяется кодом:
CBPLPLANNED=get_CBPLPLANNED(market,client)
Код робота(черновик. работал 16.12.2019 для RIZ9, в поле client, clientcode и account вводится ваш счет на бирже ММВБ, инструмент заменяем на актуальный ric, изменяем "настройки сделки" в начале кода:m1(минута совершения сделки),s1(секунда),close0(цена закрытия) ) доступен по ссылке и файл с настройками робота, а так же инструкция для расчета уровней по правилу треугольника.
P.S. В первом роботе показаны основные "детали-моменты" конструирования сигналов на языке Qpile(более подробно об этом см. в документе1(*)): время, уровни, выставление заявок.
Робот2 Код выглядит так: ссылки на робот.
Индикаторы технического анализа
Технический анализ-это совокупность различных индикаторов и фигур(особенностей графика цены). Этот анализ помогает инвестору принять решение о покупке-продаже ценной бумаги. Здесь мы рассмотрим только самые значимые на взгляд автора инструменты: индикаторы технического анализа. В уроке1 вы познакомитесь с "откатами" и "разворотами", а так же с уровнями Фиббоначи. В уроке2 вы познакомитесь с "уровнями поддержки" и "уровнями сопротивления", их визуальном определении по графику. В уроке3 вы познакомитесь с различными типами треугольников и научитесь определять направление движения после каждого треугольника на трендовом рынке. В уроке4 вы познакомитесь с индикатором ADX и полосами Боллинджера для определения бокового движения.
В коде робота обращение к цене открытия показано при помощи чтения значения с графика индикатора SMA-простое скользящее среднее по цене открытия с периодом 1.
Аналогично можно обратиться к любому значению на графике, считав его с соответствующего индикатора-линии, наложенного на график и присвоив ему идентификатор. Более подробно об индикаторах смотри в следующем пункте:Индикаторы технического анализа.
При программировании второго робота добавим дополнительные условия совершения сделок к тем, которые были прописаны в роботе1:
1. сделки могут совершаться на каждой минуте, когда h=HIGH-LOW>30, c=LOW+h/2'середина свечи
2. сделки совершаются тогда, когда в портфеле нет бумаг
3. сделки совершаются на секунде s1 или s2
4. в зависимости от соотношения close1 и c, то совершаем разные сделки
Прогноз по треугольнику Добрый день, друзья. Давайте более подробно рассмотрим прогноз по треугольнику. Зная максимум и номер максимума мы определяем скорость падения v1: (max-close)/nmax. Соответственно, зная минимум и номер свечи минимума рассчитываем скорость роста v2: (close-min)/nmin. Цена открытия нам нужна, чтобы рассчитать поправку к прогнозу: korr=(open-close)*k, где k-коэффициент корректировки(рассчитывается по статистическим данным). Теперь рассмотрим классификацию треугольников и прогнозов. И так кроме симметричного треугольника существует два типа треугольников:восходящий и низходящий. В зависимости от ситуации на рынке: тренд или контр-тренд возможны варианты :
При тренде строим прогнозы так: нижняя граница: P10=x-v1+korr; верхняя граница:P20=x+v2+korr При контр-тренде строим прогнозы: нижняя граница: P10=x-v2+korr; верхняя граница:P20=x+v1+korr Для трендового рынка для любого треугольника мы строим прогноз нижней границы так: из последней цены* мы вычитаем скорость падения v1; а для верхней границы: к последней цене* прибавляем скорость роста v2. При тренде история повторяется: если был рост, то рост будет продолжаться условно с той же скоростью. Если было падение, то цена будет продолжать падать с предыдущей скоростью. При контр-тренде все наоборот: если цена росла, то в прогнозе цена будет падать; и наоборот: после падения цена будет расти. Поэтому в состоянии контр-тренда при построении нижней границы прогноза мы от последней цены* вычитаем скорость роста v2, а верхняя граница прогноза строится так: к последней цене* мы прибавляем скорость падения v1. (смотри улучшенный калькулятор по ссылке). Ниже представлен калькулятор, который позволяет нам рассчитать: скорости-"отступы", прогнозы р1 и р2 без знания цены открытия, а так же уровни р10 и р20 с учетом цены открытия и коэффициента корректировки: k=2.
Волатильность Нет определенности в формулировке термина Волатильности.
h=HIGH-LOW:
Так за прошлый день мы для каждой минуты можем рассчитать h и рассчитать среднюю минутную волатильность за день:h1.
Практические наблюдения
Смысл этого понятия в том, чтобы измерить "изменчивость" динамики цены.
Много математических формул можно найти по расчету этого термина.
Все они не имеют четкого визуального толкования.
я предлагаю (вернее, я понимаю для себя так этот термин
после долгих лет наблюдений за рынком)
использовать следующую меру для измерения "изменчивости":
расстояние между максимальной ценой HIGH и минимальной
ценой LOW на определенном временном диапазоне.
Так за прошлый день мы для каждого часа можем рассчитать h и рассчитать среднюю часовую волатильность за день:h2.
Пусть по результатам расчетов h1=50 пунктов, h2=300 пунктов. Тогда, когда, минутная волатильность будет равна 300, будем говорить о
явлении движения рынка за 1 минуту со скоростью часа. Такое явление можем наблюдать при открытии российского рынка FORTS:
при движении фьючерса индекса РТС (поэтому мы для расчета прогноза "фьючерса на индекс РТС" для первой минуте открытия рынка в 10.00(мск) используем прогноз по часовым данным (см раздел робот1), построенным по правилу треугольника).
Это явление описано в терминах технического анализа как: большой скачок цен в уроке1.
Расчет в начале дня среднедневных волатильностей h1 и h2 за прошлый день дает нам возможность измерять "изменчивость" в единицах h.
Пусть за прошлый день: h1=50 h2=300; а за этот день: h1=40 и h2=200.
Тогда мы можем сказать: "сегодня волатильность уменьшилась" или
"рынок стал менее волатильным по сравнению c предыдущим днем".
Пример анализа волатильности первой минуты приведен моем блоге
Мои ежедневные наблюдения можно посмотреть в моем блоге.
Здесь я постараюсь подвести итог ежедневных наблюдений за динамикой фьючерса индекса РТС.
1.В момент открытия рынка в 10.00 наблюдаем большую волатильность или скачок цен.
2.В проведенных мной расчетах, скачок первой минуты можно спрогнозировать по правилу треугольника.
2.1 В случае недостижения прогнозных уровней p10 p20 на первой минуте, ждем их достижение в течении первого часа.
2.2 В случае недостижения прогнозных уровней p10 p20 на первом часе, лучше закрыть открытую сделку с убытком из-за изменившихся условий на рынке. (Рекомендация требует уточнения и рассмотрения конкретного примера).
3.Фиксируем цены HIGH и LOW первой минуты, которые будут для первого часа являться уровнями поддержки и сопротивления.
4.При трендовом движении в течении первого часа идет пробитие уровней HIGH или LOW первой минуты на величину от 1/3h2, где h2-среднедневная часовая волатильность за предыдущий день (см раздел волатильность).
5.Как правило волатильность первого часа открытия биржи влияет на волатильность второго часа работы биржи.(Рекомендация требует уточнения и рассмотрения конкретного примера).
Торговля В зависимости от ситуации на рынке возможно использовать различные ордера выставления заявок. Более подробную информацию смотри в видео. Первая сделка и небольшое наблюдение за рынком. Смотри пример-стратегии для трендового рынка видео. По вопросам индивидуального обучения по роботам или подбора параметров треугольников по результатам статистики пиши на почту: investideawang@gmail.com
Примеры ежедневных прогнозов в странице вконтакте, блог автора.
*Документ1«Руководство по языку QPILE»
**Документ2«Работа с другими приложениями»