Anton (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 13 14 15 16 17 18 19 20 21 22 23 ... 28 След.
Звук Lua в фоновом режиме
 
Цитата
Иван написал:
Что бы в коробке были функции play(), stop().
В данном случае стопом будет qPlaySound(nil)
Звук Lua в фоновом режиме
 
Вот под седьмую версию и раньше (тоже не тестил)
Звук Lua в фоновом режиме
 
Цитата
Иван написал:
7.27
Нуштошвысразунесказали ) Ща...
Звук Lua в фоновом режиме
 
Цитата
Иван написал:
У меня он так и не запустился.
Так а версию квика-то назовите, может у вас вообще седьмая какая-нибудь. Скрипт qPlaySound.lua должен лежать рядом с вашим скриптом и рядом же должна лежать qPlaySound.dll.
Quik 8.5.1.18 вылетает без видимых причин.
 
Цитата
Андрей написал:
окно "Что нового в квике 8.5"
Попробуйте добавить в конец info.ini следующие две строчки (при неработающем квике и если там этого еще нет)
Код
[UpdateLog]
WhatsNewIn_8_5=2
Только бэкап файла сделайте сначала, а то мало ли что.
Звук Lua в фоновом режиме
 
Цитата
Иван написал:
исходный код
Всегда забавляет, когда люди внимательно изучают сорцы на гитхабе, а потом скачивают готовый бинарник с какого-то левого сайта. Почему они считают, что бинарник собран именно из тех сорцев, что им показали, для меня загадка. Впечатляющий прорыв творческой мысли, не правда ли?
Код
static int qPlaySound(lua_State * s)
{
   PlaySoundA(lua_tostring(s, -1), NULL, SND_FILENAME | SND_ASYNC | SND_NODEFAULT);
   return 0;
}
Звук Lua в фоновом режиме
 
Вот со старым (не тестил)
Звук Lua в фоновом режиме
 
Версия квика меньше 8.5, полагаю? Собрано под 8.5, с новым луа.
Звук Lua в фоновом режиме
 
Цитата
Иван написал:
не нашел в сети иинформации по ней.
И не найдете, я ее только что спешл фор ю слепил. Что внутри можно посмотреть дизасмом, ежли паранойка. Там очень мало чего.
Звук Lua в фоновом режиме
 
Вот держите. Положить луа и длл в одну папку с вашим скриптом, включить файл qPlaySound через require, вызывать функцию qPlaySound(filename). Пример
Код
require "qPlaySound"

local run = true

function main()
   while run do
      sleep(3000)
      qPlaySound("c:\\windows\\media\\tada.wav")
   end
end

function OnStop()
   run = false
end
Какая кодировка используются в Lua?
 
Николай Камынин, вы выдергиваете особенность реализации и позиционируете ее как отличительный признак строки вообще. Луа добавляет ноль чисто для удобства и даже можно сказать чисто технически, потому что есть lua_pushlstring, принимающая размер, и вы можете сделать так
Код
const char hello[] = "hello";
lua_pushlstring(s, hello, 4); // actually stores "hell"
Если бы луа не добалял ноль, то в следующем вызове
Код
const char * pstr = lua_tostring(s, -1);
вы бы получили "hell" без нуля на конце и крэшнули бы приложение, пытаясь работать с ним сишными функциями. Именно поэтому луа ноль и добавляет, чтобы всегда возвращать терминированную строку. А теперь следите за руками. В сях я пишу
Код
   const wchar_t str1[] = L"HELLO";
   const wchar_t str2[] = L"DOLLY";
   lua_getglobal(s, "strcat");
   lua_pushlstring(s, reinterpret_cast<const char *>(str1), ::wcslen(str1) * sizeof(wchar_t));
   lua_pushlstring(s, reinterpret_cast<const char *>(str2), ::wcslen(str2) * sizeof(wchar_t));
   lua_call(s, 2, 1);
   size_t len;
   const wchar_t * pstr = reinterpret_cast<const wchar_t *>(lua_tolstring(s, -1, &len));
   ::std::wstring str(pstr, len);
в луа пишу
Код
function strcat(s1, s2) return s1 .. s2 end
и внезапно получаю (широкую!) строку "HELLODOLLY". То есть луа не только сохранил строки в utf-16 и потом правильно вернул, но и правильно их склеил даже. Почему? А потому что плевал он на нолики в конце. У него есть сохраненная длина строки и по ней он ориентируется. Для сравнения сишный strcat (который по ноликам ориентируется) на таких строках сфейлит, вернет "HD", потому что тут после каждого байта ноль идет. Все это к чему. К тому, что в луа строки это тупо мусор заданной длины (даже без нолика), никакой семантики луа им не придает. А где должен бы придавать, там фейлит. Например, если я эту строчку "DOLLY" сделаю ключом в таблице (из сей), луа это слопает на ура. Но вот из самого луа я этого ключа не увижу (через перебор всех ключей только), потому что кодировка не совпадает. О чем и говорил выше, любая именно строковая операция кроме копирования требует знания кодировки. Как только нужна семантика, тут луа умывает руки.
Какая кодировка используются в Lua?
 
Цитата
Николай Камынин написал:
текст в любой кодировке - это массив байт
Вообще все в компьютере это массив байт. Остальное все неверно. Ноль в конце это чисто сишная фишка, в паскале их нет например. Строка это не байты, а codepoints, каждая из которых может быть больше байта (до четырех например в utf8). Если вы разрежете строку посреди codepoint, обе половины уже не будут строками или, в лучшем случае, будут битыми строками. Отображение это вообще отдельная тема, там не только codepoints действуют, композиция включается, а еще куча параметров конкретного шрифта. Знание кодировки нужно для любых действий со строкой, отличных от простого копирования. Это если говорить о строках, а не о кучке мусора с приделанным ноликом. Прежде чем пояснять, стоит все же хоть немного тему изучить.
Возможна ли выборка данных из таблицы trades, stop_orders, orders и других как в MySQL
 
SearchItems наиболее близкое.
Передача массива в функцию - теряется последовательность ключей
 
Цитата
Иван написал:
Мне хотелось бы в функцию передавать именно массив в таком виде (хэш-таблице).
Но как тогда сохранить порядок ключей что передается?
В таком виде - никак. Сравните с сями, у вас либо структура и вы обращаетесь к элементам по имени (t.a, t.b) и вообще нет способа по ним итерировать, либо у вас массив и вы обращаетесь по индексу (t[0], t[1]) и имен никаких нет. Тут то же самое, либо имена (плюс еще и возможность в цикле по ним пройти, хоть и в непредсказуемом порядке, с помощью pairs), либо индексы и ipairs в заданном порядке.
Передача массива в функцию - теряется последовательность ключей
 
Цитата
Иван написал:
С чем это может быть связано?
С тем, что это не массив, а хэш-таблица.
Появляется лишняя строка в таблице
 
В связи с этой проблемой возникла такая мысль, а что если нам попросить такую фичу: функция для вызова пользовательского колбека в основном потоке и соответствующий колбек. То есть например
Код
ANYTYPE SendCustomNotification(ANYTYPE v)
ANYTYPE OnCustomNotification(ANYTYPE v)
с простой реализацией: первая посылает сообщение главному окну со ссылкой на произвольный юзерский тип, главное окно по получении сообщения дергает колбек с полученным значением и возвращенное значение возвращает из сообщения. Если посылаем из мейна - мейн встает и ждет, пока в главном потоке выполнится колбек, причем это "даром", за счет свойств винды. Если посылаем из другого колбека - колбек выполняется синхронно, тоже за счет свойств винды. Это хоть какая-то синхронизация была бы, а то ж сейчас ее нет от слова совсем. Приглашаю накидать аргументов против, если кому интересно.
Какая кодировка используются в Lua?
 
Цитата
Николай Камынин написал:
tostring работает со строками в коде ASCII (American Standart Code for Inmormation Interchange)  
вернее ASCIIZ
Абсолютно неверное утверждение. В случае автоматического преобразования числа в строку да, получается ASCIIZ (а можно сказать, что получается utf-8 или win-1251 или что угодно, т.к. первая страница у всех codepage одинаковая, если не учитывать экзотику), но в случае строки возвращается строка как она есть, ровно в том виде, в каком ее туда засунули, в том числе со внутренними нулями (что автоматически отвергает ASCIIZ и, кстати, позволяет при некоторой осторожности впихнуть даже utf-16).
Появляется лишняя строка в таблице
 
Цитата
Старатель написал:
QUIK повесится
Кажется понял, почему виснет. Мейн у нас в отдельном потоке, работа с таблицей так или иначе приводит к SendMessage окну (в основной поток то есть), и собственно все, основной поток стоит на критической секции в колбеке и обработать сообщение не может. Если так, надо либо из мейна в окно не лазить, либо из колбеков (всех). Сиречь либо редиректить события в мейн и лазить только оттуда, либо лазить только из колбеков. Ну либо хачить со всеми вытекающими.
Появляется лишняя строка в таблице
 
Цитата
Старатель написал:
Такой вариант тоже не работает
А если в мейне тоже в критическую секцию завернуть?
Какая кодировка используются в Lua?
 
Цитата
Александр написал:
в какой кодировке изначально строка попадает в таблицу луа
Я всю жизнь CP_ACP для преобразований в-из анси использую и никто еще не жаловался.
Какая кодировка используются в Lua?
 
Цитата
Александр написал:
В какой кодировке будут строки, если вызвать lua_tolstring для преобразования в unicode?
А как вы вызовете lua_tolstring для преобразования в unicode? Она просто вернет пойнтер на строку в хранилище и все, никаких преобразований не случится. Аналогично lua_pushstring ничего не будет преобразовывать, как дали ей массив байтов, так она их  в хранилище и засунет. Отсюда вывод: в какой кодировке скормили, в той и назад получите. Сравнение строк на равенство тоже побайтово делается. Единственное - это сравнение на неравенство, луа вызывает strcoll и поэтому правильный вопрос к арке будет такой: какую локаль устанавливает квик при старте? Мое предположение - locale("").
Отладка QUIK 8.5
 
Тоже говорю спасибо разработчикам, вот это уже похоже на то, что должно быть, судя по паре тестов. И даже кое-что бонусом поправили, на что уж и надежд не было.
Тейк профит ошибся
 
Цитата
Андрей написал:
Как сделать в квике, чтобы "Этим экстремумом была цена активации"?
Я тут уже полфорума загадил одним и тем же сообщением: "стоп-цена по другой бумаге". Это ровно тот самый "тейк-профит" какой все так хотят видеть, тупой фиксированный без трейлинга. Но больше всего меня интересует, чем лимитник простой не устраивает? Он-то гарантированно уже в стакане стоит и если цена туда дойдет, его зальют сто процентов без всяких прочих если. Почему не использовать?
QUIK 8.0
 
Цитата
Александр Волфовиц написал:
файлы *,dmp
Открываются вижл студией. Но там мало чего полезного увидите без сорцев квика.
[BUG] Крах Квика при работе скрипта, версия 8.5
 
Latrop, я б сейчас вообще не очень заморачивался, как именно падает, бо там адъ внутри. Лонгджампы смешаны с исключениями, гарбидж коллектор не работает местами, стейты битые создаются и т.д. Пока версию без этих адовых косяков не выложат, ловить нечего, а дальше будем новые косяки искать.

Цитата
Николай Камынин написал:
так как если mainRun не определен, то он false
Если он не определен, то он не определен. Имеете в виду, что если он не инициализирован, то он nil, который в сравнении ведет себя аналогично false. Это не есть хорошая практика. Все эти языки придуманы, чтобы человек прочитал и понял, что происходит, не надо манглить код ради мнимой производительности, или тогда уже сразу массивы опкодов в char[] и jmp туда, вот уж летать будет (но недолго).
[BUG] Крах Квика при работе скрипта, версия 8.5
 
Цитата
Latrop написал:
Ошибок в скрипте нет
Код
      local ticksNum = getNumberOf("all_trades")
      if (ticksNum > 0) then
         local tick = getItem("all_trades", ticksNum - 1);
         if (math.fmod(n, 1000) == 0) then
            message("AllTrades  num: " .. ticksNum .. "  tick: " .. tostring(tick.trade_num))
         end
      end
Не факт, что очистка ТВС не произойдет между getNumberOf и getItem, а результат второй разыменовывается без проверки на nil. Перезаказ = крэш. Не квика (должен быть), но скрипта, хотя как сейчас сделано, и нила не надо, сам грохнется, найдет почему.

Занятное наблюдение: в старом луа через пять строчек было EnterCriticalSection, а в новом их вообще нет (ну только что плюсовый рантайм добавил для своих целей). Вот и возникает вопрос, макросы синхронизации тоже что ли забыли переопределить? Или это новый дизайн такой, лок-фри по последнему слову техники (правда, интерлоков тоже чета не видать).
Отладка QUIK 8.5
 
Просто надо было к 8.5.1 приписать "бета" и все было бы понятно, и репортили бы как баги беты. Для продакшена она все же слишком забагована, несовместимо с жизнью я бы сказал.
Отладка QUIK 8.5
 
Цитата
Юрий написал:
жмякнув "Да" и получаем висяк терминала секунд на 30.
Это при подключенном терминале или отключенном?
getCandlesByIndex - разница в свечах
 
Квик возвращает вам массив, начинающийся с нуля, а бестолковый оператор # считает с единицы. Попробуйте вот это, то же самое вид сбоку, элемента по индексу 0 оператор в упор не видит.
Код
function main()
   local t = {}
   message('' .. #t)
   t[0] = 1
   message('' .. #t)
   t[1] = 1
   message('' .. #t)
end
Отладка тестера стратегий.
 
Цитата
Imersio Arrigo написал:
Ты купил, а оно - вниз.
Это уже когда купил, я ж про исполнение. Даже не закон подлости, а просто закон, цена движется скачками, нельзя прицепиться к движению, которое уже началось, рыночный ордер уже собирает стакан, поезд ушел. А когда это микродвижение кончилось, дальше опять болотина до следующего шага, который неизвестно в какую сторону будет и какой величины. Хотел написать "впрочем", но лучше прекращу дозволенные речи )
Отладка тестера стратегий.
 
Цитата
Imersio Arrigo написал:
в глобальном смысле
Обычно да, у физиков кишка тонка перекосить на крупном фрейме, да и они вразнобой, кто в лес кто по дрова. А тут набежали в одну сторону, совокупно-то там неплохая денюшка получилась. Но вообще-то я не про глобальное выше упоминал, а про исполнение в моменте.
Отладка тестера стратегий.
 
Цитата
Imersio Arrigo написал:
Это например купил невть а она упала?
В том числе. Любопытно было бы посмотреть, как развивались бы события, откройся эти 700 физиков в шорт.
Отладка тестера стратегий.
 
Цитата
Дмитрий написал:
Появилась 1 мысль открыть реал и отслеживать данные цен с реального счета и анализировать их.
Если на исторических оттестировали, открываете реал, заносите минимальное ГО и гоняете одним лотом до понимания, насколько на истории косячно натестили (или, паче чаяния, не косячно). Или вопрос как на истории тестировать? Качаете тики хоть бы и с финама и тестируете. Пытаться воспроизвести всю биржу со всеми нюансами - бесполезная трата времени, игрушки ради игрушек, все равно некоторые вещи происходят как реакция на ваше вмешательство в торги, это вы никак не сымитируете.
QUIK 8.0
 
Цитата
Александр Волфовиц написал:
unsigned переменных нет вообще, код написан очень просто.
Имею в виду что-нибудь типа такого (тоже ведь ничего сложного)
Код
long pos = 0;
FILE * f = fopen(...);
...
fseek(f, pos * sizeof(RECORD), SEEK_SET);
fwrite(...); ++pos;
Вот здесь после переполнения pos начнутся чудеса. Более того, его переполнение это UB, компайлер может еще и от себя чудес добавить. Этот пример должен без ворнингов собраться (разве что только deprecation, на который все плюют обычно и отключают его макросом), а чудо заложено.
QUIK 8.0
 
Цитата
Nikolay написал:
Так вот дальше стало все интерснее, при запуске этой утилиты Квик не падал. Без нее падает.
А вот такое поведение характерно для косяков в межпоточном взаимодействии. То же самое вид сбоку: под отладчиком не падает, а без него падает. Более конкретно какой-то поток что-то выдергивает из-под носа у другого потока, отладчик/дампер все замедляет и ошибки нет.
QUIK 8.0
 
Цитата
Александр Волфовиц написал:
Вопрос1: была у кого-нибудь такая ситуация?
Когда программа (любая) падает мгновенно и без каких-то сообщений, даже под отладчиком, - была конечно, обычно это повреждение стека тем или иным способом. Конкретно по ситуации (переход с 32 на 64) я б первым делом включил все ворнинги в компиляторе и посмотрел, где происходит урезание 64 бит до 32 и где signed/unsigned mismatch в сравнениях, скорей всего откуда-то оттуда ноги растут. Смотрите сами: первые часы все нормально, потом что-то дорастает до 64 бит, не лезет в 32 и крэш. Про AMD я б в последнюю очередь думал.
Проблема вычисления выражений с дробными числами, message(''..1.100-1.099) -----> 0.0010000000000001
 
Цитата
Игорь написал:
Имею опыт программирования на других языках, и там как-то интерпретатор /компилятор справляются...
Нигде не справляются, это фича чисел с плавающей точкой. На тех же сях то же самое, там просто в pfintf/sprintf/etc по дефолту режется до (не более чем) 6 знаков после запятой тем же способом, что вы привели, поэтому на первый взгляд кажется, что все точно. Посмотрите в интернетах, целые статьи как два дабла сравнить чтобы не было мучительно больно. Если нужно перфекционизьму, надо с ценами работать с фиксированной точкой, но в луа целых вычислений нет как таковых, так что ваш вариант вполне себе оптимальный (только не учитывает возможность отрицательного аргумента, в этом случае не в ту сторону округлите). О лишних вычислениях переживать незачем, там столько оверхеда по другим поводам, что это вообще никак не повлияет, даже если глубоко в цикл вложить.
Помогите разобраться с ошибкой голосового движка luacom
 
Цитата
Sergey Denegin написал:
почему-то данная функция выдает ошибку
Это какая-то ошибка при вызове функции, см.https://github.com/davidm/luacom/blob/master/src/library/tLuaCOM.cpp#L386
Может этот кусок (с вызовом Speak) в pcall завернуть, пусть лучше один раз звука не будет, чем крэш всего из-за не очень-то нужной фичи.

Цитата
Sergey Denegin написал:
w32.CoInitialize()  
Надо убедиться, что этот вызов в main делается, а не где-то еще. В потоке квика уже все было вызвано самим квиком, там CoInitialize вообще-то не нужна. А в мейне нужна. И в конце мейна еще CoUninitialize() надо.

Цитата
Sergey Denegin написал:
Как правило, если потом перезапустить скрипт, ошибка уже повторяется. пока терминал не перезагрузишь
А это косячок в квике, при ошибке длл не выгружается и вообще много чего не подчищается.
Тэйк-профит: старые песни о защитном спрэде, Возможные сюрпризы при совершении сделки по тэйк-профиту
 
Цитата
Дмитрий написал:
Ну почему нельзя сделать если я поставил цену тэйк-профита 5.00$ ... то чтоб при достижении цены 5$ тут же выставлялась лимитная заявка по цене 5$?
"Стоп-цена по другой бумаге" делает именно это, зачем кактус-то грызть.
quik 8.5 ошибка
 
Цитата
rst9 написал:
мне не нужно вызывать ваши дуструкторы, если я могу просто виртуализировать для вас аллокатор памяти
Мдеее. Виртуализируйте. Всю винду виртуализируйте только.
quik 8.5 ошибка
 
Цитата
rst9 написал:
я предлагаю вам challenge.
Не, спасибо, я очень меркантильный, даром только на форуме тявкаю, и то уже задумываюсь, что многовато чота.
quik 8.5 ошибка
 
Цитата
rst9 написал:
никто.
ЧТД, задача не решается нигде. Просто киллнуть тред - не стоило и разговор затевать, все и так это умеют. А хэндлы у вас тоже в сандбоксе? При некоторой удаче вы всю винду так свалите, не то что хост свой.
quik 8.5 ошибка
 
Цитата
rst9 написал:
о-о-о... как все запущено
Угу, я тоже так думаю. Так занятнее, правда? А если это не строка, а что-нибудь поинтереснее? Кто деструкторы будет выполнять?
Код
void myfunc(void)
{
    std::string str("abracadabra");
    Sleep(INFINITE);
}
quik 8.5 ошибка
 
Цитата
rst9 написал:
то, по факту, я могу.
Ну тормозните тред, выполняющий это
Код
void myfunc(void)
{
    Sleep(INFINITE);
}
quik 8.5 ошибка
 
Цитата
rst9 написал:
можете сделать библиотеку
А вы можете сделать такую же библиотеку на сях? Ну то есть вы стартанули тред, вызвали в нем произвольную юзерскую функцию и... как вы будете его останавливать, если понадобится? При чем тут квик, при чем тут луа, в такой форме задача не решается нигде.
quik 8.5 ошибка
 
Цитата
rst9 написал:
вам вопрос "со звездочкой": если другая библиотека, не ваша, выкинула ошибку, спровоцировала панику
Это как? Мой скрипт сидит в квике в отдельной луа-машине. Если я не умею обрабатывать ошибки в своей либе, то да, мне не надо потоков запускать, и, по-хорошему, вообще библиотек писать не надо, а надо улицы подметать.
проблема с w32.dll на quik 8.5
 
Цитата
Sergey Denegin написал:
Может кто-то знает в чем дело?
Не знаю, но могу другой автологин подкинуть. Тупо заполняет имя-пароль из скрипта всякий раз, когда появляется окно авторизации (по любой причине) и "нажимает" окей. На случай ручками отменить в скрипте можно поставить задержку между появлением окна и автозаполнением. Взять тут.
Проблемы с QUIK под эмулятором на Mac
 
Цитата
Александр написал:
только данная проблема наблюдается как с 64-ех битной версией так и с 32-ух битной
Это потому, что невнимательно прочли, что написано. Версия-то 64-битная, а ИНСТАЛЛЕР у нее 32-битный. И это (инсталлер) поделие не арки, а брокера конкретного. А поделия арки (к вопросу откуда скачать) лежат здесь. Только имейте в виду, что они под конкретного брокера не настроены, это надо либо ручками делать (не только лишь все осилят), либо установить брокерский вариант на жертвенную винду и утащить оттуда всю папку с квиком. Он, к счастью, вполне себе переносимый.
quik 8.5 ошибка
 
Цитата
rst9 написал:
это вы так думаете. тормозните тред, чтобы он не успел завершиться до истечения паузы на завершение скрипта, и посмотрите, что будет.
Зачем вот людей запугивать ) Верните из OnStop 72 часа и завершайтесь сколько влезет.
Порядок полей таблицы Даты-Времени у обезличенной сделки. Квик 8.5 Луа53.
 
Цитата
Latrop написал:
Кстати, а как так можно заранее напихать
В upvalues я имел в виду.
Страницы: Пред. 1 ... 13 14 15 16 17 18 19 20 21 22 23 ... 28 След.
Наверх