Блог им. Tyam

Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel

    В этой статье будет показано, как вывести свечи из Quik в Excel. Кроме того я представлю генератор скрипта для создания таблиц свечей в Quik, с открытым кодом на C#. Он нужен чтобы не разбирать Qple, при выводе свечек из Quik. А это основной затык, в этой простейшей связке. Опишу процесс работы с QuikTableScriptGenerator (далее «генератор скриптов») и дальнейший процесс вывода свечей по DDE в Excel. Всё в картинках и очень подробно. Думается, что всё вместе это поможет хоть немного алгоритмизироваться огромному множеству трейдеров.
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
plan:
1) Введение;
2) Как создать таблицу со свечками в Quik при помощи «генератора скриптов»;
3) Как вывести таблицу из Quik в Excel;
4) Программисту;
5)...;
6) profit.

1 Вместо введения

    Есть такой не совсем быстрый, но очень простой способ создания советников (да и роботов, но надо знать VBA), при котором данные из Quik импортируются по DDE в EXCEL и там происходит их разбор и приведение к каким-то производным. Excel с его «умными» таблицами для этого подходит очень даже хорошо. Вывод по DDE в Quik реализован прекрасно и делается всё в два клика. Простые какие-то графики с производными и прочие расчёты можно и нужно делать в Excel, если нет желания учить несколько лет C# или разбирать несколько месяцев TSLab.


    Когда только думал начать писать торговых роботов, четыре года назад, думал попробовать именно с такого способа. Мне нужны были данные о приращении цен множества инструментов относительно индекса по минутам, за последний час. Тогда я думал, что это будет прорывом в моём Скальпинге. Йохохо… Однако сразу же нарвался на очень большие и на тот момент для меня не преодолимые грабли. Стандартными способами невозможно вывести свечи из Quik по DDE, потому как свечи не хранятся в программе в виде таблиц, а экспортировать можно только их (таблицы). На тот момент в сети ещё не было на каждом шагу этих скриптов преобразующих свечи в таблицы, и плюс их надо редактировать вручную, а для этого понимать Qple хоть чуть — чуть. К чему я был совершенно не готов.  
 
    Четыре года спустя...© у меня в платформе давно реализован генератор скриптов и я хочу им поделиться.
Скачиваем со страницы: sib-algo.ru/?p=162
Что в архиве:
1) Генератор скриптов. Язык реализации C#;
2) Этот пост вместо инструкции;
3) Открытая лицензия.
 

 2 Как создать таблицу со свечками в Quik при помощи «генератора скриптов»

    Для начала нам нужно создать текущую таблицу параметров в Quik, вот так:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
 
И назначить ей следующие поля и источники данных:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
 
В поле «Заголовки столбцов» должны быть поля как на рисунке. В поле «Заголовки строк» необходимо поместить те инструменты, которые планируется выводить по DDE.
Выглядеть всё должно вот так:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
 
    Далее создаём в Quik график того инструмента, который будем выводить по DDE. Именно с тем таймфреймом, который требуется. Это нужно чтобы Quik начал заказывать с сервера брокера соответствующие данные. В нашем случае это будет Сбербанк обыкновенный:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
 
    Далее открываем генератор скриптов и переносим в него необходимые данные, смотря на нашу таблицу текущих параметров:
Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel 
 
Параметр 1 — это префикс к файлу со скриптом, который нужно придумать самому. Это также будущее имя скрипта внутри Quik. Т.ч. не стоит называть два скрипта одним именем...
Параметры 2,3,5 — переносим из таблицы текущих параметров
Параметр 4 — таймфрейм инструмента.
Нажав на кнопку «Указать», отмеченную цифрой 6, надо указать Exeшник Quik, вот так:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
После чего можно нажимать кнопку создать:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
    Если всё нормально, то в этот момент в папке с Quik будет создан файл скрипта и появиться окошко с подтверждением операции:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
 
Далее надо снова зайти в Quik и пройти по меню вот сюда:
Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel 
 
В появившемся меню надо найти в корне Quik наш скрипт и выбрать его:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
В следующем меню выбираем наш скрипт в таблице «Доступные портфели» и нажимаем загрузить локально:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
    После чего закрываем окно.
    Далее идём по главному меню Quik вот сюда:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
Появится окно:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
1) выбираем в таблице «Доступные портфели» наш портфель;
2) Нажимаем на кнопку «Добавить всё».
3) Нажимаем кнопку «Да».
 
И наконец-то можем наблюдать таблицу с нужными нам данными:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
 

3 Выводим таблицу из Quik в Excel

1. Создаём файл Excel в корне Quik (можно где угодно, но мне так удобнее):
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
    1) Я создал файл ExportTest в корне Quik
    2) Переименовал один из его листов в ListSber
    3) Сохранил изменения.
 
    Идём опять в Quik и тыкаем нашу таблицу правой кнопкой мыши:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
    Во всплывающем меню выбираем «Вывод через DDE сервер».
    Появиться следующее меню:
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
1) Жмём на кнопку "..." и находим в меню наш файл Excel, который мы недавно создали. В нашем случае это «ExportTest».
2) Вводим вкладку, на которую будут транслироваться данные. В нашем случае это «ListSber».
3) Проверяем чтобы стояла галочка «Запускать приложение DDE сервера автоматически»
4) Нажимаем «Начать вывод»
    Окошко должно выглядеть следующим образом:
Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel 
 
Теперь смотрим в наш файл Excel И...
 Экспорт котировок из Quik в Excel. БЕСПЛАТНЫЙ и ОТКРЫТЫЙ Генератор Qple скриптов для создания таблицы свечей и инструкция по их экспорту в Excel
Наблюдаем за таблицей свечей.
    Самое главное в этом процессе, это спокойствие и чёткое соблюдение инструкции. Если что-то не получилось, нужно расслабиться и прочитать ещё раз список действий. Повторюсь:
1) Создаём таблицу текущих параметров с инструментом который хотим вывести;
2) Создаём график инструмента, который планируется выводить. Таймфрейм также должен совпадать с тем, который будем выводить;
3) Загружаем генератор скрипта и аккуратно  заполняем все поля. Указываем местоположение Quik и создаём скрипт;
4) Подгружаем наш скрипт/потрфель в Quik. Активизируем его для просмотра. И создаём таблицу свечей;
5) Создаём Excel файл;
6) Настраиваем вывод по DDE;
7) Радуемся жизни...
 
Проблемы могут возникнуть, в случае если в папку с Quik запрещена запись либо «генератор скриптов» открыт не от лица администратора. Так что, прежде всего, необходимо это дело проверить и исправить.
 

4 Программисту

    Если ты всё ещё редактируешь скрипты вручную (ФИ!), то можно взять из представленного проекта два класса QuikScriptGenerator.cs и QuikScriptGeneratorUI.cs и, переименовав их namespace на свой, использовать их для этого. Как их использовать смотри в program.cs. Там происходит создание объекта «генератор скрипта» и вызов его меню. Всё очень и очень просто.
  

5 Начинающему программисту

     Эти же скрипты и таблицы можно использовать для вывода свечей по DDE в свои приложения и платформы (как это у меня происходит в обёртке для Quik), для этого нужно развернуть свой DDE сервер, о чём я напишу немного позже. Поэтому тренируйся пока на Excel, сохрани ссылку на этот блог, поставь плюс статье и иди за попкорном.
 
upd:
    Скрипт создаёт таблицы свечей с таймфреймом максимум часовым. К сожалению мне выше таймфреймы не нужны и я особо не парился по этому поводу. Если у кого-то есть скрипт для выгрузки дней/недель, будьте добры дайте ссылку, родина вас не забудет.
 
★146
32 комментария
Спасибо!
avatar
Это 5+
avatar
++++++++++++
avatar
Попробуйте запустить экспорт хотя бы 10 тикеров. Тслаб имхо уделывает по скорости и удобству такой вариант.

Цимес роботов в екселе это когда бары не нужны, работа с ттп по большому числу инструментов например.
avatar
Полезный продукт для «неспешных» роботов. Только одна проблема у qpile, экспортирующего бары из графиков: последняя свеча после попадания в Excel может меняться до появления новой несколько раз. Просто графики в квике строят свечу по времени, а потом изменяют ее в случае появления ранее незакаченных сделок из последней свечи. И окончательная свеча формируется только появления новой последней (может и раньше, но для минуток были случае изменений до появления следующей минуты).

Поэтому если нужна 100% точность свечей, лучше самому качать таблицу сделок по DDE и строить свечи с помощью того же vBA.
avatar
За труд по описанию своих трудов в области смычки QUIK + QPILE + DDE + Excel плюс безусловный. Сам когда-то на Excel VBA написал опционного сторожа с дельта-хэджированием. Но ненадежность связи QUIK + Excel через DLL (регулярные потеря связи без объявления) и необходимость визуального мониторинга этой связки заставили раз и навсегда отказаться от этого способа.
avatar
XXM, отказались от этого способа, а теперь какой способ используете?
avatar
URKA, LUA. Это лучше, что может быть для QUIK на сегодня. После Excel пытал QPILE — не айс, C# — лучше, но там трудов надо вкладывать очень много.
На LUA роботы пишутся намного легче, надежность достигается меньшими затратами и более простыми методами. В профиле сайт, там демо-версия (работоспособная) робота.
avatar
Подскажите пожалуйста, а можно ли наоборот на основе данных из excel построить график в Quik или какой нибудь еще программе?
avatar
Vladimir2803, Наверняка можно. Там вроде в Quik сейчас интерпретатор LUA ещё и не такие штуки вполне может делать. Но это надо с экспертом говорить. Только зачем нужно экспортировать в Quik графики, ума не приложу…
Ну а насчёт других программ, то это вообще проще париной репы, конечно если знаешь VBA или C#.
Алексей Ван, С VBA только начал знакомиться, использую его и макросы в excel. А если например знаешь VBA то что теоретически можно сделать, какие программы нужно использовать?
avatar
Vladimir2803, Есть такая платформа для программирования, называется Visual Studio. В ней можно создавать программы используя довольно широкий спектр языков, включая Visual Basic (Это родитель Visual Basic for Applications (VBA)). Эти языки очень похожи и думается, не составит труда перейти с VBA на VB.

Visual Studio позволяет создавать свои интерфейсы в два клика. Для этого в ней есть несколько Frameworks (дополнений) для создания интерфейсов. Самый простой из них это Windows Forms.

Если освоить эти технологии, то можно пристраивать как к Excel свои приложения, т.к. коммуникация между ним и программами из .Net(написанными на Visual Studio) очень простая, так и вовсе убрать Excel из этой связки и перегонять данные напрямую в свои приложения.

Вот сайт с нужными книжками:
progbook.ru/visual_basic/
Желательно, чтобы в заголовке присутствовало слово .Net, а в содержании Visual Studio и Windows Forms. Так победим.

upd:
Visual Studio не обязательно покупать за 60 килорублей. Доступна на множестве торрентов.
Очень познавательно. Всегда лень было добираться до внутренностей Квика. Спасибо.
avatar
есть такой же скрипт на кпайле. и запускается все в квике на много проще.
или в таком способе создания и вывода котировок в ексель есть какое то преимущество?
avatar
A3_ECM, Привет.
Перечитай (прочитай), первый абзац.
Это и есть скрипт на Qple. Только его руками не надо редактировать.
))
Алексей Ван, ок.
avatar
Алексей Ван, а как выводить в цифре данные индикаторов в excel, кто нибудь подскажет? Есть ли какая прога?
avatar
PORTFOLIO_EX IM 6;
DESCRIPTION IM 6;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;

PROGRAM

' Настраиваемые параметры
ClassCodeList=«SPBFUT» ' код класса инструмента
Instrument=«RIU4» ' название инструмента
Interval=6 ' интервал (таймфрейм) на графике
DayToFind=35 ' сколько дней назад искать свечи (можно уменьшить, чтобы ускорить работу программы)
CandleToFind=3200' сколько свечей надо найти

OutFile = «c:\zzzzz.csv» ' файл, куда записывать данные в формате CSV
DELETE_ALL_ITEMS()
CandleCount=0
CurYear=get_value(GET_DATETIME(), «YEAR»)
CurMonth=get_value(GET_DATETIME(), «MONTH»)
CurDay=get_value(GET_DATETIME(), «DAY»)
CurHour = GET_VALUE(GET_DATETIME(), «Hour»)
CurMin = GET_VALUE(GET_DATETIME(), «Min»)
CurMin = Interval*Floor(CurMin/Interval) ' округляем минуты до «интервальных»

ID=«ID6» 'идентификатор графика

for i from 1 to (DayToFnd*24)*(Floor60/Interval))
TextDat=fTextData(CurYar,CurMonthCurDay) &""
TextTime=fTextTime(CurHour,CurMin) & ""
if (CandleCountdleToFind) ' если нашли сколько нам надо свяем пустой цикл
Candle=GET_CANDLE(ClassCodeList,Instrument, "", Interval & "", E", TextData, TextTime)
Open=GET_VALUE (Candle, «Open»)+0
if (Open>0)
CandleCount=CandleCount+1
High=GET_VALUE (Candle, «High»)+0
Low=GET_VALUE (Candle, «Low»)+0
Close=GET_VALUE (Candle, «Close»)+0
Volume=GET_VALUE (Candle, «Volume»)+0

o1=0+GET_VALUE(GET_VALUE(GET_CANDLE_EX(ID,TextData,TextTime),«LINES»),«OPEN»)
h1=0+GEE(GET_VALUE(GET_CANDLE_EX(ID,TextData,TextTime),«LINES»),«HIGH»)
l1=+GET_VALUE(GET_VALUE(GET_CANDLE_EX(ID,TextData,TextTime),«LINES»),«LOW»)
c1=0+GETVALUE(GT_VALUE(GET_CANDLE_EX(ID,TextData,TextTime),«LI),»CLOSE")
v1=0+GET_VALUE(GET_VALUE(GET_CANDLE_EX(ID,TextData,TextTime),«LINES»),«VOLUME»)

output=CREATE_MAP()
output=SET_VALUE(output,«Date»,TextData)
output=SET_VALUE(output,«Time»,TextTime)
'output=SET_VALUE(output,«Open»,Open)
'output=SET_VALUE(output,«High»,High)
'output=SET_VALUE(output,«Low»,Low)
'output=SET_VALUE(output,«Close»,Close)
'output=SET_VALUE(output,«Volume»,Volume)
output=SET_VALUE(output,«Open»,o1)
output=SET_VALUE(output,«High»,h1)
output=SET_VALUE(output,«Low»,l1)
output=SET_VALUE(output,«Close»,c1)
output=SET_VALUE(output,«Volume»,v1)
ADD_ITEM(CandleCount,output)
WRITELN(OutFile, TextData & "," & TextTime & "," & Open & "," & High & "," & Low & "," & Close)
end if
' откат на «интервал назад
CurMin=CurMn-Interval
if CurMn<0
CurMin=60+CurMin
CuHour=CuHour-1
if CurHour<0
CurHour=23
CurDay=CurDay-1
if curDay<1
CurDay=31
CurMonth=CurMonth-1
if CurMonth<1
CurMonth=12
CurYear=CurYear-1
if CurYear<0
message (»Не найдены котировки до рождества Христова! :-D",1)
end if
end if
end if
end if
end if
end if
end for

' функция перевода даты в текстовый формат
func fTextData(Year,Month,Day)
if (LEN(Month) < 2)
Month = «0» & Month
end if
if (LEN(Day) < 2)
Day = «0» & Day
end if
result = Year & Month & Day
end func

' функция перевода времени в текстовый формат
func fTextTime(Hour,Min,Sec)
if (LEN(Hour) < 2)
Hour = «0» & Hour
end if
if (LEN(Min) < 2)
Min = «0» & Min
end if
result = Hour & Min & «00»
end func

END_PROGRAM

PARAMETER Time;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Время;
PARAMETER_TYPE STRING(30);
END
PARAMETER High;
PARAMETER_TITLE High;
PARAMETER_DESCRIPTION High;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER Low;
PARAMETER_TITLE Low;
PARAMETER_DESCRIPTION Low;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER Open;
PARAMETER_TITLE Open;
PARAMETER_DESCRIPTION Open;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER Close;
PARAMETER_TITLE Close;
PARAMETER_DESCRIPTION Close;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER Volume;
PARAMETER_TITLE Volume;
PARAMETER_DESCRIPTION Volume;
PARAMETER_TYPE NUMERIC(10,0);
END

END_PORTFOLIO_EX
avatar
A3_ECM, Будьте добры объясните хоть в двух словах, что это? А как выводить в цифре данные индикаторов в excel, кто нибудь подскажет? Есть ли какая прога?
avatar
SerWer, скрипт на кпайле для вывода параметров свечей из квика в эксель.
avatar
SerWer, наверное есть скрипты и для вывода данных индикаторов. надо в инете искать или заказывать за бабосы.
avatar
++++
avatar
Алексей, Вы безусловно молодец! Очень много сил вкладываете в такие сложные схемы. Но через полгода или того раньше, когда уровень алгомастерства вырастет и захотите стабильности, скорости, гибкости и прозрачности для своих торговых систем, то поймете, что все ранее созданные наработки были совершенно бесполезны. Такого рода схемы не имеют серьезного будущего. На текущий момент самая лучшая и надежная схема связки с Квиком:
Lua->WCF->C#
Сложно? А по другому никак. Это тоже самое, что пытаться управлять космическим кораблем, но при этом отучиться только на управление автомобилем.
avatar
SoftAlgoTrade, Не совсем по адресу претензия.
Я уже давно на C# и разрабатываю для себя алгоритмы на основе машинного обучения. Почитайте мои предыдущие статьи.
Этот же пост для начинающих алготрейдеров. Пишу о том, что бы мне самому было бы очень полезно 4 года назад.
По LUA нет ещё открытых кодов, а учить его нет никакого желания. Меня DDE + Trans2Quik.dll вполне устраивали, когда я торговал через Quik.
Алексей, да, никаких претензий нет. Про опыт в алготрейдинге и так не много пишут и, конечно, Ваши статьи кому-нибудь помогут. Как минимум можно прикинуть способы связки с терминалом. Так что респект!
Исходя из своего опыта могу сказать, что мне жаль время потраченное на начальных этапах на Qpile, Excel и прочие костыли. Они реально имеют очень низкий КПД.
Просто для тех кто серьезно хочет торговать хочу обратить внимание на то, что низкоуровневые языки программирования изучать придется. Никуда от этого не деться. Лучше, конечно, С++ или С#. Ничего в них страшного нет. К примеру я с абсолютного нуля до более-менее приемлемого уровня научился самостоятельно писать примерно за полгода. И это без отрыва от основной работы! А если у меня получилось, значит и у 90% здесь присутствующих получится.
Желаю всем в этом развитии удачи!
avatar
Алексей, спасибо огромное! Давно понятно, что алготорговля это то, к чему придется прийти в конце концов каждому трейдеру. А Ваши статьи позволяют сделать первый шаг многим из нас.
+++++
avatar
Добрый день. Спросил у Саро но интересно также ваше мнение.
Какое у вас проскальзывание по основным фишкам?
Как считаете проскальзывание: от расчетной цены или от первого своего бида?
Не пробовали ставить заявки на 5-10 минут раньше/позже расчетного конца таймфрема?
avatar
broker25, Привет.
1) по проскальзыванию:
Понятия не имею.
Во время тестирования никак не считаю, т.к. IMHO это замутняет понимание результатов.
Во время торговли уже поздно считать. Выставляюсь в центр стакана и стою там. Исполнилось — хорошо. Ушла цена — ну и не нада. Зачем его считать отдельно во время торгов? Результат и так видно в вариационке и движениям по счёту. Но это всё не значит что это правильно, просто я ленив в каких то местах.
2) по раннему закрытию свечек:
Пробовал. Получилось. Всегда теперь так делаю. Перед закрытием сессии и перед клирингами. Просто надо раньше закрыть свечку и передать массив торговому алгоритму на обработку. Т.к. я пишу сам роботов на C# это вообще не проблема.
upd: Да, кстати. У меня же в роботах скальперский привод встроенный. Можно вообще в любой момент открыть или закрыть позицию.
Спасибо за программу!
Можно ли добавить поддержку дневных таймфреймов?
avatar
Благодарю!
avatar

теги блога Алексей Ван <o-s-a.net>

....все тэги



UPDONW
Новый дизайн