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

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

Страницы: Пред. 1 ... 34 35 36 37 38 39 40 41 42 43 44 ... 80 След.
main()
 

Замыкание — это особый вид функции.
Она определена в теле другой функции и создаётся каждый раз во время её выполнения.
В записи это выглядит как функция, находящаяся целиком в теле другой функции.
При этом вложенная внутренняя функция содержит ссылки на локальные переменные внешней функции.
Каждый раз при выполнении внешней функции происходит создание нового экземпляра внутренней функции, с новыми ссылками на переменные внешней функции.
Замыкание связывает код функции с её лексическим окружением (местом, в котором она определена в коде).
Лексические переменные замыкания отличаются от глобальных переменных тем, что они не занимают глобальное пространство имён.
От переменных в объектах они отличаются тем, что привязаны к функциям, а не объектам.
-------------------------
https://www.sbup.com/wiki/Замыкание_(программирование)


main()
 
Constantin,
Вы неправильно понимаете механизм замыкания.
Ваш пример
Код
local Stopped = false

function main()
  while not Stopped do

  end
end

function OnStop()
 Stopped = true
end

не является замыканием, так как при выходе из функции, значение Stopped не сохраняется в ней для последующего использования.
Это глобальная переменная и она может быть изменена вне функции, что у Вас и делается.
----------------------
Пример замыкания Вы можете изучить в скриптах индикаторов, которые предлагаются разработчиками  КВИК.
Например этот:
Код
function AD() --Accumulation/Distribution ("AD")
   local tmp = {pp=nil, p=nil}
   local it = {p=0, l=0}
return function (I, Fsettings, ds)
   if I == 1 then
      tmp = {pp=nil, p=nil}
      it = {p=0, l=0}
   end
   if CandleExist(I,ds) then
      if I~=it.p then 
         it={p=I, l=it.l+1}
         tmp.pp = tmp.p
      end
      local CLH=(2*GetValueEX(it.p,CLOSE,ds)-GetValueEX(it.p,HIGH,ds) - GetValueEX(it.p,LOW,ds))*GetValueEX(it.p,VOLUME,ds)
      local HL=GetValueEX(it.p,HIGH,ds) - GetValueEX(it.p,LOW,ds)
      if HL==0 then 
         tmp.p = tmp.pp or 0
      else
         tmp.p = CLH/HL + (tmp.pp or 0)
      end
      if it.l==1 then
         if HL == 0 then return 0
         else return CLH/HL end
      else
         return tmp.p
      end
   end
return nil
end
end
это замыкание:
Код
   local tmp = {pp=nil, p=nil}
   local it = {p=0, l=0}
return function (I, Fsettings, ds)
main()
 
Цитата
Constantin написал:
Цитата
nikolz написал:
это вообще не о том.

Да нет. На примере, Stopped.

Вариант 1
Код
  Stopped  =   false 

 function   main ()
   while   not  Stopped  do 

   end 
 end 

 function   OnStop ()
  Stopped  =   true 
 end   
Здесь переменная глобальная и обе функции к ней обращаются через _G.

Вариант 2
Код
   local  Stopped  =   false 

 function   main ()
   while   not  Stopped  do 

   end 
 end 

 function   OnStop ()
 Stopped  =   true 
 end   
Здесь переменная захвачена обеими функциями и доступ к ней идёт через другой механизм. Вот он учитывает, что функции выполняются в разных потоках?
пока это лишь Ваше предположение.
Можете привести доказательство своего предположения?
=================
Я предположу,
что и в первом и во втором случае используется глобальный стек.
---------------------------
Но для хранения локальной общей  переменной создан общий блок в глобальном стеке.
---------------------------
Т к указатель на локальный стек передается в функцию при ее вызове
В данном случае никаких вызовов при создании данной переменной нет.
-----------------------------------
И уж тем более - этот никакой не захват,
в классическом понимании этого механизма ,
так как он реализуется внутри функций,
а в данном случае - это классическая глобальная переменная.
------------------------
если будет настроение напишу тест .
Зависание QUIK
 
разработчики рекомендуют ставить sleep  чайникам и буратинам, как самый простой способ
исключить практически монопольный захват процессора одним потоком.
Зависание QUIK
 
Цитата
s_mike@rambler.ru написал:
Цитата
Alexander написал:
Т.е. по поводу поста выше если как говорят разрабы main() работает в отдельном потоке, то вообще ничего виснуть не должно. Хоть есть задержка, хоть нет. На то он и отдельный поток. Зачем разрабы рекомендуют ставить sleep(100)? Что не так с потоком?
Потоки, о которых пишут разработчики не есть потоки операционной системы в чистом виде. Если не вдаваться в дебри, sleep() нужен обязательно. Поставьте sleep(50) и все станет хорошо, ничего тормозить не будет
Прикольно читать эту чушь.
-------------------------
Вообще не использую sleep.
--------------------
Поток main  КВИКА - это поток OC - Классика!!!
================
Использую события ядра ОС:
CreateEvent  и  ожидание события WaitForSingleObject
-------------------------------------
Более того , дополнительно использую пул потоков
-------------------
Для синхронизации колбеков, main и потоков пула использую атомарные операции.
--------------------------
Все работает просто идеально.
------------------
Я уже выкладывал результаты тестов,
в которых у меня создается до 12 потоков в пуле, обрабатывается 200 инструментов
и за 4 часа выставляется и снимается 200 тысяч заявок.
И все это синхронизируется и работает без единого сообщения об ошибке.
===========
Делал и рекурсии в потоках - все работает.
=====================
У Вас проблема с отсутствием знаний .
Читайте учебники, а не занимайтесь фантазиями а-ля кулибины.
================  
Часто зависает Quik 9.7.1.10, Имя события проблемы: AppHangB1
 
и еще...
сообщение об ошибке будет,
если эта ошибка обрабатывается перехватчиком
и ошибка не приводит к  полному кирдык программе.
В вашем случае - очевидно полный кирдык.
Часто зависает Quik 9.7.1.10, Имя события проблемы: AppHangB1
 
Цитата
Boris написал:
Цитата
Даниил написал:
Lua-скрипт - продукт стороннего разработчика, его взаимодействие с ресурсами Рабочего места QUIK может быть неоптимальным, поэтому необходимо остановить выполнение таких скриптов, чтобы подтвердить или опровергнуть их возможное влияние на возникновение описанной ошибки.
каждый lua скрипт работает в изолированной виртуальной среде lua интерпритатора, который в свою очередь работает внутри quik.

В случае ошибки в lua - интерпритатор должен был бы показывать ошибку с номером строки и уж точно это не должно вешать намертво сам quik.
В случае зависания самого lua интерпритатора: Quik - обязан показывать ошибку - что зависла среда выполнения.

В данном же случае виснет сам Quik и никаких ошибок не выдаёт.

Что же касается подтвердить\опровергнуть.
В который раз повторяю: Этим должны заниматься разработчики Quik, а не люди которые ТОРГУЮТ ВСЁ ВРЕМЯ пока работает биржа !!!

Вы представляете какого размера может быть убыток на срочке?
Пока клиент дебагом и разбором глюков занимается - вместо того чтобы следить за рынком ?
поставьте вывод меток в лог файл
когда зависнет , в лог файле будет последняя метка.
По меткам можно будет локализовать место зависания.
Если сами не сможете, пишите, подскажем что не так.
getCandlesByIndex в индикаторе, getCandlesByIndex в индикаторе
 
Цитата
Konstantin777 написал:
Цитата
nikolz написал:
если напишите словами и с картинкой, что хотите получить
ну я просто хочу получить значения high для 3 первых и последних последних свечей, как в примере, в первом сообщении, в коде индикатора, с двух разных графиков, один график источник, другой просто в том же окне, при установке индикатора мне все выдает правильно:
 
Но если я меняю инструмент, а также просто при старте квика мне выдает совсем другое, пока я не переставлю индикатор, т.е. не видит историю
посмотрите скрипт который я выложил на этом форуме для арбитража
В нем вроде бы все есть для вашей хотелки.
Если что-то надо еще напишите, добавлю.
В вашем примере много вывода  переписывать его нет желания.
getCandlesByIndex в индикаторе, getCandlesByIndex в индикаторе
 
Цитата
Konstantin777 написал:
Цитата
Alexey Danin написал:
Дело в том, что у всех индикаторов в одном окне диаграммы имеется общее пространство позиций для свечек с единой сплошной нумерацией без пропусков
ну так это понятно, вопрос в том что меняется если мы переставляем инидкатор? и почему вдруг все начинает работать нормально? Я также тестировал пример с постоянными попытками забора значений свечей(как первых так и последних), и он также криво работает, тупо не видит цены, ни одной, однако если переставить индикатор все идет как по маслу. Так где пропуски конечно будет по 0 цена, я с этим уже сталкивался, но там где пропусков нет почему такое?
Могу написать пример как это сделать,
если напишите словами и с картинкой, что хотите получить.
Архив IMOEX2 отображается клочьями с разрывами на разных таймфреймах.
 
Насколько мне известно в терминале источником данных всегда является лишь сервер.
и все данные с сервера запишутся в архив.
Но как создать локальный источник новых данных без соединения с сервером?  
Архив IMOEX2 отображается клочьями с разрывами на разных таймфреймах.
 
Цитата
Karina Dmitrieva написал:
Здравствуйте, Шорты осиновые.

Вероятно, данные до 16.02.2022 у Вас были накоплены локально, а с 27.07.2022 - транслируются с сервера QUIK.
Архив графика может содержать максимально 65000 свечей если их накапливать, то есть каждый день необходимо подключаться к серверу QUIK и строить график по инструменту.
Если же в промежуток времени с февраля по июль Вы не строили данный график, то соответственно исторические данные по этому графику у Вас не накапливались.
С сервера QUIK можно же заказать только максимум 3000 свечей (+ текущую торговую сессию).
Т.е. в настоящий момент увидеть пропущенные данные с февраля по июль на графике уже возможности нет.

Если же Вам, наоборот, не требуется видеть исторические данные по этому инструменту, то Вы можете удалить исторические данные вручную из папки Archive в директории с терминалом QUIK.
Можете объяснить как локально в QUIK накапливать данные .
Очень хочу так делать.
Прикольно, но ошибка
 
Цитата
s_mike@rambler.ru написал:
Это не ошибка, так и должно быть

дата торговой сессии есть дата ее начала.

торговпя сессия длится до момента начала следующей.

все правильно.
Вы не поняли.
Если не разрывать соединение после начала торгов, то дата сервера остается вчерашней.
Прикольно, но ошибка
 
Недавно сообщал на форуме о том,
что дата сервера в текущих торгах показывает вчерашнюю дату.
сегодня выявил как это можно повторить.
-------------------
проблему можно обнаружить, если загрузить квик и подключить его к серверу до начала торгов.
В этом случае, после начала торгов дата сервера не обновляется и остается равной дате предыдущих торгов.
если разорвать соединение и снова восстановить то дата сервера обновляется до текущей.
--------------------
От версии КВИКА этот прикол не зависит.
Длина текстового поля для выноски, метки и т.д.
 
Цитата
D7DSk написал:
Цитата
nikolz написал:
поместите свою метку в каталог с коротким путем.
Интересно  - "поместить  метку в каталог с коротким путем"  -  что это значит ?
покажите как Вы выставляете метку
Сортировка и фильтры в lua таблицах, Можно ли использовать сортировку с учётом типа данных в стобце ?
 
прикольно читать,
Может кто-нибудь напишет конкретно,  какая у него проблема и приведет пример.
А то кроме бла бла бла ничего конкретного.
Длина текстового поля для выноски, метки и т.д.
 
или поместите свою метку в каталог с коротким путем.
Длина текстового поля для выноски, метки и т.д.
 
Цитата
Шорты осиновые написал:
Добрый день!
Уже была на форуме  аналогичная тема - не хватает длины поля для текстовой выноски и других типов меток, но изменений нет.

например, длинная ссылка  
https://bcs-express.ru/novosti-i-analitika/itogi-torgov-vozvrashchenie-nerezidentov-vnov-ispugalo-ry...
обрезается после сохранения  выноски до 99 символов
https://bcs-express.ru/novosti-i-analitika/itogi-torgov-vozvrashchenie-nerezidentov-vnov-ispugalo-r
и становится непригодной

Увеличение поля предполагает большие трудозатраты от ARCA ?
сделайте в скрипте короткий путь
Часто зависает Quik 9.7.1.10, Имя события проблемы: AppHangB1
 
Цитата
Юрий написал:
Цитата
nikolz написал:
Поставьте 8 версию КВИК в 9 много ошибок.
А как ее поставить? где репозитарий старых версий?

Если Вы обновляли версию 8 на 9 то старая у Вас в папке QUIK/backup/ дата обновления.
--------------  
Если ставили 9 как новый квик, то можно спросить у брокера или у разработчиков.
Часто зависает Quik 9.7.1.10, Имя события проблемы: AppHangB1
 
Поставьте 8 версию КВИК в 9 много ошибок.
Узнать цену покупки актива.
 
Цитата
Kolossi написал:
Цитата
Alexey Danin написал:
Здравствуйте.

 
Цитата
Kolossi  написал:
А как насчет получения средней цены покупки по инструменту, точнее параметра "Балансовая цена" в таблице Состояние счета?
 К сожалению, средствами QLUA данную таблицу не получить.

Однако параметры данной таблицы формируются на основе позиций клиента, которые отражены в соответствующих таблицах терминала, к которым в свою очередь можно получить доступ средствами QLUA.
Подробное описание полей Таблицы "Состояние счёта" находится в   Руководство пользователя QUIK v.9.7zip, 14.6 МБ   -> Раздел 3. Просмотр информации -> 3.5 Состояние счета.
 Да не получается. Конечно я веду среднюю позиции средствами и возможностями скриптов. Как правило она совпадает с балансовой ценой, но стоит провести сделку мимо скрипта и весь результат можно кидать в помойное ведро. Поэтому возможность получать данные с этой таблицы хотелось бы иметь.
Если интересует цена покупки  актива то надо использовать
Позиции по инструментам

Описание параметров таблицы «Позиции по инструментам»:  

ПараметрТипОписание
sec_code STRING Код инструмента
trdaccid STRING Счет депо
firmid STRING Идентификатор фирмы
client_code STRING Код клиента
openbal NUMBER Входящий остаток
openlimit NUMBER Входящий лимит
currentbal NUMBER Текущий остаток
currentlimit NUMBER Текущий лимит
locked_sell NUMBER В продаже. Количество инструментов, заблокированное под исполнение заявок  клиента на продажу
locked_buy NUMBER В покупке. Количество инструментов в активных заявках клиента на  покупку
locked_buy_value NUMBER Стоимость инструментов, заблокированных под покупку
locked_sell_value NUMBER Стоимость инструментов, заблокированных под продажу
wa_position_price NUMBER Цена приобретения
limit_kind NUMBER Срок расчётов. Возможные значения:  
  • положительные целые числа, начиная с «0», соответствующие срокам расчётов из
    таблицы «Позиции по инструментам»: «0» – T0, «1» – T1, «2» – T2 и т.д.;
  • отрицательные целые числа – технологические лимиты (используются для
    внутренней работы системы QUIK)

Руководство пользователя QUIK © ARQA Technologies /  
main()
 
и еще про closure :
" Внутренняя функция всегда обращается к свободным переменным (которые называют "внешними локальными переменными") косвенно через структуру,
называемую "upval", используя инструкции GETUPVAL и SETUPVAL .
Пока включающая функция активна, upval указывает на слот локальной переменной в стеке
(хотя Lua является виртуальной машиной на основе регистров, она использует стек внутри)
Это удобно, потому что заключающей функции не нужно беспокоиться о том, является ли переменная частью замыкания или нет.
Когда функция возвращается, она копирует локальные переменные в элемент структуры upval и указывает на это upval.
Upval сохраняется до тех пор, пока на него больше никто не ссылается, и в этот момент он может быть собран для сбора мусора.
main()
 
Цитата
Constantin написал:
nikolz

Так захват переменной, он же closure.
это вообще не о том.
-------------
Объясняю...
--------------
Если функции передается значение скалярной переменной, то
при входе внутрь функций луа всегда происходит создание копии скалярной переменной.
В отличии от СИ, в луа нельзя передать указатель на скаляр.
-----------------
Т е если  Вы присваиваете локальной переменной глобальную, то значение глобальной копируется в локальную.
-------------------
В этом месте теоретически синхронизация для глобальной переменной нужна,
но так как вы читаете, то эта синхронизация не имеет практического смысла.
----------------------
После этого в локальной переменной у вас копия и никакая синхронизация не требуется,
а изменение локальной не меняет глобальную.
===============  
когда локальной переменной вы присваиваете таблицу
то в локальную записывается указатель  глобальной.
синхронизация опять же будет для глобальной, а не для локальной переменной.
================
Таким образом, в любом случае локальная переменная у Вас недоступна из других потоков и ее синхронизация не требуется.
================
а closure   это сохранение переданного значения функции вне стека функции.
И при новом  входе в функцию эти значения  могут быть использованы.
Но эти значения внутри потока функции и они не доступны по указателю в других потоках.
========================
Поэтому closure - это о сохранении значений внутренних переменных функции при выходе из области видимости этой функции.
читаем документацию:
"замыкание - это функция плюс все, что ей нужно для правильного доступа к своим значениям...
Технически говоря, значение в Lua - это замыкание, а не функция. Сама функция является всего лишь прототипом для замыканий."
===============
Узнать цену покупки актива.
 
Цитата
Kolossi написал:
Цитата
nikolz написал:
 
Цитата
Ренат  написал:
getItem('firm_holding') .
 Вы же хотите узнать цену сделки, так и читайте ее из таблицы сделок.
причем здесь позиция по инструментам?
и где Вы в позиции увидели цену?
Ну да, с ценой сделки козе понятно. )
А как насчет получения средней цены покупки по инструменту, точнее параметра "Балансовая цена" в таблице Состояние счета?
Если Вы пытаетесь ответить на вопрос темы, то читайте внимательнее вопрос.
Если просто выпендриваетесь, то нахрена?
main()
 
Цитата
Constantin написал:
Цитата
nikolz написал:
так как вы не сможете обратиться к локальным переменным майн из колбека и наоборот.
Так "глобальная" переменная, объявленная с local вне функций, захватывается разными функциями и становится для них "локальной".  
Вы это сами придумали или где прочитали?
Вы хотя бы поняли, что написали?
-----------------------------------------------
Если Вы локальной переменной присваиваете значение глобальной,
то будет выполнено копирование  значения для скалярной величины и копирование указателя для таблицы.
--------------------
Поэтому никто ничего не захватывает и ничем не становится.  
Узнать цену покупки актива.
 
Цитата
Ренат написал:
getItem('firm_holding') .
Вы же хотите узнать цену сделки, так и читайте ее из таблицы сделок.
причем здесь позиция по инструментам?
и где Вы в позиции увидели цену?
 
main()
 
Цитата
Constantin написал:
Подскажите:

1. В main() можно использовать функции получения данных от Квика, которые обычно используются в колбаках? Такие как getParamEx(), getLevel2Quotes() и т.д.

2. QLua нормально синхронизирует обращение к переменным, помеченным как local, если к ним идет доступ и из потока колбаков, и из потока main?
main и колбеки имеют общий глобальный стек VMLua.
Поэтому есть синхронизация обращения к глобальным пере5менным.
Кроме того, обращение к глобальным переменным в кобеке приводит к блокировке main при обращении к этим же переменным.
Т е колбеки и main в этой ситуации работают последовательно.
--------------------
локальные стеки у них разные. поэтому синхронизация не требуется ,
так как вы не сможете обратиться к локальным переменным майн из колбека и наоборот.
Быстро продать и быстро купить, вопрос
 
Цитата
Рустам написал:
Если использовать условную заявку то они могут не взяться. Например продал акции и с концами пошел наверх оставив лимитку на покупку внизу. Было дело. Пробовал.
Есть еще варианты?  Чтобы один раз выставил до торговой сессии и забыл на сутки
пишите робота либо торгуйте руками.
Халявы нет.
Быстро продать и быстро купить, вопрос
 
Цитата
Рустам написал:
Ребята. Подскажите как с начала торгов с помощью стоп заявок сначала продать а затем купить одинаковое число заявок?
В данный момент если ставить стоп-лимит на продажу и покупку то при покупке выдает ошибку "не прошла контроль лимитов". Это как бы невозможно купить у себя во время продажи. итог только идет продажа.
С помощью тейкпрофита удается но там все зависит от того что первое пошло или покупка или продажа. Я бы его использовал но метод FIFO меня добивает своей неточностью.
Нужно сначала продать а затем купить.
Подскажите какие есть варианты!!!
надо ставить не по рынку, а по фиксированной цене.
и надо использовать не стоп-заявку, а условную заявку.
Подскажите как правильно
 
и еще
функция FRACTALS
это плохой индикатор из тех, которые заглядывают в будущее.
Т е индикатор -шулер.
Значения на график заносятся задним числом. Поэтому вам кажется что можно легко торговать.
----------------
Если вы построите робота на таком индикаторе то на истории этот робот будет давать прибыль а на реале - убыток.
Подскажите как правильно
 
Цитата
Сергей написал:
Приветствую, во втором сообщении код индикатора. Стандартный фрактал на lua. Мне нужно просто поднять/опустить его от графика, потому что он очень близко рисуется, мелкие свечи бывает не видно. Я делаю его в виде жирных точек, вот они сильно низко рисуются. А стандартные треугольники со сделками иногда сливаются.

можно сделать так:
----------------
В setting добавляем два значения вот так:
Settings = {
Name = "nk_FRACTALS(Fractals)",
X1 = 0.0,  -- это смещение для максимума
X2 = 0.0,  -- это смещение для минимума
Period = 5,
line = {{
Name = "Horizontal line",
Type = TYPE_LINE,
Color = RGB(140, 140, 140)
},
{
Name = "FRACTALS - Up",
Type = TYPE_TRIANGLE_UP,
Color = RGB(0, 206, 0)
},
{
Name = "FRACTALS - Down",
Type = TYPE_TRIANGLE_DOWN,
Color = RGB(221, 44, 44)
}
},
--------------------
далее   добавляем вот такую функцию
--------------------
local function nk_sm(X,N,m)   if N then return X(N)+m end  end
-----------------
и исправляем две строки в функции
-----------------
function OnCalculate(Index)
local Out1,Out2 = func(Index, Settings)
SetValue(Out1, 2, ConvertValue(Settings,nk_sm(H,Out1,Settings.X1)))
SetValue(Out2, 3, ConvertValue(Settings,nk_sm(L,Out2,Settings.X2)))
return tonumber(Settings.Horizontal_line),nil,nil
end
=================
если что не так, пишите, поправлю.
Подскажите как правильно
 
Цитата
Сергей написал:
Цитата
Alexey Danin написал:
попробуйте добавить в код обработку данного случая.

Спасибо большое, что ответили, но я в программировании полный ноль, по этому я ничего не понял.))
покажите скрипт
Принципы написания скриптов, Разделять или объединять?
 
Владислав,
Несколько бесплатных советов.
-------------------------
Тестирование скорости исполнения скриптов или отдельных функций делается для оценки имеющихся вычислительных ресурсов .
-----------------------
Эти оценки необходимы для разработки в дальнейшем алгоритмов работы роботов, реализующих конкретную стратегию поведения.
---------------
Если вы начинающий писатель,
то начинать надо с выбора метода торговли (если это торговый робот)
затем разработки алгоритма  и реализации его.
----------------------------------
После этого наступает этап тестирования и определения адекватности его работы ожиданиям автора.
---------
Частота совершения сделок а следовательно и скорость реакции робота зависит от выбранной стратегии торговли.
-----------
Если Вы решили заниматься скальпингом, то скорость  сделка в  секунду может быть низкой,
а если займетесь арбитражем, то возможно  что и  1 сделка в минуту будет достаточно.
------------------  
Поэтому рекомендую начать не с написания скрипта для торговли, а с разработки алгоритма торговли и тестирования его на истории.
===============  
И еще, если торгуете конкретным инструментом, то можно торговать без колбеков а робота написать в индикаторе.
При этом скорость будет не ниже чем с колбеками а скрипт на порядок проще.
====================
Если используете колбеки,
то более важной задачей является синхронизация сообщений
и транзакций между собой так как интернет и биржевая торговля
это источники асинхронных событий.  
------------------
Если сделаете правильно, то робот будет работать без затыков и сообщениях об ошибках и всегда быстро будете получать реакцию на сделки.
---------------
Примерно так.
Квик Втб стал занимать много памяти
 
и еще
В папке arxiv хранятся данные по инструментам с
сохраните если она вам нужна и перед загрузкой квика удалите все файлы *.dat из нее.
Квик Втб стал занимать много памяти
 
Цитата
Юрий написал:
Цитата
nikolz написал:
попробуйте в заказе данных в потоке котировок оставить лишь один класс и в нем  инструмент .Посмотрите сколько у Вас сейчас в окне выбор принимаемых инструментоввыбрано классов инструментов и параметров
Я убрал вообще все данные, но загрузка от этого не изменилась
В диспетчере задач время Info равно нулю т е терминал не работает.
Предлагаю сделать следующее
оставьте как установили т е без классов и инструметов
сохраните квик и выйдете из него (система->выход )
Удалите файл *.log
Запустите терминал снова  
Квик Втб стал занимать много памяти
 
Цитата
Юрий написал:
Цитата
СергейК написал:
Написал про это брокеру Втб также.  
Я звонил им в поддержку. Все тоже самое: удалили .log, .dat, .wnd файлы, почистили папки, изменили настройку получения данных. Посоветовали переустановить. Ничего не помогло из этого. у себя в теме я писал, что даже пустой без вкладок и графиков квик у меня забрал сразу 2 ГБ
попробуйте в заказе данных в потоке котировок оставить лишь один класс и в нем  инструмент .
Посмотрите сколько у Вас сейчас в окне выбор принимаемых инструментов
выбрано классов инструментов и параметров
Как конвертировать в юникод
 
http://lua-users.org/wiki/LuaUnicode
Как конвертировать в юникод
 
https://stackoverflow.com/questions/41855842/converting-utf-8-string-to-ascii-in-pure-lua
Принципы написания скриптов, Разделять или объединять?
 
Владислав,
вроде бы уже писал, но повторю.
-------------------
чтобы не дублировать колбеки надо обеспечить возможность скриптам обращаться к общим данным.
это можно сделать различными методами.
-------------------------
Реализую это с помощью memory mapping.
Кроме того, для реализации неблокирующей синхронизации потоков использую shared memory.
Для параллельной работы с множеством инструментов использую пул потоков.
------------------
Примерно так.
Изменение стоп-заявки
 
Цитата
Айдар написал:
Чтобы изменить параметры действующей стоп-заявки я удаляю действующую и выставляю новую.
Но иногда происходит так, что во время удаления эта стоп-заявка успевает сработать - и в этом случае новая уже не требуется, но в алгоритме это не прописано и все-равно выставляется новая-стоп заявка.
Как можно это исправить? Спасибо
используйте колбек стоп-заявки
любое изменение будет приходить в колбек.
Надо обрабатывать все события в колбеке.
Ответ на вопрос: "Что быстрее , рассчитать индикатор или взять с графика?"
 
Добрый день,
---------------
сделал следующий тест.
На график вывел два варианта индикатора  стохастик.
-----------------------
1)  встроенный в терминал (третий график  на картинке )
2)  взятый из предложенных разработчиками вариантов на луа. (четвертый график )
-----------------------
Во втором варианте добавил чтение индикатора с графика первого варианта
и вывод этого значения для сравнения на график второго варианта.
-------------
На втором варианте это линия белого цвета.
------------------
Вот такая картинка в итоге:



Время чтения индикатора с графика 6.8 мкс ,
а время расчета индикатора  23.4 мкс.

--------------
Рассчитать данные индикатора ИЛИ брать с графика?
 
Цитата
Дмитрий Бланк написал:
Доброго дня Камрады!

задача простая - торгуем бумагу. Таких бумаг 40+
"Смотрю" на разных ТФ (их 6+ по каждому инструменту).

Сейчас встал выбор - брать ДАНЫЕ индикаторов с ГРАФИКА (всегда открыт, их 6+ с индикаторами) или вообще закрыть графики и брать данные по бумаге с сервера брокера в разных ТФ и так же рассчитывать идикаторы.

вопрос - что менее грузит систему? Что быстрее?

Велика ли разница? по наитию понимаю что быстрее рассчет.


Благодарствую.
Если это встроенные в терминал индикаторы , то быстрее брать с графика.
---------------------------------------
Если это индикаторы рассчитываемы в луа, то зависит от того как Вы напишите эти индикаторы.
------------------------
Разница в том, что встроенные реализованы на СИ.
А индикаторы на луа - это байт код
этот байт-код исполняется виртуальной машиной луа
т е в программе на СИ последовательность байт-кода выполняется  вызовом функций, реализованных  на СИ.
при этом, так как данные в луа хранятся в виде структур, то прежде чем их обработать те вычислить индикатор
ВМ луа проверяет их формат и вызывает соответствующие преобразования.
------------------------
В итоге, даже если Вы вызовите на луа пустую функцию луа,
у вас уйдет на это куча времени  минимум  раза в 3 больше, чем вызов функции СИ.
--------------  
В итоге ваш индикатор на луа может вычисляться от 3 до 10 раз медленнее, чем встроенный, либо написанный на C.
============
Но это не предел, можно так плохо написать индикатор на луа что  будет  медленнее раз в 100.
Например, тут есть один умелец который пузырьком на луа сортирует миллион данных. при этом потери в скорости уже составляют 1000 и десятки тысяч раз.
Но его это не ...ет, так что дело вкуса.

 
Отправка транзакций данного типа не поддерживается, Не получается выставить заявку через динамический импорт транзакций секция центы.
 
Цитата
Владимир Петров написал:
Добрый день.
Подскажите пожалуйста, где искать источник проблемы?
Пытаюсь через динамический импорт транзакций выставить заявку по долларовым центам.
ACCOUNT=###; CLIENT_CODE=###; TYPE=L; TRANS_ID=680858782; CLASSCODE=CETS_SU; SECCODE=USDRUB_TMS; ACTION=NEW_ORDER; OPERATION=B; PRICE=60.1100; QUANTITY=50;
TransactionReplyMessage:Обработка внешних транзакций: Отправка транзакций данного типа не поддерживается.
До сервера транзакция не доходит. Может какую-то галочку нужно где-то поставить?

Версия квик 7.27.2.1
Брокер Кит-финанс
скорее всего вы неправильно задали параметры
поэтому ошибка возникает на уровне терминала.
все числа передаются как строки
а в цене надо установить дробную часть в соответствии с шагом цены
Индикаторы для QUIK старше 8.3.2.4
 
пардон, опечатка
в 9 версии можно выбрать версию Lua
установите 5.3 и используйте индикаторы от версии 8.7
Индикаторы для QUIK старше 8.3.2.4
 
Цитата
Анатолий написал:
Цитата
Sergey Gorokhov написал:
Здравствуйте,По идее последняя версия должна работать
Здравствуйте, где теперь взять индикаторы на новый QUIK 9.4?
в 9 версии можно выбрать версию QUIK
установите 5.3 и используйте индикаторы от версии 8.7
Недокументированный "Троянский конь" на Lua
 
и еще
В нормальных программах есть обычно функция инициализации
так вот в этой функции и грузятся все индикаторы.
Поэтому вариант - тупо два раза - это для дилетантов.
Недокументированный "Троянский конь" на Lua
 
нормальная логика - грузим все индикаторы при нулевом индексе.
и все
Нафига гонять все свечи пока индикаторы не загружены?
Недокументированный "Троянский конь" на Lua
 
Цитата
s_mike@rambler.ru написал:
Цитата
nikolz написал:
Метод OnCalculate  обязательно срабатывает два раза на для всей истории свечей в следующих случаях
1)  Когда первый раз загружается индикатор на график
2) Когда вносятся изменения в settings уже загруженного индикатора
------------------  
Если изменения не вносятся, а лишь вызывается редактирование, то метод срабатывает лишь один раз.
===========  
Таким образом в 1 и 2 случаях выполняется два раза идентичный расчет всего индикатора для всей истории свечей.
т е бессмысленная трата времени процессора и зависание квика.
Не бессмысленная. Это костыль, специально сделанный разработчиками.

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

Ну, в общем понятно, какой ногой все это написано.
Загружаются, да,
но исполняются они последовательно для каждого тика.
поэтому решение "два раза все сначала" -  очень тупое.
Недокументированный "Троянский конь" на Lua
 
Метод OnCalculate  обязательно срабатывает два раза на для всей истории свечей в следующих случаях
1)  Когда первый раз загружается индикатор на график
2) Когда вносятся изменения в settings уже загруженного индикатора
------------------  
Если изменения не вносятся, а лишь вызывается редактирование, то метод срабатывает лишь один раз.
===========  
Таким образом в 1 и 2 случаях выполняется два раза идентичный расчет всего индикатора для всей истории свечей.
т е бессмысленная трата времени процессора и зависание квика.
ParamRequest и CancelParamRequest в индикаторах, ACCESS VIOLATION
 
Цитата
Karina Dmitrieva написал:
Добрый день.

Цитата
TGB написал:
Зачем двойная последовательность вызов функции OnCalculate(index)?:1) index:  1, 2, 3  ….2) index:  1, 2, 3  ….

Действительно метод OnCalculate может срабатывать не один раз при изменении параметров индикатора.
Данная проблема будет устранена в одной из очередных версий ПО.
Приносим извинения за причиненные неудобства.
Метод OnCalculate  обязательно срабатывает два раза на для всей истории свечей в следующих случаях
1)  Когда первый раз загружается индикатор на график
2) Когда вносятся изменения в settings уже загруженного индикатора
------------------  
Если изменения не вносятся, а лишь вызывается редактирование, то метод срабатывает лишь один раз.
===========  
Таким образом в 1 и 2 случаях выполняется два раза идентичный расчет всего индикатора для всей истории свечей.
т е бессмысленная трата времени процессора и зависание квика.
Ошибка при расчёте стохастика, Выдаёт ошибку при обращении к SO.lua
 
Цитата
Евгений написал:
Возникла новая проблема - получить значения индикатора с нескольких предыдущих свечек. Пробовал поменять запрос so1,so2=funcSo(ds:Size(),..  на so1,so2=funcSo(ds:Size()-1,... или менял цикл  for i=1,ds:Size() do  на  for i=1,ds:Size()-1 do, получается ерунда. Подскажите?
чтобы получить значения индикатора с предыдущих свечей надо сохранять значения индикатора в массиве
тогда значения предыдущие читаете из массива по индексу влево от длины массива.
т е
local t={}
t[#t+1]=текущее значение индикатора

читаем значение на 1 свечу назад
x=t[#t-1]
на 2 свечи
x=t[#t-2]
Страницы: Пред. 1 ... 34 35 36 37 38 39 40 41 42 43 44 ... 80 След.
Наверх