Zigzag для Quik скачать можно тут прям в виде индикатора lua и бесплатно.

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

Индикаторов существует достаточно много - в торговом терминале QUIK 7 их представлено 39 штук. Также там присутствует - Volume, который является не индикатором, а параметром, дополнительно характеризующим ценовую свечку. Все эти индикаторы, в свою очередь, разделяются на трендовые, осцилляторы, конверты и прочее. И часто новички задаются вопросом, какие из индикаторов применять в своей торговле, поскольку все они имеет как плюсы, так и минусы. Ответ на этот вопрос и несколько полезных рекомендаций по использованию индикаторов в «Квик 7» - в нашей статье.

Для начала стоит дать несколько базовых рекомендаций. В первую очередь начинающим трейдерам стоит помнить о том, что ТА в целом и индикаторы в частности гораздо лучше работают на таймфреймах от часа. Не стоит сразу пытаться вести торговлю внутри дня - это удел мастеров трейдинга, а новичкам лучше вести торги на более крупных временных отрезках.

Во-вторых, стоит начинать с ликвидных акций, так как бумаги второго и прочих эшелонов могут иметь слишком рваные графики - а значит, есть вероятность возникновения проблем дефицита ликвидности при закрытии позиции.

В-третьих, следует рассматривать не только ценовые движения, но и объемы, которые присутствуют в этих движениях. Поскольку именно дисбаланс спроса и предложения двигает цену, умение верно интерпретировать объемы торгов крайне важно для трейдера.

В-четвертых, не стоит разделять технически й и (новостной фон, календарь макростатистики и прочее). Данные виды анализа не противоречат один другому, а дополняют друг друга.

Индикаторы для начинающих

Первым индикатором, с которого обычно и начинают знакомство с миром технических индикаторов, является Скользящее среднее (ЕМА). Его можно увидеть как у новичков, так и у профессионалов - в том, что этот несколько старый и простой индикатор в целом способен приносить прибыль, не сомневается никто. Это подтверждается прогонами на различных тестерах. Стоит отметить, что новичкам лучше использовать этот индикатор с более длительным периодом (от 100), чтобы научиться видеть, как меняются действительно важные , и не дергаться по мелочам.

Так как скользящее среднее является трендовым индикатором, его показания лучше совмещать с осцилляторами. Для средне- и долгосрочной торговли крайне хорошо зарекомендовал себя RSI. Стоит помнить, что одним из самых мощных сигналов по этому индикатору является дивергенция, появление которой в большей степени и стоит отслеживать в паре с сигналами ЕМА, например, изменениями направления наклона и пересечения с ценой.

Крайне важным «фильтром» для сигналов указанных индикаторов будет являться объём торгов (его можно добавить на ценовой график, выбрав из списка индикаторов для QUIK 7 Volume). Объём торгов должен подтверждать тренд. Стоит помнить, что тренд зачастую начинается с прорыва консолидации на повышенных объёмах, что говорит о вливании денег профессионалов в начинающуюся тенденцию, а продолжается на невысоких, что говорит об отсутствии желание у оппонентов тренда работать против тенденции. Завершается тренд опять же на повышенных объёмах. Это говорит о том, что цена уперлась в уровень, с которым ей так просто не справиться.

Помимо индикаторов, рекомендуем не забывать о методах классического ТА. Мы считаем построение трендовых линий обязательным - вне зависимости от того, применяете ли вы индикаторы или нет. Линии трендов позволяют понимать те зоны, в которых возможна максимальная активность участников торгов, так как концентрация заявок у трендовых линий обычно возрастает, что выливается в повышенный объём торгов на их границах, не забываем, что объёмы и двигают рынок.

Конечно, можно было бы заменить трендовые линии индикатором типа (например, Bollinger Bands), но трендовые линии применяют гораздо больше , которые и образуют повышенную концентрацию заявок, поэтому наша рекомендация - использовать трендовые линии. Причём некоторую помощь начинающим трейдерам для определения момента пробития консолидации (или боковика, что в принципе близко по значению) может оказать такой индикатор, как , который крайне часто применяют алготрейдеры для формализации пробития флета. Фракталы как раз и определяют текущие ценовые максимумы и минимумы за определённый временной интервал. Причём показания индикатора Fractals лучше использовать именно в качестве логической компоненты, чем как , то есть просто для понимания того, когда именно происходит пробитие. Этот индикатор поможет начинающим трейдерам выработать верное понимание указанного момента.

Помимо входов в позицию, крайне важно понимать, когда лучше фиксировать прибыль. Здесь на помощь приходит индикатор Parabolic SAR, который чаще всего и применяют именно для этой роли. При пересечении ценой данного индикатора следует фиксировать прибыль, хотя бы частично. Использование же данного индикатора для входа в позицию менее целесообразно.

Но самое главное, что показатели указанных индикаторов и прочих методов анализа (причём не только технического, но и фундаментального) необходимо именно сочетать, а не вырывать из контекста. Нужно понимать, индикаторы могут показать, что в определённые моменты вполне вероятны соответствующие события на ценовом графике, но не более того. Трейдер же, в свою очередь, должен принимать торговые решения и контролировать их риски, собирая воедино показания и ТА и ФА.

Вывод

Индикаторы стоит использовать в биржевой торговле как начинающим, так и опытным трейдерам, но их сигналы не стоит поним ать в качестве сигналов к безусловному совершению сделок. Оптимальный вариант - сочетать сигналы индикаторов в QUIK 7 с общей рыночной ситуацией и правилами риск- и мани-менеджмента.

Продолжаю отвечать на ваши вопросы.

Вопрос: Есть ли какой-нибудь простенький примерчик с анализом волатильности и торговлей на пробой?

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

Для определения средней волатильности мы применим индикатор ATR (Average true rage). Стоит заметить, что в Quik-e, что бы программа на qpile или qlua могла брать с графика данный, график должен быть открыт (в том числе и индикатор). Поэтому давайте прямо сейчас откроем какой нибудь график, например, ЛУКОЙЛ:

И добавим к нему индикатор:

Там же можно настроить цвет линий:

Параметры, например, количество периодов:

И ввести идентификатор:

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

Аналогично можно отредактировать параметры свечек (Price), так же задав для них идентификатор:

А теперь будем учиться получать данные с графиков. Для начала со свечек:

local N= getNumCandles("MyPrice")

t, n, i= getCandlesByIndex("MyPrice", 0, N- 2, 2)

message("Предыдущая свеча close=".. t[ 0]. close, 1)

message("Текущая свеча close=".. t[ 1]. close, 1)

Данный скрипт выдаст два числа: сначала закрытие предыдущей свечи, а потом закрытие текущей:

А затем для текущей свечи:

Стоит заметить, что значение close текущей свечи постоянно меняется, так как она еще не сформирована. Так же могут меняться higt и low у этой свечи. А вот предыдущая и все те, что левее их, остаются прежними - они уже сформированы.

Теперь разберем конструкции:

local N= getNumCandles("MyPrice")

t, n, i= getCandlesByIndex("MyPrice", 0, N- 2, 2)

Сначала мы получаем количество свечей. Дело в том, что функция getCandlesByIndex требует указывать, с какой по счету свечи мы получаем данные, а счет начинается с самой левой свечки. Она имеет номер 0, а самая права, текущая, соответственно N-1 - на единицу меньше количества свечек.

Теперь о синтаксисе функции getCandlesByIndex. У нее четыре параметра. Первый - идентификатор графика, который мы ставили выше. Если у нас несколько графиков, то мы как раз сможем их различать по этому идентификатору. Второй параметр - номер линии, для свечей тут должен стоять нуль. Третий - с какой свечи мы начинаем получать свечи, ее номер. В нашем случае это N-2 - мы хотим получить предпоследнюю и последнюю свечки. И, наконец, четвертый параметр - количество свечек, которые мы хотим получить.

Таким образом, если мы хотим получить только одну текущую свечу мы можем воспользоваться вот таким вот кодом:

Обратите внимание, что функция getCandlesByIndex возвращает целых три значения. Самое первое, как вы уже поняли, это сама таблица свечей. Второе значение - это количество свечей в полученной таблице. Казалось, бы зачем оно нужно? Вроде как количество должно быть равно четвертому параметру, не? Не всегда. Как вы думаете, сколько свечей вернет вот такая конструкция:

Вовсе не 10, так как начиная со свечи N-3 мы имеем только три свечки, поэтому программа выдаст:

А вот если мы напишем:

local N= getNumCandles("MyPrice")

t, n, i= getCandlesByIndex("MyPrice", 0, N- 3, 2)

То количество свечей будет равно 2.

А вот что это за третье возвращенное значение? А это так называемая легенда - подпись графика:

По умолчанию это название бумаги, но можно отредактировать и поставить свое название.

Аналогично мы можем брать данные и с индикатора:

local N= getNumCandles("MyATR")

t, n, i= getCandlesByIndex("MyATR", 0, N- 2, 2)

message("Предыдущее значение индикатора ".. t[ 0]. close, 1)

message("Текущее значение индикатора ".. t[ 1]. close, 1)

Таким образом, мы можем получить значения свечей и индикатора и вычислить уровни на пробой.

Далее вопрос: а как торговать на пробой уровней? Можно использовать стоп лоссы. Они как раз сработают при пробое: купят при пробое вверх и продадут при пробое вниз. Стоп лосс выставляется практически точно так же, как и обычная заявка (см..aspx?id=773), только в поле ACTION ставиться значение NEW_STOP_ORDER, а так же обязательно заполняются поля STOP_ORDER_KIND, STOPPRICE и EXPIRY_DATE.

После прихода очередной свечи может возникнуть необходимость переставить стоп лоссы (если они еще не сработали). Для преставления стоп лоссов мы удаляем старые стоп лоссы и выставляем новые. Как удалять см. урок 6 (). Стоп заявки удаляться точно так же, как и обычные, только ACTION ставиться KILL_STOP_ORDER.

Что бы не выставлять повторно стоп заявки, будем запоминать номер выставленной заявки, а если заявка удалена или исполнена - снимать этот номер. Для этого в процедуре OnStopOrder (это предопределенное имя) будем анализировать флаги. Как анализировать флаги см. урок 4 ().

Может возникнуть вопрос: А как обеспечить, что бы проверка сигнала была только на каждой новой свече? Вообще, можно воспользоваться функциями CreateDataSource и SetUpdateCallback, но до них мы еще дойдем. А пока, в простейшем примере торговли на пробоях с анализом волатильности, который находиться в приложении 1, я сделал проще: старые уровни для пробоя запоминаются в момент выставления стоп ордеров. Когда новые уровни отличаются от старых (а это может быть только с приходом новой свечи, так как уровни рассчитываются по предпоследней свече, а она не меняется), робот пересматривает стопы, в случае необходимости удаляет и выставляет новые.

Робот в примере создан так, что он может докупать либо допродавать (увеличивать позицию). Таким образом, если цена идет в одну сторону, то позиция увеличиваться, если пошел в обратную сторону, стала уменьшаться. Это весьма разумная стратегия управления капиталом - постепенный вход в позицию. Контроля, до каких пор робот может наращивать позицию - не предусмотрено, так как это простой учебный пример.

Вопрос: Все таки для начинающих никак не подходит работа со стаканом — на истории стакан не потестить, лучше рассмотреть работу со свечками, например стратегию по скользящим средним — как получать свечки и значения скользящих средних..... чего не избежать при использовании вашего примера..

По работе со свечами, могу дополнить обещанным чуть выше описанием функций CreateDataSource и SetUpdateCallback. Эти функции позволяют создать CALLBACL функцию и привязать ее к графику. Эта функция будет вызываться каждый раз, как только на графике произойдут какие либо изменения. Вот пример:

p_classcode= "TQBR" --Код класса

p_seccode= "LKOH" --Код инструмента

Служебные переменные

is_run = true

function cb(index)

local t = ds: T(index)

local str = "свеча № ".. tostring (index).. " из ".. tostring (ds: Size()).. " open=".. ds: O(index)

str = str.. " high=".. tostring (ds: H(index)).. " low=".. tostring (ds: L(index))

str = str.. " close=".. tostring (ds: C(index)).. " объем: ".. tostring (ds: V(index))

str = str.. " дата и время=".. tostring (t.day).. ".".. tostring (t.month).. ".".. tostring (t.year).. " ".. tostring (t.hour).. ":".. tostring (t.min)

str = str.. ":".. tostring (t.sec).. " и ".. tostring (t.ms).. " мс"

message(str, 1)

function main()

ds= CreateDataSource(p_classcode, p_seccode, INTERVAL_M1)

ds: SetUpdateCallback(cb)

while is_run do

sleep(100)

function OnStop(stop_flag)

is_run= false

Запустите его и каждый тик на графике вы будете получать вот такое вот сообщение:

Каким образом при помощи данной функции мы можем отследить приход новой свечи? Очень просто. Если изменился номер текущей свечи, либо ее дата и время, то это новая свеча.

Вопрос. Интересно не само программирование, тут просто логика... а именно разбор наиболее часто применяемых, стандартных операторов языка и их синтаксис.

На самом деле мы уже разобрали достаточно много конструкций qlua. Но вот работу с окнами еще не разбирали. Помните, на qpile робот назывался «портфелем» и имел специальную таблицу-окно, в которую можно было выводить различную информацию, например, сообщать пользователю о ходе работы робота?

Вот так, например, выглядела эта таблица для робота, который мы разбирали на уроке Стохастик с фильтром на Qpile (часть 2) (http://сайт/community/article.aspx?id=246):

На qlua Тоже можно создавать такие окна, при чем не одно, как на qpile, а несколько. Различаются такие окна по дескрипторам. Дескриптор - это его идентификационный номер, который возвращает функция AllocTable(). После того, как при помощи функции AllocTable() был создан дескриптор, он может быть использован для создания окна. Сначала мы объявляем заголовки при помощи функции AddColumn, затем при помощи CreateWindow мы открываем это окно. После чего можем добавлять в него строки, например, при помощи функции InsertRow.

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

p_classcode= "SPBFUT" --Код класса

p_seccode= "GZZ4" --Код инструмента

Служебные переменные

is_run = true

function cb(index)

local t = ds: T(index)

row = InsertRow(id, - 1)

local str= tostring (t.day).. ".".. tostring (t.month).. ".".. tostring (t.year).. " ".. tostring (t.hour).. ":".. tostring (t.min).. ":".. tostring (t.sec)

SetCell(id, row, 1, tostring (index))

SetCell(id, row, 2, tostring (ds: O(index)))

SetCell(id, row, 3, tostring (ds: H(index)))

SetCell(id, row, 4, tostring (ds: L(index)))

SetCell(id, row, 5, tostring (ds: C(index)))

SetCell(id, row, 6, tostring (str))

SetCell(id, row, 7, tostring (ds: V(index)))

message(str, 1)

function main()

id= AllocTable()

AddColumn(id, 1, "№ свечи", true , QTABLE_INT_TYPE, 11)

AddColumn(id, 2, "open", true , QTABLE_DOUBLE_TYPE, 10)

AddColumn(id, 3, "high", true , QTABLE_DOUBLE_TYPE, 10)

AddColumn(id, 4, "low", true , QTABLE_DOUBLE_TYPE, 10)

AddColumn(id, 5, "close", true , QTABLE_DOUBLE_TYPE, 10)

AddColumn(id, 6, "datetime", true , QTABLE_STRING_TYPE, 20)

AddColumn(id, 7, "volume", true , QTABLE_DOUBLE_TYPE, 15)

message(tostring (CreateWindow(id)), 1)

ds= CreateDataSource(p_classcode, p_seccode, INTERVAL_M1)

ds: SetUpdateCallback(cb)

while is_run do

sleep(100)

function OnStop(stop_flag)

is_run= false

А вот результат работы этой программы:

На этом урок окончен, но мы с вами не прощаемся, до новых встреч.

Прикрепленные файлы

Добрый день, читатели и гости блога, а также подписчики и зрители видеоканала. Наша тема сегодня Zigzag для Quik скачать, добавить индикатор в виде файла lua. Как его настроить.

Замечу, что это тема касается фондового рынка, поэтому тем, кто его осваивает, будет интересна. Однако этот инструмент применяется только в качестве вспомогательного средства. Поэтому в самостоятельном виде, я думаю, его никто не использует.

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

Установка, настройка

Для установки, распакуйте файл в папку вашего терминала. Там нужно создать папку LuaIndicators. Например, путь к файлу может быть таким C:\FinamJunior\LuaIndicators. Дальше, установите индикатор. Правой кнопкой на график «Добавить…» или кнопка Insert. Дальше, как обычно.

Скачать

Таким же способом переходим к редактированию. Настроек только две:

  • ddd – это период Зигзаг. Если увеличить его значения, то инструмент станет более сглаженным. Если уменьшить, то мелкие неровности графика будут отражаться на линии инструмента.
  • Period ATR – это период вспомогательной линии на графике, которую создатели, видимо предлагают использовать в качестве сигнальной.

На инструменте также можно заметить стрелки синего и красного цвета. Я не буду объяснять, как их применять, все и так понятно. Могу только ещё раз сказать, что сам по себе Zigzag используется только как вспомогательный инструмент, например, для работы с волновой теорией Эллиотта.

Смотреть обзор-видео про индикатор


Другие статьи на эту тему:

Использование, выводы

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

Можно сделать вывод. Что Zigzag для Quik, получить который можно с этой страницы – это индикатор, который отличается от своего аналога для MT4 внешним видом и способом настраивать для работы. Однако при этом инструмент легко узнаваем, легок в установке. Так что даже если все его стрелки и дополнительные построения никому не понадобятся, то использовать его в качестве вспомогательного инструмента все-таки можно.

Тема сегодняшней публикации - скриптовый язык QLUA. QLUA - мощнейший инструмент для написания торговых роботов. И сегодня мы обсудим его плюсы и минусы. Посмотрим как написать простой индикатор и первого робота на нём. В начале своего пути долго выбирал среду разработки, искал эффективное и в тоже время простое решение для написания торговых роботов и советников. Этот путь занял несколько лет, и что я только не перепробовал в то время. Excel, Metastock, TsLab. Но в итоге остановился на QLua, справедливо решив, что это то, что мне нужно.

1) Почему стоит выбрать QLua.

2) Немного истории и о преимуществах QLua в сравнении с предшественником QPile.

3) Написание индикаторов на QLua.

4) Написание робота на QLua под Quik

5) Заключение


1. Почему стоит выбрать QLua.

Постараюсь коротенько описать плюсы и минусы. Начать стоит с того, что в рамках РФ самый распространенный терминал для торговли акциями и фьючерсами является Quik. Если отталкиваться от того, что наш терминал Quik, то выбор будет между: программами для тестирования, языками высокого уровня и встроенными языками в терминал Qlua , QPile.

Если сравнивать с системами, где алгоритм выстраивается путем построения блок-схем, то преимуществом Qlua является отсутствие платы за использование торговой системы как в TsLab и нет необходимости в использовании доп. «прокладок» как Wealth-lab. В системах построения из блоков таких как: TsLab, Wealth-lab и т.д. проблематично выстраивать сложные системы, а для уменьшения количества блоков и получения доп. функций требуется знание высокоуровневых языков типа: C#, Pascal для написания кубиков вручную.

Если рассматривать написание роботов на таких языках как: C#, Delphi , то здесь однозначным минусом является сложность написания кода и его размер для создания простейшего робота. Скриптовые же язык QLua или Qpile позволяют реализовать идею в более короткие сроки.

Сценарный язык (язык сценариев, жарг. скриптовый язык, от англ. scripting language) - высокоуровневый язык сценариев (англ. script) - кратких описаний действий, выполняемых системой. Сценарий - это программа, имеющая дело с готовыми программными компонентами, что очень сильно упрощает написание кода торгового робота. То есть для получения данных по значению закрытия свечи достаточно написать строчку кода типа: ds:C(20) все, и мы получаем значение закрытия двадцатой свечи инструмента. Нет необходимости писать «километры» кода. При этом доступен весь функционал как в полноценном языке программирования.

Из минусов можно отметить, что QLua используется только в рамках терминала Quik и данный язык не доступен для работы с другими терминалами и торговыми системами. Так же учитывая, что Quik является только терминалом и не позволяет производить тестирование торговых алгоритмов. В QLua нет простого решения для тестирования роботов, как это можно сделать в рамках таких платформ как: TsLab и Wealth-Lab.


2. Немного истории и о преимуществах QLua в сравнении с предшественником QPile.

До QLua был QPile, в общем–то он и сейчас есть. Интерпретатор скриптового языка QPile был разработан ARQA Technologies в 2002г. и развивался до 2012г., позже в терминал Quik был добавлен Lua интерпретатор. Так же есть вероятность, что компания ARQA Technologies возможно в ближайшем будущем откажется от дальнейшей поддержки QPile. Qpile как и Qlua является скриптовым языком и обладает рядом возможностей. По праву он является первым языком для написания роботов и советников для терминала Quik. Является простым для изучения и функциональным инструментом, но обладает рядом минусов.

И так, какими плюсами обладает QLua в сравнении с QPile:

У QLua нет задержки на обработку торговой логики робота в 1сек. Это конечно не критично для среднесрочных стратегий, но для написания скальперских роботов может стать критичным.

У QLua есть многопоточность. Реализовано это в виде основного потока торговой логики и функций обратного вызова(«колбэков»).

Есть возможность писать и подключать библиотеки на других языках, сам Lua кстати написан на Си

Появилась возможность писать пользовательские индикаторы и использовать их как стандартные.

Синтаксис языка немного похож на JavaScript и C#, отсюда удобство работы с операторами переменными и т.д.

Скрипты обычно интерпретируются, а не компилируются. QLua обладает JIT-компиляторами так как в его основе лежит язык Lua. Что позволяет прятать исходный код, в то время как у Qpile он всегда открыт. Ссылка как компилятор для скрытия исходного кода Qlua


3. Написание индикаторов на QLua.

(1) Пользовательский индикатор

Как уже упоменалось выше в рамках терминала Quik существует два скриптовых языка это: Qpile и QLua. Qpile являестя более ранним языком, который появился в Quik и на нем нельзя было писать индикаторы. Позже разработчики расширили функционал и добавили QLua, в рамках которого стало возможным писать индикаторы. В данной части статье пойдет речь о создании индикатора под Quik.

Индикатор на QLua представляет из себя файл с расширением *.lua или *.luac и визуально ничем не отличается от робота. Исключением является его месторасположение. Для того чтобы Quik увидел индикатор его надо разместить в папке LuaIndicators. Папка LuaIndicators должна храниться в корне папки Квика, если ее там нет, то ее надо создать. Для того чтобы быстро открыть папку Квика надо нажать на его ярлык на рабочем столе правой кнопкой мыши и выбрать «Расположение файла».

И так перейдем к созданию индикатора. Для этого нам понадобится любой текстовый редактор типа Notepade.

Индикатор на QLua для Quik состоит из трех основных частей.

Первая часть это объявление и заполнение глобального массива Settings , который содержит в себе переменные параметров индикатора, тип линии для отображения, толщину, цвет. В массиве Settings располагаются пользовательские переменные для изменения параметров индикатора из пользовательского интерфейса Квика.

Вторая часть это функция Init , она запускается один раз при инициализации индикатора. Возвращает количество линий индикатора.

Третья часть функция OnCalculate(index) получает на вход номер свечи. Она запускается интерпретатором столько раз сколько свечей на графике и возвращает численное значение индикатора. Если линий несколько в индикаторе, то несколько численных значений. Для удобства понимания кода там будут комментарии. Для комментирования строки в QLua используется «--». Все содержимое после двух дефисов интерпретатором кода на QLua не воспринимается.

--[[ Многострочные комментарии располагаются между символами двух дефисов и квадратных скобок ]]-- Settings= { Name = "Channel", -- название индикатора period=5, -- параметр индикатора line= { { Name = "High", Type =TYPE_LINE, Width = 1, Color = RGB(120,90, 140) }, { Name = "Low", Type =TYPE_LINE, Width = 1, Color = RGB(120,90,140) } } }

Здесь мы описали массив настроек, ввели название индикатора, параметры описали параметры двух линий индикатора Именно эти параметры будут доступны в пользовательском индикаторе для изменения при загрузке индикатора на Qlua в Quik

  • (1)Название индикатора
  • (2)Установка значения для переменной period
  • (3)Установка цвета по умолчанию для линии High
  • (4)Название линии индикатора, которое мы прописали в ячейке «line» нашего листа настроек
  • (5)Тип линии который мы установили для использования по умолчанию Type =TYPE_LINE
  • (6)Толщина линии индикатора Width = 1
function Init() return 2 end -- выводить на график будем две линии --[[ В функции OnCalculate мы рассчитаем индикатор Price Channel – это две линии построенные по экстремумам значений свечей за определенное количество баров. То есть первое значение, которое будем рассчитывать это максимальное значение за period в нашем случае он равен пяти, а второе значение, которое будет возвращать функция это минимальное значение за period. Итак приступим к расчету. ]]-- function OnCalculate(index) local high=0 local low=0 Period = math.floor(Settings.period) if index<=Period then high=H(index) low=L(index) for i=index , 1 , -1 do if H(i)>high then high=H(i) end if low>L(i) then low=L(i) end end else high=H(index) low=L(index) for i=index , (index+1)-Period , -1 do if H(i)>high then high=H(i) end if low>L(i) then low=L(i) end end end return high , low end

Создаем в редакторе файл с расширением lua записываем в него код и сохраняем его в папке LuaIndicators , после этого у нас появится новый индикатор и его можно будет добавить к себе на график как стандартный индикатор Quik (1)


4. Написание робота на QLua под Quik

Написание торгового робота на QLua ведется в обычном текстовом редакторе, так же как и для написания индикатора. Отличие будет в структуре кода и в том, что располагать робот можно в любом удобном для вас месте на компьютере. В роботе является обязательной только одна функция main.

И так приступим. Напишем робота с простым алгоритмом. Рассчитаем внутри робота скользящую среднюю и будем принимать решение о покупке/продаже одного лота по инструменту исходя из количества в клиентском портфеле при закрытии прошлого бара ниже/выше среднего значения посчитанного по закрытию минутных баров инструмента. То есть при пересечении close бара средней снизу вверх проверим количество контрактов в портфеле по инструменту, и если оно меньше одного, то докупим разницу до одного контракта в лонг. Обратная ситуация при пересечении close закрытого бара среднего значения сверху вниз. Отправим транзакцию для получения одного лота в шорт по клиентскому портфелю.

Переменная для прырывания цикла при срабатывании функции обратного вызова OnStop is_run = true -- присванивание переменным начальных базовых значений торгового алгоритма Account = "NL0011100043" -- торговый счет Class_Code = "QJSIM" -- класс торгуемого инструмента Sec_Code = "SBER" -- код торгуемого инструмента TF = INTERVAL_M1 -- торговый таймфрейм g_lots = 1 -- количество торгуемых лот function main() -- подписываемся на получение данных свечей по инструменту в массив ds ds = CreateDataSource(Class_Code, Sec_Code, TF) while is_run do sleep(1000) -- обрабатываем цикл с задержкой 1сек. ds:SetEmptyCallback() -- обновляем данные по инструменту в массиве ds local serv_time=tonumber(timeformat(getInfoParam("SERVERTIME"))) -- помещене в переменную времени сервера в формате HHMMSS if isConnected()==1 and serv_time>=10000 and serv_time<235000 then -- проверка наличия соеденения с сервером и поподания в торговое окно -- место для размещения торговой логики -- расчет значения скользящей средней local SMA = 0 local period = 20 local count_candle = ds:size() if count_candle>20 then local sum = 0 for i=0 , period-1 do sum = sum + ds:C(count_candle-i) end SMA = sum / period local lots = get_lots() -- получение количества лот в клиентском портфеле по инструменту if ds:C(count_candle)>SMA and lots(g_lots*(-1)) then -- получение минимального шага цены для организации величины проскальзываня в ордере local step=tonumber(getParamEx(Class_Code, Sec_Code, "SEC_PRICE_STEP").param_value) local price_order = ds:C(count_candle)-(step*20) -- цена для ордера будет = цена закрытия - 20-ть минимальных шагов инст. send_order("S", math.abs(g_lots+lots) , price_order) end end end end end -- функция возвращает количество лот в клиентском портфеле по заданному инструменту function get_lots() local lots = 0 local n = getNumberOf("futures_client_holding") local futures_client_holding={} for i=0,n-1 do futures_client_holding = getItem("futures_client_holding", i) if tostring(futures_client_holding["sec_code"])==Sec_Code then lots=tonumber(futures_client_holding["totalnet"]) end end return lots end ---------------------- -- отправка транзакции function send_order(operation, quantity, price) -- получение минимального шага цены для округления цены отправляемого ордера local step=tonumber(getParamEx(Class_Code, Sec_Code, "SEC_PRICE_STEP").param_value) local trans_params = { CLIENT_CODE = Account, CLASSCODE = Class_Code, SECCODE = Sec_Code, ACCOUNT = Account, TYPE = "L", TRANS_ID = tostring(1), OPERATION = tostring(operation), QUANTITY = tostring(math.abs(quantity)), PRICE = tostring(math.floor(tonumber(price)/step)*step), -- округление цены при отправлении транзакции ACTION = "NEW_ORDER" } local res = sendTransaction(trans_params) if string.len(res) ~= 0 then message("Error: "..res,3) return 0 else return trans_id end end function OnStop(stop_flag) is_run=false stop_flag=1 ds:Close() end function timeformat(time_unf) local in1, in2=0,0 local time_form=0 in1=string.find(time_unf,":" , 0) if in1~=nil and in1~=0 then in2=string.find(time_unf,":" , in1+1) time_form=string.sub(time_unf, 0 ,in1-1)..string.sub(time_unf, in1+1 ,in2-1)..string.sub(time_unf, in2+1 ,string.len(time_unf)) end return time_form end

После редактирования кода сохраняем его в удобном для вас месте с расширением lua. Для запуска робота надо зайти в Сервисы ->Lua скрипты




  • (1)Добавляем скрипт из сохраненнго места
  • (2)Проверяем его появление в таблице запущенных скриптов, после запуска появится зеленая стрелка индицирующая работу скрипта
  • (3)Запускаем его в работу
  • (4)Проверяем в поле отсутствие ошибок при работе


5. Заключение

Подводя итоги хочется сказать, что если используется для торговли терминал Quik, то одним из самых простых способов написания автоматизированных торговых систем является скриптовый язык QLua. И надеюсь, сегодня Вы в этом сами убедились.

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

Для написания индикаторов в Квик, Qlua является единственно возможным вариантом.

В общем - торгуйте алгоритмами. Используйте хорошие технологии!

В этом разделе я буду выкладывать совершенно бесплатно все торговые роботы (СОВЕТНИКИ) и скрипты для терминала QUIK, для торговли на Московской бирже, FORTS.

Поэтому, уважаемые трейдеры, скачиваем, тестируем, наслаждаемся торговлей!

Все для терминала QUIK

Скрипты, Торговые роботы

Скачать индикатор SChannel на LUA
alignright wp-image-5447" src="http://daytradingschool.ru/wp-content/uploads/SChannel-3.png" alt="SChannel" width="150 height=">
В момент, когда крупный игрок набирает позицию, на рынке наблюдается фаза баланса.
Можно получить логистический тренд с выраженными фазами аккумуляции, движения и дистрибуции.
Распаковать в папку LuaIndicators и добавить индикатор. Скачать индикатор ZigZag на LUA
Zigzag — позволяет выбрать цену для расчета (Open, High, Low, Close, High-Low, Average, Middle, Weighted_Close). Работает на любых таймфреймах, отображает на экране уровни переломов тренда. Скачать индикатор ATR на LUA
color: red;">Скачать скрипт для автозапуска вашего терминала QUIK Авто запуск QUIK
Установив данный скрипт, можно будет сделать так, чтобы ваш терминал QUIK запускался сам, особенно это удобно, когда КВИК установлен где-то на удаленном сервере. Скачать Адаптер для связки терминала Quik и MarketDelta Коннектор Quik + MarketDelta
«Маркет Дельта» работает в связке с «КВИКом» в режиме реального времени. Вся история в ней сохраняется. Если у вас были пропуски в торговле, то пропущенные данные скачиваются бесплатно и через конвертор импортируются в «Маркет Дельту». Связка работает стабильно и без сбоев. Скачать робота TRIX Торговый робот TRIX для QUIK
В основе робота лежит стратегия на
Робот входит в позицию Лонг, когда индикатор закрывается выше нулевой линии, либо заданного уровня, в шорт обратные условия. Закрытие позиции по Тейк Профиту, Стоп Лоссу либо по трейлинг стопу.
Написан на языке QPILE. Пробои дневки
Все знают, что при пробое каких-то значимых уровней, начинается движение в сторону пробития, особенно на рынке акций.
Данный робот — помощник подсвечивает из списка акций те, которые пробили 30 дневный минимум или 30 дневный максимум, причем 30 — условно, можно поставить свое значение.
Написан на языке QPILE. Скачать робота помощника для QUIK Обнаружитель ГЕПов на акциях
Помогает трейдеру обнаружить из списка акций те, что открылтсь с ГЕПом, причем размер этого ГЭПа можно задать в процентном соотношении в настройках.
Данный робот — помощник подсвечивает из списка акции, открывшиеся с ГЕПом.
Написан на языке QPILE. Скачать робота для QUIK Торговый робот для QUIK, в основе которого лежит алгоритм на основе пересечения двух простых скользящих средних (SMA)
Торговый робот для QUIK, в основе которого лежит алгоритм на основе пересечения скользящих средних (simple moving average - SMA). В роботе заложен модуль тестирования. Систему можно протестировать на любой ценной бумаге (фьючерс /акция), на любом участке ценовой истории, с любым таймфреймом. Результаты тестов выводятся в виде графика, а также экспортируются в Excel.
Основные особенности:
1. Работа на любом таймфрейме.
2. Неограниченная диверсификация.
3. Использование любого рынка (ММВБ или РТС – ФОРТС).
4. Тестирование и графический просмотр тестов.
5. Изменение оптимизационных параметров.
6. Реконнект вслучае обрыва связи интернет.
7. Ведение лог файлов.
С роботом в архиве находится файл info.wnd, а также FAQ возможных ошибок. Скачать утилиту для QUIK QCenter.
Позволяет создавать МТС или Роботов для Quik на базе MetaStock. Скачать робота для QUIK QuikOrdersDOM.
Робот-скальпер. Позволяет проводить быстрые заявки в Quik-е, заявки отправляются одним кликом. Скачать утилиту для QUIK
color: red;">Скачать робота помощника Астрологический плагин SkyQuant for AmiBroker

SkyQuant - plug-in для AmiBroker, позволяющий анализировать рыночные циклы и исследовать паттерны, основываясь на базовых принципах финансовой астрологии. Использование плагина как составной части высокопроизводительной платформы даёт возможность обрабатывать большой объём статистических данных, строить, тестировать и оптимизировать алгоритмические торговые системы.
Основные характеристики SkyQuant:
-Новый тип визуализации.
-Быстрый расчет окружения для создания, тестирования на истории и оптимизации.
-Широкий спектр доступных астрологических методов: аспекты, ингрессия, звездная коррекция, дома.
В состав архива входит:
— программа SkyQuant;
— исходный код программы SkyQuant;
— скрипт для автоматической отправки транзакций в торговый терминал QUIK.

ВСЕ МАТЕРИАЛЫ предоставлены для ознакомления, скачивание материала с целью дальнейшей продажи или распространения запрещено.
ВСЕ МАТЕРИАЛЫ НА ДАННОЙ СТРАНИЦЕ САЙТА БЫЛИ НАЙДЕНЫ НА ПРОСТОРАХ ИНТЕРНЕТА И НАХОДИЛИСЬ В СВОБОДНОМ ДОСТУПЕ.
* Предупреждение о рисках: работа на финансовых рынках и использование кредитного плеча сопряжена с высоким уровнем риска и может привести к частичной или полной потере депозита. Начиная работу на финансовом рынке, убедитесь, что вы имеете достаточный уровень знаний и подготовки и полностью осознаете возможные риски. Любые рекомендации предоставлены в качестве рыночных комментариев, и не являются советом по инвестициям. Компания сайт не несет ответственности за любые потери или убытки, которые могут возникнуть прямо или косвенно от использования предоставленной информации и программ.

Если возникнут сложности, обращайтесь в скайп Школы