Если можно подключить w32. то почему нельзя user32.dll ? Я вообще LUA не работал совсем, просто возникла необходимость передовать состояние ДЕПО через PostMessage из Квик, т.к в МТ5 нет * счетов. Экспорт из МТ5 работает гораздо быстрее DDE
swerg написал: Михаил Филимонов , вы читать умеете? Зачем вам User32.dll - понятно. Но ваш вопрос был про другое: почему не получится user32 = require("User32.dll")
Вот как сделаете свою dll - так сразу и поймёте. Ну или хотя бы документацию к Lua прочитаете (как к таковому языку Lua, не в привязке к QUIK)
Михаил Филимонов, Почитал форум, попробовал на зуб язык, написал скрипт, реализовал [почти] всё что хотел, Практически никаких претензий не имею ни к Квику, ни к Lua. А вот "кастрированные API" сразу послал НА, ни секунды не задумываясь. Так, мож, "дело было не в бобине"?
Прочитал. Преодоление трудностей наше все. Если их нет, надо создать )) Пару лет назад понадобилась отправка из скрипта e-mail сообщений. Сделал папку ..mail\ куда скрипт кладет файл сообщения. Как только он там появляется штатный Automator операционки его подхватывает и отправляет. Все. До сих пор все шлется без нареканий.
Правда потом сделал создание файла в ..\tmp, а уже потом копирование его в ..mail\ что бы шустрый автоматор не отправил его частями в момент создания.
Занятный вопрос... ЧЬИ средства? Чужие? НИКАК! Если есть такая возможность, то нужно подвешивать за яйца всех разработчиков софта! Свои? Свои не хило бы знать самому! С какой радости скрипт должен "в LUA получить значение, указанное на картинке"? Какое его собачье дело? Скрипт должен знать, сколько ИМЕННО ЕМУ дозволено тратить, а вовсе не всё, что лежит на счёте! И эта цифирь НИКАК не связана с "картинкой"!
Занятный вопрос... ЧЬИ средства? Чужие? НИКАК! Если есть такая возможность, то нужно подвешивать за яйца всех разработчиков софта! Свои? Свои не хило бы знать самому! С какой радости скрипт должен "в LUA получить значение, указанное на картинке"? Какое его собачье дело? Скрипт должен знать, сколько ИМЕННО ЕМУ дозволено тратить, а вовсе не всё, что лежит на счёте! И эта цифирь НИКАК не связана с "картинкой"!
Это у Вас такой юмор? Картинка прикреплена, чтобы было понятно в какой таблице находится, как Вы говорите "цифирь".
Михаил Филимонов, Нет, я абсолютно серьёзно. Я и понял "в какой таблице находится, цифирь". Какое дело скрипту до этой таблицы? Я свой скрипт писал вовсе не для того, чтобы он вынюхивал, что там у меня лежит наа счетах, не говоря уже о том, чтобы использовал эти деньги "в своих интересах". Сколько я ему дам - на том пущай и играет. Я могу дать ему действительно все свободные деньги на счёте, могу дать больше (если мне вдруг захочется, чтобы он поигрался с плечом), могу дать меньше (что я обычно и делаю). В любом случае, я тут главный, а не "железяка х..ва"!
1) Непосредственно к таблице "Состояние счета" доступа через Lua API нет.
2) То, что вы выделили - это не совсем "свободные средства", это остаток на денежном счете. Впрочем, это вопрос терминологии. Вы можете увидеть ту же цифру (на сколько я понимаю) через таблицу "Таблица лимитов по денежным средствам". Откройте её. (просто для того, чтобы понятнее было и нагляднее что там и как; для того, чтобы получить информацию в Lua открывать указанную таблицу конечно не обязательно). Далее см. в QLUA.chm раздел "Таблицы, используемые в функциях «getItem», «getNumberOf» и «SearchItems»", там вам нужна "Позиции участника по деньгам"
Вы ХОТЬ РАЗ за все эти месяцы опровергли "клоуна" хоть в чём-нибудь? А вот он неоднократно возил носом, в том числе лично Вас, не позволяя подобным "умникам" корчить из себя профи. Например: 04.10.2020 19:42:05 swerg, Я уже дважды вопрошал в эт ой ветке: "КАК ИМЕННО Вы будете контролировать актуальность данных даже на ИДЕАЛЬНОМ API? Не знаете? А что же тогда докопались до разработчиков?" НЕ МОЖЕТ быть такого способа! НЕ МОЖЕТ! В ПРИНЦИПЕ не может! А "рекомендованный лучшими собаководами" я тоже давал (в другой ветке). Цитирую: "Квик как-то получает данные, которые лично я намерен считать априори достоверными и не контролировать это дело вообще никак. Луа получает эти данные от Квика". ВОТ И ВСЁ! За достоверность ЭТИХ данных отвечает брокер и разработчики Квика, и уж их возможности кратно превосходят возможности любого окопавшегося за своим компом программера! Подходите и берите! Надёжнее не бывает в природе!
27.10.2020 11:08:32 swerg, Вот он я "такой программист". 40 лет вхожу внутрь блоков if, и горя не знаю Программы бывают чуть посложнее, чем a=b+c;
27.10.2020 12:14:23 swerg, Так программы ПО ФУНКЦИОНАЛУ СВОЕМУ бывают посложнее! Не только торговые погремушки. Скажу больше: без входа внутрь блоков if или внутрь циклов goto И В САМОМ ДЕЛЕ нафиг не нужен. В частности, вот это убожество: кто его использует - поднимите руки!
28.10.2020 10:38:37 swerg, Врать - нехорошо Это насчёт "не читает". Что до другого тезиса, так я давным-давно (в начале "нулевых" писал: Для "подтверждения" своих мыслей они тычут пальцем в мегатонные доки, которые они якобы изучили (или хотя бы читали). Например, в трехтомник Кнута. Однако в последнее время (видимо, нарвавшись пару раз на тех, кто этого самого Кнута все-таки читал) предпочитают ссылаться на некие абстрактные "учебники" или там "документацию". Профессионал же не позволяет себе подобного НИКОГДА - он просто не умеет этого делать. Эта уловка обрубается стандартной фразой: "Читайте сами, раз уж ничего оттуда внятно процитировать не можете".
30.10.2020 09:31:55 swerg, Внимательнее ответ стоит прочитать. main - это ТОЖЕ обработчик, и никакого отношения к многопоточности не имеет. OnStop - это при нормальной организации НЕ ЮЗЕРОВСКАЯ функция, а системная. Так что нужно просто послать сообщение "убей меня". А можно и не посылать: main закончился - интерпретатор знает, что нужно делать. По крайней мере, ДОЛЖЕН знать! НЕ БЫВАЕТ "модели без main()"! При запуске скрипта ЧТО-ТО должно начать выполняться. Вот это "что-то" и есть main, хоть горшком её назови.
30.10.2020 22:51:55 swerg, Чушь. Кто именно и с какого бодуна вдруг станет "брать скрипт" и, тем более, "начнёт него дергать колбеки по мере поступления событий". Как этот "кто-то" вообще узнает, что нужно делать? Как узнает, где там "колбеки"? По фиксированным именам? Кто вообще сказал, что скрипт запрашивает колбеки? Может, они ему нафиг не нужны. А что "ничего "что-то" выполнять постоянно не требуется", я и пытаюсь вдолбить чуть ли не всю эту ветку - не придурошный цикл с анализом флага останова, а примитивный wait.
31.10.2020 12:35:26 swerg, Может, хватит, господа? Сначала один нёс какую-то клиническую ахинею про "роботов и всякие прочие глупости", да ещё с гнутыми пальцами вроде "вы даже понимаете суть вопроса". Получил щелчок по носу - теперь чего-то шипит про "троллей". Потом второй начал пальцы гнуть на тему API в том же ключе: "По-моему вы ничего не понимаете", да про int-float ("Как бы по мягче сказать, что вы не разбираетесь в теме. Повторю в квике 7, lua 5.1 - в нем не числа хранятся типом double, соответственно нельзя хранить int64"), да про "не надо путать стек процессора и стек Lua - это разные стеки. Вам бы документацию почитать и хорошенько разобраться в луа", да про "выучи английский", да про "умение читать документацию и гуглить", после чего вообще забился в истерике. Потом третий понёс пургу про "монстров фондового рынка", и тоже с гнутыми пальцами: "Вы еще далеки от понимания реальности фондовых рынков" и совсем уж клинический бред с ещё большей распальцовкой: "вот некоторые из аксиом, которые надо усвоить и научится программировать", затем бред про мантиссы ("для справки: Разрядность мантиссы в 64 битном вещественном числе составляет 52 бита, что позволяет точно отобразить лишь 16 разрядное десятичное целое число, а не 18 квинтиллионов, как наивно полагает Владимир"), затем про "это VM а не интерпретатор", и тоже с истерикой: " в языках и виртуальных машинах вы ноль без палочки"... я прям утомился этому неучу по носу щёлкать! Потом Вы. Ваша квалификация несколько выше, но стиль тот же, вплоть до прямой лжи: "Как уже всем известно, документацию Владимир не читает". А причина-то в другом - просто я с раннего детства не перевариваю распальцованных дураков и редко спускаю им их "поучения". А "вопрос, который давно Вас заботит", выеденного яйца не стоит, ибо main есть ВСЕГДА! Поймите же, наконец, простую вещь: ЛЮБОЙ интерпретатор ОБЯЗАН знать, когда и с какого места нужно начинать интерпретировать представленный код, когда и в каком месте нужно прекратить это делать. И лучший способ это сделать - создать утилиту с согласованным именем: тот самый main. Эта технология была разработана ещё в прошлом тысячелетии - тогда на планете Земля ещё водились программисты. И на Ваш вопрос: "А если скрипт сам захотел остановиться - откуда OnStop возьмётся?!" ответ уже давался: сбрасывайте этот дурацкий флаг isRun НЕ ТОЛЬКО в OnStop, а в любом другом месте, где он "захотел остановиться". Или воткните в этот дурацкий цикл НЕ ТОЛЬКО sleep, но и хоть сотню конструкций if blah-blah-blah then break;end; P.S. На всякий случай только что проверил оба способа - всё прекрасно работает.
05.11.2020 09:21:18 swerg, А при чём тут "визуальные элементы"? На этом форуме ещё несколько лет назад говорилось, что подготовка таблицы и прорисовка таблицы - это РАЗНЫЕ вещи, и давались предложения к разработчикам (проигнорированные) разделить эти вещи. Какое отношение к "визуальным элементам" имеет AllocTable? Или AddColumn? Или даже SetTableNotificationCallback, равно как и SetColor? Вот CreateWindow - имеет. Ну, SetCell, пожалуй, имеет (да и то спорный вопрос). Я свою таблицу визуализации готовлю именно в main! А строками её набиваю уже в "большом" прерывании (15-секундном), А ячейки значениями заполняю и раскрашиваю - уже в малом, полуторасекундном. При этом все три находятся именно в потоке main! Более того: ИМЕННО ТАК И НУЖНО делать - в данном случае "квиковцы" поступили совершенно правильно! Да какой, в задницу, "полный код", если обсудить предлагается концепции, философию, алгоритмы? Кому он нужен, этот "полный код"? Я и хочу ОБСУДИТЬ, "что ожидается, как на самом деле и как сделать ожидаемое"! Я хочу поговорить С ПРОГРАММИСТАМИ! На кой мне эти "запускатели полного кода", которые "в вопросы такого плана вникать не будут"? Господи, я же русским языком сказал: я хочу обсудить ДИАЛОГ НА LUA! Меня Не ИНТЕРЕСУЮТ все эти долбаные "полноценные интерфейсы из внешних библиотек! ВААПЩЕ нее интересуют!
23.11.2020 13:39:30 swerg, Ну да ну да... советчиков с растопыренными пальцами, "объяснявших", что 2 и "2" это разные вещи, было как собак нерезаных. а вот если головой подумать требуется... Да выгребусь уж как-нибудь. С диалогом выгреб, а с подачей заявок да приходом квитанций и подавно.
03.12.2020 11:14:35 swerg, Я уже просил (не помню, Вас или нет): не надо врать! Это про "не читает документацию". А как передаются параметры в Lua, мне АБСОЛЮТНО до лампады - я не разработчик языка, я просто пользователь. Просто ЕСЛИ они передаются не ссылкой, а самой таблицей значений, ТО это есть идиотизм. Идиотизм тех, кто ПИШЕТ эту самую "документацию".
09.12.2020 20:32:59 swerg, А что ещё делать остаётся? Управление теряется, прерывания идут как бог на душу положит, с типами данных полная задница, например: iT=tonumber(GetCell(T,p1,0).value); - скрипт вылетает, причём даже не хрюкает - смотрю, а он уже полчаса как стоит, а вот iT=tonumber(GetCell(T,p1,0).image); - пока работает. Ну и куча других аналогичных "мелочей". Я ведь писал когда-то, прямо в этой ветке - как чувствовал: 4. Я считаю (лучше сказать "надеюсь"), что прерывание OnTrade НЕ МОЖЕТ "потеряться" и придти после того, как пришла информация о другой сделке по той же заявке, а потому... Зря надеялся.
12.01.2021 20:02:53 swerg, Я, милок, уже пару раз здесь говорил, что с раннего детства терпеть не могу распальцованных дураков и редко спускаю им их "поучения". А моя некомпетентность привела к тому, что мой скрипт уже с месяц как полностью рабочий, и в последние дни я занимаюсь тончайшей шлифовкой алгоритма. Точнее, занимался - последние два дня я просто любуюсь его работой, и только за сегодня он уже принёс мне 1.6% прибыли, а ещё не вечер! Надеюсь, к концу дня будет 2%. Впрочем, неважно. И ему НАСРАТЬ на бесконечно меняющиеся версии софта - он [пока что] прекрасно уживается с любыми. Осталось разве что убрать кретинизм с "1 заявка - 1 лот", и больше я вообще от него ничего не хочу. Так что НЕ СОВЕТУЮ разным умникам "отвечать на мой идиотизм" - чревато. Вот подобные "отвлечённые" тяфтяфки - это сколько угодно.
В частности, в этой самой ветке: чтение таблицы состояния счёта СКРИПТОМ есть алгоритмический идиотизм. Не его это собачье дело! Точка. Так что клоуна в зеркале поищите.
1) Непосредственно к таблице "Состояние счета" доступа через Lua API нет.
2) То, что вы выделили - это не совсем "свободные средства", это остаток на денежном счете. Впрочем, это вопрос терминологии. Вы можете увидеть ту же цифру (на сколько я понимаю) через таблицу "Таблица лимитов по денежным средствам". Откройте её. (просто для того, чтобы понятнее было и нагляднее что там и как; для того, чтобы получить информацию в Lua открывать указанную таблицу конечно не обязательно). Далее см. в QLUA.chm раздел "Таблицы, используемые в функциях «getItem», «getNumberOf» и «SearchItems»", там вам нужна "Позиции участника по деньгам"
Дело в том, что это Единый Брокерский Счет и останок средств (свободных средств) находится только в этой стандартной таблице "Состояние счета". Когда я запрашиваю
Чтобы получить данные по деньгам, позициям надо обратиться к определенной таблице и просканировать строки, либо использовать специализированные функции для получения денежных лимитов, позиций и т.д., допустим getMoneyEx или getPortfolioInfoEx.
Чтобы получить данные по деньгам, позициям надо обратиться к определенной таблице и просканировать строки, либо использовать специализированные функции для получения денежных лимитов, позиций и т.д., допустим getMoneyEx или getPortfolioInfoEx.
Да никак не получится потому что ... Ответ (здесь на форуме) Романа Азарова (сотрудник Арка )
""Ликвидная стоимость" и "Прибыль дня" являются параметрами таблицы "Состояние счета". Доступ к параметрам данной таблицы с помощью Lua не представляется возможным."
Михаил Филимонов, Так не запрашивайте! Сообщите это скрипту САМИ, и пусть он САМ ведёт свою бухгалтерию! У меня эти данные лежат в входном файле, одной строкой, которая на данный момент имеет вид (точнее, имела утром, когда я запускал скрипт): _M[0]=2910.50;M[1]=44.29;M[2]=85.44; Это означает, что на сегодня у скрипта имеется 2910.50 свободных рублей, 44.29 свободных доллара и 85.44 свободных евро. Плюс то, что он там сумеет выгодно продать (инфа о сделках у него также имеется, в том же файле). При этом эта строчка написана фактически в теле скрипта, благо loadstring имеется в наличии:
Код
s=l:sub(1,1); -- первый символ строки может быть командой
if s=="_" then -- команда задания суммы доступной валюты
loadstring(l:sub(2))();-- выполняем оператор из файла
Ну что же Вам ЕЩЁ требуется? Попробуйте! Или поверьте на слово - это полный кайф! Да, кстати: ЕДИНСТВЕННАЯ таблица, к которой мой скрипт вообще обращается, это ТТТ - остальные ему нафиг не нужны!
Михаил Филимонов написал: Ответ (здесь на форуме) Романа Азарова (сотрудник Арка )
""Ликвидная стоимость" и "Прибыль дня" являются параметрами таблицы " Состояние счета ". Доступ к параметрам данной таблицы с помощью Lua не представляется возможным."
Вот и все, приехали
Зачем она вам?? "Ликвидная стоимость" - это остаток по деньгам (из лимита по денежным средствам, оно же получается через getMoneyEx), вероятно минус заблокированное из того же источника.
При этом на картинке в исходном посте вы выделили совсем другой параметр. Вы напишите толком что требуется - может и будет ответ предметный, а так скакать между табличками и параметрами - толку не будет. Большинство параметров, которые отображаются в "Состоянии счета", доступны или напрямую в других таблицах (и доступны из Lua), или легко вычисляются на основании других таблиц. По сути "Состояние счета" - это просто агрегированная информация из разных таблиц QUIK.
Чтобы получить данные по деньгам, позициям надо обратиться к определенной таблице и просканировать строки, либо использовать специализированные функции для получения денежных лимитов, позиций и т.д., допустим getMoneyEx или getPortfolioInfoEx.
Спасибо, getPortfolioInfoEx позволяет получить данные из таблицы "Клиентский портфель"
swerg написал: А можно поинтересоваться: почему бы в МТ5 не торговать тогда? Какие плюсы у этого франкинштейна?
Дело в том, что торговать на Едином Брокерском Счете можно только в Квик. Я написал свою программу, которая получала данные из Квик по DDE, а приказы отправляла через trans2quik.dll, Данные по DDE передаются ОЧЕНЬ медленно, да и МТ5 получает маркет дата в разы быстрее, поэтому я соорудил очень быструю передачу данных из МТ5 в свое приложение. Не хватало только свободных средств на счете в Квик
АХХХРЕНЕТЬ! Костыль на костыле! Остаётся удивляться, как эта конструкция до сих пор вообще работает! Снимаю шляпу перед разработчиками софта, усилиями которых для организации примитивнейшей техники "купи-продай" приходится идти на подобные извращения. Особенно понравилось "торговать на Едином Брокерском Счете можно только в Квик": какая вам, ублюдкам, разница, что там "на той стороне", если протокол передачи данных выдерживается?
MT5, насколько я подозреваю (и кое-где краем уха слышал) "те же яйца, только в профиль". Ну, конечно - прям навскидку: "Торговая платформа для совершения операций на финансовых рынках — это не только мощнейшие () инструменты для трейдинга, но и множество дополнительных сервисов". Прям как когда-то со сцены лепили два придурка: "Кролик это не только ценный мех но и 3-4 килограмма легкоусваиваемого мяса".
Разумеется, "торговая платформа обладает мощной аналитикой. Для анализа котировок валют или акций в программе имеется 82 различных аналитических инструмента, включая технические индикаторы и графические объекты". И, как всегда, обсираются предшественники: "Универсальным представителем семейства стала торговая система MetaTrader 5, выпущенная в 2010 году. Её не следует рассматривать как обновленную версию MetaTrader 4 — функционал совершенно разный". С КАКОГО ХЕРА он "совершенно разный"?!
Вся эта рекламная хрень, естественно, переплетается лапшой про "самообучаемые алгоритмы искусственного интеллекта": "Алгоритм может быть разной степени сложности, начиная от комбинации нескольких простейших индикаторов технического анализа, до сложных нейронных систем искусственного интеллекта, которые занимают ни один десяток тысяч строк программного кода". То бишь, ИИ на проверку оказался сраными нейронными сетями.
Сложность торговых алгоритмов. Иногда процесс принятия торгового решения выглядит очень сложно, особенно если он построен на глубоком изучении статистических распределений вероятности или построении нейронных сетей, на основании которых торговый алгоритм генерирует сигнал на покупку или продажу активов. Да заткнитесь вы со своими долбаными "нейронными сетями"! СВОИ деньги им скармливайте, а не впаривайте юзерам своё говно! А процессы принятия решений [должны быть] просты и понятны: курс растёт - покупаем, падает - продаём. Ну, чуть сложнее. Просто данных довольно много, меняются они довольно часто, и юзеровские бестолковки просто физически не могут переварить такой объём информации. Да и сидеть, уткнувшись в монитор, неохота - пущай работает "железяка х..ва"!
Над этими вопросами работают мощные, с неограниченными ресурсами команды программистов и математиков в ведущих инвестиционных компаниях мира с миллиардными оборотами. И периодически их торговые алгоритмы терпят фиаско, а компании получают много миллиардные убытки за несколько дней. Так чего же вонь не прекращается про ИИ? Даже со сраной торговлей справиться не могут, а туда же - ИИ! Я уже 20 лет гоняю эту шушеру стихами Маршака: Мой мальчик! Тебе эту песню дарю. Рассчитывай силы свои. И, если сказать не умеешь "хрю-хрю", - Визжи, не стесняясь: "ИИ!"...
Статистика Московской биржи неумолима, даже среди профессиональных участников торгов в спекулятивной «мясорубке» в борьбе за прибыль более 60% участников теряют деньги, а зарабатывает менее 10%. Ну да, биржа и устроена для доения лохов, какими бы титулованными они ни были.