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

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

Страницы: Пред. 1 ... 19 20 21 22 23 24 25 26 27 28 29 ... 80 След.
Выгрузка библиотек
 
ссылка для скачивания  dll с функциями выгрузки
https://transfiles.ru/cp4bi

выгрузить на Lua5.3 :
require"nkDDD"
nkDDD.freeDLL( имяВыгружаемойDLL)

для выгрузки на СИ  функция
void nkfreeDLL(char* pNameDLL)
-------------------------
Если что не так, пишите и выкладывайте Ваш пример, будет разбираться.
Мой пример на луа см выше
Stop Loss и Take Profit к отложенным ИМЕННО Buy stop и Sell stop ордерам, У вас нет возможности выставлять Stop Loss и Take Profit к отложенным ИМЕННО Buy stop и Sell stop ордерам
 
Цитата
Roman Koledin написал:
У вас нет возможности выставлять Stop Loss и Take Profit к отложенным ИМЕННО Buy stop и Sell stop ордерам - она есть только к лимитным ордерам - во всех платформах это есть -НО ТОЛЬКО У ВАС ЭТОГО НЕТ - НЕ ВСЕ ТОРГУЮТ ЛИМИТНИКАМИ!
Уточните,
Вы через  МТ5 на московкой бирже можете поставить Stop и Take к отложенным ордерам или это на кухне форекса?
Фильтр дублей сигналов на сделку, Как реализовать?
 
Цитата
Сергей написал:
Да, собственно, уже сам практически разобрался, опыта в других языках хватает, LUA постепенно поддается. Тема была создана для ускорения процесса.

За что люблю иностранные форумы, там просто отвечают на поставленный вопрос. На наших же сначала полет фантазии, потом, когда возвращаешь в рамки темы, долго объясняют, какой ты мудак.

На этой позитивной ноте будем считать тему закрытой.
Ну слава богу, что сами догадались.
--------------------------
Хорошо на англоязычных форумах, там задают детсадовские вопросы  и не хамят.
-----------------------
А на русскоязычных  выползает  на форму дебил со своим "помогите у меня чаша из ж..ы не выходит
----------------------------------
Его начинают спрашивать как ты ее туда засунул?
А он обижается, ему непонятно, что за детские вопросы. Вот засунул и сам не понял.
----------------------
Но постепенно до него дошло, что не все умеют как он делать.
Обмен сообщениями приложений , скриптов на Lua, Python ,С
 
Цитата
A.T. написал:
Да, кстати, в американских платформах, подобных Квику, на C++ написана, весьма хороша (была такая, еще с 90-х, точно такая же модель, когда брокеры подписываются на платформу, а платформу держит независимый разработчик. Её потом выкупил Bank of America и в итоге практически уничтожил, индусские аутсорсные программисты и менеджент, которому ничего не надо, творят чудеса).

Очень старая, подозреваю, что модель Квика и даже бизнес-процесса с нее когда-то срисовывалась.
Называлась InstaQuote.
Тоже с Q логотипом :)

Это было еще до появления Инстаграмма. Так что название не слизано. Точнее, когда инстаграмм появился, платформа была почти убита.

Вот там DDE активно использовался. И было еще некое самореализованное API, очень лаконичное с мини-документацией и простыми функциями обработки заявок, не помню уже технических деталей.о есть это общая мировая практика торговых платформ вообще.

По моему через локальный TCP-port  это делалось... Да!
Торговая платформа открывала и всегда слушала 3201 порт, как сейчас помню.
И на порту висело самописное API, очень простое. Никакого Луа.

Опционная доска там была, но она сама была реализована как как бы отдельное приложение, в отдельном потоке. Было видно даже по интерфейсу, что писалось отдельно.
И опционы на Америке совсем по другому устроены. Нет централизованной волатильности от биржи, и многое не так. И опционы на акции. Это не CME было.

То есть задачи и подходы в принципе одинаковы. Что в Америке, что на Квике в России.

Проблема в том, что DDE слишком громоздок. И слишком стар. И ничего лучше не придумали.

В Квике надо несколько манипуляций мышью сделать, чтобы запускать это всё, в Excel.
По сути пишется самописный Excel, берется компонент на C++ и получается DDE-клиент.

А хотелось бы лаконичную DLL повесить и обращаться отдельным запросом внешним С++ или Java "экзешником" через общую память (это лучшее!) или через такой же localhost TCP-port, через WinSock.

Потому что как устроен ColdFusion (или аналогичный слизанный, ксати, позднее с него модный ASP.NET -- это доподлино известно).
Можно написать программу на Java или С++, которая как обычный HTML-тег с нужными переаметрами по мере надобности может вызываться прямо с веб-страницы.
Всю эту обертку и взаимодействие уже делает сам ColdFusion.


То есть можно вызвать расчет ГО, данные из Квика прямо с веб-страницы и тут же отобразить или записать в БД.
Практически не напрягаясь.

Единственное, это сам Lua и переход в С++.

Вот какая-то такая задумка. Обвязку такую сделать.

А опционную доску потом доделают под Qlua. На худой конец, никто не запрещает обращаться напрямую по коду опциона.
Не в обиду будет сказано, но Вы во всех этих суждениях ошибаетесь.
--------------------
Я не буду подробно все рассказывать, но замечу кратко, в чем Ваши ошибки.
--------------------
1) DDE и TCP- это две большие разницы. WinSock вообще ни при чем.
-----------------
2) DDE - в модели "сервер-клиент" - это самый быстрый способ обмена между приложениями на одном компе.
-------------------
3) Вы не пишите Excel от слова "совсем".  Вы используете формат данных, который используется в Excel.
----------------
Желаю успеха.  
Выгрузка библиотек
 
Цитата
Вадим Никитин написал:
Цитата
nikolz написал:
 
Цитата
Вадим Никитин  написал:
И ещё.

Допустим, сделали библиотеку.
Запустили скрипт.
Библиотека создала потоки, выделила ресурсы, ещё там чего сделала.
Скрипт упал.
Всё это добро осталось висеть.
Как его удалить - никак.

<irony>Конечно, можно сохранить куда-то при создании хэндл каждого ресурса, а после специальной библиотекой вычищать всё это</irony>

Это к чему.
Смотрю тему уже месяц обсуждают.
Действительно ли перезапуск Квика так сложен, что стоит тратить на этот костыль столько времени? Тем более, что это будет крайне ненадёжное решение. Ведь по сути делается то, что не предусмотрено по дизайну, а это всегда ведёт к Undefined Behaviour. В итоге можно потратить ещё больше времени на отладку костыля, вместо того, чтобы разрабатывать торговую стратегию.

В револьвере шесть пуль, а ноги всего две:)
 Вы немного неправильно рассказали взаимодействие процессов и DLL.
Но это не принципиально.
-----------------------------
Товарищи обсуждают эту тему потому , что учатся писать программы,
-------------------------------
Так как облаживаю DLL вне QUIK, то нет надобности выгружать dll из QUIK.
---------------------------------------
Поэтому написал эту функцию из спортивного интереса.
У меня на это ушло не более часа, чтобы уточнить некоторые моменты, разобраться и провести тесты,
------------------------------
Последний вариант не требует включение каких либо функций в выгружаемую библиотеку.
---------------------------
DLL занимает 39 Кбайт для обращения на C
и 44 Кбайта для обращения на Lua.
Да, конечно согласен. Возможно есть неточности. Память человека всё же подвижная материя:)

Учиться всегда полезно. Могу порекомендовать прочитать изучающим тему Windows:
 Джеффри Рихтер, Кристоф Назар - Windows via C/C++. Программирование на языке Visual C++
 Марк Руссинович et al. - Внутреннее устройство Windows
 В них достаточно подробно описаны механизмы взаимодействия различных компонентов Windows.

Тоже не использую Квик для разработки, разрабатываю в Linux:)

Но как-то интересовался этой темой, пришёл к тому же варианту, что вы описали.
Также делал, чтобы можно было ликвидировать потоки, которые оставались в случае падежа скрипта.
Но для себя счёл всё это недостаточно надёжным поэтому решил, что проще перезапустить Квик в экстренном случае.
В дополнение к Вашей рекомендации добавлю
Джеффри РИХТЕР. Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows
--------------------
В этой книге можно изучить как взаимодействуют прооцессы с DLL.
----------------------------
Относительно выгрузки библиотек.
Нет смысла отлаживать DLL в КВИКЕ.
В квике отлаживают скрипты.
--------------------------------
Специально сейчас проверил .
Нет надобности перезагружать КВИК.
При остановке скрипта dll освобождается и можно ее снова собирать.
------------------
Полагаю, что причина проблемы у автора темы иная.  
Фильтр дублей сигналов на сделку, Как реализовать?
 
Цитата
Сергей написал:
Цитата
nikolz написал:
 
Цитата
Сергей  написал:
Здравствуйте!
Вопрос возник в том, что нормальная стратегия дает сначала сигнал на покупку, затем сигнал на продажу. Затем опять на покупку.
Но условия входа и выхода из сделок могут быть разные. И до появления сигнала на покупку, стратегия может выдать несколько сигналов на выход из сделки.

Как реализовать что-то вроде: Появился сигнал на покупку - стратегия записывает единичку в базу данных. Когда появляется сигнал на продажу, стратегия проверяет, есть ли в базе данных единичка или нет. Если есть, то выдает сигнал на продажу, а в базу записывает ноль.

Когда появляется сигнал на покупку, стратегия проверяет, что записано в базе. Если единица, то молчит. Если ноль, то выдает сигнал на покупку и пишет в эту ячейку единицу.

Как это можно сделать, подскажите пожалуйста. Я недавно начал LUA изучать, пока ворох вопросов копится.
 Для этого надо запоминать предыдущий сигнал и в зависимости от его значения формировать новый.
-------------------------------
Т е если предыдущая позиция long( короткие позиции не используются), то формируем сигнал продать
----------------------------------------
если предыдущая позиция вне рынка ( короткие позиции не используются),  то формируем сигнал купить.
Я неплохо программирую на AFL, так что, общая логика программирования мне понятна.
тогда что непонятно?
Обмен сообщениями приложений , скриптов на Lua, Python ,С
 
Цитата
A.T. написал:
Не соглашусь с Владимиром.
Мне вот написание робота на Lua совершенно не нужно. Но я здесь, чтобы написать коннектор на С++ и выдрать данные из квика с базу данных, где скрипт на T-SQL (это SQL Server) сам посчитает, а потом выдаст нужное в веб-интерфейсе через совсем уж редкий язык в Европе для web-а под названием ColdFusion (или CFML)/ Удобен он для написания веб-страниц.

Не верю я в роботов!
Вы на рынке деривативов не работали (на срочном) и не видели, как ГО поднимают и сделать ничего нельзя. Робот тупо встанет в сложный момент.
Только ручная торговля.


У меня задача только получить  данные из Квика. Через общую память, например. Хоть в файл для начала записать на C++ (потому что STL использую).
И получить данные самым быстрым, кошерным способом, то есть создавать технических нагромождений, я пока не могу. Не разобрался. Только вызывать код C из Lua, "приветы передавать", а надо наоборот, брать из Квика и писать в файл или общую память по конкретным тикерам.



И да. Не надо мешать в кучу все свои старомодные представление.
Есть интерпретируемые языки (типа javaScript и Python, Perl, PHP), а есть компилируемые.

Компилируемые в свою очередь подразделяются на настоящие, формирующие машинный код через компилятор, напрямую работающие в железом и процессором (по сути только C/C++ и Pascal/Delphi) и компилируемые в байт-код и выполняемые оберточной машиной, бинарным интерпертатором, по сути (Java, .NET, или вон Lua).

Вот и вся классификация. В 21 веке это так. И будет так. PDP можно и почти все ранее 1990-х можно выкинуть.


На последок надо бы различать язык Ассемблера (по сути это именно язык для человека) и собственно машинный код. Писать и править программы можно прямо в машинном коде, потому что есть двоякие ситуации, когда ассемблер можно по разному транслировать в машинный код.
И сам машинный код на самом деле тоже интерпретируется процессором, почти как обычный текст, на конверее, байт за байтом. Но это уже детали железной реализации. Это уже сделано на заводе, так сказать.

Коротко, для новичков, так сказать.
Вы забыли упомянуть микрокоманды. Это то, что всегда исполняется за один такт. Все команды фактически реализованы в виде функций на микрокомандах. Но это не важно.
---------------------------
теперь про Ваши хотелки.
Если Вы не собираетесь выполнять автоматом торговые операции, а надо лишь забрать данные из таблиц ( в том числе и доску опционов, которую на луа не получите), то Вам не надо луа. Вам надо использовать DDE
Полагаю это именно то, что Вам надо.
Раньше , когда луа не было я так и делал.
Сейчас тоже у меня есть в арсенале DLL, то это надо лишь для опционов.
Но опционами не торгую  поэтому DLL на запасном пути стоит.
Выгрузка библиотек
 
Цитата
Вадим Никитин написал:
И ещё.

Допустим, сделали библиотеку.
Запустили скрипт.
Библиотека создала потоки, выделила ресурсы, ещё там чего сделала.
Скрипт упал.
Всё это добро осталось висеть.
Как его удалить - никак.

<irony>Конечно, можно сохранить куда-то при создании хэндл каждого ресурса, а после специальной библиотекой вычищать всё это</irony>

Это к чему.
Смотрю тему уже месяц обсуждают.
Действительно ли перезапуск Квика так сложен, что стоит тратить на этот костыль столько времени? Тем более, что это будет крайне ненадёжное решение. Ведь по сути делается то, что не предусмотрено по дизайну, а это всегда ведёт к Undefined Behaviour. В итоге можно потратить ещё больше времени на отладку костыля, вместо того, чтобы разрабатывать торговую стратегию.

В револьвере шесть пуль, а ноги всего две:)
Вы немного неправильно рассказали взаимодействие процессов и DLL.
Но это не принципиально.
-----------------------------
Товарищи обсуждают эту тему потому , что учатся писать программы,
-------------------------------
Так как облаживаю DLL вне QUIK, то нет надобности выгружать dll из QUIK.
---------------------------------------
Поэтому написал эту функцию из спортивного интереса.
У меня на это ушло не более часа, чтобы уточнить некоторые моменты, разобраться и провести тесты,
------------------------------
Последний вариант не требует включение каких либо функций в выгружаемую библиотеку.
---------------------------
DLL занимает 39 Кбайт для обращения на C
и 44 Кбайта для обращения на Lua.


 
Фильтр дублей сигналов на сделку, Как реализовать?
 
Цитата
Сергей написал:
Здравствуйте!
Вопрос возник в том, что нормальная стратегия дает сначала сигнал на покупку, затем сигнал на продажу. Затем опять на покупку.
Но условия входа и выхода из сделок могут быть разные. И до появления сигнала на покупку, стратегия может выдать несколько сигналов на выход из сделки.

Как реализовать что-то вроде: Появился сигнал на покупку - стратегия записывает единичку в базу данных. Когда появляется сигнал на продажу, стратегия проверяет, есть ли в базе данных единичка или нет. Если есть, то выдает сигнал на продажу, а в базу записывает ноль.

Когда появляется сигнал на покупку, стратегия проверяет, что записано в базе. Если единица, то молчит. Если ноль, то выдает сигнал на покупку и пишет в эту ячейку единицу.

Как это можно сделать, подскажите пожалуйста. Я недавно начал LUA изучать, пока ворох вопросов копится.
Для этого надо запоминать предыдущий сигнал и в зависимости от его значения формировать новый.
-------------------------------
Т е если предыдущая позиция long( короткие позиции не используются), то формируем сигнал продать
----------------------------------------
если предыдущая позиция вне рынка ( короткие позиции не используются),  то формируем сигнал купить.
Выгрузка библиотек
 
Сделал функцию выгрузки DLL c вызовом на С.
---------------------------
Можно с помощью API C for Lua сделать обертку для любой версии Lua
-----------------------
Есть вариант для Lua5.3  ничего писать на Си не надо.
--------------------------------------
Кому надо, стучите в личку.
Тест. Данные в другое приложение.
 
и еще..
Вы можете использовать в  категориях "клиент-сервер"
[*]Каналы передачи данных Pipe
[*]Каналы передачи данных Mailslot
Тест. Данные в другое приложение.
 
Цитата
A.T. написал:
nikolz , Вы можете объяснить следущее.
Я скачал книгу Programming in Lua, разбираюсь.
Как понимаю, она подойдет и для QLua.

Грубо говоря, Lua это такой встраеваемый скриптовой язык вообще. То есть любой разработчик, кому надо прикурутить к своей среде (хоть к игре, хоть самописный Excel какой, хоть тот же терминал Quik) может встроить Lua, чтобы пользователи писали скрипты, выполняемые в этой среде.
На C пользователи  писать не могут, потому что потребуется компилятор и какое-то межпроцессное взаимодействие и вот это всё.
Поэтому взяли Lua. Могли бы взять Python или javaScript с тем же результатом, не важно.

Но Lua в данном смысле, выполняется совместно в оновным экзешником программы. В квиком в данном случае.


Мне надо написать свою простую С++ программу, которая бы брала каким-то образом данные из Lua-квика и перегоняла их (попутно преобразовывая) в Insert/Select запросы в базу данных на SQL Server. (ODBC, не важно, это уже моя задача).

Я технически не понимаю, как будет работать этот "мост" Qlua -- и моя программа на С.

Я мыслю  в категориях "клиент-сервер".
То есть что должно быть в итоге.

Пользователь вручную(!) запускает в квике некий Луа-скрипт, который каким-то образом (каким?) открывает шлюз, (открывает хедл, слушает порт, открывает общую память, не знаю..., что-то в этом роде)

Я моя программа к нему подцепляется и спрашивает данные, вызвает функции.
То есть это программа-клиент


Как этот мост в этом скрипте Lua выглядит? Какие функции в том скрипте прописать, что в скрипте делается технически для клиент-серверного взаимодействия?

И я в принципе не правильно представляю.
Какую главу в той книге тогда читать? Очень скудные в книге примеры.
QLua - это библиотека функций для взаимодействия с терминалом и сервером брокера на Lua.
-----------------
т е язык Lua. Книга подойдет.
===========================  
Вы можете написать сервер на луа, а клиента на СИ .
======================
В любую программу на СИ можно встроить VMLua - виртуальную машину луа. Это программная модель вычислителя со стековой структурой регистров.
Тест программы на луа  при его загрузки в VMLua компилируется в байт-код - это язык VMLua. Байт-код разбирается далее на поле команды(операции) и поля операндов
Каждая команда(операция) исполняется функцией, которая написана на СИ.
Есть API C for Lua, который позволяет писать свои функции на СИ для VMLua и таким образом расширять возможности с быстродействием СИ.
QLUA - это и есть такая библиотека на СИ.
========================
Сервер на Lua выглядит очень просто.
Для этого используют  https://lunarmodules.github.io/luasocket/
----------------------------
LuaSocket - это библиотека расширений Lua, состоящая из двух частей: ядра C, обеспечивающего поддержку транспортных уровней TCP и UDP,
и набора модулей Lua, добавляющих поддержку функциональности, обычно необходимой приложениям, работающим с Интернетом.



 
Выгрузка библиотек
 
Цитата
Alexander написал:
Цитата
nikolz написал:
Удачная компиляция dll, хотя тест запущен как и во втором случае, но после вызова Вашей функции вызвана моя функция выгрузки dll.
А хэндл для выгрузки DLL, которая выгружает основную, она как по имени получает?
Если мой тест Вам понятен и это то, что Вам нужно, то могу выложить свою dll для пробы.
Скажу сразу, что делаю для Lua5.3, так как у меня QUIK 8.7.
Выше не ставлю так как все что выше пока не устраивает меня.
Выгрузка библиотек
 
Alexander,
Выкладываю картинки теста выгрузки Вашей dll.
На каждой картинке Большое окно - это Ваша dll в IDE
В нижней части слева  этого окна показан результат сборки этой dll
-----------------
В малом окне справа - это тест на луа
В нем вызывается ваша функция и далее стоит бесконечный цикл, который не дает завершить тесту.
-----------------------
Удачная компиляция dll при пассивном тесте (тест не запущен)


Ннеудачная компиляция dll, так как тест запущен и он блокирует dll.


Удачная компиляция dll, хотя тест запущен как и во втором случае,
но после вызова Вашей функции вызвана моя функция выгрузки dll.
 
Выгрузка библиотек
 
Цитата
Alexander написал:
Цитата
nikolz написал:
Я Вроде вам написал, что сделать. Вы сделали? Какой результат?Если не выгрузилась, то скажу что делать дальше.
Что ещё попробовать?
В свободное время протестирую Вашу dll (приведенную Выше) и напишу Вам результат.
------------------------
Могу выложить готовую dll для выгрузки вашей библиотеки .
Нужно создать робота на QPILE. ( за оплату ), Кто сможет сделать робота сканер по RSI ?
 
напишите в личку цену, за которую надо сделать.
Выгрузка библиотек
 
Alexander,
У меня все это работает.
Но если Вы будете сами выдумавать а не делать ровно то что я написал, то не вижу смысла Вам помогать.
Выгрузка библиотек
 
Цитата
Alexander написал:
Такой прокси вызов функций из основной DLL, как описал выше так же можно организовать и по другому, т.е. не возвращая адрес нужной функции в скрипт с последующим вызовом функции через переменную, получившую адрес этой функции. А можно вызывать функции как обычно через имя модуля.имя функции, но эти функции надо сделать прокси-функциями, т.е они должны принимать все нужные параметры для вызова, а потом через переменную указатель вызывать нужную функцию из основной DLL, передавая ей эти параметры обычной функции C. Но это просто к слову. Так не стал, хотя разницы нет. Всё равно же результат никакой.
Я Вроде вам написал, что сделать. Вы сделали? Какой результат?
Если не выгрузилась, то скажу что делать дальше.
GetCell жрет память
 
Цитата
kbrobot.ru написал:
Цитата
nikolz написал:
 
Цитата
kbrobot.ru  написал:
 
Цитата
 Владимир   написал:
меняться - например, при выполненной сортировке по какому-либо столбцу, или при изменении видимого количества строк. Скрипт прорисовывает таблицу сам и прекрасно знает, что и в какой ячейке у него лежит.
  Все эти параметры определяются выше

function Window:InsertValue(id,value)
value=tostring(value)
if value==nil then
return
end
rows,columns=GetTableSize(self.hID)
i=1
j=1

while (i <= columns)  do
j=1
 while (j <= rows)  do
 x=GetCell(self.hID, j, i)
    if x~=nil then
    if x["image"]==id then
SetCell(self.hID, j+1, i,value)
    end
end

 j=j+1
 end
i=i+1  
end

end
 Зачем Вы обходите встю таблицу по столбцам и строкам. Вы разве не знаете в каком столбце у вас id?
----------------------
Если у вас инструменты не гуляют произвольно по строкам таблицы, то создайте для них  table[seccode]  в которой запишите номера строк.
В итоге Вы просто будете выбирать из этой table номер строки инструмента по его seccode.
А по другому эту проблему никак не решить?
я не использую такие таблицы в скриптах, поэтому лень писать тест.
Если выложите работающий скрипт с Вашим вариантом поиска ячейки я скажу как исправить, либо соглашусь с Вами , что жрет.
Выгрузка библиотек
 
попробуйте в dll ,которую надо выгрузить
в функции  WINAPI DllMain(HINSTANCE hinstDLL ...
после
          case DLL_PROCESS_ATTACH:
вставить
DisableThreadLibraryCalls(hinstDLL);
Внимание! Тормоза в версиях 9 и 10.
 
Цитата
MAV написал:
Буду стараться откатить назад к 7-й версии,там всё отлично работает.
если 64 бит то последняя нормальная версия это 8.7
GetCell жрет память
 
Цитата
kbrobot.ru написал:
Цитата
Владимир написал:
меняться - например, при выполненной сортировке по какому-либо столбцу, или при изменении видимого количества строк. Скрипт прорисовывает таблицу сам и прекрасно знает, что и в какой ячейке у него лежит.
Все эти параметры определяются выше

function Window:InsertValue(id,value)
value=tostring(value)
if value==nil then
return
end
rows,columns=GetTableSize(self.hID)
i=1
j=1

while (i <= columns)  do
j=1
 while (j <= rows)  do
 x=GetCell(self.hID, j, i)
    if x~=nil then
    if x["image"]==id then
SetCell(self.hID, j+1, i,value)
    end
end

 j=j+1
 end
i=i+1  
end

end
Зачем Вы обходите встю таблицу по столбцам и строкам. Вы разве не знаете в каком столбце у вас id?
----------------------
Если у вас инструменты не гуляют произвольно по строкам таблицы, то создайте для них  table[seccode]  в которой запишите номера строк.
В итоге Вы просто будете выбирать из этой table номер строки инструмента по его seccode.
Тест. Данные в другое приложение.
 
в Scite  написан скрипт на луа, в которой  читаются данные из QUIK
т е тест передачи данных из приложения QUIK в приложение LUA53 в котором исполняется этот скрипт.
Тест выводит эти данные в окно реадактора SCiTe.
Тест. Данные в другое приложение.
 
Цитата
A.T. написал:
То есть что-то вроде Shared Memory.
Надо будет разобраться.

Все дело в строчках
Код
  package.cpath  = paths .. "?.dll;"require"nkthread"  
как понимаю.
Что за nkthread ? Это для Lua? Он-то и мутит Shared memory, отсюда такая скорость, тут очевидно.

Что за "тест" в SciTE? В смысле мини-скрипт на Lua?

Что за мутный SciTE? Это именно редактор или IDE внутри которой что-то еще запущено?

Чем плох Notepad++, обычный Notepad или простой и понятный Emacs ?
nkthread - это моя библиотека дополнительных функций ( типа QLUA)
В ней много чего есть в том числе и многопоточность для луа и передача данных в другие приложения и вызов в луа функций СИ из сторонних dll .
Тест. Данные в другое приложение.
 
подробно с примерами можно почитать в книге Дж.Рихтер "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows"
Тест. Данные в другое приложение.
 
Цитата
A.T. написал:
Ну я же написал  file mapping.
CandleExist не работает - можно привести рабочий и простой пример?
 
Цитата
A.T. написал:
Начнем с того, что Candle не может Exist. Оно может только Exists.
Поэтому первая и очевидная ошибка для пишущего программиста, о которой выясняется только наступив на грабли.

Это к уровню знания английского и камень в огород разработчиков.

Второе и самое главное.
Можно привести простой(!!!) - это ключевое слово - простой и очевидный пример.
Кто нибудь, пожалуйста.

Хочу написать что-то вроде


Код
   function   OnCalculate (idx)   -- вход 

 if  CandleExist(idx)  =  =   true   then    -- имеется в виду если свечка существует на графике, то есть ее какой-нибудь O(idx) ~= nil 
    бла - бла - бла расчеты с переменными
 end   -- мне даже else тут не нужен, вместо него или nil или молчаливый игнор свечки 

 end   

Всё. То есть просто отсеивать ошибку не существования свечки на графике с  галкой "Показывать пустые интервалы".
Пользователя бывают дятлы.

Без интервалов, конечно, все прекрасно работает.

Симптом: Квик упорно игнорирует условие CandleExist(idx) и залезает во внутрь бла-бла и как итог появляется ошибка с красным крестом attempt to perform arithmetic on a nil value, чего быть не должно.
Смысл только в подавлении этой ошибки наименьшим фильтром и геморроем для программиста.
Вопрос только в этом.
В документации какой-то ад.
Хочу простой игнор свечки по простому условию.


Не работающий пример из примера документации:

Код
  Settings = {}
Settings.Name  =   "SimpleMA" 
Settings.mode  =   "C" 
Settings.period  =   5 
Settings.str_field  =   "STRING field" 
 
 
 function   dValue (i,param)
     local  v  =  param  or   "C" 
     if  v  =  =   "O"   then 
         return  O(i)
     elseif  v  =  =   "H"   then 
         return  H(i)
     elseif  v  =  =   "L"   then 
         return  L(i)
     elseif  v  =  =   "C"   then 
         return  C(i)
     elseif  v  =  =   "V"   then 
         return  V(i)
     elseif  v  =  =   "M"   then 
         return  (H(i)  +  L(i))/ 2 
     elseif  v  =  =   "T"   then 
         return  (H(i)  +  L(i) + C(i))/ 3 
     elseif  v  =  =   "W"   then 
         return  (H(i)  +  L(i) +  2  * C(i))/ 4 
     else 
     return  C(i)
     end 
 end 

 function   Init ()
     return   1 
 end 

 function   OnCalculate (idx)
 if  CandleExist(idx)  then     -- добавляю тут это и намеренно делаю пустые интервалы в квике 

     local  per  =  Settings.period
     local  mode  =  Settings.mode
     local  lValue  =  iValue
     if  idx  >  =  per  then 
         local  ma_value =  0 
         for  j  =  (idx - per) +  1 , idx  do      -- и он все равно лезет в эту ветку 
            ma_value  =  ma_value + dValue(j, mode)
         end 
         return  ma_value/per
     else 
         return   nil 
     end 

 end 
 end   



Опыт программирования именно на Lua - меньше недели.
C/C++ и C# знаю хорошо.

Спасибо.
Напишите , что Вы хотите делать русскими словами,   напишу, как это сделать в индикаторе на луа.
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Kalmar написал:
Цитата
nikolz написал:
попробуйте посмотреть в интернете, если не найдете, то расскажу.
можете считать что не нашел.
можете считать, что рассказал.
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Kalmar написал:
Цитата
nikolz написал:
нет, не стакана, а рынка. (есть такое понятие).
Так так.
И что же это за такое понятие?
Расскажите нам плиз, раскройте, тксть глаза?
попробуйте посмотреть в интернете, если не найдете, то расскажу.
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Kalmar написал:
Цитата
nikolz написал:
Нсколько я понимаю, в сообщении речь идет не о цене, а о глубине рынка."Order depth"
Типа глубина стакана отрицательная?))))
нет, не стакана, а рынка. (есть такое понятие). но здесь order, а не market.
Поэтому нет вариантов.
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Вадим Никитин написал:
Здравствуйте.

Сегодня система QUIK на отправленную транзакцию выдала ошибку  "Order depth should be positive" .
Все предыдущие транзакции с такими же параметрами успешно исполнялись.
Язык QUIK - английский.

Подскажите пожалуйста, что значит данная ошибка?
Вадим Никитин ,
Вы  получили это сообщение, в колбеке или в окне сообщений.
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Нсколько я понимаю, в сообщении речь идет не о цене, а о глубине рынка."Order depth"
Как подавить вывод командного окна при запуске exe-файла из Lua?, popen execute
 
Создайте не консольное приложение, а оконное и в нем отключите отображение окна.
Как подавить вывод командного окна при запуске exe-файла из Lua?, popen execute
 
Создайте не консольное приложение, а оконное и в нет отключите отображение окна.
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
Поэтому , для тех кто не понял, уточняю

OnTransRepley  и OnOrder Приходят многократно, но ПЕРВЫМ всегда приходит первый  OnTransReple
В нем нет номера заявки потому что на еще не пришла с сервера биржи
Остальные сигналы приходят как угодно но они не первые.
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
Цитата
Sergey Gorokhov написал:
Цитата
Цитата
nikolz написал:
так как это ответ сервера брокера, а ответ onOrder - это трансляция сервера биржи сервером брокера.
тоже нет, ответ на транзакцию содержит номер заявки. QUIK не может его знать, только биржа его может сообщить, значит это ответ биржи, а не сервера брокера.
Добрый день,
мы с Вам говорим о разном.
Вы говорите о OnTransRepley в котором есть номер заявки.
------------------------------
Я говорю о OnTransRepley,  в которых нет номерf заявки.
Эти сигналы всегда приходят раньше onOrder.
Так как ответ от биржи еще не пришел.
---------------------------
Именно этот ответ всегда приходит раньше
Именно его я и использую для фиксации момент выставления заявки.
-------------
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
более того, ответ на транзакцию OnTransRepley всегда приходит первым,
так как это ответ сервера брокера, а ответ onOrder - это трансляция сервера биржи сервером брокера.
Я именно в  OnTransRepley ловлю исполнение транзакции на выставление заявки всегда до прихода onOrder.
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
Цитата
Kalmar написал:
Цитата
nikolz написал:
Нет. если Вы не в дата центре.
Да, если ответ на транзакцию и заявка пришли вместе.
Вы невнимательно читаете.
Специально для Вас вопрос был такой:
1) Возможно ли что функция OnOrder выполняется через 1 мс после отправки sendTransaction(transaction) ??
------------------
Читайте внимательно в вопросе время отсчитывается от отправки , а не от прихода.
---------------------
Прочитали, теперь снова напишите свой ответ на данный вопрос.
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
Alexey написал:
1) Возможно ли что функция OnOrder выполняется через 1 мс после отправки sendTransaction(transaction) ??
Нет. если Вы не в дата центре.
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Вадим Никитин написал:
Если нужна какая-то ещё информация, то могу попробовать предоставить, если это будет возможно. Но судя по всему на форуме такой ошибки ещё не было.
полагаю, что это ошибка с биржи.
Что бы разобраться надо ее поймать и потом выложить скрипт и скрип экрана со стаканом
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Вадим Никитин написал:
Если перевести ошибку, то да, смысл может быть такой.

Но цена была равна лучшей заявке на продажу, и встречные завки в стакане присутствовали.

И как можно выставить заявку вне очереди, тем более по одному из самых ликвидных фьючерсов CNY-6.23?

Возможно глюк системы, но хотелось бы всё-таки уточнить у разработчиков в чём смысл данного сообщения и в каких случаях QUIK может его выдавать, потому как в английском интерфейсе он выдаёт одни и те же сообщения на разные ошибки транзакций?
Все возможно, но кроме текста сообщения Вы ничего конкретного не выложили.
Лишь Ваше убеждение, что у Вас все правильно.

 
Ошибка в простом скрипте
 
АндрейКД,
Дам Вам бесплатный совет.
----------------------
Если действительно желаете научиться писать для КВИКА скрипты на луа то Вам надо:
--------------------
1) Изучить язык программирования Луа . Те проштудировать книжку и сделать кучу примеров без привязки к QUIK.
-----------------------
2) Изучить функции библиотеки QLUA. Проштудировать документа документацию на QLUA.
-------------------------
3) Научиться писать индикаторы и скрипты на луа с использованием библиотеки QLUA.
-----------------
Вы стали сразу что-то писать. Поэтому и не понимаете.
Ошибка в простом скрипте
 
Цитата
АндрейКД написал:
Цитата
nikolz написал:
В 54 строке nil в арифметической операции. Какая строка 54?
 sum = sum + dValue(i, Settings.value_type)
проверьте диапазон i
и значение dValue(...)
Ошибка в простом скрипте
 
В 54 строке nil в арифметической операции. Какая строка 54?
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Вадим Никитин написал:
Order depth should be positive
предположу, что Вы пытаетесь выставить вне очереди заказов.
Посмотрите что в стакане и куда вы хотите поставить заявку.
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
почитайте это:
https://forum.quik.ru/forum1/topic8018/
Выгрузка библиотек
 
Alexander,
Добрый день,
Объясняю как это сделать.
----------------------
1) Вам надо написать отдельную dll, в которой одна функция - выгрузить dll по ее имени
-------------------------
2) в этой функции вам надо найти хендл выгружаемой dll и выгрузить ее столько раз, сколько ее вызывали до этого.
---------------------
3) При сборке dll, которую Вы будете в дальнейшем выгружать, вам надо отключить оповещение о вызове этой dll
----------------
И будет вам счастье.
QIUK 9.8.0.11 выходит при attach MSVC 2019 debugger - защита или проблема?
 
Цитата
Delv написал:
Цитата
nikolz написал:
 
Цитата
Delv  написал:
И как продвигается? Пока приходится использовать старый Quik для такой отладки. А какие другие варианты есть??? Не отлаживать dll?
 Отлаживаю DLL вне QUIK.
В чем пролема?
Никогда не пробовал отлаживать dll для Quik вне Quik. Даже в голову такое не приходило. Но звучит интересно. Поделитесь опытом, как там и что.
Рассказываю кратко.
--------------------
DLL для скрипта Луа состоит  из функций C и обертки для вызова этих функций из Луа.
--------------------------------
Можно делать - мухи отдельно, котлеты отдельно.
-----------------------------
Можно сделать функцию интерфейса вызова функций С из луа и не делать оберток вообще.
---------------------------------
Но делают обычно все в одну кучу, т е пишут функцию на С с интерфейсом для Луа и внутри нее реализацию алгоритма на СИ.
Этот вариант  отлаживается путем создания тестового скрипта на Луа с вызовом в нем функций из DLL.
=============================
Я делаю это в редакторе SciTe, который написан на луа
и имеет встроенные надстройки для вызова и компиляции скриптов Луа.
----------------------
При этом в функциях  СИ можно ставить контрольную печать для любых переменных СИ
и они будут отображаться , так же как и печать переменных Луа, в окне вывода SciTe.
Т е можно выводить состояние любых переменных Луа и СИ и даже ASM в окно редактора SCITE.
-------------------------
Кратко все.
В какой таблице найти информацию о short
 
Цитата
МихаилКа написал:
Доброго времени суток!
Подскажите, пожалуйста, есть ли возможность видеть признак торгуемости актива в шорт именно в таблице Текущие торги?
Нормальная ручная торговля, просмотр графиков, постановка заявок проходят из этой таблицы, хотелось бы не искать инструмент в другой таблице Купить/Продать, а сразу видеть признак в Текущих торгах.
это зависит от брокера. Шорт - это кредит бумагами у брокера . Если его клиенты этими бумагами не торгуют, то он вам их и не даст.
Брокер ничего своего в долг не дает.
Поэтому просто спросите у брокера даст он Вам в долг эти бумаги или нет и сколько это будет стоить.
По закону это должно быть в регламенте брокера.
Вы регламент брокера внимательно читали?
Отладка кодов индикаторов, Отладка кодов индикаторов
 
демо счет можно получить на этом сайте разработчиков QUIK без проблем и быстро.
Страницы: Пред. 1 ... 19 20 21 22 23 24 25 26 27 28 29 ... 80 След.
Наверх