Скрипт, сохраняющий историю.

Страницы: 1
RSS
Скрипт, сохраняющий историю., Я пока учусь :)
 
Хочу сделать скрипт, сохраняющий в файл историю, как с Финама (потом сравню  ;-)  ). Думаю сделать это по данным свечей графика (а как-то иначе можно?).

Для начала помогите, пожалуйста, разобраться с таблицами.
Планирую сделать таблицу, в которую потом будут помещены данные всех свечей с графика. Нужны: год, месяц, число, час, минута, OHLC.
На Си я бы описал структуру с OHLC и прочим, затем объявил бы массив таких структур. А как сделать это на Lua?
 
Вы можете то же самое сделать на lua

Создайте таблицу с целочисленными индексами и присваивайте по этим индексам таблицы с нужными вам полями.

Вот вам готовый скрипт, сохраняющий данные без открытия графиков: http://www.bot4sale.ru/download-categories/2012-06-13-15-10-36/item/kotirovki-s-servera-brokera.html?category_id=70
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Рекомендую
1) поставить на комп луа со SciTE.
2)  без квика на луа сделать простые примеры с таблицами, с циклами, с печатью c фалами.
3)После того, как будет все понятно и просто, переходите к чтению документации по QLua и делайте простые примеры но на квике с таблицами циклами файлами.
4) После того, как будет все понятно и просто, переходите без луа и без квика к написанию своего алгоритма.
5) После того, как будет все понятно и просто с алгоритмом, переходите в QUIK и пишите на луа то о чем мечтаете.
Успехов в обучении
 
Цитата
s_mike@rambler.ru пишет:
Создайте таблицу с целочисленными индексами и присваивайте по этим индексам таблицы с нужными вам полями.
С этим разобрался.

Теперь подскажите, пожалуйста, как получать год, месяц, число, час, минута, OHLC для свечи?
Пытался по справке разобраться, по разделу "Функции для доступа к источнику данных" и "Функции O, H, L, C, V, T", но там всё очень сумбурно - не понял.
 
Цитата
Некто пишет:
Цитата
s_mike@rambler.ru пишет:
Создайте таблицу с целочисленными индексами и присваивайте по этим индексам таблицы с нужными вам полями.
С этим разобрался.

Теперь подскажите, пожалуйста, как получать год, месяц, число, час, минута, OHLC для свечи?
Пытался по справке разобраться, по разделу "Функции для доступа к источнику данных" и "Функции O, H, L, C, V, T", но там всё очень сумбурно - не понял.
разбирайте возврат функции T(). Это таблица, описывающая время
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Некто пишет:
Цитата
s_mike@rambler.ru пишет:
Создайте таблицу с целочисленными индексами и присваивайте по этим индексам таблицы с нужными вам полями.
С этим разобрался.

Теперь подскажите, пожалуйста, как получать год, месяц, число, час, минута, OHLC для свечи?
Пытался по справке разобраться, по разделу "Функции для доступа к источнику данных" и "Функции O, H, L, C, V, T", но там всё очень сумбурно - не понял.
Здравствуйте,
Задачу можно решить без открытия окна с графиком, через функции CreateDataSource и SetUpdateCallback
Пример есть в руководстве QLUA.chm
-Функции взаимодействия скрипта Lua и Рабочего места QUIK
--Функции для работы с графиками
---SetUpdateCallback
 
А я уж начал с getCandlesByIndex возиться... Все темы на этом форуме, в инете, которые через поиск нашел посмотрел, но не нашёл инфу о структуре TABLE t, которую возвращает эта функция. Может, кто подскажет?


Цитата
Sergey Gorokhov пишет:
Задачу можно решить без открытия окна с графиком, через функции CreateDataSource и SetUpdateCallback
А это не "из пушки по воробьям"? Мне всего-то надо раз в день сохранить в файл истории новые данные.


Цитата
s_mike@rambler.ru пишет:
разбирайте возврат функции T().
В разделе справки "Функции O, H, L, C, V, T":
Цитата
Функции в качестве параметра принимают индекс свечи
и пример:
Код
Open = ds: O(1) 
Стыдно спросить, но:
1. Что такое "ds:"?
2. Индекс свечи какого графика (или чего-то другого?) вернёт O(1) ?
 
Цитата
Некто пишет:
А я уж начал с getCandlesByIndex возиться... Все темы на этом форуме, в инете, которые через поиск нашел посмотрел, но не нашёл инфу о структуре TABLE t, которую возвращает эта функция. Может, кто подскажет?
Попробуйте поискать например в документации Qlua.chm
-Функции для работы с графиками
--Функции для работы с графиками
---Функции O, H, L, C, V, T

Цитата
Время свечи возвращается с точностью до миллисекунд в виде таблицы с полями:
{year, month, day, week_day, hour, min, sec, ms, count}
Цитата
Некто пишет:
А это не "из пушки по воробьям"? Мне всего-то надо раз в день сохранить в файл истории новые данные.
Нет это не "из пушки по воробьям" а вполне нормальный доступ к данным.
Цитата
Некто пишет:
1. Что такое "ds:"?
Это то что создается функцией CreateDataSource
Цитата
Некто пишет:
2. Индекс свечи какого графика (или чего-то другого?) вернёт O(1) ?
O вернет не индекс свечи, а значение цены Open свечи под номером 1.
 
Цитата
Sergey Gorokhov пишет:
Попробуйте поискать например в документации Qlua.chm
Я нашёл нужную инфу и закодировал раньше, чем прочёл написанные Вами строки  :D  


Цитата
Sergey Gorokhov пишет:
Нет это не "из пушки по воробьям" а вполне нормальный доступ к данным.
Изучать 2 функции, кодировать код с колбэком, изучать "то что создается функцией CreateDataSource", и т. д. и т. п. вместо элементарного использования getCandlesByIndex? Теперь понятно, почему Quick такой глючный - его программируют не по KISS, а по "вполне нормальным" принципам.

------------------------------------------------------------------------

Теперь мне надо форматированно сохранять данные из таблицы в файл истории. Я подозреваю, что форматирование будет сложнее того, что я делал на Lua раньше.
 
Цитата
Некто пишет:
вместо элементарного использования getCandlesByIndex?
Так в чем проблема, используйте getCandlesByIndex если он больше нравится.
 
Цитата
Sergey Gorokhov пишет:
Цитата
Некто пишет:
вместо элементарного использования getCandlesByIndex?
Так в чем проблема, используйте getCandlesByIndex если он больше нравится.
Кстати у нас даже готовый пример есть:
Скрытый текст
 
Цитата
Sergey Gorokhov пишет:
Кстати у нас даже готовый пример есть:
Просматривая код скрипта, я сразу обратил внимание, что в нём без нужды используется OnInit(), OnStop(), while WORK do. Я делаю без этого.
Запустил скрипт, жду... А он всё работает и работает... Пришлось останавливать.
А выход из while WORK do ... end сделать нельзя?

Резалт работы ВАШЕГО скрипта из выходного файла:

Цитата
DATE,TIME,OPEN,HIGH,LOW,CLOSE,VOL
20030605,000000,8.2,8.269,8.075,8.10205,596600
20030606,000000,8.148,8.189,8.06,8.172,314300
20030609,000000,8.13194,8.27,8.121,8.20197,731000
20030610,000000,8.2,8.23655,7.94,8.02473,1092500
Сразу видно, что время 000000 - это ошибка. Остальное не проверял, нет желания.

Я лучше сам сделаю код, который будет работать правильно, чем юзать уродства, сделанные чёрти как.
Цитата
Некто пишет:
Теперь понятно, почему Quick такой глючный - его программируют не по KISS, а по "вполне нормальным" принципам.
 
Цитата
Некто пишет:
Цитата
DATE,TIME,OPEN,HIGH,LOW,CLOSE,VOL
20030605,000000,8.2,8.269,8.075,8.10205,596600
20030606,000000,8.148,8.189,8.06,8.172,314300
20030609,000000,8.13194,8.27,8.121,8.20197,731000
20030610,000000,8.2,8.23655,7.94,8.02473,1092500
Сразу видно, что время 000000 - это ошибка. Остальное не проверял, нет желания.
Сразу видно что интервал дневной а на нем в принципе не может быть указания времени.
Остальное на Ваше усмотрение
 
Цитата
Некто пишет:
Цитата
Sergey Gorokhov пишет:
Кстати у нас даже готовый пример есть:
Просматривая код скрипта, я сразу обратил внимание, что в нём без нужды используется OnInit(), OnStop(), while WORK do. Я делаю без этого.
Запустил скрипт, жду... А он всё работает и работает... Пришлось останавливать.
А выход из while WORK do ... end сделать нельзя?
Скрипт написан так чтобы постоянно записывать свежие данные. Если это не устраивает никто не запрещает написать так как Вам нужно. Следует понимать разницу между примером и готовой программой под Ваши задачи.
 
Цитата
Некто пишет:
А это не "из пушки по воробьям"? Мне всего-то надо раз в день сохранить в файл истории новые данные.
Тогда это можно сделать гораздо проще - нажать на графике цены правой кнопкой мыши и выбрать пункт меню "Сохранить график в файл"
 
В своём скрипте сначала вызываю getNumCandles(), потом getCandlesByIndex(), потом сравниваю кол-во свечей, которые они вернули.
Для графика Сбера периодов 1 и 2 мин они равны. Для Si getNumCandles() в 21:30 возвращает бОльшее число.
Возможно, это связано с тем, что на FORTS после 19:00 начинается новая сессия?
 
Цитата
Некто пишет:
Для Si getNumCandles() в 21:30 возвращает бОльшее число.
Днём не проверял, завтра посмотрю.
 
Цитата
Некто пишет:
Для графика Сбера периодов 1 и 2 мин они равны. Для Si getNumCandles() в 21:30 возвращает бОльшее число.
Возможно, это связано с тем, что на FORTS после 19:00 начинается новая сессия?
Совершенно верно
 
Цитата
Некто пишет:
Хочу сделать скрипт, сохраняющий в файл историю, как с Финама (потом сравню ).
Как я и хотел, скрипт сохраняет в файл историю в том же формате, что и один из возможных при скачивании с Финама.
Есть только одна сложность: в текущей версии мой код просто сохраняет данные всех свечей на минутном периоде. Чтобы сравнить с файлами Финама, пришлось в текстовом редакторе вырезать данные по трём дням в отдельные файлы. Сравнил - они совпадают байт-в-байт.
Чтобы не возиться с редактированием в текстовом редакторе, я хотел установить через контекстное меню графика Квика ограничение - отображать график за один день, сохранять моим скриптом его данные в файл, потом сравнивать с файлом с Финама с данными за тот же день.
На графике, при настройке в контекстном меню отображать данные за один день, отображаются данные по фьючерсам только до вечерней сессии (кажется, до 18:49). Но мне-то надо до 23:49!

Вопрос: можно ли как-то настроить в Квике отбражение минутных графиков фьючерсов с 10:00 до 23:49?

Если нет, то придётся мне совершенствовать код, чтобы он сам сохранял историю за каждый день по отдельным файлам.
 
Цитата
Некто пишет:
В своём скрипте сначала вызываю getNumCandles(), потом getCandlesByIndex(), потом сравниваю кол-во свечей, которые они вернули.
Для графика Сбера периодов 1 и 2 мин они равны. Для Si getNumCandles() в 21:30 возвращает бОльшее число.
Код
nNumCandles = getNumCandles(sTag)
tChart, nNumCandles = getCandlesByIndex(sTag, 0, 0, nNumCandles)
В обоих случаях должно возвращаться одинаковое число свечей. Если это не так, - ищите ошибку у себя.

Цитата
Некто пишет:
Вопрос: можно ли как-то настроить в Квике отбражение минутных графиков фьючерсов с 10:00 до 23:49?
В настройках графика нет пункта "отображать данные за один день", но есть настройка Intra-day, где указывается нужное время.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Дмитрий пишет:
Совершенно верно
Цитата
Старатель пишет:
В обоих случаях должно возвращаться одинаковое число свечей. Если это не так, - ищите ошибку у себя.
Интересно, кто прав?  :)  

Цитата
Старатель пишет:
В настройках графика нет пункта "отображать данные за один день", но есть настройка Intra-day, где указывается нужное время.
Хотел вставить скриншот, но сценарий страницы глючит, даже браузер "не отвечает". На словах объясню.
Можете без ЭЦП и без подключения к серверу Квик запустить - там ищите.
Контекстное меню графика - "Параметры текущего окна" - появится окно "Настройка параметров диаграммы" - вкладка "Диаграмма" - " Показывать графики" есть пункт "выбрать с" - можно выбрать на определённый день, но только до 18:45, так что, хоть там и
Цитата
Старатель пишет:
нет пункта "отображать данные за один день"
однако, есть пункт с другим названием, но отображающий данные именно за один день.

Цитата
Старатель пишет:
есть настройка Intra-day, где указывается нужное время.
Видимо, это может подойти тем, кто каждый день будет сохранять историю после 23:49. Приятного им времяпрепровождения.
 
Цитата
Некто пишет:
Интересно, кто прав?
Я думал, что Вы сравниваете количество свечей на двух графиках Сбера между собой, а потом с графиком Si.
 
Цитата
Некто пишет:
Контекстное меню графика - "Параметры текущего окна" - появится окно "Настройка параметров диаграммы" - вкладка "Диаграмма" - " Показывать графики" есть пункт "выбрать с" - можно выбрать на определённый день, но только до 18:45
Там можно выбрать любое время. Это поле редактируемое.
Цитата
Некто пишет:
Цитата
Старатель пишет:
есть настройка Intra-day, где указывается нужное время.
Видимо, это может подойти тем, кто каждый день будет сохранять историю после 23:49 . Приятного им времяпрепровождения.
Сохранять историю с помощью getCandlesByIndex, изменяя каждый раз дату-время графика в настройках, - в любом случае не самое приятное времяпрепровождение   :D  
Проще сохранять историю с помощью CreateDataSource: написал скрипт, запустил один раз и забыл. Остальное он сам сделает.
Надо делать так, как надо. А как не надо - делать не надо.
Страницы: 1
Читают тему
Наверх