Сергей Радченко (Автор тем)

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

Страницы: 1
Удаление транзакции, удаление транзакции без ID
 
Подскажите как удалить транзакцию без ID. При создании пользователем заявок руками они приходят без ID. Вопрос как их удалить?
Если при попытке выставь ноль и пустоту выводит:
Error del.Trans:  Неправильно указан идентификатор транзакции: "0"
или Error del.Trans:  Не указан идентификатор транзакции

код


Код
local trans_params = {
         CLIENT_CODE = Account,
         CLASSCODE = Class_Code,
         SECCODE = Sec_Code,
         ACCOUNT = Account,
         TRANS_ID = "" ,  -- что сюда подпихнуть
         ORDER_KEY=tostring(ord_num),
         ACTION = "KILL_ORDER"
      }
ТТП Таблицы текущих параметров, где взять параметры
 
нужно полный список параметров: LCLOSEPRICE, LAST, OPENPERIODPRICE и т.д.
не могу получить CLOSING_AUCTION_PRICE
getParamEx(Class_Code, Sec_Code, "CLOSING_AUCTION_PRICE").param_image  возвращает пустое значение
графический интерфейс, библиотека для создания формы ввода
 
День добрый. Подскажите какая сейчас актуальная и без багов библиотека для реализации графического интерфейса(формы) для ввода данных пользователем в рамках Quik Lua?
Так же интересует библиотека для считывания кодов нажатых клавиш.
getDataSourceInfo(), запрос таймфрейма и кода инструмента
 
подскажите как получить таймфрем индикатора?
пробывал:
getDataSourceInfo("interval")  
getDataSourceInfo(interval)
getDataSourceInfo().interval

tab=getDataSourceInfo()
tab["interval"]

ничего не работает
получение параметров индикатора, обращение к line
 
есть код индикатора



Код
Settings= 
{ 
  Name = "AAAA", 
  Smooth=10,   
  line =  
  { 
    { 
      Name = "Hi", 
      Color = RGB(255, 0, 0), 
      Type = TYPE_LINE, 
      Width = 2
   }
  }
   
} 

function Init() 
  return 1
end 



function write_name(p)
   file=io.output("d:\\name1.ini")  -- getScriptPath()..
   d=file:write(p)
   file:close()
end


function OnCalculate(index) 
local ur=0
   local param=tostring(Settings.line.Name)
   if tonumber(T(index).day)==15 then
      write_name(param)
   end   
return ur
end

не могу получить имя линии.
получение имени индикатора Settings.Name вернет  "AAAA"
по идеии Settings это массив и должно быть Settings["line"][1]["Name"] но это не работает возвращает nil
Господа, подскажите как получить название линии?
утро, что происходит утром? Что обнуляется и возвращает nil
 
У меня возникает проблема по утрам. При запущенном скрипте. Если скрипт запустить потом или перезапустить скрипт, устроить дисконект, выключить Квик  никаких проблем нет. Только утро и все!
Функция create(time_can) выполняется для всех свечей графика, а должна выполняться только для новой свечи.
Код
is_run = true 
Class_Code = "SPBFUT"  
Sec_Code="RIM5"
TF=INTERVAL_M30

old_can=20150422100     -- время последней обработанной свечи

function main()
   read_param_file()  -- считываем время свечи из файла
   
   ds = CreateDataSource(Class_Code, Sec_Code, TF)
   sleep(200)
      
   while is_run do
      sleep(1000)
      if isConnected()==1 and getInfoParam("SERVERTIME")~=nil then
         sleep(1000)      
         local n_last_candle=ds:Size()
         local t_last_candle=tonumber(ds:T(n_last_candle).year..Chisla(ds:T(n_last_candle).month)..Chisla(ds:T(n_last_candle).day)..Chisla(ds:T(n_last_candle).hour)..Chisla(ds:T(n_last_candle).min))
         if tonumber(t_last_candle)~=tonumber(old_can) then
            local p_new_candles=new_candle(n_last_candle)  -- получение новых свечей
            for i=n_last_candle-p_new_candles, n_last_candle do
               time_can=tostring(ds:T(i).year)..Chisla(ds:T(i).month)..Chisla(ds:T(i).day)..Chisla(ds:T(i).hour)..Chisla(ds:T(i).min)
               create(time_can)  -- действия над свечами
            end
            old_can=t_last_candle
            save_time(old_can)  --сохранение в файл времени последней свечи
         end
      end
   end
   ds:Close()
end

-- функция возвращает кол-во новых свечей от текущей
function new_candle(n_last_candle)
   local p_new_candles=0
   
   for i=0,n_last_candle-1 do
      if tonumber(old_can)<tonumber(tostring(ds:T(n_last_candle-i).year)..Chisla(ds:T(n_last_candle-i).month)..Chisla(ds:T(n_last_candle-i).day)..Chisla(ds:T(n_last_candle-i).hour)..Chisla(ds:T(n_last_candle-i).min))  then
         p_new_candles=i
      else
         break
      end
   end
   
return p_new_candles
end



function OnStop(stop_flag) 
   is_run=false
   stop_flag=1
end  
 
блокирование оператора, премодерация действий пользователя скриптом
 
можно ли реализовать премодерацию действий пользователя скриптом? Я имею ввиду: не давать пользователю проводить сделки, устроить дисконект и т.д.
CreateDataSource, перебор большого кол-ва источников данных
 
суть задачи состоит в том ,что нужно во множестве инструментов взять свечку(данные) из прошлого и обработать в цикле все инструменты беря по одной свече. И так нужно прошерстить всю историю.
Сейчас реализовано это так:

function main()
while is_run do
sleep(10000)   -- по сути это блок проверки на получение новых свечек через каждые 10сек
for i=1, кол-во новых свечек (глубина просмотра инструментов) do
for j=1, #mas do   -- mas массив инстркментов
f(класс, инст.mas[j] , время итой свечи, INTERVAL_H1)
end
end
end
end

function f(class, sec_code, time_b, INTERVAL_H1)
local close_b,oi=0,0
local ds_price=CreateDataSource(class, sec_code, INTERVAL_H1)
--ds_opt_price:SetEmptyCallback()
sleep(100)
local ds_oi=CreateDataSource(class, sec_code, INTERVAL_H1, "NUMCONTRACTS")
-- ds_oi:SetEmptyCallback()
sleep(100)

local time_candle=tostring(ds_price:T(1).year)..Chisla(ds_price:T(1).month)..Chisla(ds_price:T(1).day)..Chisla(ds_price:T(1).hour)..Chisla(ds_price:T(1).min).."00"

if tonumber(time_candle)>tonumber(time_b) then
-- свечей нет

else
for i=1 , tonumber(ds_price:Size()) do
time_candle=tostring(ds_price:T(i).year)..Chisla(ds_price:T(i).month)..Chisla(ds_price:T(i).day)..Chisla(ds_price:T(i).hour)..Chisla(ds_price:T(i).min).."00"
if tonumber(time_b)>=tonumber(time_candle) then
close_b=ds_price:C(i)
else
break
end
end

for i=1 , ds_oi:Size() do
time_candle=tostring(ds_oi:T(i).year)..Chisla(ds_oi:T(i).month)..Chisla(ds_oi:T(i).day)..Chisla(ds_oi:T(i).hour)..Chisla(ds_oi:T(i).min).."00"
if tonumber(time_b)>=tonumber(time_candle) then
oi=ds_oi:C(i)
else
break
end
end
end
ds_opt_price:Close()
ds_opt_oi:Close()

return close_b,oi
end


В массиве mas около 200 интсрументов и проходит около 10 свечек по всем инст. и через какое-то время Quik перестает обновлять котировки, стакан. Возникает ощущение ,что он в дисконнекте , но пишет ,что коннект есть.
Вопрос как получить предыдущие данные по большому кол-ву инст. и не положить Quik?
CreateDataSource, не грузятся данные при формир. через CreateDataSource
 
не грузятся данные при формировании таблицы свечей через CreateDataSource.


function main()
     -- если сюда воткнуть sleep(100) то выведет
     Class_Code = "SPBOPT"
Sec_Code="RI75000BP5"
ds=CreateDataSource(Class_Code, Sec_Code, INTERVAL_M15)
t=getParamEx(Class_Code, Sec_Code, "LONGNAME").param_image
local s=0
s=ds:Size()
message("ds:Size()="..s.." name "..t,1)

ds:Close()


while is_run do
sleep(1000)

end
end

ответом будет  ds:Size()=0 name RTS-6.15M150415PA 75000

если воткнуть sleep(100) в самом начале то выведет    ds:Size()=949 name RTS-6.15M150415PA 75000

Вопрос. Как лучше получать данные если иструментов для работы в цикле много, и обращения частые? У меня задача тащить по одной свечке из множества инст. и хотелось бы получать правильные данные.
Может какую проверку написать для проверки правильности загруженных данных?
CreateDataSource, какое правильное расположение функции CreateDataSource?
 
где правильно подписываться на источник данных при использовании одного инструмента и одного ТФ? Делать это в каждой функции и закрывать в конце или
разместить подписку в
function OnConnected()
ds = CreateDataSource(Class_Code, Sec_Code, INTERVAL_M1)
а закрыть подписку
function OnStop(stop_flag)
ds:Close()
Страницы: 1
Наверх