Дмитрий Минеев (Автор тем)

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

Страницы: 1
Продление демо доступа
 
Есть ли возможность продлевать демо доступ, чтобы не регистрироваться каждый раз и не создавать отдельные ветки каждый месяц?
Может быть стоит создать одну ветку где все желающие могли бы просить продлиться и закрепить ее вверху?
Мой аккаунт U0132383
Спасибо!
Два (и более) счетов в Quik Junior
 
Для разработки и тестирования стратегии требуется 2 счета в демо квике. Возможно ли такое и если да, то как организовать?
Функция getBuySellInfo все время возвращает nil
 
Простой пример кода:
Код
firm_id = "SPBFUT000000"
client_code = "10260"
class_code = "SPBFUT"
sec_code = "RIZ8"

result = getBuySellInfo(firm_id, client_code, class_code, sec_code, 0)

message(tostring(result.can_buy))


Какой бы я ни брал инструмент (Акции, Фьючерсы), какой бы ни брал параметр - все время получаю nil.
Demo Quik 7.18.1.20
getParamEx возвращает все время 0
 
В демо квике на демо сервере при запросе параметра получаю 0. Если открыть таблицу текущих торгов, то там тоже 0. Не смотря на то, что этот 0 подсвечивается то зеленым, то красным, что означает изменение параметра.
Код
function main()   
   local last_change = getParamEx('QJSIM',  'GAZP', "LASTCHANGE")
   
   message("result:" .. tostring(last_change.result) .. ", value = " .. tostring(last_change.param_value) .. ", image = " .. tostring(last_change.last_change))
   
end

Значение "OPEN" возвращает корректно, а вот "CHANGE" опять 0. Это ограничения демо?

Условное оформление в таблицах созданных из LUA
 
Версия Quik 7.11.1.5
Код создания таблицы:
Код
table_id = AllocTable()
AddColumn(table_id, 0,    'Hist. min (HMin), (руб)',      true,   QTABLE_DOUBLE_TYPE,   17)
CreateWindow(table_id)
Пытаюсь применить условное форматирование как на скрине. И результат тоже не скрине.


Т.е. Крик считает все числа больше 10.5. То же самое с фильтром. Ставлю на эту же колонку условие "Меньше 500", но ни одна строка не исчезает. Ставлю "Больше 500" и исчезают все строки.

Еще такой вопрос: почему не смотря на то, что при инициализации таблицы я указал, что тип колонки double, перед установкой значения ячейки необходимо преобразовывать значение в строку иначе она в таблице не появляется?
CreateDataSource возвращает пустую таблицу, если использовать параметр param
 
Версия Quik 7.11.1.5.
Демо
Код примера:
Код
stopped = false

function main()   
   ds, err = CreateDataSource('QJSIM', 'GAZP', INTERVAL_M1, 'bid')
   while (err == "" or err == nil) and ds:Size() == 0 do
      sleep(5)
   end

   if err ~= "" and err ~= nil then
      message("Error: " .. err)
      return
   end

   message("size:" .. tostring(ds:Size()))
   
   ds:SetUpdateCallback(myFunc)

   while stopped ~= true do
      sleep(50)
   end
end

function myFunc(index)
   message(tostring(index))
end

На любой тикер и любой параметр param сервер возвращает пустую таблицу (т.е. ds:Size() всегда 0) пробовал выставлять sleep больше - не помогает. В любом случае должен был бы сработать callback, но ожидание в 5 минут после старта ничего не дало. Тот же самый код в версии 6 в демо quik возвращает таблицу с данными.
Падает квик на win2012R2
 
Периодически падает квик на Windows 2012 R2.
Вот с таким описанием:

Problem signature:
 Problem Event Name: APPCRASH
 Application Name: info.exe
 Application Version: 7.1.2.2
 Application Timestamp: 56d7f483
 Fault Module Name: StackHash_703e
 Fault Module Version: 6.3.9600.18194
 Fault Module Timestamp: 569515fc
 Exception Code: c0000374
 Exception Offset: PCH_92_FROM_ntdll+0x0003C7EC
 OS Version: 6.3.9600.2.0.0.16.7
 Locale ID: 1049
 Additional Information 1: 703e
 Additional Information 2: 703e5c8f7f5f646f47cc6f2ac4539596
 Additional Information 3: 8d87
 Additional Information 4: 8d878e87377747f9399d3df9a74bdbff

Read our privacy statement online:
 http://go.microsoft.com/fwlink/?linkid=280262

If the online privacy statement is not available, please read our privacy statement offline:
 C:\Windows\system32\en-US\erofflps.txt


В чем причина?
Вид графика = Свечи.
 
Как при таком виде графика, в коде задавать значения индикатора в виде HLOC?
Не найден указанный модуль.
 
Написал собственную библиотеку для работы с Quik через lua. На компьютере, где велась разработка (Win7), все работает отлично. На другом компьютере с тем же квиком (WinServer 2012R2) получаю ошибку "error loading module 'MyDll' from file '.\MyDll.dll':The specified module could not be found." Проект собирал с конфигурацией "Release", "Win32", "Runtime libriry = Multi-threaded". Прошелся программой Dependency Walker - почти все зависимости есть (http://take.ms/6Knry). Тот же release на компьютере, где писалась библиотека работает на ура. На сервере устанавливал vcredist_x64.exe и vcredist_x86.exe. Что еще я не сделал или сделал не так?
Определить очередь моей заявки в стакане в любой момент времени., Определение очереди.
 
Добрый день.

Вопрос в названии темы. При постановке заявки я могу посчитать какое количество контрактов до меня по этой же цене. Но стакан ведь "живой", данные меняются, кто-то снимает заявки, кто-то ставит. Как в любой момент времени посчитать сколько контрактов передо мной?
Не понятные флаги в OnOrder., При отправке маркетной заявки по Фьючерсу Si, поле флаг равно 280.
 
Как "280" разбивать на флаги, если максимум, что мы должны получить - это 255? Иногда проскальзывает "284". Проблема только с маркетными заявками отправляемыми программно. Код отправки:


Код
--Send limit or market order
function SendOrder(operation, price, quantity, type_order, comment)
   
   -- Если это маркет заявка и цена не указана, то подставим цену в зависимости от типа заявки
   if type_order == "M"
      and price == 0 then
      
      if operation == "B" then         
         price = tonumber(getParamEx(params.p_classcode, params.p_seccode, "pricemax").param_value)
      elseif operation == "S" then
         price = tonumber(getParamEx(params.p_classcode, params.p_seccode, "pricemin").param_value)
      end
      
   end
   
   transaction = {
      ["CLASSCODE"] = params.p_classcode,
      ["ACTION"]="NEW_ORDER",
      ["ACCOUNT"]=params.account,
      ["OPERATION"] = operation,
      ["SECCODE"] = params.p_seccode,
      ["PRICE"] = tostring(round(price)),
      ["QUANTITY"] = tostring(quantity),
      ["TYPE"] = tostring(type_order),
      ["Условие исполнения"]=tostring("Поставить в очередь"),
      ["Переносить заявку"] = tostring("Да"),
      ["Дата экспирации"] = os.date("%Y%m%d", os.time() + 60 * 60 * 24),
   }
   
   --Check connection
   if isConnected == 0 then
      WriteLog("SendOrder", "Try to send limit in offline mode")
   else
      transaction.TRANS_ID = tostring(trans_id)
      transaction.CLIENT_CODE = comment
      res = sendTransaction(transaction)
   end
   
   if string.len(res) ~= 0 then
      message(res)
   end
   
end
"Нет прав на постановку стоп-заявки"., Ошибка при выставлении стоп-заявки.
 
Код отправки:

Код
transaction = {
      ["CLASSCODE"] = class_code,
      ["SECCODE"] = sec_code,
      ["ACTION"] = "NEW_STOP_ORDER",
      ["ACCOUNT"] = account,
      ["OPERATION"] = operation,      
      ["QUANTITY"] = tostring(quantity),
      ["STOPPRICE2"] = tostring(price)
      ["PRICE"] = tostring(price2),      
      ["STOP_ORDER_KIND"] = "SIMPLE_STOP_ORDER",
      ["EXPIRY_DATE"] = "GTC",
   }
   
   --Check connection
   if isConnected == 0 then
      message("Try to send limit in offline mode", 1)
   else
      transaction.TRANS_ID = tostring(trans_id)
      transaction.CLIENT_CODE = comment
      res = sendTransaction(transaction)
      
      if string.len(res) ~= 0 then
         -- Ошибка отправки
         message("send message = " .. tostring(res), 1)
      end
   end
    
После отправки небольшая пауза, а далее получаю сообщение:

"Нет прав на постановку стоп-заявки".
Квик: 7.0.1.5
Инструмент: GAZP
Не подключается iuplua, При попытке подключить iuplua получаю ошибку библиотеки iuplua.dll
 
В коде всего одна строчка

Код
require"iuplua"
 
Все. При запуске скрипта в Квике получаю ошибку:

Код
error loading module 'iuplua' from file 'C:\Program Files (x86)\Lua\5.1\clibs\iuplua51.dll':
   C:\Program Files (x86)\Lua\5.1\clibs\iuplua51.dll:1: '=' expected near 'ђ'
 
Версия квика: 6.17.1.17
Версия lua: 5.1

Пробовал менять кодировки файла - без результата. Переустанавливал Lua - без результата. При этом, например:

Код
require"bit"
 
Работает корректно.
Обращение к индикатору с разными параметрами.
 
Здравсвтуйте.
Вопрос по индикатору EMA, описанному в примере по ссылке. Все что описано работает. Но в моей задаче, я вычисляю среднюю EMA по нескольким периодам. Пример:
averEMA = (EMA(index, 3) + EMA(index, 4) + EMA(index, 5)) / 3.
Так как это функция, при расчете EMA с периодом 4 я затираю значение рассчитаной ЕМА3, на этой же итерации. А оно будет нужно на следующем баре. Код индикатора:
Код
 Settings= {
   Name = "averEMA",
   startPeriod   = 3,
   endPeriod   = 6,
   line =
   {
      {
         Name      = "AverEMA",
         Color      = RGB(90, 110, 200),
         Type      = TYPE_LINE,
         Width      = 1
      }
   }
}
   
function Init()
   return 1
end

function OnCalculate(index)   
   local s
   
   if index == 1 then
      EMA   = _EMA()
      
      line   = {}
   end

   s = 0
   for i = Settings.startPeriod, Settings.endPeriod do
      local k
      k = EMA(index, i)

      s = s + k
   end
      
   if index <= Settings.endPeriod then
      
      line[index] = 0   
      
   else         
      line[index] = s / (Settings.startPeriod - (Settings.endPeriod - 1))
   end
   
   message("---- message 1 -----")
   message("EMA3 = "..tostring(EMA(index, 3)))
   --message("---- message 2 -----")
   --message("EMA3 = "..tostring(EMA(index, 3))..", EMA4 = "..tostring(EMA(index, 4)))
   
   return line[index]

end
function _MA()
   local cache={}
   
   return function(iIndex, iPeriod)
      local sum      = 0
      local p         = 0
      local period   = iPeriod      
      local index      = iIndex
      local result   = 0
      local str      = ""
      
      if index == 1 then
         cache = {}
      end
      
      if index < period then
         cache[index] = 0
         return 0
      end
      
      for i = index - period + 1, index do
         sum = sum + C(i)
      end
      
      result = sum / period
      
      cache[index] = result
      
      return result
      
   end
end 

function _EMA()
   local cache={}
   local MA = _MA()
   
   return function(ind, _p, kk)
      local n = 0
      local p = 0
      local period = _p
      local index = ind
      local k = kk or 2/(period + 1)      

      if index == 1 then
         cache = {}
      end
      
      if index <= period then
         cache[index] = 0
         
         return 0
      end
      
      if cache[index - 1] == 0
         or cache[index - 1] == nil then
         
         p = MA(index - 1, period)
      else
         p = cache[index - 1]
      end
      
      n = C(index) * k + (1-k)*p
      
      cache[index] = n
      
      return n
   end
end 
Результаты теста можно увидеть на скринах. В коде изменяется только строка вывода сообщения. Первый вариант: Одна строка содержит только ЕМА3 и она выводится корректно. И второй вариант, когда выводится результата вычисления ЕМА3 и ЕМА4. И в этом случае ЕМА3 корректна только на первой итерации, дальше она считается не верно. Как такого избежать?
Страницы: 1
Наверх