Главная Quikprofit twiiter Quikprofit Rss

Торговый робот. Шаг за шагом. Шаг 2.

Апрель 19, 2010 | 18 комментариев

Шаг 2. Пишем структуру файла.

Начнем с самого основного и простого.

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

Разработчик торгового терминала Quik для написания Портфеля рекомендует использовать FAR (с плагином Colorer) и Notepad++ (с установленным синтаксисом QPILE). От себя хочу предложить SciTE (freeware скачать можно здесь).

Итак, что же такое Портфель?

Портфель – текстовый файл со стандартным расширением .qpl , написанный по определенным правилам с использованием синтаксиса QPile. В этом текстовом фале содержится все: от названия приложения до информации, что требуется для вывода на экран.

Правило 1. Любой Портфель состоит из трех частей:

  1. Заголовок Портфеля,
  2. Тело Портфеля,
  3. Описание столбцов таблицы.

Правило 2. Любой заголовок должен состоять как минимум из четырех строк, которые заканчиваются символом «;»

  • PORTFOLIO_EX – название программируемой таблицы. Оно будет отображаться при загрузке портфеля в Quik.
  • DESCRIPTION – текстовое описание таблицы (краткое пояснение о том, что делает данный код). Описание таблицы будет отображаться в заголовке таблицы на экране.
  • CLIENTS_LIST – список кодов клиентов, для которых вычисляются значения в таблице (чаще всего равен ALL_CLIENTS);
  • FIRMS_LIST – список идентификаторов фирм, для которых вычисляются значения в таблице (по умолчанию можно указать значение ALL_FIRMS).

Правило 3. Весь алгоритм (т.е. все расчеты, формирование заявок и пр.) заключен в теле Портфеля.

Правило 4. Тело Портфеля находится между операторами «PROGRAM» и «END_PROGRAM»

Правило 5. Каждый оператор в программе должен описываться отдельной строкой. Разделителем операторов служит символ перевода строки.

Правило 6. Можно делать комментарии в теле Портфеля просто начав с символа «’».

Правило 7. Любой Портфель на языке QPILE должен содержать как минимум один столбец таблицы, выводимой на экран.

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

  • PARAMETER — название параметра, которое должно соответствовать названию ключа в MAP-массиве;
  • PARAMETER_TITLE — название столбца, отображаемое в созданной таблице;
  • PARAMETER_DESCRIPTION — расширенное описание параметра;
  • PARAMETER_TYPE — тип данных, выводимых в данный параметр.
  • Описание параметра всегда завершается оператором END.

Правило 10. Последний оператор Портфеля – «END_PORTFOLIO_EX».

Простые десять правил!
В предыдущей статье мы приступили к разработке робота EMAvsAC. Сейчас, используя 10 правил написания Портфеля на QPile, сформируем базовую структуру. Согласно первому правилу начнем с заголовка Портфеля.

PORTFOLIO_EX EMAvsAC;
DESCRIPTION Робот ЕМА и АС;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;

По правилам 3 и 4 пишем Тело Портфеля с пояснениями по правилу 6.

PROGRAM
‘Наш первый Портфель на основе ЕМА и АС
‘Версия 0.1
DELETE_ALL_ITEMS ‘Благодаря этой функции из таблицы будут удалены старые значения.
РАСЧЕТЫ
END_PROGRAM

Добавим данные таблицы, которая будет выводиться на экран. Для начала создадим таблицу из двух столбцов в одну строку.
Данные: наименование инструмента (в нашем случае акции Сбербанк) и последнее значение цены.

Для того, чтобы вывести на экран данные нам нужно сделать несколько шагов:

  1. В теле Портфеля создать MAP-массив с данными, которые будут выведены на экран. Массив создается с помощью встроенной функции create_map()
  2. Записать данные в массив. Сделаем это при помощи функции SET_VALUE. В массиве будут храниться значения с ключами: SecCode и LastPrice («Код бумаги» и «Цена последней сделки» соответственно).
  3. С помощью функции ADD_ITEM добавим строку в программируемую таблицу.
  4. Опишем параметры столбов таблицы согласно правилу 9.

Massiv = CREATE_MAP() ‘Создали массив с названием Massiv
Last_price = GET_VALUE(GET_PARAM_EX(«EQBR»,«SBER03»,«last»),«param_value») ‘Достаем из таблицы текущих параметров цену последней сделки по инструменту
Massiv = SET_VALUE(Massiv,«SecCode»,«СБЕРБАНК») ‘Записали в массив наименование инструмента
Massiv = SET_VALUE(Massiv,«LastPrice», Last_price) ‘Записали в массив цену последней сделки по инструменту
ADD_ITEM(0, Massiv)

Теперь опишем столбы таблицы:

PARAMETER SecCode;
PARAMETER_TITLE Инструмент;
PARAMETER_DESCRIPTION Наименование инструмента;
PARAMETER_TYPE String(10);
END

PARAMETER LastPrice;
PARAMETER_TITLE Цена;
PARAMETER_DESCRIPTION Цена последней сделки по инструменту;
PARAMETER_TYPE Numeric(10,2);
END

Итак, осталось сложить все части написанного кода воедино и получить простой Портфель с функций вывода значения цены последней сделки по АО Сбербанк.

После загрузки в Quik на экране появится такая таблица:

Код доступен в виде файла, и его можно СКАЧАТЬ

Советую вам попробовать написать такой портфель и опробовать его в Quik.

Понравилось? Следите за обновлениями по RSS! Также можете следить за обновлениями в Twitter.
* * * * * 1 проголосовавших

Комментарии

18 ответов to “Торговый робот. Шаг за шагом. Шаг 2.”

  1. Сергей
    Апрель 24th, 2010 @ 11:16

    Очень полезная статья. С нетерпением жду продолжения!

  2. Глеб
    Июнь 10th, 2010 @ 04:15

    на комментарии пот коду компилятор ругается то что не апостроф стоит

    потом на эту строку поругался
    здесь я не знаю в чем дело но скомпилировать так и не удалось
    GET_VALUE(GET_PARAM_EX(«EQBR»,«SBER03»,«last»),«param_value»)

  3. Глеб
    Июнь 10th, 2010 @ 05:40

    Пример написания рабочего кода для учебного торгового сервера (тестового аккаунта QUIK)

    PORTFOLIO_EX EMAvsAC;
    DESCRIPTION Робот ЕМА и АС;
    CLIENTS_LIST ALL_CLIENTS;
    FIRMS_LIST ALL_FIRMS;
    PROGRAM
    ‘ Наш первый Портфель на основе ЕМА и АС
    ‘ Версия 0.1
    DELETE_ALL_ITEMS () ‘Благодаря этой функции из таблицы будут удалены старые значения.
    ‘РАСЧЕТЫ
    Massiv = CREATE_MAP() ‘Создали массив с названием Massiv
    Last_price = GET_VALUE(GET_PARAM_EX(«QJSIM»,»SBER03″,»last»),»param_value») ‘Достаем из таблицы текущих параметров цену последней сделки по инструменту
    Massiv = SET_VALUE(Massiv,»SecCode»,»СБЕРБАНК») ‘Записали в массив наименование инструмента
    Massiv = SET_VALUE(Massiv,»LastPrice», Last_price) ‘Записали в массив цену последней сделки по инструменту
    ADD_ITEM(0, Massiv)
    END_PROGRAM

    PARAMETER SecCode;
    PARAMETER_TITLE Инструмент;
    PARAMETER_DESCRIPTION Наименование инструмента;
    PARAMETER_TYPE String(10);
    END

    PARAMETER LastPrice;
    PARAMETER_TITLE Цена;
    PARAMETER_DESCRIPTION Цена последней сделки по инструменту;
    PARAMETER_TYPE Numeric(10,2);
    END

    END_PORTFOLIO_EX

  4. Sergey
    Июнь 27th, 2010 @ 16:42

    Вместо « и » поставьте обычные ковычки

  5. Алексей
    Август 12th, 2010 @ 11:34

    Спасибо за обучение!

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

    P.S.
    Чуть чуть неудобно, что между страницами сайта (Шагами создания робота 1-8) нельзя перейти не выходя на стартовую страницу. И что финальный пример дан в виде картинки (из которой текст нельзя напрямую скопировать)…

  6. Ю.Р.
    Август 12th, 2010 @ 12:43

    Добрый день, Алексей! Благодарим за комментарий и здоровую критику. Навигацию по учебному курсу улучшим.
    Финальный пример теперь доступен в виде файла, ссылка дана в конце статьи.
    Данный код написан в программе SciTE (Версия 1.76 .57Ru).

  7. Альбина
    Август 31st, 2010 @ 00:06

    Спасибо за такую пошаговую инструкцию, всё вроде разжёвано, легко понять.
    Только вот как прикрепить .qpl-файл к программе квик, чтобы это заработало?

  8. Ефим
    Октябрь 2nd, 2010 @ 08:34

    Добрый день, не могу запустить этот код ругается на строку DELETE_ALL_ITEMS если ее перевести в текст, то ругается на строку get_valve я так думаю что не правильно создаю таблицу текущих параметров но могу понять что неправильно, буду признателен если подскажете, код писал в программе SciTE

  9. Ефим
    Октябрь 2nd, 2010 @ 09:03

    вот в такой конфигурации работает
    Last_price = GET_PARAM («EQBR»,»SBER03″,»last»)’Достаем из таблицы текущих параметров цену последней сделки по инструменту

  10. Ефим
    Октябрь 2nd, 2010 @ 10:46

    вообщем заработало только в такой конфигурации

    DELETE_ALL_ITEMS () добавил скобки
    Massiv = CREATE_MAP() ‘Создали массив с названием Massiv

    Last_price = GET_PARAM(«EQBR»,»SBER03″,»last») ‘Достаем из таблицы текущих параметров цену последней сделки по инструменту
    Massiv = SET_VALUE(Massiv,»SecCode»,»Сбербанк») ‘Записали в массив наименование инструмента
    Massiv = SET_VALUE(Massiv,»LastPrice», Last_price) ‘Записали в массив цену последней сделки по инструменту
    ADD_ITEM(0, Massiv)

    END_PROGRAM

  11. Sergey
    Октябрь 6th, 2010 @ 16:18

    Вот тут можно почтитать как запустить портфель написанный на Quik

  12. Taddirl
    Октябрь 31st, 2010 @ 20:49

    Очень хорошая статья!!! Админ пишите статьи в таком же стиле..

  13. Руслан
    Январь 12th, 2011 @ 15:59

    изменил под фьючерс ртс, что не так? Спасибо.

    PORTFOLIO_EX ADX;
    DESCRIPTION ЗНАЧЕНИЕ ADX В ТАБЛИЦУ;
    CLIENTS_LIST Q11110F;
    FIRMS_LIST ALL_FIRMS;

    PROGRAM
    ‘ПОПЫТКА ЧТО ТО НАПИСАТЬ
    DELETE_ALL_ITEMS ‘УДАЛЯЕМ СТАРЫЕ ЗНАЧЕНИЯ ИЗ ТАБЛИЦЫ.
    Massiv=CREATE_MAP()’СОЗДАНИЕ МАССИВА С ИМЕНЕМ Massiv
    Last_price=GET_VALUE(GET_PARAM_EX(«SPBFUT»,RIH1″,»last»),»param_value»)
    Massiv=SET_VALUE(Massiv,»SecCode»,»фьючерс РТС»)
    Massiv=SET_VALUE(Massiv,»Last_price»,Last_price)
    ADD_ITEM(0,Massiv)
    END_PROGRAM

    PARAMETER SecCode;
    PARAMETER_TITLE ИНСТРУМЕНТ;
    PARAMETER_DESCRIPTION НАИМЕНОВАНИЕ ИНСТРУМЕНТА;
    PARAMETER_TYPE Numeric(10,2);
    END

    PARAMETER Last_price;
    PARAMETER_TITLE ЦЕНА;
    PARAMETER_DESCRIPTION ЦЕНА ПОСЛЕДНЕЙ СДЕЛКИ;
    PARAMETER_TYPE Numeric(10,2);
    END
    END_PORTFOLIO_EX

  14. Руслан
    Январь 12th, 2011 @ 16:39

    как уменьшить время обновления до 1 сек

  15. Юлия
    Январь 12th, 2011 @ 21:57

    См. строку
    Last_price=GET_VALUE(GET_PARAM_EX("SPBFUT", "RIH1","last"),"param_value")
    RIH1 — был без одной кавычки.
    Рекомендую установить бесплатный редактор SciTE с синтаксисом QPile. В нем синтаксис высвечивается, и подобные опечатки видны «невооруженным» глазом.

  16. Максим
    Январь 14th, 2011 @ 11:56

    В таблице только видно СБЕРБАНК, цены нету, в чем проблема?

    PORTFOLIO_EX EMAvsAC;
    DESCRIPTION Робот ЕМА и АС;
    CLIENTS_LIST ALL_CLIENTS;
    FIRMS_LIST ALL_FIRMS;

    PROGRAM
    ‘ Наш первый Портфель на основе ЕМА и АС
    ‘ Версия 0.1
    DELETE_ALL_ITEMS() ‘ Благодаря этой функции из таблицы будут удалены старые значения.

    Massiv = CREATE_MAP() ‘Создали массив с названием Massiv
    Last_price = GET_PARAM(«EQBR»,»SBER03″,»last») ‘Достаем из таблицы текущих параметров цену последней сделки по инструменту
    Massiv = SET_VALUE(Massiv,»SecCode»,»СБЕРБАНК») ‘Записали в массив наименование инструмента
    Massiv = SET_VALUE(Massiv,»LastPrice», «Last_price») ‘Записали в массив цену последней сделки по инструменту
    ADD_ITEM(0, Massiv)
    END_PROGRAM

    PARAMETER SecCode;
    PARAMETER_TITLE Инструмент;
    PARAMETER_DESCRIPTION Наименование инструмента;
    PARAMETER_TYPE String(10);
    END

    PARAMETER LastPrice;
    PARAMETER_TITLE Цена;
    PARAMETER_DESCRIPTION Цена последней сделки по инструменту;
    PARAMETER_TYPE Numeric(10,2);
    END
    END_PORTFOLIO_EX

  17. Юлия
    Январь 14th, 2011 @ 12:58

    Максим, обратите внимание на строку:
    Massiv = SET_VALUE(Massiv,"LastPrice", "Last_price")
    Last_price — переменная и должна писаться без кавычек. Попробуйте так:
    Massiv = SET_VALUE(Massiv,"LastPrice", Last_price)

  18. Вячеслав
    Октябрь 24th, 2011 @ 21:54

    Все получилось! Все неточности нашел и исправил. Это даже хорошо — понял как описываются переменные которые выводятся в таблицу.

Оставить комментарий





Поля помеченные (*) обязательны к заполнению

Страница 1 из 11
  • Меню

  • Облако тегов

  • Рубрики

  • Для пользователя