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

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

Страницы: Пред. 1 ... 19 20 21 22 23 24 25 26 27 28 29 ... 78 След.
Скрипт для перезапуска другого скрипта
 
Цитата
Денис написал:
FUTURES_CLIENT_HOLDING
openbuys - Активные на покупку
opense[[s - Активные на продажу

Эти переменные содержат число, а не логическую переменную
В них либо ноль либо не ноль, а не TRUE и FALSE
--------------------------
Но запускать заново скрипт или main нет надобности в вашем случае.
Создание отложенной покупки в сбере андроид x
 
Цитата
Серёга187 написал:
Цитата
Серёга187 написал:
Опытные подскажите: правильно ли я выставляю заявку на отложенную покупку? А то еще ни разу не сработала. Брокер сбер.
Все правильно делал. Просто цена сильно быстро росла и стоп не сработал...
если правильно, то стоп должен сработать, и либо заявка исполнится, либо  в стакане останется неисполненная заявка.
-------------------------
Если этого нет, то неправильно что-то сделал.
Скрипт для перезапуска другого скрипта
 
Цитата
Денис написал:
Понятно, стебутся коллеги значит )))

Может быть можно перезапустить как-то функцию main()?
Как выйти из нее это понятно, но есть ли перезапуск?
Поясните подробнее, что и зачем хотите сделать, возможно объясню как это реализовать.
Скрипт для перезапуска другого скрипта
 
возможно Вы хотите запустить скрипт из файла как дополнительную библиотеку или исполняемый код - это можно стандартной функцией dofile
Скрипт для перезапуска другого скрипта
 
при запуске скрипта в терминале создается VMLua в ней вызывается  в дополнительном потоке функция main как дочерняя.  
Скрипт для перезапуска другого скрипта
 
Цитата
Денис написал:
в
Ликбез:
Вообще-то, скрипт запускается не в QLUA, а в терминале QUIK.
QLUA - это библиотека на CИ для обращения на языке луа к функциям и архиву данных терминала QUIK.
Поэтому нет в библиотеках луа функции запуск скрипта терминала из подобного скрипта
===============
Можно из скрипта терминал квик запускать  еще скрипты в дополнительных потоках, но это не тоже самое и функции в чистом луа для этого нет.
-------------------
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
Ликбез о том какие ресурсы скрыты от создателей роботов на чистом Lua.
----------------------
Cделал тест сравнения быстродействия чистого LUA и
LUA совместно с функцией на СИ c использованием системы команд AVX2.
---------------
в тесте вычисляется в цикле 32000 раз
сумма элементов таблиц размером в 32000.
вот этот тест:
Код
MAX_SIZE=32000;
local pX,hFM,hfl=nkarray.cr(32768,4,"nkQUIK1");
local pY,hFM,hfl=nkarray.cr(32768,4,"nkQUIK2");
-------------------------------------
local N=MAX_SIZE
startA();
for j=1,N do  opVC(2,1,pY,1,N,pX,1); end
local t1=stopA();
------------------------------
local x1={}  local x2={} for i=1,N do x1[i]=0; x2[i]=1; end
startA();
for j=1,N do  for i=1,N do x1[i]=x1[i]+x2[i]; end  end
local t=stopA();
print("t1="..(0.1*t1/1000)..",t="..(0.1*t/1000)..",t/t1="..t/t1)
а вот результат LUA+C+AVX2 в 153 раза быстрее "чистого LUA":
Код
>D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "test_funClua.lua"
t1=159.3,t=24433.3,t/t1=153.3
>Exit code: 0
Лимитная заявка
 
Цитата
Дмитрий написал:
nikolz, почему же стоп-лимит - это заявка на закрытие убыточной позиции?
Вот у автора нет позиции, он хочет купить при пробитии вверх. Если цена выставляемой лимитной заявки не будет выше макс возможной, и рынок за время выставления не уйдет выше этой цены, это желание автора исполнится
Безусловно, можно и микроскопом забить гвоздь.
и все названия - это лишь условности, которые упрощают понимание сущности вещей.
--------------------------
Поэтому я пытаюсь объяснить, что название  заявок было придумано не просто так, а с целью указать на их назначение.
-----------------------
Любая заявка направлена на совершение сделки.
--------------------------
Но некоторым конструкциям заявок авторы дают название. Стоп - означает "остановить"
----------------------------
В документации КВИК сказано:
В системе QUIK существуют следующие типы условных заявок:  (указано правильно типы условных заявок, а не типы стоп-заявок  Иначе масло - масленое).
  1. «Стоп-лимит» - стоп-заявка, порождающая при исполнении лимитированную заявку.

    НАЗНАЧЕНИЕ: Ограничение величины убытков при изменении цен сделок в сторону,  противоположную ожидаемой.

-------------------------
Выше я показал, что согласно документации в QUIK вообще все отложенные заявки назвали стоп-заявками.
-------------------------------
А кроме этого для каждой стоп заявки еще придумали тип стоп-заявки.
-----------------------
Квиковское определение в глоссарии стоп-заявки не выдерживает критики и не соответствует введенным ими же типам.
======================
Поэтому квиковские стоп-заявки  - это не стоп-заяки в классическом понимании,
так как стоп-заявка существует лишь в одном исполнении,  как указано в документации КВИК под типом Стоп-лимит.
==========================
 Поэтому  выставить заявку против рынка с помощью отложенной заявки типа "стоп-лимит" можно.  
Это можно сделать и заявкой типа  «Стоп-цена по другому инструменту»
=====================
Если бы квиковцы не изобретали велосипед в терминологии рынка,
то не возникало бы такой путаницы и многих вопросов, что можно, а что нельзя.  
------------------------------
В действительности, названные ими стоп-заявки - это ОТЛОЖЕННЫЕ заявки.
-------------------------
Т е в отличии от заявок, которые отправлены на биржу, эти заявки остаются на сервере брокера до момента возникновения условия отправки их на биржу.   И слово "стоп" вообще не имеет смысла в их названии.
-----------------------------
Это заявки можно назвать отложенными -условными  или отложенными-алгоритмическими.
Но самое бессмысленное название для них - это "Стоп заявки"
-----------------------
Т е мы имеем наглядный пример, как дилетантское применение  общепринятого в профессиональной области понятие стоп-заявки приводит к путанице, а не к упрощению понимания сущности.  
Лимитная заявка
 
и еще
В некоторых стоп-заявках терминала квик указывается более 2 значений цен.
Согласно определению это уже не стоп-заявки.
------------------
Тогда это что за заявки?
Лимитная заявка
 
Цитата
Kalmar написал:
Kalmar
пардон, опечатка
-----------------------
Исправляю
согласно документации КВИК
Разработчики QUIK дали свое собственное определение стоп-заявки:
--------------------------------------
Стоп-заявка – поручение, исполняемое брокером в зависимости
от достижения рыночной ценой инструмента определенного уровня. В такой заявке
указывается два значения цены.

Прикольно, но первое предложение этого определения - это условие лимитной заявки.
Второе предложение не верно, если заявка будет выполнена по рыночной цене.
-------------------------
Таким образом, определение стоп-заявки придуманное разработчиками КВИК - не выдерживает никакой критики.
Это масло масленое.
====================
Очевидно, понимая, что они написали бессмыслицу, далее они уточняют:
«Стоп-лимит» – это  стандартная стоп-заявка;
------------------------
Поэтому в приведенном выше ликбезе
следует согласно документации читать  
стандартная стоп-заявка - «Стоп-лимит» – это заявка на закрытие убыточной позиции
=========================
и далее
Можно конечно использовать ее для открытия новой позиции, вне зависимости от наличия позиции,
но для этого есть другие типы стоп-заявок.
--------------------
Ув, разработчики может имеет смысл убрать это Ваше определение стоп-заявок?
Просто ужас какой-то.
Лимитная заявка
 
Ликбез:
------------------------
стоп-заявка - это заявка, которая хранится на сервере брокера.
-----------------------
Название стоп-заявка означает, что ее назначение закрыть убыточную позицию.
--------------------------------
Условия стоп-заявки проверяет сервер брокера.
------------------------------
При возникновения условий,
стоп-заявка переписывается сервером в заявку и отправляется на биржу.
------------------------
Можно конечно использовать ее для открытия новой позиции, вне зависимости от наличия позиции,
но для этого есть другие типы заявок.  
Лимитная заявка
 
Собака лает, караван идет.
Лимитная заявка
 
Цитата
Танечка написал:
Подскажите, как создать в квике лимитную заявку например на покупку выше текущей цены?  Устанавливаю цену, галочка по рынку не стоит, все-равно входит по рынку. Что за фигня.... В приложении скрин  МТ5 - там называется BUY stop. Как это сделать в квике?
попробуйте почитать руководство пользователя QUIK , а не MT5
------------------------------
Ввод заявки

кнопка Назначение

Формирование и передача на исполнение новой заявки на покупку/продажу  инструментов.

Открытие окна «Ввод заявки» осуществляется:

  • Нажатием кнопки на панели инструментов;
  • Двойным нажатием левой кнопки мыши;
  • Нажатием клавиши «F2»;
  • Выбором в таблице пункта контекстного меню «Новая заявка»;
  • Выбором пункта меню Действия;
  • Использованием Общего способа выполнения транзакций с выбором операции «Ввод
    заявки»;
  • Из окна «Графики». Подробнее см. Ввод заявки из окна
    «Графики».

Если кнопка на панели инструментов неактивна
(серая), значит, ввод заявки по выбранному инструменту невозможен.  

Ввод заявки возможен в таблицах: Таблица котировок  (очередь заявок), Объединенные котировки, Таблица заявок, Таблица сделок,  Таблица обезличенных сделок, Таблица текущих торгов, Карман  транзакций.

Если при вводе заявки из таблицы неизвестен инструмент, по которому подается  заявка (в таблице нет выделенных строк, или таблица пустая), то на экран  выводится форма выбора инструмента для новой заявки:  

 

Для выбора доступны только те классы, по которым у пользователя есть право  активных операций и для которых получена соответствующая операции транзакция.  

Признак «Только активные инструменты» позволяет исключить из списка  инструменты или контракты, не имеющие заявок, сделок или открытых позиций.  

При нажатии кнопки «Выбрать» открывается форма ввода заявки по выбранному  инструменту.  

См. также Управление заявками из Таблицы котировок  


Руководство пользователя QUIK © ARQA Technologies / www.arqatech.com/ru/products/quik/.
Снятие заявки, server check failed
 
getOrderByNumber

Функция возвращает таблицу Lua, содержащую описание параметров Таблицы заявок и индекс заявки в хранилище терминала.  

TABLE order NUMBER indx getOrderByNumber(STRING class_code, NUMBER  order_id)

Если заявка с указанным номером не существует, то возвращаемые параметры -  «nil».

Снятие заявки, server check failed
 
Цитата
Надежда Аверьянова написал:
Цитата
nikolz написал:
колбек OnTransReply  это реакция на транзакцию, а не на состояние заявки.
Для заявки надо работать по OnOrder OnStopOrder либо по таблицам заявок и стоп-заявок
Я получила номер заявки через OnOrder, записала его в переменную и эту переменную записала в ключ ["BASE_ORDER_KEY"], но квик опять говорит что не указан номер базовой заявки. Что не так? Получить номер из таблицы заявок у меня тоже не получается - одни ошибки выдает. Помогите составить кусок кода на получение номера заявки из таблицы заявок пожалуйста
покажите скрипт
Снятие заявки, server check failed
 
колбек OnTransReply  это реакция на транзакцию, а не на состояние заявки.
Для заявки надо работать по OnOrder OnStopOrder либо по таблицам заявок и стоп-заявок
Конкурентноспосбный Quik (не только для торговли), но и обучения, ошибки, пожелания и полезные предложения.
 
Все очень просто и банально.
-----------------------
Деньги разработчикам QUIK платят  брокеры.
--------------------------------------
Брокерам платят их клиенты.
----------------
Два вопроса знатокам
-------------------------
1) С какого бодуна Вы жалуетесь разработчикам на хреновые услуги брокеров
2) C какого бодуна разработчики квик обязаны делать что-то для Вас.
-----------------------
Надо искать там, где потеряли, а не там, где светло.
Невозможно войти в КВИК, Невозможно войти в КВИК из-за сертификатов.
 
У меня вин 10 все работает нормально у сбербанка.
Возможно не установили сертификат.
У меня никаких кнопок в квике не появилось.
Попробуйте переустановить сертификат  
не могу войти в квик сбербанка, после ввода логина и пароля выскакивает Цепочка сертификатов обработана, но обработка прервана на корне
 
Цитата
serg написал:
как загрузить квик сбербанковский? все время надпись выскакивает:"Цепочка сертификатов обработана, но обработка прервана на корневом сертификате, у которого отсутствует отношение доверия с поставщиком доверия."
c 1 апреля в КВИК сбербанка можно зайти если у вас установлен на компе сертификат минцифры
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Про  Pine Script.
это разработка  TradingView
и скрипты исполняются на их сервере.
т е все что вы напишите - это их собственность
На их сайте для Вас дан ответ на вопрос:
----------------------------
Почему я не должен использовать скрипт Pine?

Основная причина, по которой вы не захотите использовать скрипт Pine, заключается в том, что вы ограничены вселенной TradingView.

Вот некоторые конкретные ограничения:

Данные. Если TradingView не предлагает нужные вам данные, вам не повезло. Конечно, TradingView имеет очень обширную базу данных. Но если ваша стратегия предполагает торговлю на малоизвестных рынках, данные о ценах могут быть недоступны.

Сервис выходит за рамки данных о ценах. Некоторые стратегии включают экономические или статистические данные. TradingView предлагает некоторые данные (в основном данные Quandl) в этой категории, но в настоящее время они ограничены.

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

Внешние библиотеки. Pine Script не подходит, если вы хотите использовать внешние библиотеки для выполнения таких задач, как машинное обучение. Есть лучшие альтернативы, если ваша стратегия основана на использовании науки о данных или других сторонних библиотек.

Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
для питона тоже есть JIT    
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
и еще
все веб приложения (PineScript,) работают очень медленно по сравнению даже с питоном.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Цитата
Станислав написал:
Цитата
nikolz написал:
 
Цитата
Станислав  написал:
А интерпретатор JavaScript в Node.js? По идее должна быть хорошая производительность.
 Не видел торговых систем на их основе
Подключать к КВИКУ не планирую.
Вполне устраивает Lua, MQL5 и C.
PineScript, TradingView, терминал Тинькофф.  

Да я и не прошу его подключать к квик.
Сейчас молодежь со школы учат программировать на python, наверное, это был бы самый востребованный вариант в будущем. (сам не программирую на нем)
Давно торгую на MOCEX и давно использую QUIK.
Как я писал ранее на форуме, QUIK позволяет работать с высокой скоростью.
----------------------------
Если возникнет необходимость в использовании TradingView, то напишу для него.
Пока мне этого не надо.
-----------------------------
Относительно питона.
Тоже кое что использую для разработки встроенного софта IOT.
------------------------------
Проведенный тест показал что его интерпретатор почти в 100 раз медленне C и в 50 раз медленнее LuaJIT.
Прикручивать его с КВИКУ смысла не вижу.
-----------------------------------
В школе учился давно, тогда там программировать не учили, но это мне не мешает программировать сейчас на любом языке, если надо.
Полагаю, что в будущем молодежь освоит все что ей понадобится самостоятельно.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Цитата
Станислав написал:
А интерпретатор JavaScript в Node.js? По идее должна быть хорошая производительность.
Не видел торговых систем на их основе
Подключать к КВИКУ не планирую.
Вполне устраивает Lua, MQL5 и C.
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
Цитата
TGB написал:
Цитата
nikolz написал:
Один компьютер может обсчитывать очень сложный алгоритм по одному инструменту в реальном времени.
Например нейронную сеть на 1 миллиард  нейронных связей.
------------------------Делаем в интернет пул скажем 1000 компьютеров Получаем распределенный кластер прогнозирования 1000 инструментов в реальном времени.
 :: .
«Остапа понесло  …..
Остап со вчерашнего дня еще ничего не ел. Поэтому красноречие его было необыкновенно»
     Ильф и Петров:  «Двенадцать стульев»
«МУЖАЙТЕСЬ! ЗАПАД НАМ  НЕ ПОМОЖЕТ»
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
Цитата
Александр М написал:
Цитата
nikolz написал:
Один компьютер может обсчитывать очень сложный алгоритм по одному инструменту в реальном времени.
Например нейронную сеть на 1 миллиард  нейронных связей.
------------------------
Делаем в интернет пул скажем 1000 компьютеров
Получаем распределенный кластер прогнозирования 1000 инструментов в реальном времени.
При таком размахе нужен не QUIK, а плаза, а там совсем другой подход.
Ликбез:
плаза - это протокол , а не терминал.
---------------------
Plaza II Шлюз FORTS — Программное обеспечение, обеспечивающее обмен данными между Серверной частью ПО – Торговой и клиринговой системы рынка фьючерсных контрактов и опционов (Торговой системой FORTS)
и сертифицированной брокерской системой Интернет-трейдинга (читай сервер QUIK ) по протоколу Plaza II.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Прикольно,.
Интерпретатор питона версия 3.10 на тесте фибо  в 3 раза медленнее, чем Lua 5.3.  
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
Один компьютер может обсчитывать очень сложный алгоритм по одному инструменту в реальном времени.
Например нейронную сеть на 1 миллиард  нейронных связей.
------------------------
Делаем в интернет пул скажем 1000 компьютеров
Получаем распределенный кластер прогнозирования 1000 инструментов в реальном времени.
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
Цитата
Александр М написал:
Сами по себе цифры конечно красивые и проделана видимо огромная работа, но вот практическая целесообразность такой оптимизации под вопросом для реальных задач из под QUIK.
нет никакой оптимизации.
-------------------------
Какую реальную задачу Вы сейчас решаете? Возможно она потому и не решается, что решается примитивно.
---------------------------------
Представьте , что можно на КВИКЕ решать задачу   в 100 раз сложнее за тоже время, что у Вас сейчас.
----------------------------------------
А учитывая возможность запуска много потоков,
сложность решаемой задачи на квик может быть в 500...1000  чем решаемая Вами сейчас.
-------------------------------------
И это на обычном компьютере без CUDA.
----------------------
Прикиньте сколько стоит компьютер, который в 100 раз быстрее вашего считает? А 2 1000?
Вот эту задачу это и решает.
--------------------
Если вы пришли на рынок за баблом  то не ждите, что Вам его примитивный скрипт принесет.  
Скорее всего он его сольет.
Чудес не бывает.
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
 
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
 
Какое значение находит эта формула?, Популярная формула 2*Close-Low-High
 
пардон опечатка
Это сглаженное значение максимального диапазона движения либо свечи за последний день, либо  гэпа.
Какое значение находит эта формула?, Популярная формула 2*Close-Low-High
 
пардон опечатка
Это сглаженное значение максимального диапазона движения либо свечи за последний день, либо свечи с учетом гэпа.
Какое значение находит эта формула?, Популярная формула 2*Close-Low-High
 
Цитата
Sergey написал:
Спасибо за ответ!
Я вчера размышлял пока засыпал и пришел к такому выводу. Выражаясь вашими словами, разность движений направлений за день, определяет и направление по которому будет следовать индикатор. Проще говоря, если цена закрытия ниже половины ATR, то направление индикатора будет вниз, даже если свеча при этом будет зеленой.  
Каждый индикатор предполагает некоторую модель рынка.
В данном случае предполагается, что во первых рынок очень ликвидный.
-----------------
Индикатор ATR
Расчетная формула ATR:
ATR = Moving Average(TRj, n),
где
TRj = максимальному из модулей трех значений
|High — Low|, |High — Closej-1|, |Low — Closej-1|.
-------------------
Понимать его можно так:
Это сглаженное значение максимального диапазона движения либо последней свечи за день, либо свечи с учетом гэпа.
Т е это индикатор движения (волатильности) рынка.
-----------------------
ATR - это индикатор разности, поэтому некорректно сравнивать его с ценой.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
 
Какое значение находит эта формула?, Популярная формула 2*Close-Low-High
 
Модель данного индикатора такая.
Предполагается, что направление движения цены определяет направление денежного потока на рынке.
-----------------------------
Так как все широко известные индикаторы были предложены до компьютеров,
то они предполагают интервал от дня и выше.
------------------------
Для конкретики рассмотрим интервал день.
--------------
Чтобы было наглядно, нарисуйте один период синусоиды
--------------------------
(Close-Low) -диапазон движения цены вниз относительно закрытия за день,
--------------------
(High-Close) -диапазон движения цены вверх день
------------------
Предполагаем , что это разное направление движения денег .
----------------
2*Close-Low-High =(Close-Low)-(High-Close) - разность направлений движения денег за день
-------------------
High-Low - это весь диапазон движения денег за день
--------------------
((2*Close-Low-High)/(High-Low)) - относительное изменение денежного потока
-------------------
((2*Close-Low-High)/(High-Low))*Volume - абсолютное изменение денежного потока за день
 
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
 
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
   
Сравни LUA5.3 и LUAJIT в QUIK
 
Добрый день,
Ранее сообщал, что сделал возможность запуска скриптов QUIL  в отдельных потоках в LUAJIT.
----------------
кратко это работает так.
В колбек OnParam приходят сделки инструментов, которые передаются в функцию main()
-----------------------
В main - это LUA 5.3  по каждому инструменту запускается скрипт алгоритма робота в отдельном потоке из пула потоков  под LUAJIT.
======================
На просторах интернета нашел тесты по которым разработчики сравнивали MT5  сравнивали  MQL5 и LUA в QUIK.
---------------------
вот сами тесты:
Код
-- TestQuickSort
local array={}
local function QuickSort(arr,left,right)
  local  i=left
  local  j=right
  local  center=arr[math.floor((i+j)/2)]
    while i<=j do
        while(arr[i]<center and i<right) do   i=i+1  end
        while(arr[j]>center and j>left) do  j=j-1   end
        if i<=j then  local   x=arr[i]   arr[i]=arr[j]    arr[j]=x     i=i+1    j=j-1  end
    end
    if left<j then  QuickSort(arr,left,j)  end
    if right>i then  QuickSort(arr,i,right)  end
end

local function Start1()
    for i=0,MAX_SIZE-1 do  array[i]=i%100 end
    start=os.clock()
    QuickSort(array,0,MAX_SIZE-1)
    res=(os.clock()-start)*1000
    print("TestQuickSort SIZE="..MAX_SIZE..", time=" .. res .. " ms")
    for i=1,MAX_SIZE-1 do
        if array[i]<array[i-1] then  print("Array not sorted"); break;
        end
    end
end

local str=""
local a={}
local function PiCalculate(digits)
local   d = 0
local   c = (math.floor(digits/4)+1)*14
local   f = 10000
   for i=0,c do a[i]=20000000   end
   c=c-14
   b=c
   while b>0 do
      e=d%f
      d=e
      while b-1>0 do
         b=b-1
         d = d * b + a[b]
         g = (b * 2) - 1
         a[b]=(d%g)*f
            d=math.floor(d/g)
        end
        r=e+math.floor(d/f)
      if r<1000 then
         if(r>99) then
            str=str .. "0"
         else
            if(r > 9) then
               str=str .. "00"
            else
               str=str .. "000"
            end
         end
      end
      str=str .. string.format("%d",r)
      c=c-14
      b=c
   end
end

function Start2()
   start=os.clock()
   PiCalculate(MAX_SIZE)
   res=(os.clock()-start)*1000
   print("TestPiCalculated SIZE="..MAX_SIZE..", time=" .. res .." ms  Pi="..string.sub(str,1,16))
end

-- TestFibo

local fib={}
local function TestFibo(n)
   if n<2 then return 1 else return TestFibo(n-2)+TestFibo(n-1) end
end

local function Start3()
   start=os.clock()
   for i=0,MAX_SIZE-1 do    fib[i]=TestFibo(i) end
   res=(os.clock()-start)*1000
   print("TestFibo SIZE="..MAX_SIZE..", time="..res.." ms Fibo[39]="..fib[39])
end

-- TestArrays
local function Start4()
   local  x={}    local y={}
    local start=os.clock()
    for i=1,MAX_SIZE,1 do   x[i]=i  y[i]=0   end
    y[MAX_SIZE]=0
    for k=1,MAX_SIZE,1 do
        for i=MAX_SIZE, 1,-1 do  y[i]=y[i]+x[i] end
    end
    local res=(os.clock()-start)*1000
    local check=0
    for k=1,MAX_SIZE,1 do check=check+y[k]  end
    print("Test Arrays SIZE="..MAX_SIZE..", Time = "..res.." ms check=".. check)
end

local function Ackermann(m,n)
        if(m==0) then return(n+1) end
        if(n==0) then return(Ackermann(m-1,1)) end
        return(Ackermann(m-1,Ackermann(m,(n-1))))
end

-- TestAckermann
local function Start5()
    local check=0
    local start=os.clock()
        for i=1,MAX_SIZE do  check=check+Ackermann(1+i%3,1+i%5); end
    local finish=os.clock()
    local res=(finish-start)*1000
    print("TestAckermann SIZE="..MAX_SIZE..",time=".. string.format("%.0f",res).." ms check="..check)
end


-- TestFloat
local f0=0.0
local f1=123.456789
local f2=98765.12345678998765432
local f3=12345678943.98

function TestFloat(MAX_SIZE)
   MAX_SIZE=MAX_SIZE-1
   for i=0, MAX_SIZE do
        for j=0, MAX_SIZE do
            f0=f0+(f1/(i+1))-f2+(f3*i);
        end
    end
end

function Start6()
   local t=os.clock()
   TestFloat(MAX_SIZE)
   local res=(os.clock()-t)*1000
 local  check=f0
   print("TestFloat SIZE="..MAX_SIZE..", time=" ..res.." ms  check="..tostring(check));
end


MAX_SIZE=35000; Start6()
MAX_SIZE=120000; Start5()
MAX_SIZE=32000; Start4()
MAX_SIZE=40; Start3()
MAX_SIZE=22000; Start2()
MAX_SIZE=16000000; Start1()
===================
На этих тестах я провел тест LUA 5.3 и LUAJIT.
==================
Результаты  говорят сами за себя:

Когда подключу MT5 к QUIK, то сделаю тест и для него.
-----------------------
Следите за новостями.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Цитата
Станислав написал:
Очень интересно, поздравляю с успехом коллега!

Не понимаю, где была инициализирована переменная  nk1?PS: К сожалению, не являюсь программистом на C/C++.
nk1 инициализирована в другом потоке и скрипте на  Lua5.3.
Применительно к скриту QUIK  - в функции main()
------------------
Т е таким образом в этот поток в скрипт LuaJIT передаются любые параметры из потока со скриптом на Lua5.3
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
В качестве ликбеза.
----------------------
LUAJIT - это компилятор с оптимизацией в реальном времени.
---------------------------
Так как любой робот это циклическое повторение расчета алгоритма прогноза по полученным данным, то LuaJIT
выполняет компиляцию и оптимизацию скрипта совместно с виртуальной машиной.
----------------------------
В итоге с каждым новым циклом скрипт работает все быстрее и быстрее, приближаясь по скорости к чистому CИ.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
сделал библиотеку , которая позволяет из скрипта  на Lua5.3...5.4  вызвать в отдельных потоках  скрипты на LuaJIT.
Теперь можно запустить в скрипте КВИКА  программный пакет  TORCH ( ФАКЕЛ) .
----------------------------------
Вот пример бесконечного цикла скрипта в LuaJIT с синхронизацией потоков по событиям и вызов функций СИ через библиотеку FFI.
--------------------------------.
В этом примере из потока скрипта Lua5.3 передаются данные в  поток скрипта  LuaJIT через переменную nk1, которая выводится в файл.
Код
local ffi = require("ffi")

ffi.cdef[[
void Sleep(int ms);
long OpenEventA(uint64_t dwDesiredAccess, int bInheritHandle, const char* S);
long WaitForSingleObject( uint64_t hHandle, long  dwMilliseconds);
long CreateEventA(int dwDesiredAccess, int M,int bInheritHandle, const char* S);
int SetEvent(uint64_t hEvent);
int ResetEvent(uint64_t hEvent);
]]
path = "D:/QUIK_SCRIPT/nk_bot/"
Log=io.open("D:/QUIK_SCRIPT/nk_bot/test_jit.log","w")
local event=ffi.C.OpenEventA(0x1f0003,0,"event");
while true do
   local x=ffi.C.WaitForSingleObject(event,-1); --ждем события
   local z=nk1;
   Log:write(os.time()..","..tostring(z).."\n"); Log:flush();
   ffi.C.ResetEvent(event)
--   print(x)
end
RSI старшего таймфрейма
 
это не ложные шипики.
Посмотрите формулу RSI
RSI считается по разности закрытия свечей. Поэтому увеличение периода сглаживания не тоже самое что RSI на большем интервале.
На интервале 1 день все свечи с интервалом 1 ча просто не существуют.
Я конечно понимаю, что Вам все равно, так как Вы не понимаете смысла индикаторов.
Сборка свечей спроса и предложения из тиковых данных, Сборка свечей спроса и предложения из тиковых данных
 
Цитата
DenisP написал:

Добрый день!

Хочу собрать свечи по спросу и предложению (не закрытые заявки) из тиковых данных. Отдельно свечи, отражающие количество заявок и отдельно свечи, отражающие их объём.

Насколько я понимаю, система QUIK сама получает данные в тиковом виде и затем преобразует их в свечи, в том числе такие типы свечей, которые упомянул.

Я бы хотел как-нибудь воспользоваться этой возможностью системы, но не знаю как.

Подскажите, пожалуйста, что я могу сделать?
Вы ничего не путаете?
Тики - это сделки, а не заявки.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Добрый день,
Всем известно, что есть  библиотека ffi
https://luajit.org/ext_ffi.html
Библиотека FFI позволяет вызывать внешние функции C и использовать структуры данных C из чистого кода Lua.
Библиотека FFI в значительной степени устраняет необходимость написания утомительных ручных привязок Lua / C на C.
Нет необходимости изучать отдельный язык привязки — он анализирует простые объявления C!
Они могут быть вырезаны и вставлены из заголовочных файлов C или справочных руководств.
Это задача связывания больших библиотек без необходимости иметь дело с хрупкими генераторами привязки.
---------------------
Все казалось прекрасно, но...
Библиотека FFI тесно интегрирована в LuaJIT (она недоступна как отдельный модуль).
конечно, не так уж страшно, но...
LuaJIT сделан на ядре Lua5.1 и следовательно для квика не подходит.
------------------------
Написал  собственную библиотеку  для любого ядра Lua, которая делает тоже самое, что и FFI, но быстрее.
В итоге можно загрузить на исполнение любую функцию написанную на С/С++ из любой библиотеки DLL.
И следовательно получить максимальную скорость вычисления любых алгоритмов, не программируя на СИ и не изучая API C for Lua.
----------------------------
Накладные расходы на преобразование параметров в пределах кванта высокоточного таймера (см далее).
---------------------------
Вот пример вызова трех функций из WIN32
------------------------------
QueryPerformanceCounter  - высокоточный таймер квант 0.1 мкс.
SleepEx - функция паузы
MessageBoxA - вывод окна сообщения
пример вызова в луа:
В программе два варианта измерение интервала Sleep в 1 секунду
и вывод результата в окно
Код
-------------sleep и высокоточный таймер вариант 1 -------------------
local x1=rfs("i","QueryPerformanceCounter","Kernel32.dll");
rfs(0,"SleepEx","Kernel32.dll",1000,0);
local x2=rfs("i","QueryPerformanceCounter","Kernel32.dll");


-------------sleep и высокоточный таймер вариант 2 -------------------
local pL,pF=nkcf.gf2L("Kernel32.dll","QueryPerformanceCounter")

local x3=rfs("i",pF);
rfs(0,"SleepEx","Kernel32.dll",1000,0);
local x4=rfs("i",pF);
s="t1="..0.1*(x2-x1).." мкс".." t2="..0.1*(x4-x3).." мкс";
print("            "..s);
rfs(0,"MessageBoxA","User32.dll",0, s, "sleep, timer",1);

а вот картинка результата

 
Как получить любой SECCODE по BASE_CONTRACT ?, В какой таблице идёт привязка между текущим фьючерсным инструментом и базовым активом?
 
Спецификации коротких кодов фьючерсных и опционных контрактов на срочном рынке

Коды срочных контрактов  состоят из следующих частей:

Коды фьючерсов
CMY

Коды опционов
CPKMY
                                                           
W
     

C – краткий код базисного актива,
P – цена страйк (максимум 6 символов),
К – тип расчетов,
M – месяц исполнения (а также тип для опциона),
Y – год исполнения,
W – признак недельного опциона.

Кодирование базового актива (поле "C")

Группа
контрактов
Код
базисного
актива
(поле "C")
Код
базисного актива
на срочном рынке
Название базисного актива
Индексные контрактыMXMIXИндекс МосБиржи
MMMXIИндекс МосБиржи (мини)
RIRTSИндекс РТС
RMRTSMИндекс РТС (мини)
VIRVIВолатильность российского рынка
HOHOMEИндекс московской недвижимости ДомКлик
OGOGIИндекс МосБиржи нефти и газа
MAMMIИндекс МосБиржи металлов и добычи
FNFNIИндекс МосБиржи финансов
CSCNIИндекс МосБиржи потребительского сектора
RBRGBIИндекс RGBI
Фондовые контрактыAFAFLTПАО "Аэрофлот" (о.а.)
ALALRSАК "АЛРОСА" (ПАО) (о.а.)
CHCHMFПАО "Северсталь" (о.а.)
FSFEESПАО "ФСК ЕЭС" (о.а.)
GZGAZRПАО "Газпром" (о.а.)
GKGMKNПАО ГМК "Норильский Никель" (о.а.)
HYHYDRПАО "РусГидро" (о.а.)
LKLKOHПАО НК "ЛУКОЙЛ" (о.а.)
MNMGNTПАО "Магнит" (о.а.)
MEMOEXПАО Московская Биржа (о.а.)
MTMTSIПАО "МТС" (о.а.)
NMNLMKПАО "НЛМК" (о.а.)
NKNOTKПАО "НОВАТЭК" (о.а.)
RNROSNПАО "НК "Роснефть" (о.а.)
RTRTKMПАО "Ростелеком" (о.а.)
SPSBPRПАО Сбербанк (п.а.)
SRSBRFПАО Сбербанк (о.а.)
SGSNGPПАО "Сургутнефтегаз" (п.а.)
SRSBERПАО Сбербанк (о.а.)
SNSNGRПАО "Сургутнефтегаз" (о.а.)
TTTATNПАО "Татнефть" им. В.Д. Шашина (о.а.)
TNTRNFПАО "Транснефть" (п.а.)
VBVTBRБанк ВТБ (ПАО) (о.а.)
MGMAGNПАО "Магнитогорский металлургический ком­бинат" (о.а.)
PZPLZLПАО "Полюс" (о.а.)
YNYNDFЯндекс Н.В. (о.а.)
AKAFKSАФК Система (о.а.)
IRIRAOПАО "Интер РАО ЕЭС" (о.а.)
POPOLYПолиметалл Интернэшнл (о.а.)
PIPIKKПИК СЗ (о.а.)
SESPBEПАО "СПБ Биржа"
RLRUALМКПАО "Объединённая Компания "РУСАЛ"
PHPHORПАО "ФосАгро"
DYDSKYПАО "Детский мир"
SSSMLTПАО "Группа компаний "Самолет"
MCMTLRПАО "Мечел"
RERSTIПАО "Российские сети"
SOSIBNПАО "Газпром нефть"
TITCSIГДР ТиСиЭс Груп Холдинг ПиЭлСи
FVFIVEГДР Икс 5 Ритейл Груп Н.В
MLMAILГДР VK Company Limited
OZOZONАДР Озон Холдингс Пи Эл Си
SFSPYFSPDR S&P 500 ETF Trust
NANASDInvesco QQQ ETF Trust Unit Series 1
PSPOSIПАО Группа Позитив
SXSTOXiShares Core EURO STOXX 50 UCITS ETF EUR (Dist)
HSHANGTracker Fund of Hong Kong ETF
DXDAXiShares Core DAX UCITS ETF (DE)
N2NIKKiShares Core Nikkei 225 ETF
Процентные контрактыRRRUONставка RUONIA
MF1MFRставка RUSFAR
Валютные контрактыCRCNYкурс китайский юань – российский рубль
EuEuкурс евро – российский рубль
SiSiкурс доллар США – российский рубль
USDRUBFUSDRUBFкурс доллара США - российский рубль
EURRUBFEURRUBFкурс евро - российский рубль
CNYRUBFCNYRUBFкурс китайский юань – российский рубль
TYTRYкурс турецкая лира – российский рубль
HKHKDкурс гонконгский доллар – российский рубль
EDEDкурс евро – доллар США
AUAUDUкурс австралийский доллар – доллар США
GUGBPUкурс фунт стерлингов – доллар США
CAUCADкурс доллар США - канадский доллар
CFUCHFкурс доллар США – швейцарский франк
JPUJPYкурс доллар США – японская йена
TRUTRYкурс доллар США – турецкая лира
UCUCNYкурс доллар США – китайский юань
ECECADкурс евро – канадский доллар
EGEGBPкурс евро – фунт стерлингов
EJEJPYкурс евро – японская йена
Товарные контрактыBRBRнефть BRENT
GDGOLDзолото
PDPLDпалладий
PTPLTплатина
SVSILVсеребро
SASUGRсахар-сырец
SLSLVсеребро (поставочное)
AMALMNалюминий
CLCLнефть сорта Light Sweet Crude Oil
CoCoмедь
GOGLDзолото (поставочный)
NlNlникель
ZnZnцинк
NGNGприродный газ
WHWH4пшеница
W4WHEATИндекс пшеницы

Кодирование базисного актива для опционов на ценные бумаги (поле "C")

Группа
контрактов
Код
базисного
актива
(поле "C")
Код
базисного актива
на срочном рынке
Название базисного актива
Фондовые контрактыALRSALАК "АЛРОСА" (ПАО) (о.а.)
CHMFCHПАО "Северсталь" (о.а.)
FIVEFVГДР Икс 5 Ритейл Груп Н.В
GAZPGZПАО "Газпром" (о.а.)
GMKNGKПАО ГМК "Норильский Никель" (о.а.)
IRAOIRПАО "Интер РАО ЕЭС" (о.а.)
LKOHLKПАО НК "ЛУКОЙЛ" (о.а.)
MAGNMGПАО "Магнитогорский металлургический ком¬бинат" (о.а.)
MGNTMNПАО "Магнит" (о.а.)
MTLRMCПАО "Мечел"
NLMKNMПАО "НЛМК" (о.а.)
NVTKNKПАО "НОВАТЭК" (о.а.)
OZONOZАДР Озон Холдингс Пи Эл Си
PIKKPIПИК СЗ (о.а.)
PLZLPZПАО "Полюс" (о.а.)
POLYPOПолиметалл Интернэшнл (о.а.)
ROSNRNПАО "НК "Роснефть" (о.а.)
RUALRLМКПАО "Объединённая Компания "РУСАЛ"
SBERSRПАО Сбербанк (о.а.)
SBERPSPПАО Сбербанк (п.а.)
SMLTSSПАО "Группа компаний "Самолет"
SNGSSNПАО "Сургутнефтегаз" (о.а.)
TCSGTIГДР ТиСиЭс Груп Холдинг ПиЭлСи
VKCOVKГДР VK Company Limited
VTBRVBБанк ВТБ (ПАО) (о.а.)
YNDXYNЯндекс Н.В. (о.а.)
TATNTTПАО "Татнефть" им. В.Д. Шашина (о.а.)
MTSSMTПАО "МТС" (о.а.)
POSIPSПАО Группа Позитив
MOEXMEПАО Московская Биржа (о.а.)

Кодирование цены страйк для опционов (поле "P")

Для опционов на фьючерсные контракты в поле "цена страйк" указывается цена базисного актива (цена фьючерсного контракта). В свою очередь, цена фьючерсного контракта – это цена пакета акций, входящих в один контракт.

Для опционов на акции в поле "цена страйк" указывается цена за единицу базисного актива.

Кодирование типа расчетов (поле "К")

Символ
в коротком коде
Базовый активКатегорияТип расчетов
AФьючерсАмериканскийУплата премии
BФьючерсАмериканскийМаржируемый
САкцияЕвропейскийУплата премии

Кодирование месяца исполнения (поле "M")

Для фьючерсов:
МесяцКод фьючерса
ЯнварьF
ФевральG
МартH
АпрельJ
МайK
ИюньM
ИюльN
АвгустQ
СентябрьU
ОктябрьV
НоябрьX
ДекабрьZ
Для опционов:
МесяцКод опциона КОЛЛКод опциона ПУТ
ЯнварьAM
ФевральBN
МартCO
АпрельDP
МайEQ
ИюньFR
ИюльGS
АвгустHT
СентябрьIU
ОктябрьJV
НоябрьKW
ДекабрьLX

Кодирование года исполнения (поле "Y")

Год исполнения фьючерса и опциона кодируется одной цифрой от 0 до 9.
2 – 2022 год,
3 – 2023 год,
4 – 2024 год.

Кодирование признака недельного опциона (поле "W")

Код поляОпционы на фьючерсные контракты
Неделя
Опционы на ценные бумаги
Неделя
nullМесячный или квартальный опционМесячный или квартальный опцион
AНедельный опцион с экспирацией в 1-й четверг месяцаНедельный опцион с экспирацией в 1-ю среду месяца
BНедельный опцион с экспирацией во 2-ой четверг месяцаНедельный опцион с экспирацией во 2-ую среду месяца
СНедельный опцион с экспирацией в 3-й четверг месяцаНедельный опцион с экспирацией в 3-ую среду месяца
DНедельный опцион с экспирацией в 4-ый четверг месяцаНедельный опцион с экспирацией в 4-ую среду месяца
EНедельный опцион с экспирацией в 5-ый четверг месяцаНедельный опцион с экспирацией в 5-ую среду месяца

Алгоритм определения полей Y, M и W для недельного опциона на фьючерсные контракты:

  1. Рассматривается четверг недели, на которую приходится день экспирации
  2. Y определяется по году этого четверга
  3. M определяется по месяцу этого четверга
  4. W определяется:
    • по порядковому номеру этого четверга в месяце (для опционов на фьючерсы на индексы и валютные пары) Пример 1
    • по порядковому номеру четверга в месяце, которому предшествует последний торговый день опционов (для опционов на фьючерсы на акции) Пример 2

Пример 1:
Недельный опцион call на индекс RTS со страйком 130000 исполняется 30 декабря 2019 года в понедельник. Четверг на этой неделе (2 января) - неторговый день. Поэтому день исполнения был перенесен на ближайший предшествующий торговый день.
Короткий код: RI130000BA0A, так как четверг недели экспирации относится к январю 2020 года, и это первый четверг в месяц.
Полный код: RTS-1.20M301219CA 130000

Пример 2:
Недельный опцион call на SBRF со страйком 20 000 с датой исполнения 31.03.2021 в среду.
Система кодирует такую серию, как апрельскую, т.к. четверг данной недели приходится на апрель.
Код месяца: D
Код недели: A (1-неделя месяца). Ближайший к дате исполнения 31.03.2021 четверг - 01.04.2021, т.е. уже в апреле
Короткий код: SR20000BD1A
Полный код: SBRF-4.21M310321CA 20000

На Срочном рынке Московской Биржи предусмотрена возможность заведения опционных контрактов с нулевыми и отрицательными страйками. Рассмотрим пример их кодирования для месячного опциона call на июльский фьючерс на нефть марки Brent с исполнением 25 июня 2020 г. со страйком -10.
Короткий код контракта: BR-10BF0
Полный код контракта: BR-7.20M250620СA -10
В случае нулевого страйка (0) для аналогичного контракта:
Короткий код контракта: BR0BF0
Полный код контракта: BR-7.20M250620СA 0

Алгоритм определения полей Y, M и W для недельного опциона на ценные бумаги:

  1. Рассматривается среда недели, на которую приходится день экспирации
  2. Y определяется по году этой среды
  3. M определяется по месяцу этой среды
  4. W определяется по порядковому номеру этой среды в месяце Пример 3

Пример 3:
Недельный опцион call на акцию Газпрома со страйком 300 исполняется 27 июля 2022 года в среду (четвертая среда месяца экспирации).
Короткий код: GZ300CG2DПолный код: GAZPP220722CE 300

Как открыть стакан с помощью функции на Lua?
 
Цитата
Владимир написал:
Подскажите, пожалуйста, как открыть стакан с помощью функции на Lua?
Открыть  на экран нельзя, можно подписаться и получать .
Документацию смотрели? Там все есть:
Функции для заказа стакана котировок


  • Subscribe_Level_II_Quotes - заказывает на сервер
    получение стакана по указанному классу и инструменту.
  • Unsubscribe_Level_II_Quotes - отменяет заказ на
    получение с сервера стакана по указанному классу и инструменту.
  • IsSubscribed_Level_II_Quotes - позволяет узнать,
    заказан ли с сервера стакан по указанному классу и инструменту.  
Мало кто об этом знает.
 
повторить эксперимент не могу, так как обещал не нагружать Ваш демо сервер
---------------------
Так как проблему решил, то вопрос не актуальный.
Мало кто об этом знает.
 
Пардон, не увидел, что заявки
---------------
Тогда еще одно условие, проверка размещается в колбеке onParam.
Мало кто об этом знает.
 
Цитата
Anton Belonogov написал:
nikolz, добрый день.

Проверили скрипт в аналогичных условиях (Рабочее место QUIK 9.7.1, Lua 5.3.5, >300 тыс. заявок в таблице), результат:

Код
   303388 ,  97 
  

Указанное потребление не наблюдали.

Возможно, запущенный Вами скрипт отличается от размещенного в данной теме?
Поясните,
Вы использовали таблицу "orders" и создали 300 тысяч заявок, которые отменили или как-то иначе проверяли?
Страницы: Пред. 1 ... 19 20 21 22 23 24 25 26 27 28 29 ... 78 След.
Наверх