Уроки QPILE. Покупка

Рубрика [ Уроки QPILE ]

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

PORTFOLIO_EX MTS;
DESCRIPTION MTS;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
INCLUDE mts_func.txt;
 
PROGRAM
NEW_GLOBAL ("error", 0)
NEW_GLOBAL ("first_start", 1)
NEW_GLOBAL ("POSA", 0)
 
ClassCodeList = "EQNE"  'код класса инструмента
Instrument = "GAZP"  'название инструмента
Lots = 1
' Блок проверки времени торгов. Торги с 10:30 до 18:45. В другое время курим бамбук.
CurrentHour = GET_VALUE(GET_DATETIME(), "Hour")
CurrentMin = GET_VALUE(GET_DATETIME(), "Min")
CurrentTime=str2num(fTextTime(CurrentHour,CurrentMin) & "")
IF CurrentTime > 103100 AND CurrentTime < 184400 AND get_param(ClassCodeList,Instrument,"last") != 0
' ———-
DELETE_ALL_ITEMS()
 
' Всё время отслеживаем последнюю рыночную цену
LASTPRICE = get_param(ClassCodeList,Instrument,"last")
IF POSA == 0 'Если вне позиции
If LASTPRICE > 112.85 'Вот такое вот условие
send_order("B", "M", "0", Lots, "1")
POSA = 1 ' Всё, купили
message ("Ура, купили!",2)
End If
END IF
 
' Выводим текущую цену на экран
output=CREATE_MAP()
output=SET_VALUE(output,"LASTPRICE" , LASTPRICE)
ADD_ITEM(1,output)
 
' Конец проверки времени торгов
END IF
‘ ———-
END_PROGRAM
PARAMETER LASTPRICE;
PARAMETER_TITLE LASTPRICE;
PARAMETER_DESCRIPTION LASTPRICE;
PARAMETER_TYPE NUMERIC(10,2);
END
END_PORTFOLIO_EX

Главенствующими являются всего две строки:
If LASTPRICE > 112.85
send_order("B", "M", "0", Lots, "1")

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

> - "больше". Можно и меньше.
"B" - покупаем, "S" - продаём.
"М" - по рынку, "L" - лимитированная.
"0" - рыночная цена, при лимитированной заявке цена своя.

В дальнейшем задействую графики. Прикрутим условия пересечения чего-нибудь с чем-нибудь.

Архив с программой скачать

Мой блог находят по следующим фразам:


22 комментария для “Уроки QPILE. Покупка”

  • Алексей
    17 Март, 2009, 1:51

    а как задаётся повтор цикла для send_order?

  • Иван
    17 Март, 2009, 11:13

    В архиве, который надо скачать есть ещё и файлик с функциями. Что значит повтор цикла ?

  • Алексей
    17 Март, 2009, 12:11

    дело в том, что обновление цены проиходит, а вот повторение выставления заявок нет

  • Алексей
    17 Март, 2009, 12:21

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

  • 17 Март, 2009, 12:43

    Но ведь задача была купить один раз, зачем нам выставлять заявку повторно? При покупке "по рынку" заявка как правило исполняется без проблем. Что хотите реализовать вы?

  • Алексей
    17 Март, 2009, 12:50

    Да, это происходит без проблем, за это Вам большое спасибо! т.к. мало кто выкладывает в свободный доступ даже простые системы! Для начала я бы хотел создать просто замкнутый цикл, т.е. проверка условия - действие - проверка условия, а дальше усложнять само условие,
    т.е. попытаться создать автоматизированную систему принятия решения, по типу Wealth-Labа.

  • 17 Март, 2009, 13:26

    Добавил следующий урок. Думаю, кое-что станет понятнее.

  • Алексей
    17 Март, 2009, 14:16

    Большое спасибо!

  • Сергей
    17 Март, 2009, 14:51

    Здравствуйте, возник вопрос по поводу скрипта в файле mts_func.txt. Как я понимаю знак ' и следющий за ним текст - это комментарии, но в 9 строчке снизу идет:

    'while = 0 'обнуление счётчика для бесконечности цикла

    То есть перед строчкой стоит ', хотел спросить, что это значит?

  • 17 Март, 2009, 15:44

    Если раскомментировать, то цикл будет бесконечным. Это использовалось (а может и будет использоваться) для стопроцентного утверждения исполнения заявки. Но от такого зацикливания необходимо избавляться, иначе кирдык :) Поэтому ограничился сотней попыток.
    Оставил, чтобы помнить и, возможно, применять при необходимости.
    Ещё раз - не сто раз выставляется заявка, а сто раз проверяется её исполнение.

  • Сергей
    17 Март, 2009, 21:11

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

    Еще у меня возникает вопрос: можно ли использовать данные другого портфеля? В той стратегии, что хочу написать я используется такое условие, что если EMA(экспоненциальная скользящая средняя на данный момент)>EMA(за предыдущий бар(в минутах)) то покупка. Данные за пердыдущий период можно получить, используя алгоритм, приведенный здесь: [это ссылка]. Если использовать два портфеля вместе нельзя, то можно ли их объединить?

  • Okt
    20 Август, 2009, 12:40

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

    'Блок проверки времени торгов. Торги с 10:30 до 18:45.
    H = GET_VALUE(GET_DATETIME(), "Hour")+0 ' +0 меняет строковый тип на вещественный
    M = GET_VALUE(GET_DATETIME(), "Min")+0
    IF (H>10 and H=30) or (H==18 and M<45)
    TempValue=1 'Ваш любой вариант действия
    ELSE
    TempValue=0 'Ваш любой вариант действия
    END IF

  • Сергей из Чебоксар
    26 Август, 2009, 20:51

    INCLUDE mts_func.txt;
    В инструкции по квику в разделе 8 нужно давать полный адрес
    INCLUDE C:/Program Files/mts_func.txt;
    Или если в одной паке, то необезательно?

    И что дает подключение блокнота к программе?

  • 27 Август, 2009, 12:06

    Если в одной папке, то необязательно.
    Подключение какого блокнота? Файла этого? В нём функции вынесены, дополнение так сказать.

  • Александр
    21 Сентябрь, 2009, 12:57

    Я запустил код программы, но при достижении нужной отметки, было написано сообщение "Ура КУИЛ" А вот самой покупки небыло!!!

  • Александр
    21 Сентябрь, 2009, 13:07

    trans_params = set_value (trans_params, "ACCOUNT", "L01-00000F00") 'Это надо менять

    Что именно сюда надо вбивать?

  • 21 Сентябрь, 2009, 13:27

    Свой торговый счет.

  • Александр
    21 Сентябрь, 2009, 14:17

    Ага все понял.. .уже получилось. Я сегодня первый день пытаюсь что-то сделать, и уже смог запустить и настроить прогу что бы она у меня покупала акции сбербанка при достижения необходимой цены. :) Это суперски!

    Иван, скажите пожалуйста где можно взять уроки или хороший самоучитель? Желание есть а материала нету...

  • 21 Сентябрь, 2009, 15:51

    Читайте официальное руководство :)

  • Александр
    21 Сентябрь, 2009, 16:33

    Как на счте дистанционного обучения?

  • Николай
    25 Октябрь, 2010, 20:00

    Добрый вечер !
    Скажите, можно ли написать скрипт для Web Quik,
    С помощью которого можно было бы по e-mail
    открывать сделки.
    Т.е. в мыле пишем по какой бумаге сколько акций купить(продать)
    и посылаем в Web Quik, который исполняет заявку.
    И сколько это будет стоить.
    С уважением, Николай

  • 8 Ноябрь, 2010, 9:28

    Доброго времени суток, Николай.
    Совершение сделок по e-mail можно реализовать в простом QUIK (с WebQuik не работал - не знаю).
    Мне представляется это так:
    1) выбираете почтовую программу, которая в состоянии файлы вложений куда-то сохранять (говорят The Bat может многое, втом числе и это. Я, волею судеб, работаю с Microsoft Outlook. В нем можно написать скрипт который будет сохранит вложения)
    2) в QUIK включаете "Импорт транзакций из файла" (помоему это так называется). Это когда QUIK смотрит наличие текстового файла и если он есть, то выполняет торговую операцию по его содержимому
    Вот вобщем-то и все. Создаете файл транзакций, посылаете его почтой, почтовик сохраняет файл транзакций и QUIK выполняет сделку.