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

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

Есть такой не совсем быстрый, но очень простой способ создания советников (да и роботов, но надо знать 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, вот так:

И назначить ей следующие поля и источники данных:

В поле «Заголовки столбцов» должны быть поля как на рисунке. В поле «Заголовки строк» необходимо поместить те инструменты, которые планируется выводить по DDE. Выглядеть всё должно вот так:

Далее создаём в Quik график того инструмента, который будем выводить по DDE. Именно с тем таймфреймом, который требуется. Это нужно чтобы Quik начал заказывать с сервера брокера соответствующие данные. В нашем случае это будет Сбербанк обыкновенный:

Далее открываем генератор скриптов и переносим в него необходимые данные, смотря на нашу таблицу текущих параметров:

Параметр 1 — это префикс к файлу со скриптом, который нужно придумать самому. Это также будущее имя скрипта внутри Quik. Т.ч. не стоит называть два скрипта одним именем. Параметры 2,3,5 — переносим из таблицы текущих параметров Параметр 4 — таймфрейм инструмента. Нажав на кнопку «Указать», отмеченную цифрой 6, надо указать Exeшник Quik, вот так: После чего можно нажимать кнопку создать: Если всё нормально, то в этот момент в папке с Quik будет создан файл скрипта и появиться окошко с подтверждением операции:

Далее надо снова зайти в Quik и пройти по меню вот сюда:

В появившемся меню надо найти в корне Quik наш скрипт и выбрать его: В следующем меню выбираем наш скрипт в таблице «Доступные портфели» и нажимаем загрузить локально: После чего закрываем окно. Далее идём по главному меню Quik вот сюда: Появится окно: 1) выбираем в таблице «Доступные портфели» наш портфель; 2) Нажимаем на кнопку «Добавить всё». 3) Нажимаем кнопку «Да».

И наконец-то можем наблюдать таблицу с нужными нам данными:

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

1. Создаём файл Excel в корне Quik (можно где угодно, но мне так удобнее): 1) Я создал файл ExportTest в корне Quik 2) Переименовал один из его листов в ListSber 3) Сохранил изменения.

Идём опять в Quik и тыкаем нашу таблицу правой кнопкой мыши: Во всплывающем меню выбираем «Вывод через DDE сервер». Появиться следующее меню: 1) Жмём на кнопку ". " и находим в меню наш файл Excel, который мы недавно создали. В нашем случае это «ExportTest». 2) Вводим вкладку, на которую будут транслироваться данные. В нашем случае это «ListSber». 3) Проверяем чтобы стояла галочка «Запускать приложение DDE сервера автоматически» 4) Нажимаем «Начать вывод» Окошко должно выглядеть следующим образом:

Теперь смотрим в наш файл 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: Скрипт создаёт таблицы свечей с таймфреймом максимум часовым. К сожалению мне выше таймфреймы не нужны и я особо не парился по этому поводу. Если у кого-то есть скрипт для выгрузки дней/недель, будьте добры дайте ссылку, родина вас не забудет.

  • Ключевые слова: , , , ,
  • хорошо
  • 42
  • 14 сентября 2014, 10:41
  • 14 сентября 2014, 23:34
  • 14 сентября 2014, 10:59

Попробуйте запустить экспорт хотя бы 10 тикеров. Тслаб имхо уделывает по скорости и удобству такой вариант.

Цимес роботов в екселе это когда бары не нужны, работа с ттп по большому числу инструментов например.

  • 14 сентября 2014, 10:59

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

Поэтому если нужна 100% точность свечей, лучше самому качать таблицу сделок по DDE и строить свечи с помощью того же vBA.

  • 14 сентября 2014, 12:29
  • 14 сентября 2014, 12:44
  • 14 сентября 2014, 13:22
  • 14 сентября 2014, 13:53
  • 14 сентября 2014, 12:45
  • 14 сентября 2014, 12:57
  • 14 сентября 2014, 14:37

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 килорублей. Доступна на множестве торрентов.

  • 15 сентября 2014, 06:15
  • 14 сентября 2014, 13:36
  • 14 сентября 2014, 14:56
  • 14 сентября 2014, 16:50
  • 14 сентября 2014, 16:53
  • 14 сентября 2014, 20:18

PORTFOLIO_EX IM 6; DESCRIPTION IM 6; CLIENTS_LIST ALL_CLIENTS; FIRMS_LIST ALL_FIRMS;

' Настраиваемые параметры 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 (»Не найдены котировки до рождества Христова! ",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

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

📎📎📎📎📎📎📎📎📎📎