Как-то уже об этом писал... Есть строка mess (age), в которой коллбэки накапливают свой вывод, при превышении определённой длины строка записывается в файл. Потом обычно пишут mess='', чтобы сбросить длину строки в 0, но что в этом случае произойдёт? Создастся новая строка, или в структуре TString для этой строки её длина установится в 0? Я не вижу, где хранится число байтов, выделенных под строку, и как контролируется выход за её предел при дописывании к строке? Не хочется ненужного пересоздания строки и сборки мусора, а хочется просто зарезервировать под строку 10 Мб и использовать эту же память под строку постоянно. Зачем выметать сор из избы строки, если можно обойтись без этого? Как это всё оптимизировать и сделать, как в нормальных языках типа того же си?
Похоже, что DNS не ускорит работу Квика, хотя, в доступных соединениях у Сервер1 и Резерв стоят IP, а у Сервер 2 в столбце IP стоит почему-то quik.vtb.ru.
nikolz написал: Serge123 , А Вы знаете, зачем нужен DNS? ---------------------- Судя по вопросу, Вы этого не знаете. ---------------------- Прочитайте в интернете и вопрос отпадет сам собой.
Я когда-то знал это, даже своей программкой получал пакет по UDP с корневого сервера. Сейчас поискал в Гугле, зачем нужен DNS, оказалось, что для того же, для чего и раньше:
=== DNS (система доменных имен) преобразует доменные имена, удобные для человеческого восприятия (например, www.amazon.com), в IP-адреса, понимаемые машиной (например, 192.0.2.44). ===
и вдобавок
=== Какой DNS самый быстрый? 1.1.1.1 — самый быстрый в мире, ориентированный на конфиденциальность DNS-резолвер ===
Сегодня увидел, что кое-кто на западе советует установить самые быстрые и бесплатные DNS 1.1.1.1 и 1.0.0.1, например: nimaboldi.uz/как-настроить-в-windows-10-самый-быстрый-dns/ Есть ли от этого польза В РФ? А есть ещё DNS от Гугла 8.8.8.8. Что из этого всего лучше?
Добавлю отсебятину: в Lua для логического типа и типа nil не используется память под данные: просто байт для хранения типа переменной указывает, что тип этой переменной nil. Для логического типа байт типа указывает, что это лог. тип, а дополнительный бит в этом байте равен 0/1 в случае false/true.
В Луа нет опции предупреждать об использовании необъявленных переменных, как это сделано в Перле, поэтому могут возникать труднонаходимые ошибки. Есть ли какие-нибудь сторонние программы для проверки скриптов на такие описки?
Constantin написал: Я тоже свою систему написал. Правда не торгую.
Она у вас по какому принципу покупает: по индикаторам, по всплеску цены акции, по минимуму у волны в коридоре цен?.. При проверке работы в плюсе торгует?
Вернее, дело не в звуковом устройстве: в упрощённом варианте команд файлы с пробелами не играются, а в той форме, что была у w32, как помню, они игрались.
Для чего в Си и в Луа в путях ставят две обратных косых вместо оной прямой, ведь Виндовс в путях понимает одну прямую косую: C:/Windows/Media/Alarm09.wav?
В принципе, получился неплохой подарок к 8 Марта (а чем я хуже женщины?) Но неработоспособность в некоторых случаях омрачает предпраздничное настроение...
Nikolay написал: Можно даже проигрывать кусок из файла.
Я на те страницына сайте МС смотрел, не нашёл, как смешивать звуки. Я сейчас сделал аналог того, что у меня игралось в dll:
Код
#include <stdio.h>
#include <windows.h>
#include <Mmsystem.h>
int main()
{ if (!mciSendString("OPEN C:\\Windows\\Media\\chord.wav TYPE MpegVideo ALIAS QUIK_MP3", NULL, 0, NULL)) puts("fail");
mciSendString("PLAY QUIK_MP3", NULL, 0, NULL);
return 0;
}
Не играет, выдаёт fail. Не пойму, почему это работает в dll для Квика. Такое впечатление, что в консольной программе mciSendString не работает. А у вас как? Транслировать командой
Мне ваш пример с os.execute и 10-кратным появлением окна цмд перекрыл все стаканы... А если бы у меня в это время пошли сделки? Представляете свою материальную отвественность?
nikolz написал: Т е не надо никаких dll для этого , понятно?
Из моей темы, где я привёл свой пример на основе w32, было видно, что мне это понятно... И мне почему-то кажется, что SoundPlayer не может воспроизводить mp3.
nikolz написал: Кроме музыки, в модуле можно синтезировать предложения .
Круть. На след. этапе можно сделать виртуальную дикторшу. А для простых смертных у mciSendString предусмотрено проигрывание звука с заданного смещения и заданной длительности.
Кстати, если кто не знает, Буратино в этой сказке - это сам А. Толстой, Карабас-Барабас - Мейерхольд (которого Толстой не любил), а Дуремар - помощник Мейерхольда, которого звали Вольдемар. У др. героев тоже были прототипы. Поэтому не всё так просто.
Брокер ограничивает глубину стакана в 20/20, я установил 10/10. Во время выставления предварительных заявок (аукцион открытия) наблюдал такую картинку в стакане: виднеются 10 заявок на покупку и 10 на продажу, многие из них пересекаются. При этом по цене, которая через неск. сек. станет лучшей ценой покупки, видно много акций, а по цене на шаг выше не видно предложений продать, видны только предложения купить. В 1-й момент я подумал, что намечается какое-то мошенничество, почему-то захотелось снять свою крупненькую заявку на покупку и начать рвать на себе все волосы, раскладывая их в аккуратные кучки...
Но во 2-й момент я догадался, в чём дело: по логике программиста, если в стакане присутствуют 10 строк с красным фоном (на продажу) и 10 с зелёным, но при поступлении заявки на продажу ничего отображать не надо, хотя, общее число строк в стакане < 20 из-за пересечения довольно многих заявок на покупку и на продажу.
Раньше я удивлялся, для чего выставляют заявки на продажу по каким-то смешным ценам и, соответственно, на покупку? Возможно, это специально спамять стакан, чтобы у тех, кто ограничил его глубину, не было видно заявок по ценам, которые станут лучшими в момент начала торгов.
Не знаю, обсуждалось это или нет на форуме и как решить этот вопрос... Возможно, стоит подумать, чтобы отображать более 10 заявок на покупку/продажу, если общее число строк в стакане (в моём случае) < 20?
TGB написал: И вы знаете как использовать эту мощь для получения дохода на рынке с помощью QUIK, обеспечивающего как минимум секундную реакцию на события рынка?
Знаю я это или нет, это уже др. вопрос... Мне достаточно знать, что, если надо будет считать индикаторы по десяткам тикеров, то С будет это делать раз в 20 быстрее Луа, поэтому, при прочих равных условиях, у меня будет преимущество по сравнению с такими, как я, которые сидят поодаль от москвы.
На эту тему есть анекдот о чукче и русском геологе:
Чукча и геолог собирают камушки на берегу океана. Вдруг видят направляющегося к ним голодного белого медведя. Ружья нет. Чукча хватает лыжи и начинает их надевать. Геолог: - Бесполезно. Все равно ты не сможешь бежать быстрее медведя. - А мне и не надо бежать быстрее медведя. Мне достаточно бежать быстрее тебя.
Немного подправил пример, который видел на стр. https://quik2dde.ru/viewtopic.php?id=79 dll файл получился меньше 20 Кб. Искал примеры, чтобы не выскакивало окно консоли, смотрел примеры через виндовс скрипт хост (расширение файла .vbs). Если запускать в Проводнике, то окнА консоли нет, а если в Квике, то есть, не понял, почему...
Убрал проверку на ошибки. mci с MessageBeep микшируется, а mci с mci не смог смикшировать. И в том и моём примере mci устройство после завершения скрипта остаётся открытым. В OnStop или в OnClose надо бы закрыть, или ну его? Я пробовал вставить mciSendString("CLOSE QUIK_MP3", NULL, 0, NULL); в DllMain, когда приходит сообщение DLL_THREAD_DETACH, опять нарвался на зависание Квика...
#include <windows.h>
#include <mmsystem.h>
/*
// #include <stdbool.h>
#define bool _Bool
#define true 1
#define false 0
*/
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
/*
// Стандартная точка входа для DLL
bool APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{ return true;
}
*/
static int forLua_mciSendString(lua_State *L)
{ mciSendString("CLOSE QUIK_MP3", NULL, 0, NULL);
mciSendString(lua_tostring(L, 1), NULL, 0, NULL);
mciSendString("PLAY QUIK_MP3", NULL, 0, NULL);
return 0;
}
static int forLua_MessageBeep(lua_State *L)
{ MessageBeep(lua_tointeger(L, 1));
return 0;
}
// список реализованных в dll пользовательских функций
static struct luaL_Reg ls_lib[] =
{ {"mciSendString", forLua_mciSendString},
{"MessageBeep", forLua_MessageBeep},
{NULL, NULL}
};
// Имя dll должно быть playsnddll, как написано ниже!
__declspec(dllexport) int luaopen_playsnddll(lua_State *L)
{ luaL_newlib(L, ls_lib);
return 1;
}
Это playsnd.lua:
Скрытый текст
Код
-- Предполагается, что эта dll лежит в подпапке "скрипты" папки Quik
package.cpath = package.cpath .. ';' .. getWorkingFolder() .. '\\скрипты' .. '\\playsnddll.dll'
local playsnddll = require('playsnddll')
-- Эту функцию можно удалить и вызывать напрямую playsnddll.mciSendString
local function PlaySoundFile(file_name)
playsnddll.mciSendString('OPEN "' .. file_name .. '" TYPE MpegVideo ALIAS QUIK_MP3')
end
function main()
playsnddll.MessageBeep(0x10)
-- playsnddll.MessageBeep(0)
PlaySoundFile('C:\\Windows\\Media\\chord.wav')
playsnddll.mciSendString('OPEN "' .. 'C:\\Windows\\Media\\ringout.wav' .. '" TYPE MpegVideo ALIAS QUIK_MP3')
-- PlaySoundFile('C:\\Windows\\Media\\Windows Hardware Fail.wav')
-- PlaySoundFile('C:\\Windows\\Media\\Windows Hardware Insert.wav')
-- PlaySoundFile('C:\\Windows\\Media\\Windows Error.wav')
-- PlaySoundFile('C:\\Windows\\Media\\Windows Message Nudge.wav')
end
Не совсем понял, что такое обвязка. Тут всё, что есть, можно поискать по ключевым словам. И дальше программировать, пока пупок не развяжется.
Это всё равно, что спросить: каждая страна сама делает ядерное оружие с нуля, или где-то есть готовые примеры? Кто-то делал с нуля, кто-то натырил, а потом пошёл дальше.
Я сейчас посмотрел, какая была с-ма команд у СМ-2 и СМ-2М: это не PDP-11, а М-6000/7000: https://www.computer-museum.ru/histussr/sm2mcomm.htm Я до сих пор помню самую длинную макрокоманду cma,ina,sza,rss Инвертируем рег. A, прибавляем к нему 1, делаем пропуск след. слова, если A == 0, инвертируем условие пропуска: теперь пропуск выполнится, если A <> 0. Аналогично для рег. B. Хотя, в свете темы заработка на биржах, это уже не имеет значения.
Я даже больше скажу: когда я начинал работать на ЭВМ в качестве сменного оператора отд. сбыта, то работал на СМ-2 (клон американской М6000). На ней стояла амер. ОС, кажется, Query 1000, которая могла использовать только 1 куб памяти (64Кб) и там вертелась СУБД Сбыт, написанная на асм, и при этом я запускал свою программку на Фортране 4, которая за каких-нибудь 13 сек. вычисляла 100 знаков числа е после запятой. В то время я ещё не знал о машинных алгоритмах деления и делил длинное число уголком, как человек. 1000 знаков после запятой она считала 13 мин. А память у неё была на ферритовых колечках, на 1 байт уходило 9 колечек, один бит - контроль по нечётности. Через каждое колечко диаметром в 1/3 мм проходило 3 провода диаметром 0.05 мм, которые продевали в опред. порядке спец. женщины в цехе, который напоминал сборку наручных часов (я не видел, только предполагаю). Тактовая частота была целых 330 КГц (а может, и все 333), и всё летало, жрала она каких-то там 8 КВт (потому что была малой ЭВМ), ЭВМ была собрана на микросхемах 155-й серии, процессорный блок весил 45 кг, в нём не было даже микросхемы сумматора, а он выполнял вычисления с числами с плавающей запятой. Имел 4 16-разрядных регистра: два оперативных и два индексных (адресных) и 1-разрядные регисты расширения и переполнения. Я на ней делал такой трюк: в пятницу в конце раб. дня нажимал на морде клавишу Стоп, запоминал на клавишном регистре адрес текущей команды, выключал питание, а в понедельник приходил, включал питание, записывал в рег. текущей команды значение с клав. регистра, нажимал Пуск, и машина продолжала работать, как будто не останавливалась! А сейчас, выключая питание в пятницу, даже нет уверенности, что ПК в след. раз загрузится. Я на ней писал безошибочные программы на асм, а такого понятия, как отладчик, вообще не существовало. Какая отладка, что за дикость? Надо сразу всё делать правильно, тогда и никакой отладки не надо! Отладка для лохов!
Потом по бартеру с индийцами хим-дым получил ПК PC XT и AT 286. Индийцы изготавливали деревянные щитки с евророзетками, которые лежали на полу, и программистки, клепавшие армы на фокспре, нажимали на клавишу птания ногой. Всё остальное было американское. Сначала на ПК была голая ДОС 3.3, в неё входил текстовый редактор edline.com в 15 Кб от микрософтов. Это была суровая вещь для крепких духом людей. Мягко говоря, он не был полноэкранным, а на СМ-1 уже был неофициальный полноэкранный текстовый редактор РИТМ. Народ с интересом осваивал команды ДОСа типа cd и md. Потом откуда-то понатаскали нортонов, диггеров, тетрисов с пентиксами, капитанов комиков для EGA... Один начальник сектора привёз Турбо С 2.0, на котором я немного тренировался, потом он пробил покупку хим-дымом Турбо Паскаля 5.5. Завод официально купил его, но у воров (какое-то НПО из г. Калинина). Оно перевело всю документацию, распечатало её в виде брошюр, а саму с-му программирования от Борланда добавляло к этой документации как приложение. Это была вещь, я катался как сыр в масле: изучай и программируй - не хочу. Я сначала написал свою игру типа тетриса с фигурками гексамино в текстовом режиме, как Пентикс, а потом в графике EGA. Получилось очень неплохо по тем временам. Тогда, в конце 80-х процветали биржи и я даже попытался с пом. местного брокера продать её на бирже за $2000, но неудачно. А потом я перешёл из программистов в сменные инженеры-электронщики и программировал в своём техсекторе на башне AT 286 с егой. Я когда-то составлял шахм. задачи на мат в 2 и 3 хода и решил написать программу для решения шахм. задач в любое число ходов. За 3 месяца написал, потом добавил возможность решать задачи на обратный и кооп. мат. В то время я ещё, кажется, не знал о рекурсивных подпрограммах, поэтому моя программа была нерекурсивной, работала безошибочно, ехе файл имел размер 20 Кб. Также я написал игровой пакет "Игры для ума - 1" под ДОС, статью о нём, а также мой замечательный н/ф рассказик "Прыжок через козла" опубликвали в "Науке и жизни" № 5 за 1997 г. Редакция НИЖ даже пыталась продавать этот мой пакет игр. Почти все номера НИЖ (начиная с 1890 г.) можно скачать в биб-ке Мошкова на publ.lib.ru/ARCHIVES/N/''Nauka_i_jizn'''_(jurnal)/ На моём сайте тоже есть этот рассказик и можно скачать это игровой пакет. На моём старом ПК с вин XP он запросто работает в графике VGA 16 цветов, также и в полноэкране. Особенно, если запускать игры из-под Дос Навигатора. На более совр. ОС нужен DOS Box. В ДОСе тоже всё летало, а потом пришла Вин 95 (в коробке от микрософтов с 15-ю дискетами) и всё стало тормозить.
Кстати, с Д. Бронштейном я тоже встречался, в правой колонке на моём сайте iqfun.ru см. ссылку на мою статью "Как я озадачил Бронштейна". В ней есть 2 фото с моментами, когда Бронштейн подходит к моей доске на сеансе.
Ещё на этом сайте есть статья о моём гениальном (сейчас такое время, что если сам себя не похвалишь, то никто не похвалит) мультфильме "Великая теорема Стёпы Мошкина", который можно посмотреть на ютюбе: https://www.youtube.com/watch?v=y0d5vniO2vk Я для него написал несколько практически гениальных песен, в т.ч. гимн математике, перевёл на русский мировые хиты She's a Lady Тома Джонса и Tombe la neige (падает снег) Сальваторе Адамо (она готовилась ко 2-й серии, и её можно скачать в зипе в mp3). Также можно прочитать мою статью на Хабре об этом м/ф: https://habr.com/ru/articles/474426/ Там в комментариях можно увидеть мои пояснения и полезные ссылки.
Краткое содержание м/ф: советский школьник Стёпа Мошкин при поддержке своих друзей решил опровергнуть теорию чисел и доказать парадоксальную теорему о том, что существует наибольшее натуральное число, после которого уже нет больше чисел, и получить за это Нобелевскую премию. Школьники догадываются, что находятся под колпаком КГБ, поэтому в мультике звучит тема Штирлица. Откуда сов. школьнику знать, что Нобелевских премий по математике не дают? Главная интрига 1-й серии: где ошибка в доказательстве Великой теоремы? Мультик рассчитан на продвинутых школьников, студентов, аспирантов, кандидатов, докторов, медсестёр, нянечек и санитаров, а также на всех, интересующихся математикой. Приятного просмотра!
nikolz написал: Тогда вообще не понятно заявление, что он купил раньше кого-то.
Могу предположить, что по обезличенным сделкам можно было увидеть, что он успел купить по одной цене, а через очень короткое время пришла чья-то крупная покупка (видимо, по рынку) уже по др. цене.
Отн. kalikazandr, которого что-то давно не видно, могу сказать, что выглядел он довольно опытным роботостроителем, не хуже других: насколько я помню, году 20-21-м присутствующий здесь опытный тов. swerg (Да благословит его аллах и приветствует) на форуме quik2dde.ru опубликовал пример своего спредового робота (видимо, тов. swerg (Мир ему и благословение аллаха) в то время ещё только учился), а этот kalikazandr раскритиковал этого робота и сказал, что это пример, как не надо его писать). При этом тов. swerg (Да вознаградит его аллах добром) ничуть не обиделся, зашла речь о том, как надо писать, и советы этого kalikazandr по написанию роботов и возможные подводные камни я ещё в прошлом году даже скопировал в свой текстовый файлик, который, надеюсь, и сейчас лежит на твердотельном накопителе.
Цитата
nikolz написал: Предположу, что вечером задержка у Вас возможна из-за работы алгоритма Nagle в винде.
Так этот алгоритм сидит в винде? Хм, мне здесь кто-то уже отвечал, что это алгоритм по фамилии одного мужика, который сидит на роутерах и по вечерам склеивает пакеты для экономии траффика. А если он в винде, то можно его попробовать как-то отменить?
nikolz написал: Вам о чем-нибудь говорит название "обезличенные сделки"?Свои вы как-нибудь опознаете, но не конкретного конкурента.
А он разве писал о ком-то конкретном? В этом благородном деле все - конкуренты.
Цитата
nikolz написал: От терминала квика у вас на компе до очереди на сервере биржи путь не близкий.
Да, я понимаю... Если я захочу дойти до Москвы, то пару лаптей ботинок точно сношу. Особенно вечером тяжело выставлять заявки (в 19:00:01): посылаю первые 4 раза заявку через 5 мс., а они приходят почти одновременно. А в последнее время два раза вечером видел, что на все 14 заявок не приходил отклик OnTransReply. Более того, я в файле, куда пишет свои действия скрипт, 2 раза не видел сообщения об отправке 1-й заявки, при этом она исполнялась. Кто-то может пояснить причину такого явления? (Ошибки в моём скромном скрипте не предлагать, я в нём кода не менял).