Чтобы искать быстро, могу посоветовать искать не сначала таблицы сделок, а с конца, так как искомая сделка скорее всего последняя.
Unknown error
Пользователь
Сообщений: Регистрация: 30.01.2015
26.01.2018 20:05:41
Это ошибка, которую никто не ловит. как правило ошибка на уровне нативного кода или на уровне ОС. возможно что ошибка железа, например перегрев CPU, сбой памяти где находится программа пользователя и т д ------------------------------------- "О сколько нам открытий чудных готовят просвещенья дух и опыт, сын ошибок трудных.."
Очистка таблиц Quikа по OnCleanUp может вырубить скрипт. Как уберечься?
Пользователь
Сообщений: Регистрация: 30.01.2015
28.12.2017 05:53:40
колбеки вызываются из терминала Это вызов функций, которые расположены в скриптах Следовательно колбек приходит из терминала в VMLua.
Очистка таблиц Quikа по OnCleanUp может вырубить скрипт. Как уберечься?
Николай Камынин написал: Как я понимаю, так как колбеки работают в одном потоке, то будет очередность.
Николай, читайте внимательней. Речь про колбеки в сравнении с main. Между колбеками и main очередности нет.
Цитата
Николай Камынин написал: Что есть истина?
колбеки выполняются в том порядке как они поступили в терминал QUIK. Если один колбек затормозит, то накопится очередь, которая потом исполнится в том порядке в каком они поступили.
Тогда поясните откуда колбеки поступают в терминал? Спасибо.
Очистка таблиц Quikа по OnCleanUp может вырубить скрипт. Как уберечься?
Пользователь
Сообщений: Регистрация: 30.01.2015
27.12.2017 08:30:26
Добрый день, Уточните относительно утверждения об очередности, что ее нет. ----------------- Как я понимаю, так как колбеки работают в одном потоке, то будет очередность. Полагаю, что их очередность либо определяется порядком появления их в скрипте, либо заранее установленным порядком их обхода внутри терминала. Что есть истина? спасибо
Как запустить колбек не сразу?
Пользователь
Сообщений: Регистрация: 30.01.2015
16.12.2017 17:44:43
или так: Function OnParam(xxx) if enabled then -- process callback logic end end
7.2 Функции и глобальные переменные скрипта
индикатора
.. .
7.2 . 2 OnCalculate
.. .
Формат вызова:
NUMBER v1 [, NUMBER vn] OnCalculate(NUMBER index)
Параметры:
• index – индекс свечки в источнике данных. Начинается с « 1 ».
Если значение vi не определено, то функция возвращает nil в качестве значения линии на интервале index.
.. .
7.2 . 4 Функции для доступа к источнику данных
• Функции для доступа к источнику данных O, H, L, C, V, T принимают в качестве параметра
индекс свечи и возвращают соответствующее значение в формате:
NUMBER < название функции > (NUMBER index)
• Функция Size возвращает текущее количество свечек в источнике данных. Формат функции:
NUMBER Size ()
Уважаемые разработчики QUIK! Как мне кажется, большая часть пользователей, только начинающих изучать QLua, читая в документации слово "свечка", изначально для всех типов скриптов воспринимают это понятие в том смысле, как это определено для CreateDataSource. И лишь потратив впустую много времени и сил, осознают, что такое понимание "свечки" не имеет ничего общего с интервалами времени на диаграмме графика для скрипта индикатора.
Я уже неоднократно предлагал Вам не вводить пользователей в заблуждение в отношении index в OnCalculate и функции Size для скрипта индикатора, а четко указать в документации:
1. "7.2.2 OnCalculate ... • index – номер интервала на шкале времени в окне диаграммы графика, для которого необходимо вычислить значение индикатора. Начинается с «1». Если значение vi не определено, то функция должна вернуть nil в качестве значения линии на интервале index. ... При перезапуске расчета индикатора Quik вызывает OnCalculate с index = 1 вне зависимости от того, определены или нет данные для инструмента для первого интервала диаграммы графика. Можно описать ситуации, когда Quik "перезапускает" расчет индикатора.
2. "7.2.4 Функции для доступа к источнику данных • Функции для доступа к источнику данных O, H, L, C, V, T принимают в качестве параметра индекс интервала на шкале времени в окне диаграммы графика и возвращают соответствующее для времени интервала значение инструмента, если оно определено, в формате: NUMBER <название функции>(NUMBER index). Определить имеются ли данные инструмента для указанного интервала можно вызвав функцию CandleExist. Если данные инструмента для указанного интервала отсутствуют, то функции O, H, L, C, V возвращают «nil», а функция T – время указанного интервала.
• Функция Size возвращает количество интервалов на шкале времени, используемых для отображения в окне диаграммы графика, с учетом пустых интервалов."
"Интервал на шкале времени диаграммы графика" можно "обозвать" как-то по-другому, например, "временн о й интервал диаграммы графика" или как-то еще. Но надо четко развести понятия номер свечки инструмента и номер интервала.
Вы все правильно написали, за исключением одного. Вы не дали определение свечки. Прикольно то, что многие начинающие и не только не понимают и это. Все дело в том, что этим словом называют графическое изображение четырех индикаторов. Поэтому вполне логично, что в рамках вашего изложения свечка - это индикатор (даже четыре). Кроме того, индекс преобразуется во время через понятие интервал. Таким образом, в Вашем определении время это синоним индекса. ------------------------- Возможно не стоит быть столь категоричным и пытаться дать строгое и однозначное определение понятий на рынках, т к большинство которое начинает или уже нет это вообще либо не читает, либо не поймет. ---------------------- Поэтому оставьте все как есть.
Size()
Пользователь
Сообщений: Регистрация: 30.01.2015
15.12.2017 13:49:13
Цитата
написал:
Цитата
Николай Камынин написал: сравните время свечи и время сервера (биржи, брокера, точного времени - выбрать любое)
с часовыми поясами будут проблемы.
в квике есть настройка. Что то типа показывать время в часовом поясе биржи. Понятное дело, узнать это нельзя - "многахочите"
да и рассинхронизация в начале каждой свечи будет по любому в каждом из приведенных случаев - ещё больше геморроя.
1) если у Вас тайм меньше часа то пояса вообще не нужны. 2) вычитайте из времени время начала торгов и пояса вообще не нужны. ------------------------
Size()
Пользователь
Сообщений: Регистрация: 30.01.2015
14.12.2017 15:31:36
сравните время свечи и время сервера (биржи, брокера, точного времени - выбрать любое)
Подвешивание info.exe через механизм межпоточного локинга
Пользователь
Сообщений: Регистрация: 30.01.2015
09.12.2017 14:18:57
Делюсь опытом. Когда я делал синхронизацию потокв в QLUA, то просто написал DLL для решения данной проблемы. В результате я получил 1) Синхронизацию различных скриптов между собой, т е я синхронизировал майн в различных скриптах. Это позволило использовать всего по одному вызову каждого колбека QLua вне зависимости от числа роботов (скриптов) Т е у меня есть один скрит для работы со стаканами один для работы с заявками и т д и куда скриптов торговых стратегий(роботов) в которые не требуется вызывать все колбеки QLUA. Вполне удобное решение, если разработчики КВИК надумают его сделать, то проблемы с синхронизацией потоков и множественными копиями колбеков исчезнут.
Аналог функции eval для lua, Аналог функции eval для lua
Пользователь
Сообщений: Регистрация: 30.01.2015
08.12.2017 15:35:10
если надо очень быстро, то пишите на СИ dll.
Аналог функции eval для lua, Аналог функции eval для lua
Пользователь
Сообщений: Регистрация: 30.01.2015
08.12.2017 15:34:02
надо делать не парсер а интерпретатор и будет он как минимум на порядок меньше, чем 1000 строк. Если строка динамически меняется, то решение на джава не работает и единственное решение на любом языка - это интерпретатор строки.
Как посмотреть цену последней своей заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
07.12.2017 17:35:35
документация QLUA Функции для обращения к строкам произвольных таблиц QUIK Таблица заявок Прочитайте в ней последнюю строку
Криптовалюты/фьючерсы на криптовалюты и QUIK, что будет в будущем
Пользователь
Сообщений: Регистрация: 30.01.2015
06.12.2017 13:14:48
Квик - это терминал для подачи поручений брокеру и УСЕ.
Криптовалюты/фьючерсы на криптовалюты и QUIK, что будет в будущем
Пользователь
Сообщений: Регистрация: 30.01.2015
06.12.2017 13:10:28
Цитата
QuikUser2017 написал: В ближайшие месяцы (или даже дни) американские биржи начнут торговать фьючерсами на биткоин. Готов ли QUIK к этому?
Линии на графике являются индикаторами. Когда линия находится сильно высоко от графика, к примеру на 40% выше цены, я бы хотел её не рисовать. Должен быть пропуск, индикатор не рисуется. Но это будет не красиво, потому что КВИК попытается все же соединить последнее значение перед дыркой и первое значение после дырки. Можно ли этого избежать? Можно ли одну линию сделать разноцветной? один участок красный, другой, например, зелёный?
можно вот пример:
В документации отсутствует описание параметра функции
Пользователь
Сообщений: Регистрация: 30.01.2015
29.11.2017 16:51:08
в документации на квик. Раздел 8 описание QPILE Функции для получения значений Таблицы текущих торгов
Не отправляет транзакцию на сервер
Пользователь
Сообщений: Регистрация: 30.01.2015
08.11.2017 07:59:16
Цитата
Алексей написал: Здравствуйте, скрипт не хочет отправлять транзакцию на сервер, скрипт запускается, работает, но нечего не происходит, запуск функции для проверки записан в OnInit код транзакции ниже
Код
function test ()
local Transaction = {
[ 'TRANS_ID' ] = tostring(trans_id), -- Номер транзакции
[ 'ACCOUNT' ] = TorShet, -- Код счета
[ 'CLASSCODE' ] = KodClass, -- Код класса
[ 'SECCODE' ] = InstrumentKod, -- Код инструмента
[ 'ACTION' ] = 'NEW_ORDER' , -- Тип транзакции ('NEW_ORDER' - новая заявка)
[ 'OPERATION' ] = 'B' , -- Операция ('B' - buy, или 'S' - sell)
[ 'TYPE' ] = 'L' , -- Тип ('L' - лимитированная, 'M' - рыночная)
[ 'QUANTITY' ] = '1' , -- Количество
[ 'PRICE' ] = tostring(tekPrice) -- Цена
}
local Res = sendTransaction (Transaction)
end
функция OnInit вызывается один раз и как правило при ее работе еще нет соединения с сервером. В этой функции надо выполнять инициализацию переменных и загрузку библиотек. ----------------------------------- Торговые действия надо исполнять либо в main либо в колбеках.
Николай Камынин написал: На графике свеча всегда отобразится на значении 00 но это отображение будет сделано в момент появления первой сделки после 00.
сие очевидно
Цитата
Николай Камынин написал: Конец свечи тоже отобразится в момент 00
а вот тут - навряд ли если времена свечей заявлены по открытию, но тогда это противоречит вашему первому параметру - по началу в 00 скорее в качестве значения Close будет последняя сделка до времени 00 начала следующей свечи
Цитата
Николай Камынин написал: Т е как я написал ранее свечи всегда отображаюся с запаздыванием но это запаздывание не показано на графиках.
показаны, но не отображаются : звучит вполне тафталогично
Цитата
Николай Камынин написал: Поэтому закрывшиеся свчи всегда точно синхронизированы на графиках по времени точно в 00.
это в случае если свечи формируются по времени окончания периода. и это уже воля авторов, как их рисовать но начинаться в 00 и заканчивать в 00, перемешивая моменты для соседних, навряд ли правильно.
Время свечи задает всемирное время. Я вообще-то не гадаю, а объясняю Вам как формируются свечи. Свеча формируется от 00 часов 00 минут 00 секунд по Гринвичу. алгоритм следующий. Время открытия свечи - оно же время закрытия всегда точно равно всемирному а квант дискретности равен тайму. Т е время свечи никаким образом не синхронизировано с временем сделок. Именно для этого и придуманы свечи чтобы уйти от тиков к реальным часам. Т е свеча это значение четырех индикаторов, взятых на интервале свечи. Цена открытия - это цена сделки которая была первой после 00 для новой свечи Цена закрытия - это цена сделки которая была последней после открытия этой свечи и до времени 00 - открытия следующей т е цена закрытия предыдущей свечи и цена открытия следующей - это цены двух различных сделок которые совершены в различное время но стоят рядом вокруг 00.
валерий написал: Если два графика расположены в двух областях одной диаграммы, то нужно ли бары обязательно синхронизировать по времени баров или можно быть уверенным, что если индексы совпадают, то и время тоже?
если брать вопрос шире, но проще, то: - бары, свечи и любые другие визуальные способы представления статистических данных - это просто способ визуализации, удобный для восприятия человеком. - у этих способов есть правила, по которым они реализуются: время начала - момент когда надо нарисовать Open, время окончания - Close, между этими событиями нарисовать Hi & Lo и т.д. В наше время в ядре биржи происходят сотни сделок в секунду, но вовсе не факт, что для начала каждой минуты во время 00.000 сек будет существовать сделка для отрисовки начала свечи в точно заданное время Поэтому любая "графика" зависит от авторов: при соблюдении правил два чарта будут синхронно нарисованы, тк они формируются по единому правилу - это теоретически. Практически возможен некий программно-аппаратный лаг при рендеринге разных оконных фреймов, который может быть микросекунды - для текущей свечи. Если в квик окно обновляется в пределах 1-0.5 сек, то это не имеет значения даже для текущей свечки и не повлияет на ваши входные данные и выходные сигналы соответственно. (При использовании индикатора-упростителя из 80-х гг прошлого века - свечи, бары и т. д.)
На графике свеча всегда отобразится на значении 00 но это отображение будет сделано в момент появления первой сделки после 00. Конец свечи тоже отобразится в момент 00 но последняя сделка при этом может быть и за полчаса до 00, если это тайм час. Т е как я написал ранее свечи всегда отображаюся с запаздыванием но это запаздывание не показано на графиках. Поэтому закрывшиеся свчи всегда точно синхронизированы на графиках по времени точно в 00.
Синхронизация 2 графиков
Пользователь
Сообщений: Регистрация: 30.01.2015
19.10.2017 15:16:48
Цитата
валерий написал: Понятно, что свечи на одном графике синхронизированы. Но можно ли быть уверенным, что и индексы у свечек с одинаковым временем всегда одинаковые (тогда можно искать соответствующую свечу на втором графике по индексу, а не таймстампу)? Мало ли как Арка их считает... Хочу знать наверняка от авторов.
Если я Вас правильно понял, то речь идет о различных инструментах(бумагах) Свечи у них синхронизированы по началу тайма. Но возможно отсутствие свечи при отсутствии сделок в этом интервале для данного инструмента. Поэтому просто по номеру свечи не синхронизированы.
Синхронизация 2 графиков
Пользователь
Сообщений: Регистрация: 30.01.2015
18.10.2017 18:51:44
Цитата
валерий написал: Если два графика расположены в двух областях одной диаграммы, то нужно ли бары обязательно синхронизировать по времени баров или можно быть уверенным, что если индексы совпадают, то и время тоже?
Не свосем понятно что и с чем хотите синхронизировать. На графиках свечи всегда отображаются синхронизированными , но в действительности свечи - это индикаторы экстремумов на заданном тайме. Тайм синхронизирован. Свечи это индикаторы, которые считаются всегда с запаздыванием. .
Среднеквадратичное отклонение за период, Среднеквадратичное отклонение за период
Пользователь
Сообщений: Регистрация: 30.01.2015
11.10.2017 15:31:53
для справки: Для расчета такого индикатора циклы не требуются.
Tradedate
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 17:15:20
Цитата
написал:
Михаил,а чем не устраивает дата торгов из ТТП?
Мгновенная отмена заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
19.09.2017 07:44:41
есть два варианта ускорить прием ответа. 1) отказаться от onParam 2) во всех колбеках поставить запуск новых потоков и выход из колбека В этом случае будет максимально быстро выходить из OnParam и др колбеков.
Мгновенная отмена заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
19.09.2017 07:37:15
Цитата
Александр Правилов написал: Николай Камынин , в этом то самая и большая проблема, в невозможности получить ответ, пока не закончится OnParam или не подождать в OnParam, к примеру через event.timer или event.pull, могу ошибаться. Ну да ладно, что-нибудь придумаю, благо для текущего алгоритма, скорость не является приоритетной.
Вы очевидно не понимаете, что это в принципе невозможно в КВИК, так как принятый ответ обрабатывается в том же потоке, где работает функция OnParam. т е ядро процессора (поток) занят этой функцией и обработка новых данных будет после ее завершения. а других потоков для обработки новых данных в КВИКЕ не выделяется т е это так сделан КВИК. Поэтому, если очень хочется, то надо отказываться от КВИК и подключаться прямо к бирже.
Мгновенная отмена заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
18.09.2017 18:38:30
Пардон, опечатка. Более того, ответ на свою транзакцию Вы будете получать в среднем не ранее чем через 0.1 -0.2 сек. А это очень даже не мгновенно.
Мгновенная отмена заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
18.09.2017 18:37:46
Более того, ответ на свою транзакцию Вы будете получать в среднем не ранее чем через 0.1 -0.2 мс. А это очень даже не мгновенно.
Мгновенная отмена заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
18.09.2017 18:34:04
Цитата
Александр Правилов написал: Николай Камынин ,Да дело не в таблице состояний, это не то. Этот способ режет скорость. После отправки транзакции в OnParam есть ещё код и пока этот код не выполнится, не придет ответ от OnTransReply и OnOrder, а надо получить ответы еще при выполнении кода в OnParam.
Пока исполняется OnParam никакие новые данные с сервера не могут быть обработаны. Поэтому НЕВОЗМОЖНО находясь в onParam получить ответ OnTransReply и OnOrder, Полагаю Вы это поняли. ----------------------------
Мгновенная отмена заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
18.09.2017 11:47:08
Цитата
Александр Правилов написал: Николай Камынин , если с кодировкой что-то не то, почему остальной код работает? Николая, подскажите кучочек кода, как перевести в состояние ожидания ответа по заявке?
Общий подход работы робота на основе событийной модели следующий. ------------------------ В начале описываете таблицу возможных состояний робота. Например у меня есть таблица состояния заявок, таблица состояния стоп-заявок ну и т д. Эти таблицы в отличии от таблиц квика содержат лишь активные заявки. ------------------------------------------- Когда посылаете заявку то пишите в конец таблицы запись о том что послали заявку в систему Когда собираетесь послать заявку то проверяете состояние последней записи в таблице состояния заявок Если там указано что заявка отправлена брокеру ( т е еще нет подтверждения что она на бирже) то пропускаете отправку новой. ----------------------------- Ну и т д
Мгновенная отмена заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
16.09.2017 06:26:41
Цитата
Александр Правилов написал: Николай Камынин , не согласен с вами, колбэками управлять нельзя, они приходят как приходят, посмотрите мой пример выше, как разрулить эту ситуацию?
Sergey Gorokhov , Сергей, подскажите другой момент, что то не получается получить таблицу заявок, в чем может быть ошибка?
в row=getItem("orders",i) пишет - improperly formatted XML data
Код
for i = 1 , getNumberOf ( "orders" ) do
local row = getItem ( "orders" ,i)
if row ~ = nil and row[sec_code] = = sec then
local trid,ms = killOrder(row[order_num],sec,class)
if trid ~ = nil then
tbl: SetValue (line_count_table[sec],'ÅñòüÇàÿâêà', string.format ( "Cancel" ))
tbl: SetValue (line_count_table[sec],'ÖåíàÇàÿâêè', string.format ( "0" ))
end
end
end
исправьте кодировку редактора.
Мгновенная отмена заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
15.09.2017 13:37:53
Цитата
Александр Правилов написал: Николай Камынин , не согласен с вами, колбэками управлять нельзя, они приходят как приходят, посмотрите мой пример выше, как разрулить эту ситуацию?
А где Я Вам говорил, что колбеками надо управлять(ужас какой-то). Колбеки - это функции, которые вызываются системой ( в данном случае тарминалом КВИК) при наступлении определенного события. Т е они сообщают вам о событиях в КВИКЕ и ВСЕ. --------------------- Когда робот отсылает заявку - то он переходит из состояния - "послать" в состояние - "ждать ответа". А у Вас нет этих состояний т е Вашему роботу все по... Вот он у вас и шлет кучу заявок и ничего не ждет. Ну как-то так получается...
Николай Камынин написал: Надо строить робота на основе событийной модели, тогда таких проблем не будет. Т е робот - это конечный автомат, который полностью описывается набором его состояний. Поэтому надо фиксировать эти состояния и программировать условия перехода из одного состояния в другое.
Я с Вами полностью согласен, но в lua нет событийности, всё зависит от стека функций об.вызова, как они придут и потока всего два и основной стек находится в одном потоке.
Именно библиотека QLUA и дает Вам механизм событий в виде колбеков, что принципиально отличает ее от QPILE. Состояние же робота необходимо хранить в таблице состояний - это уже особенности алгоритма. Луа позволяет все это сделать.
Мгновенная отмена заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
15.09.2017 07:16:30
Надо строить робота на основе событийной модели, тогда таких проблем не будет. Т е робот - это конечный автомат, который полностью описывается набором его состояний. Поэтому надо фиксировать эти состояния и программировать условия перехода из одного состояния в другое.
Запись в текстовый файл, Нужно дописать данные в определенное место файла.
Иван Ру написал: Есть открытый текстовый файл, скажем, длинной в 100 строк. Необходимо дописать данные, скажем, в 79 строку (номер известен). Возможно ли такое средствами Lua, есть ли у кого пример реализации подобной функции?
Вашу задачу можно так: 1) Все записи делаем одинаковой длины, например 128 байт 2) Если запись короче 128 то добиваем ее либо пробелом либо нулями. 3) Если надо дописать, то ищем изменяемую запись , читаем ее, добавляем и пишем на свое место.
Возможно мы друг друга недопоняли. Записи я делаю в csv (текстовый) файл с разделителями в виде ";". Затем я его читаю в эксель. По-сути надо добавить дополнительные элементы данных в отдельные строки, де-факто они всегда оказываются ближе к концу файла. Кстати, попутный вопрос. Если у меня файл находится в открытом состоянии в режиме чтения-записи и его размер велик (скажем 100 мб.) -- отнимает ли это соответствующий объем оперативной памяти? Если да - как этого избежать? Только закрытием файла и повторным открытием для записи?
память под файлы расходуется, но это не 100 мб и беспокоится не стоит. Попробую объяснить про дозапись. Есть два режима записи - бинарный и текстовый. В текстовом инфа пишется в файл последовательно запись за записью . Каждая строка пишется в формате ASCIZ, т е признак конца строки - это ноль. поэтому просто добавить в конец какой- либо, не последней, строки в файле невозможно, так как нет места для этого. Поэтому я Вам предложил сделать строки одинаковыми по длине - это ускорит поиск нужной строки и создать место для дозаписи. Т е Вы создаете пустое место на диске и пишите в это место . ---------------------------- Если Вы пишите в файл лишь для передачи в Excel, то это можно делать через протокол Dynamic Data Exchange (DDE) сразу в Excel. Но это требует знаний в написании DLL на СИ для Lua.
Запись в текстовый файл, Нужно дописать данные в определенное место файла.
Николай Камынин написал: 3) Если надо дописать, то ищем изменяемую запись , читаем ее, добавляем и пишем на свое место.
Ну так-то обычно все данные после места записи обрезаются. Нельзя просто так взять и вставить запись внутрь файла ;)
Отличным решением был бы например маппинг файла в память, но, боюсь на луа это не доступно.
Цитата
Иван Ру написал: Если у меня файл находится в открытом состоянии в режиме чтения-записи и его размер велик (скажем 100 мб.) -- отнимает ли это соответствующий объем оперативной памяти?
Нет, не отнимает.
Если будете правильно писать то данные не будут обрезаться. А вот память под файлы расходуется. т е "отнимает" Более того, если Вы не делаете выгрузку, то данные будут в памяти а не на диске.
Считывание и установка настроек Quik с помощью Lua, Возможна ли?
Пользователь
Сообщений: Регистрация: 30.01.2015
14.09.2017 15:50:41
Полагаю, что у Вас установлен флаг "Исходя из настроек открытых пользователем таблиц" Надо установить флаг "С учетом настроек, выбранных через пункт меню "Система/Заказ данных/Поток котировок" в "настройки клиентского места" в окне "Получение данных"
Запись в текстовый файл, Нужно дописать данные в определенное место файла.
Пользователь
Сообщений: Регистрация: 30.01.2015
14.09.2017 15:02:27
Цитата
Иван Ру написал: Есть открытый текстовый файл, скажем, длинной в 100 строк. Необходимо дописать данные, скажем, в 79 строку (номер известен). Возможно ли такое средствами Lua, есть ли у кого пример реализации подобной функции?
Вашу задачу можно так: 1) Все записи делаем одинаковой длины, например 128 байт 2) Если запись короче 128 то добиваем ее либо пробелом либо нулями. 3) Если надо дописать, то ищем изменяемую запись , читаем ее, добавляем и пишем на свое место.
Индикатор АС - числа берутся из ниоткуда
Пользователь
Сообщений: Регистрация: 30.01.2015
13.09.2017 12:51:52
Такой вопрос лучше задавать знатокам из " Что,Где, Когда?" Они точно что-нибудь придумают.
Загрузка своих данных в Quik, Требуется создать индикатор который на основании еxel таблицы будет формировать гистограмма с положительных и отрицательный значениями
Пользователь
Сообщений: Регистрация: 30.01.2015
05.09.2017 13:01:00
если взять готовый суп и изменить в нем исходные продукты, то получится ...о.
Из ваших ответов стало понятно как считать N. А как считать волатильность?
Ищите все на сайте ммвб, а не спрашивайте на форуме. Потому, что Вам надо не ссылки на математику для начинающих, а методики расчета на бирже и чтобы у Вас все совпала с биржей. Поэтому бесплатных решений нет, а написать решения может тот, кто не задает подобные вопросы и профессионально пишет софт. Успехов в изучении программирования.
Николай Камынин написал: Но очень сомневаюсь, что Вы ее сможете запрограммировать.
Да ладно. Самое хитрое там - функция нормального распределения N(x). Но нам в помощь численные методы. Если интересна теория: 1. Hart, J.F. (1968). Computer Approximations. Наверно, наиболее цитируемая книга по численным методам. 2. Krishnamoorthy K. Handbook of Statistical Distributions with Applications (2006). Это, в частности, в области теории вероятностей. В ней надо смотреть раздел "10.10. Computing the Distribution Function".
Ну и код функции N(x) по этому методу, перенесенный на Луа. Точность 14 знаков этого приближения устроит?
Код
function NormCDF (x)
if type(x) ~ = "number" then return end
local z = math.abs (x)
local p
if z < 7 then
p = math.exp ( - z * z / 2 ) *
((((((( 2.49338129315143e-02 * z + 0.604737992686704 ) * z + 6.81311678753268 ) * z +
46.0649519338751 ) * z + 202.102090717023 ) * z + 580.109897562909 ) * z +
1024.60809538334 ) * z + 913.167442114756 ) /
(((((((( 0.0625 * z + 1.51584331855598 ) * z + 17.1406995062578 ) * z +
116.979524577666 ) * z + 523.596091947383 ) * z + 1566.10462582845 ) * z +
3044.77121163622 ) * z + 3506.42059774909 ) * z + 1826.33488422951 )
elseif z < 32 then
p = math.exp ( - z * z / 2 ) / 2.506628274631 /
(z + 1 / (z + 2 / (z + 3 / (z + 4 / (z + 5 / (z + 6 / (z + 7 )))))))
else
p = 0
end
return (x > 0 ) and ( 1 - p) or p
end
Не так страшно? С остальным в формулах Блэка-Шоулза наверно справитесь? Вот, например, расчет дельты колл опциона:
Код
function CallDelta (f, s, v, t)
return NormCDF(( math.log (f / s) + v^ 2 * t / 2 ) / (v * t^ 0.5 ))
end
Ну,ну... ------------------------------- "..не сумлевайтесь, милые: Коль что у вас не ладится — ну, там, не тот аффект, — Мы мигом к вам заявимся с лопатами и с вилами, Денёчек покумекаем — и выправим дефект!"
Теоретическая цена, греки
Пользователь
Сообщений: Регистрация: 30.01.2015
31.08.2017 18:50:44
Поищите на сайте ммвб. Когда-то там находил. Но очень сомневаюсь, что Вы ее сможете запрограммировать. Сомневаюсь, что есть бесплатная прога. ------------------------ Ищущий да обрящет.
OnTransReply и sendTransaction, Не вызывается OnTransReply
Пользователь
Сообщений: Регистрация: 30.01.2015
30.08.2017 13:42:31
Надо прочитать документацию: sendTransaction Функция предназначена для отправки транзакций в торговую систему. Формат вызова: STRING result sendTransaction(TABLE transaction) Параметры:
result – строка, содержащая текст ошибки, если она случилась при обработке транзакции;
Функция на основе message
Пользователь
Сообщений: Регистрация: 30.01.2015
29.08.2017 14:05:46
Код
function ms (value)
if type(value)~="table" then
message (""..tostring(value),1)
else
for k,v in pairs(value) do
message (tostring(k).." "..tostring(v),1)
end
end
end
Распределенность обработки вызовов OnOrder
Пользователь
Сообщений: Регистрация: 30.01.2015
27.08.2017 06:58:44
поделюсь своим решением. обрабатываю в колбеке. В таблице пассивные заявки удаляю. в колбеке обрабатываю все приходы и мне безразлично сколько их. ----------------- обрабатывал и в майн. =================== Последний вариант - один колбек на все скрипты. т е роботов много, но колбеков по одному для каждого вида (заявки, сделки, стаканы и т д)
Распределенность обработки вызовов OnOrder
Пользователь
Сообщений: Регистрация: 30.01.2015
25.08.2017 18:48:03
для колбеков поток один - это точно. но возможно, что Вы работаете с таблицами в main. Тогда будет два потока. ----------------------------------------- проблема может быть в Вашем алгоритме обработки. Чтобы ответить точно, надо видеть как (вернее где) Вы обрабатываете сигналы заявки.