Алексей Ван <o-s-a.net>
Алексей Ван <o-s-a.net> личный блог
14 сентября 2014, 10:09

Экспорт котировок из 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:
    Скрипт создаёт таблицы свечей с таймфреймом максимум часовым. К сожалению мне выше таймфреймы не нужны и я особо не парился по этому поводу. Если у кого-то есть скрипт для выгрузки дней/недель, будьте добры дайте ссылку, родина вас не забудет.
 
32 Комментария
  • Евгений Макеев
    14 сентября 2014, 10:41
    Спасибо!
  • sozday
    14 сентября 2014, 10:59
    ++++++++++++
  • quant_trader
    14 сентября 2014, 10:59
    Попробуйте запустить экспорт хотя бы 10 тикеров. Тслаб имхо уделывает по скорости и удобству такой вариант.

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

    Поэтому если нужна 100% точность свечей, лучше самому качать таблицу сделок по DDE и строить свечи с помощью того же vBA.
  • XXM
    14 сентября 2014, 12:44
    За труд по описанию своих трудов в области смычки QUIK + QPILE + DDE + Excel плюс безусловный. Сам когда-то на Excel VBA написал опционного сторожа с дельта-хэджированием. Но ненадежность связи QUIK + Excel через DLL (регулярные потеря связи без объявления) и необходимость визуального мониторинга этой связки заставили раз и навсегда отказаться от этого способа.
    • Скальпёр
      14 сентября 2014, 13:22
      XXM, отказались от этого способа, а теперь какой способ используете?
      • XXM
        14 сентября 2014, 13:53
        URKA, LUA. Это лучше, что может быть для QUIK на сегодня. После Excel пытал QPILE — не айс, C# — лучше, но там трудов надо вкладывать очень много.
        На LUA роботы пишутся намного легче, надежность достигается меньшими затратами и более простыми методами. В профиле сайт, там демо-версия (работоспособная) робота.
  • Vladimir2803
    14 сентября 2014, 12:45
    Подскажите пожалуйста, а можно ли наоборот на основе данных из excel построить график в Quik или какой нибудь еще программе?
      • Vladimir2803
        14 сентября 2014, 14:37
        Алексей Ван, С VBA только начал знакомиться, использую его и макросы в excel. А если например знаешь VBA то что теоретически можно сделать, какие программы нужно использовать?
  • Фома Фомич
    14 сентября 2014, 13:36
    Очень познавательно. Всегда лень было добираться до внутренностей Квика. Спасибо.
  • A3_ECM
    14 сентября 2014, 14:56
    есть такой же скрипт на кпайле. и запускается все в квике на много проще.
    или в таком способе создания и вывода котировок в ексель есть какое то преимущество?
      • gruffff
        14 сентября 2014, 16:53
        Алексей Ван, ок.
      • SerWer
        14 сентября 2014, 20:18
        Алексей Ван, а как выводить в цифре данные индикаторов в excel, кто нибудь подскажет? Есть ли какая прога?
  • A3_ECM
    14 сентября 2014, 15:00
    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
    • SerWer
      14 сентября 2014, 20:22
      A3_ECM, Будьте добры объясните хоть в двух словах, что это? А как выводить в цифре данные индикаторов в excel, кто нибудь подскажет? Есть ли какая прога?
      • A3_ECM
        14 сентября 2014, 20:58
        SerWer, скрипт на кпайле для вывода параметров свечей из квика в эксель.
      • A3_ECM
        14 сентября 2014, 21:01
        SerWer, наверное есть скрипты и для вывода данных индикаторов. надо в инете искать или заказывать за бабосы.
  • Рома Н.К.
    14 сентября 2014, 18:06
    ++++
  • SoftAlgoTrade
    14 сентября 2014, 22:40
    Алексей, Вы безусловно молодец! Очень много сил вкладываете в такие сложные схемы. Но через полгода или того раньше, когда уровень алгомастерства вырастет и захотите стабильности, скорости, гибкости и прозрачности для своих торговых систем, то поймете, что все ранее созданные наработки были совершенно бесполезны. Такого рода схемы не имеют серьезного будущего. На текущий момент самая лучшая и надежная схема связки с Квиком:
    Lua->WCF->C#
    Сложно? А по другому никак. Это тоже самое, что пытаться управлять космическим кораблем, но при этом отучиться только на управление автомобилем.
      • SoftAlgoTrade
        15 сентября 2014, 09:48
        Алексей, да, никаких претензий нет. Про опыт в алготрейдинге и так не много пишут и, конечно, Ваши статьи кому-нибудь помогут. Как минимум можно прикинуть способы связки с терминалом. Так что респект!
        Исходя из своего опыта могу сказать, что мне жаль время потраченное на начальных этапах на Qpile, Excel и прочие костыли. Они реально имеют очень низкий КПД.
        Просто для тех кто серьезно хочет торговать хочу обратить внимание на то, что низкоуровневые языки программирования изучать придется. Никуда от этого не деться. Лучше, конечно, С++ или С#. Ничего в них страшного нет. К примеру я с абсолютного нуля до более-менее приемлемого уровня научился самостоятельно писать примерно за полгода. И это без отрыва от основной работы! А если у меня получилось, значит и у 90% здесь присутствующих получится.
        Желаю всем в этом развитии удачи!
  • Zorg
    14 сентября 2014, 23:13
    Алексей, спасибо огромное! Давно понятно, что алготорговля это то, к чему придется прийти в конце концов каждому трейдеру. А Ваши статьи позволяют сделать первый шаг многим из нас.
    +++++
  • broker25
    18 сентября 2014, 11:16
    Добрый день. Спросил у Саро но интересно также ваше мнение.
    Какое у вас проскальзывание по основным фишкам?
    Как считаете проскальзывание: от расчетной цены или от первого своего бида?
    Не пробовали ставить заявки на 5-10 минут раньше/позже расчетного конца таймфрема?
  • Trader M12
    30 сентября 2015, 15:35
    Спасибо за программу!
    Можно ли добавить поддержку дневных таймфреймов?
  • Andrey_007
    18 декабря 2019, 18:22
    Благодарю!

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн