Ошибка, attempt to compare two table values

Страницы: 1
RSS
Ошибка, attempt to compare two table values
 
Здравствуйте помогите исправить ошибку, я учу язык qlua и встал в тупик с этой ошибкой
Код
C:\Users\KILLER\Desktop\robot_intelect\param.lua:20: attempt to compare two table values  --Это ошибка в quik


Сам код 


tekPrice=getParamEx(KodClass,InstrumentKod,"LAST")
priceMax = getParamEx(KodClass,InstrumentKod,"PRICEMAX")
priceMin= getParamEx(KodClass,InstrumentKod,"PRICEMIN")
 -- tekMarzha= 





function trade()




if(tekPrice <= priceMin )then   --20 строка error


transaction = {
ACCOUNT=TorShet,
CLIENT_CODE=KodClient,
TYPE="M",
TRANS_ID="7",
CLASSCODE=KodClass,
SECCODE=InstrumentKod,
ACTION="NEW_ORDER",
OPERATION="B",
PRICE=tostring(tekPrice),
QUANTITY=tostring(LotUp)
}

transaction.TRANS_ID = "12345"
sendTransaction(transaction)

elseif(tekPrice >= priceMax)then
transaction = {
ACCOUNT=TorShet,
CLIENT_CODE=KodClient,
TYPE="M",
TRANS_ID="8",
CLASSCODE=KodClass,
SECCODE=InstrumentKod,
ACTION="NEW_ORDER",
OPERATION="S",
PRICE=tostring(tekPrice),
QUANTITY=tostring(LotUp)
}

transaction.TRANS_ID = "12345"
sendTransaction(transaction)


end

end
 
Добрый день.
Функция getParamEx() возвращает таблицу Lua. В диагностике об ошибке явно сказано, 'попробуйте сравнить два значения таблицы'. Т.е. Вам нужно сделать, например, так:
Код
priceMax = getParamEx(KodClass,InstrumentKod,"PRICEMAX").param_value
priceMin= getParamEx(KodClass,InstrumentKod,"PRICEMIN").param_value

function trade()
  if(tekPrice <= priceMin) then   --20 строка error
  ...
Почитайте внимательно описание используемых Вами функций QLua в справке.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Цитата
Nikolay Pavlov написал:
Добрый день.
Функция getParamEx() возвращает таблицу Lua. В диагностике об ошибке явно сказано, 'попробуйте сравнить два значения таблицы'. Т.е. Вам нужно сделать, например, так:
Код
  priceMax  =   getParamEx (KodClass,InstrumentKod,"PRICEMAX").param_value
priceMin =   getParamEx (KodClass,InstrumentKod,"PRICEMIN").param_value

 function   trade ()
   if (tekPrice  <  =  priceMin)  then     --20 строка error 
   .. .
  
Почитайте внимательно описание используемых Вами функций QLua в справке.



сделал так теперь выдает другую ошибку C:\Users\KILLER\Desktop\robot_intelect\param.lua:25: attempt to compare nil with number
Код
tekPrice=getParamEx(KodClass,InstrumentKod,"LAST").param_value
priceMax = getParamEx(KodClass,InstrumentKod,"PRICEMAX").param_value
priceMin= getParamEx(KodClass,InstrumentKod,"PRICEMIN").param_value
 -- tekMarzha= 





function trade()


if(tonumber(tekPrice)==nil or tonumber(priceMin) == nil or tonumber(priceMax))then

SetCell(TableID,2,4,"Не удалось получить цены с графика, нет соеденения с сервером!")
WriteToEndOfFile(LogFile,"Не удалось получить цены с графика, нет соеденения с сервером!")


end


if(tonumber(tekPrice) <= tonumber(priceMin) )then   --20 строка error


transaction = {
ACCOUNT=TorShet,
CLIENT_CODE=KodClient,
TYPE="M",
TRANS_ID="7",
CLASSCODE=KodClass,
SECCODE=InstrumentKod,
ACTION="NEW_ORDER",
OPERATION="B",
PRICE=tostring(tekPrice),
QUANTITY=tostring(LotUp)
}

transaction.TRANS_ID = "12345"
sendTransaction(transaction)

elseif(tonumber(tekPrice) >= tonumber(priceMax))then
transaction = {
ACCOUNT=TorShet,
CLIENT_CODE=KodClient,
TYPE="M",
TRANS_ID="8",
CLASSCODE=KodClass,
SECCODE=InstrumentKod,
ACTION="NEW_ORDER",
OPERATION="S",
PRICE=tostring(tekPrice),
QUANTITY=tostring(LotUp)
}

transaction.TRANS_ID = "12345"
sendTransaction(transaction)


end

end

 
Может быть я не правильно сделал, мне нужно получить целое число в виде цены, а не таблицу, что бы его можно было использовать в конструкции if()then
 
Из кода сейчас не совсем понятно, какая строка 25. Вот здесь похоже не дописали, отсутствует сравнение с nil в последнем выражении:
Код
if(tonumber(tekPrice)==nil or tonumber(priceMin) == nil or tonumber(priceMax))then
Так же для информативности выведите изначальные значения, полученные в:
Код
tekPrice=getParamEx(KodClass,InstrumentKod,"LAST").param_value
priceMax = getParamEx(KodClass,InstrumentKod,"PRICEMAX").param_value
priceMin= getParamEx(KodClass,InstrumentKod,"PRICEMIN").param_value
возможно функция не возвращает значения, т.к. были указаны некорректный код класса или инструмента, также можно смотреть на поле getParamEx(...).result
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Цитата
Nikolay Pavlov написал:
возможно функция не возвращает значения, т.к. были указаны некорректный код класса или инструмента, также можно смотреть на поле getParamEx(...).result

или торги еще не начались
 
Есть еще вопрос, существует ли параметр что бы считать минимум и максимум пред идущей свечи на графике
 
Цитата
Алексей написал:
Есть еще вопрос, существует ли параметр что бы считать минимум и максимум пред идущей свечи на графике

для доступа к свечкам можно использовать функцию getCandlesByIndex
Что касается минимумов и максимумов, то чтобы их найти нужно с чем-то сравнивать, не совсем понятно, с чем нужно сравнивать значения
 
C:\Users\KILLER\Desktop\robot_intelect\param.lua:25: attempt to compare nil with number

ошибку теперь такую выдает
Код
tekPrice=getParamEx(KodClass,InstrumentKod,"LAST").param_value
priceMax = getParamEx(KodClass,InstrumentKod,"PRICEMAX").param_value
priceMin= getParamEx(KodClass,InstrumentKod,"PRICEMIN").param_value
 -- tekMarzha= 





function trade()


if(tonumber(tekPrice)==nil or tonumber(priceMin) == nil or tonumber(priceMax)==nil)then

SetCell(TableID,2,4,"Не удалось получить цены с графика, нет соеденения с сервером!")
WriteToEndOfFile(LogFile,"Не удалось получить цены с графика, нет соеденения с сервером!")


end


if(tonumber(tekPrice) < tonumber(priceMin) )then    --  25 строка


transaction = {
ACCOUNT=TorShet,
CLIENT_CODE=KodClient,
TYPE="M",
TRANS_ID="7",
CLASSCODE=KodClass,
SECCODE=InstrumentKod,
ACTION="NEW_ORDER",
OPERATION="B",
PRICE=tostring(tekPrice),
QUANTITY=tostring(LotUp)
}

transaction.TRANS_ID = "12345"
sendTransaction(transaction)

elseif(tonumber(tekPrice) > tonumber(priceMax))then
transaction = {
ACCOUNT=TorShet,
CLIENT_CODE=KodClient,
TYPE="M",
TRANS_ID="8",
CLASSCODE=KodClass,
SECCODE=InstrumentKod,
ACTION="NEW_ORDER",
OPERATION="S",
PRICE=tostring(tekPrice),
QUANTITY=tostring(LotUp)
}

transaction.TRANS_ID = "12345"
sendTransaction(transaction)


end

end
 
Цитата
Алексей написал:
C:\Users\KILLER\Desktop\robot_intelect\param.lua:25: attempt to compare nil with number

ошибку теперь такую выдает
Код
  tekPrice =  getParamEx (KodClass,InstrumentKod,"LAST").param_value
priceMax  =   getParamEx (KodClass,InstrumentKod,"PRICEMAX").param_value
priceMin =   getParamEx (KodClass,InstrumentKod,"PRICEMIN").param_value
  -- tekMarzha=  





 function   trade ()


 if (tonumber(tekPrice) =  =  nil   or  tonumber(priceMin)  =  =   nil   or  tonumber(priceMax) =  =  nil ) then 

 SetCell (TableID, 2 , 4 ,"Не удалось получить цены с графика, нет соеденения с сервером ! ")
WriteToEndOfFile(LogFile,"Не удалось получить цены с графика, нет соеденения с сервером ! ")


 end 


 if (tonumber(tekPrice)  <  tonumber(priceMin) ) then      --  25 строка 


transaction  =  {
ACCOUNT = TorShet,
CLIENT_CODE = KodClient,
TYPE =  "M" ,
TRANS_ID =  "7" ,
CLASSCODE = KodClass,
SECCODE = InstrumentKod,
ACTION =  "NEW_ORDER" ,
OPERATION =  "B" ,
PRICE = tostring(tekPrice),
QUANTITY = tostring(LotUp)
}

transaction.TRANS_ID  =   "12345" 
 sendTransaction (transaction)

 elseif (tonumber(tekPrice)  >  tonumber(priceMax)) then 
transaction  =  {
ACCOUNT = TorShet,
CLIENT_CODE = KodClient,
TYPE =  "M" ,
TRANS_ID =  "8" ,
CLASSCODE = KodClass,
SECCODE = InstrumentKod,
ACTION =  "NEW_ORDER" ,
OPERATION =  "S" ,
PRICE = tostring(tekPrice),
QUANTITY = tostring(LotUp)
}

transaction.TRANS_ID  =   "12345" 
 sendTransaction (transaction)


 end 

 end 
  
Рынок сейчас работает,номер счета правильный и код класса тоже
 
Алексей,
Для того чтобы понять причину нужен весь код целиком, а не только часть
 
Выведите перед проблемным местом значения tonumber(tekPrice)  и  tonumber(priceMin), диагностика явно говорит, что одно из значений равно nil, т.е. Вы пытаетесь сравнить nil с числом и получаете ошибку. Напишите например так, чтобы точно определить с какими значениями работает оператор if:
Код
message(tostring(tonumber(tekPrice)))
message(tostring(tonumber(priceMin)))

if (tonumber(tekPrice)  <  tonumber(priceMin) ) then      --  25 строка 
    ....
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Цитата
Nikolay Pavlov написал:
Выведите перед проблемным местом значения tonumber(tekPrice)  и  tonumber(priceMin), диагностика явно говорит, что одно из значений равно nil, т.е. Вы пытаетесь сравнить nil с числом и получаете ошибку. Напишите например так, чтобы точно определить с какими значениями работает оператор if:
Код
   message (tostring(tonumber(tekPrice)))
 message (tostring(tonumber(priceMin)))

 if  (tonumber(tekPrice)   <   tonumber(priceMin) )  then        --  25 строка  
     ..  .. 
  
Вы правы, Не получает цену последней сделки, возвращает nil, только не понятно почему

tekPrice=getParamEx(KodClass,InstrumentKod,"LAST").param_value
 
Нашел ошибку, исправил, спасибо за помощь, есть еще вопрос каким параметром можно получить "текущая чистая позиция" и вариационная маржа, и есть ли команда для закрытия всех сделок?
 
Цитата
Алексей написал:
Нашел ошибку, исправил, спасибо за помощь, есть еще вопрос каким параметром можно получить "текущая чистая позиция" и вариационная маржа, и есть ли команда для закрытия всех сделок?
Для получения Текущей чистой позиции и Вариационной маржи на срочном рынке используйте функцию getFuturesHolding() (формат использования смотрите в официальной справке). Что имеется ввиду под закрытием всех сделок, закрытие позиции?
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Цитата
Алексей написал:
Нашел ошибку, исправил, спасибо за помощь, есть еще вопрос каким параметром можно получить "текущая чистая позиция" и вариационная маржа, и есть ли команда для закрытия всех сделок?
текущая чистая позиция из позиции по клиенским счетам на срочном рынке
 
Цитата
Nikolay Pavlov написал:
Цитата
Алексей   написал:
Нашел ошибку, исправил, спасибо за помощь, есть еще вопрос каким параметром можно получить "текущая чистая позиция" и вариационная маржа, и есть ли команда для закрытия всех сделок?
Для получения  Текущей чистой позиции  и  Вариационной маржи  на срочном рынке используйте функцию getFuturesHolding() (формат использования смотрите в официальной справке). Что имеется ввиду под закрытием всех сделок, закрытие позиции?
да, как закрыть все позиции
 
Цитата
Алексей написал:
да, как закрыть все позиции
Насколько мне известно, отдельной транзакции по закрытию позиции срочный рынок FORTS не предоставляет (если конечно имеется ввиду рынок FORTS). Но зная свою длинную/короткую позицию легко сформировать транзакцию на продажу/покупку по рыночной цене, что приведет к закрытию позиции.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Помогите пожалуйста не могу разобраться, в гугле тоже нечего путного найти не могу

как мне получить текущюю чистую позицию , сделал все по официальной документации, но он не получает значения, что я делаю не так?
Код
Lot= getFuturesHolding(firmid,TorShet,InstrumentKod,0).totalnet
 
Цитата
Алексей написал:
Помогите пожалуйста не могу разобраться, в гугле тоже нечего путного найти не могу

как мне получить текущюю чистую позицию , сделал все по официальной документации, но он не получает значения, что я делаю не так?
Код
  Lot =   getFuturesHolding (firmid,TorShet,InstrumentKod, 0 ).totalnet
  
Добрый день.

В QUIK в таблице позиций значение отображается?
Что Вам скрипт возвращает? Ноль? Ошибку? Можно поподробнее, а также выложите полный скрипт.  
 
Цитата
Egor Zaytsev написал:
Цитата
Алексей   написал:
Помогите пожалуйста не могу разобраться, в гугле тоже нечего путного найти не могу

как мне получить текущюю чистую позицию , сделал все по официальной документации, но он не получает значения, что я делаю не так?
Код
    Lot  =     getFuturesHolding  (firmid,TorShet,InstrumentKod,  0  ).totalnet
    
Добрый день.

В QUIK в таблице позиций значение отображается?
Что Вам скрипт возвращает? Ноль? Ошибку? Можно поподробнее, а также выложите полный скрипт.
нечего не происходит,  при этом скрипт работает ниже код
Код
dofile(getScriptPath().."\\Options.lua")

id_trans = 777
trans_id = id_trans + 1


function obnov()
priceMax = getParamEx(KodClass,InstrumentKod,"PRICEMAX").param_value
tekPrice = getParamEx(KodClass,InstrumentKod,"LAST").param_value
priceMin= getParamEx(KodClass,InstrumentKod,"PRICEMIN").param_value
--Lot=  getFuturesHolding(firmid,TorShet,InstrumentKod,0).totalnet
 -- tekMarzha= 
end

function test()



local Transaction={

      
    ['TRANS_ID']  = tostring(trans_id),   -- Номер транзакции
    ['ACCOUNT']   = TorShet,              -- Код счета
    ['CLASSCODE'] = KodClass,           -- Код класса
    ['SECCODE']   = InstrumentKod,             -- Код инструмента
    ['ACTION']    = 'NEW_ORDER',          -- Тип транзакции ('NEW_ORDER' - новая заявка)
    ['OPERATION'] = 'B',                  -- Операция ('B' - buy, или 'S' - sell)
    ['TYPE']      = 'L',                  -- Тип ('L' - лимитированная, 'M' - рыночная)
    ['QUANTITY']  = '1',                  -- Количество
    ['PRICE']     = tostring(tekPrice)   -- Цена
}


local Res = sendTransaction(Transaction)

end


-- function trade()


-- if(tonumber(tekPrice)==nil or tonumber(priceMin) == nil or tonumber(priceMax)==nil)then

-- SetCell(TableID,2,4,"Не удалось получить цены с графика, нет соеденения с сервером!")
-- WriteToEndOfFile(LogFile,"Не удалось получить цены с графика, нет соеденения с сервером!")


-- end


-- if(tonumber(tekPrice) < tonumber(priceMin) )then    --  25 строка


-- transaction = {
-- ACCOUNT=TorShet,
-- CLIENT_CODE=KodClient,
-- TYPE="M",
-- TRANS_ID="7",
-- CLASSCODE=KodClass,
-- SECCODE=InstrumentKod,
-- ACTION="NEW_ORDER",
-- OPERATION="B",
-- PRICE=tostring(tekPrice),
-- QUANTITY=tostring(LotUp)
-- }

-- transaction.TRANS_ID = "12345"
-- sendTransaction(transaction)

-- elseif(tonumber(tekPrice) > tonumber(priceMax))then
-- transaction = {
-- ACCOUNT=TorShet,
-- CLIENT_CODE=KodClient,
-- TYPE="M",
-- TRANS_ID="8",
-- CLASSCODE=KodClass,
-- SECCODE=InstrumentKod,
-- ACTION="NEW_ORDER",
-- OPERATION="S",
-- PRICE=tostring(tekPrice),
-- QUANTITY=tostring(LotUp)
-- }

-- transaction.TRANS_ID = "12345"
-- sendTransaction(transaction)


-- end

-- end




function PutDataToTableInit()
Clear(TableID)
SetWindowCaption(TableID,"Робот ИНТЕЛЕКТ! Автор: Алексей Егоров.")
SetWindowPos(TableID,100,200,888,100)  -- Крдинаты 100,200,ширина и высота  888,100
InsertRow(TableID,1)  -- вставка строки в таблицу
InsertRow(TableID,2)
InsertRow(TableID,3)
SetColor(TableID,2,QTABLE_NO_INDEX,RGB(255,255,0),RGB(0,0,0),RGB(0,220,220),RGB(0,0,0))
SetColor(TableID,3,QTABLE_NO_INDEX,RGB(255,255,0),RGB(0,0,0),RGB(0,220,220),RGB(0,0,0))
end

function WriteToEndOfFile(sFile,sDataString)   -- запись лог файла

local serverTime= GetInfoParam("SERVERTIME")
local serverDate= GetInfoParam("TRADEDATE")
sDataString = serverDate..":"..serverTime..":"..sDataString.."\n"
local f = io.open(sFile,"r+")
if(f==nil)then
f = io.open(sFile,"w")
end

if(f~=nil)then
f:seek("end",0)
f:write(sDataString)
f:flush()
f:close()
end

end

function CreateTable()   --создание таблицы
TableID = AllocTable()      --иницилизация таблицы(создание)
AddColumn(TableID,1,"ВРЕМЯ СЕРВЕРА",true, QTABLE_STRING_TYPE,20)
AddColumn(TableID,2,"КОД ИНСТРУМЕНТА",true, QTABLE_STRING_TYPE,20)           -- Добавление колонок в таблицу
AddColumn(TableID,3,"ЛОТ-КОНТРАКТЫ",true, QTABLE_STRING_TYPE,20)
AddColumn(TableID,4,"КОМЕНТАРИИ",true, QTABLE_STRING_TYPE,60)
AddColumn(TableID,5,"КОД КЛАССА",true, QTABLE_STRING_TYPE,20)
CreateWindow(TableID)
PutDataToTableInit(TableID)
SetColor(TableID,1,QTABLE_NO_INDEX,RGB(255,255,255),RGB(0,0,0),RGB(0,220,220),RGB(255,0,255))

end

function Time()

ServerTime= GetInfoParam("SERVERTIME")
if(ServerTime==nil or ServerTime=="")then
Errortime="Время не полученно, подключитесь к серверу!"

WriteToEndOfFile(LogFile,"Время не полученно, подключитесь к серверу!")
else

Errortime=""

end

SetCell(TableID,1,1,ServerTime)    
SetCell(TableID,1,4,Errortime)         -- запись данных в строку 1 и колонку 4

sleep(1000)
end

function DataTable()   --Данные в таблице





SetCell(TableID,1,2,InstrumentKod)
SetCell(TableID,1,5,KodClass)
SetCell(TableID,1,3,Lot)
SetCell(TableID,3,1,"Где сработает заявка")
SetCell(TableID,3,2,priceMin)
SetCell(TableID,3,3,priceMax)
SetCell(TableID,3,4,"текущая цена ==>")
SetCell(TableID,3,5,tekPrice)
sleep(100)
 
 

if(IsWindowClosed(TableID))then
CreateWindow(TableID)
PutDataToTableInit()
SetColor(TableID,1,QTABLE_NO_INDEX,RGB(0,230,0),RGB(0,0,0),RGB(0,220,220),RGB(0,0,0))






end


end
 
Цитата
Алексей написал:
Цитата
Egor Zaytsev   написал:
Цитата
Алексей   написал:
Помогите пожалуйста не могу разобраться, в гугле тоже нечего путного найти не могу

как мне получить текущюю чистую позицию , сделал все по официальной документации, но он не получает значения, что я делаю не так?
Код
      Lot   =       getFuturesHolding   (firmid,TorShet,InstrumentKod,   0   ).totalnet
      
Добрый день.

В QUIK в таблице позиций значение отображается?
Что Вам скрипт возвращает? Ноль? Ошибку? Можно поподробнее, а также выложите полный скрипт.
нечего не происходит,  при этом скрипт работает ниже код
Код
  dofile( getScriptPath () .. "\\Options.lua")

id_trans  =   777 
trans_id  =  id_trans  +   1 


 function   obnov ()
priceMax  =   getParamEx (KodClass,InstrumentKod,"PRICEMAX").param_value
tekPrice  =   getParamEx (KodClass,InstrumentKod,"LAST").param_value
priceMin =   getParamEx (KodClass,InstrumentKod,"PRICEMIN").param_value
 --Lot=  getFuturesHolding(firmid,TorShet,InstrumentKod,0).totalnet 
  -- tekMarzha=  
 end 

 function   test ()



 local  Transaction = {

      
    [ 'TRANS_ID' ]   =  tostring(trans_id),    -- Номер транзакции 
    [ 'ACCOUNT' ]    =  TorShet,               -- Код счета 
    [ 'CLASSCODE' ]  =  KodClass,            -- Код класса 
    [ 'SECCODE' ]    =  InstrumentKod,              -- Код инструмента 
    [ 'ACTION' ]     =   'NEW_ORDER' ,           -- Тип транзакции ('NEW_ORDER' - новая заявка) 
    [ 'OPERATION' ]  =   'B' ,                   -- Операция ('B' - buy, или 'S' - sell) 
    [ 'TYPE' ]       =   'L' ,                   -- Тип ('L' - лимитированная, 'M' - рыночная) 
    [ 'QUANTITY' ]   =   '1' ,                   -- Количество 
    [ 'PRICE' ]      =  tostring(tekPrice)    -- Цена 
}


 local  Res  =   sendTransaction (Transaction)

 end 


 -- function trade() 


 -- if(tonumber(tekPrice)==nil or tonumber(priceMin) == nil or tonumber(priceMax)==nil)then 

 -- SetCell(TableID,2,4,"Не удалось получить цены с графика, нет соеденения с сервером!") 
 -- WriteToEndOfFile(LogFile,"Не удалось получить цены с графика, нет соеденения с сервером!") 


 -- end 


 -- if(tonumber(tekPrice) < tonumber(priceMin) )then    --  25 строка 


 -- transaction = { 
 -- ACCOUNT=TorShet, 
 -- CLIENT_CODE=KodClient, 
 -- TYPE="M", 
 -- TRANS_ID="7", 
 -- CLASSCODE=KodClass, 
 -- SECCODE=InstrumentKod, 
 -- ACTION="NEW_ORDER", 
 -- OPERATION="B", 
 -- PRICE=tostring(tekPrice), 
 -- QUANTITY=tostring(LotUp) 
 -- } 

 -- transaction.TRANS_ID = "12345" 
 -- sendTransaction(transaction) 

 -- elseif(tonumber(tekPrice) > tonumber(priceMax))then 
 -- transaction = { 
 -- ACCOUNT=TorShet, 
 -- CLIENT_CODE=KodClient, 
 -- TYPE="M", 
 -- TRANS_ID="8", 
 -- CLASSCODE=KodClass, 
 -- SECCODE=InstrumentKod, 
 -- ACTION="NEW_ORDER", 
 -- OPERATION="S", 
 -- PRICE=tostring(tekPrice), 
 -- QUANTITY=tostring(LotUp) 
 -- } 

 -- transaction.TRANS_ID = "12345" 
 -- sendTransaction(transaction) 


 -- end 

 -- end 




 function   PutDataToTableInit ()
 Clear (TableID)
 SetWindowCaption (TableID,"Робот ИНТЕЛЕКТ !  Автор: Алексей Егоров.")
 SetWindowPos (TableID, 100 , 200 , 888 , 100 )   -- Крдинаты 100,200,ширина и высота  888,100 
 InsertRow (TableID, 1 )   -- вставка строки в таблицу 
 InsertRow (TableID, 2 )
 InsertRow (TableID, 3 )
 SetColor (TableID, 2 ,QTABLE_NO_INDEX, RGB ( 255 , 255 , 0 ), RGB ( 0 , 0 , 0 ), RGB ( 0 , 220 , 220 ), RGB ( 0 , 0 , 0 ))
 SetColor (TableID, 3 ,QTABLE_NO_INDEX, RGB ( 255 , 255 , 0 ), RGB ( 0 , 0 , 0 ), RGB ( 0 , 220 , 220 ), RGB ( 0 , 0 , 0 ))
 end 

 function   WriteToEndOfFile (sFile,sDataString)    -- запись лог файла 

 local  serverTime =  GetInfoParam( "SERVERTIME" )
 local  serverDate =  GetInfoParam( "TRADEDATE" )
sDataString  =  serverDate .. ":" .. serverTime .. ":" .. sDataString .. "\n"
 local  f  =   io.open (sFile,"r + ")
 if (f =  =  nil ) then 
f  =   io.open (sFile,"w")
 end 

 if (f~ =  nil ) then 
f:seek( "end" , 0 )
f:write(sDataString)
f:flush()
f:close()
 end 

 end 

 function   CreateTable ()    --создание таблицы 
TableID  =   AllocTable ()       --иницилизация таблицы(создание) 
 AddColumn (TableID, 1 ,"ВРЕМЯ СЕРВЕРА", true , QTABLE_STRING_TYPE, 20 )
 AddColumn (TableID, 2 ,"КОД ИНСТРУМЕНТА", true , QTABLE_STRING_TYPE, 20 )            -- Добавление колонок в таблицу 
 AddColumn (TableID, 3 ,"ЛОТ - КОНТРАКТЫ", true , QTABLE_STRING_TYPE, 20 )
 AddColumn (TableID, 4 ,"КОМЕНТАРИИ", true , QTABLE_STRING_TYPE, 60 )
 AddColumn (TableID, 5 ,"КОД КЛАССА", true , QTABLE_STRING_TYPE, 20 )
 CreateWindow (TableID)
PutDataToTableInit(TableID)
 SetColor (TableID, 1 ,QTABLE_NO_INDEX, RGB ( 255 , 255 , 255 ), RGB ( 0 , 0 , 0 ), RGB ( 0 , 220 , 220 ), RGB ( 255 , 0 , 255 ))

 end 

 function   Time ()

ServerTime =  GetInfoParam( "SERVERTIME" )
 if (ServerTime =  =  nil   or  ServerTime =  =  "" ) then 
Errortime =  "Время не полученно, подключитесь к серверу!" 

WriteToEndOfFile(LogFile,"Время не полученно, подключитесь к серверу ! ")
 else 

Errortime =  "" 

 end 

 SetCell (TableID, 1 , 1 ,ServerTime)    
 SetCell (TableID, 1 , 4 ,Errortime)          -- запись данных в строку 1 и колонку 4 

 sleep ( 1000 )
 end 

 function   DataTable ()    --Данные в таблице 





 SetCell (TableID, 1 , 2 ,InstrumentKod)
 SetCell (TableID, 1 , 5 ,KodClass)
 SetCell (TableID, 1 , 3 ,Lot)
 SetCell (TableID, 3 , 1 ,"Где сработает заявка")
 SetCell (TableID, 3 , 2 ,priceMin)
 SetCell (TableID, 3 , 3 ,priceMax)
 SetCell (TableID, 3 , 4 ,"текущая цена  =  =  > ")
 SetCell (TableID, 3 , 5 ,tekPrice)
 sleep ( 100 )
 
 

 if ( IsWindowClosed (TableID)) then 
 CreateWindow (TableID)
PutDataToTableInit()
 SetColor (TableID, 1 ,QTABLE_NO_INDEX, RGB ( 0 , 230 , 0 ), RGB ( 0 , 0 , 0 ), RGB ( 0 , 220 , 220 ), RGB ( 0 , 0 , 0 ))






 end 


 end 
  
Я ее закоментировал
 
Добрый день.

В скрипте не видно входных параметров. Проверяйте фирму, торговый счет, код инструмента.
Наличие текущей чистой позиции в таблице позиций по клиентским счетам.  
 
Цитата
Egor Zaytsev написал:
Добрый день.

В скрипте не видно входных параметров. Проверяйте фирму, торговый счет, код инструмента.
Наличие текущей чистой позиции в таблице позиций по клиентским счетам.
InstrumentKod = "SiZ7" -- код инструмента(бумаги) sec_code
TorShet = "00000A"  ---Торговый счет
KodClient = "400000"  --- Код клиента
KodClass = "SPBFUT"   --код класса
firmid = "MC01300000"   -- id фирмы (можно посмотреть в ограничение по клиенским счетам 'фирма')
LotUp = 1               -- количество контрактов для покупки
LotDown = 1                -- количество контрактов на продажу
trailingSize = 100         -- размер трейлинг стопа
 
Алексей,

функция getFuturesHolding вызывается внутри функции obnov(), которая нигде в коде не используется. Либо в этом и есть причина, либо Вы опять привели не полный код скрипта.
И Вы так и не представили скриншот таблицы позиций по клиентским счетам, на котором видно что данные которые Вы запрашиваете, действительно существуют.
 
Цитата
Sergey Gorokhov написал:
Алексей  ,

функция getFuturesHolding вызывается внутри функции obnov(), которая нигде в коде не используется. Либо в этом и есть причина, либо Вы опять привели не полный код скрипта.
И Вы так и не представили скриншот таблицы позиций по клиентским счетам, на котором видно что данные которые Вы запрашиваете, действительно существуют.
dofile(getScriptPath().."\\param.lua")

is_run = true ---переменная для повторения цикла
LogFile = getScriptPath().."\\LogFile.txt"

function  OnInit()    -- выполняетя 1 раз перез запуском доп потока
CreateTable()
WriteToEndOfFile(LogFile,"Робот Запущен!")
test()

end

function main()

while (is_run== true) do

         DataTable()
          Time()
  obnov()
          --trade()
 
 
                   --ОСновные вычисления
 
end

end

function OnTrade(TradeX)

                     -----------ДЕЙСТВИЯ ПРИ ПОЯВЛЕНИИ НОВОЙ СДЕЛКИ

end

function OnOrder(OrderX)
                             -----действия при появлении новой заявки
end


function  OnStopOrder()

                  ---Действия при появлении стоп заявки.
end

function OnStop()

    message('Робот остановлен, все позиции по контрактам закрыты!')             ----Действия При нажатии кновки ОСТАНОВИТЬ,(Закрытие всех сделок выход в лот 0)
    WriteToEndOfFile(LogFile,"Робот остановлен, все позиции по контрактам закрыты!")
DestroyTable(TableID)


end



файл param.lua




dofile(getScriptPath().."\\Options.lua")

id_trans = 777
trans_id = id_trans + 1


function obnov()
priceMax = getParamEx(KodClass,InstrumentKod,"PRICEMAX").param_value
tekPrice = getParamEx(KodClass,InstrumentKod,"LAST").param_value
priceMin= getParamEx(KodClass,InstrumentKod,"PRICEMIN").param_value
--Lot=  getFuturesHolding(firmid,TorShet,InstrumentKod,0).totalnet
-- tekMarzha=
end

function test()



local Transaction={


   ['TRANS_ID']  = tostring(trans_id),   -- Номер транзакции
   ['ACCOUNT']   = TorShet,              -- Код счета
   ['CLASSCODE'] = KodClass,           -- Код класса
   ['SECCODE']   = InstrumentKod,             -- Код инструмента
   ['ACTION']    = 'NEW_ORDER',          -- Тип транзакции ('NEW_ORDER' - новая заявка)
   ['OPERATION'] = 'B',                  -- Операция ('B' - buy, или 'S' - sell)
   ['TYPE']      = 'L',                  -- Тип ('L' - лимитированная, 'M' - рыночная)
   ['QUANTITY']  = '1',                  -- Количество
   ['PRICE']     = tostring(tekPrice)   -- Цена
}


local Res = sendTransaction(Transaction)

end


-- function trade()


-- if(tonumber(tekPrice)==nil or tonumber(priceMin) == nil or tonumber(priceMax)==nil)then

-- SetCell(TableID,2,4,"Не удалось получить цены с графика, нет соеденения с сервером!")
-- WriteToEndOfFile(LogFile,"Не удалось получить цены с графика, нет соеденения с сервером!")


-- end


-- if(tonumber(tekPrice) < tonumber(priceMin) )then    --  25 строка


-- transaction = {
-- ACCOUNT=TorShet,
-- CLIENT_CODE=KodClient,
-- TYPE="M",
-- TRANS_ID="7",
-- CLASSCODE=KodClass,
-- SECCODE=InstrumentKod,
-- ACTION="NEW_ORDER",
-- OPERATION="B",
-- PRICE=tostring(tekPrice),
-- QUANTITY=tostring(LotUp)
-- }

-- transaction.TRANS_ID = "12345"
-- sendTransaction(transaction)

-- elseif(tonumber(tekPrice) > tonumber(priceMax))then
-- transaction = {
-- ACCOUNT=TorShet,
-- CLIENT_CODE=KodClient,
-- TYPE="M",
-- TRANS_ID="8",
-- CLASSCODE=KodClass,
-- SECCODE=InstrumentKod,
-- ACTION="NEW_ORDER",
-- OPERATION="S",
-- PRICE=tostring(tekPrice),
-- QUANTITY=tostring(LotUp)
-- }

-- transaction.TRANS_ID = "12345"
-- sendTransaction(transaction)


-- end

-- end




function PutDataToTableInit()
Clear(TableID)
SetWindowCaption(TableID,"Робот ИНТЕЛЕКТ! Автор: Алексей Егоров.")
SetWindowPos(TableID,100,200,888,100)  -- Крдинаты 100,200,ширина и высота  888,100
InsertRow(TableID,1)  -- вставка строки в таблицу
InsertRow(TableID,2)
InsertRow(TableID,3)
SetColor(TableID,2,QTABLE_NO_INDEX,RGB(255,255,0),RGB(0,0,0),RGB(0,220,220),RGB(0,0,0))
SetColor(TableID,3,QTABLE_NO_INDEX,RGB(255,255,0),RGB(0,0,0),RGB(0,220,220),RGB(0,0,0))
end

function WriteToEndOfFile(sFile,sDataString)   -- запись лог файла

local serverTime= GetInfoParam("SERVERTIME")
local serverDate= GetInfoParam("TRADEDATE")
sDataString = serverDate..":"..serverTime..":"..sDataString.."\n"
local f = io.open(sFile,"r+")
if(f==nil)then
f = io.open(sFile,"w")
end

if(f~=nil)then
f:seek("end",0)
f:write(sDataString)
f:flush()
f:close()
end

end

function CreateTable()   --создание таблицы
TableID = AllocTable()      --иницилизация таблицы(создание)
AddColumn(TableID,1,"ВРЕМЯ СЕРВЕРА",true, QTABLE_STRING_TYPE,20)
AddColumn(TableID,2,"КОД ИНСТРУМЕНТА",true, QTABLE_STRING_TYPE,20)           -- Добавление колонок в таблицу
AddColumn(TableID,3,"ЛОТ-КОНТРАКТЫ",true, QTABLE_STRING_TYPE,20)
AddColumn(TableID,4,"КОМЕНТАРИИ",true, QTABLE_STRING_TYPE,60)
AddColumn(TableID,5,"КОД КЛАССА",true, QTABLE_STRING_TYPE,20)
CreateWindow(TableID)
PutDataToTableInit(TableID)
SetColor(TableID,1,QTABLE_NO_INDEX,RGB(255,255,255),RGB(0,0,0),RGB(0,220,220),RGB(255,0,255))

end

function Time()

ServerTime= GetInfoParam("SERVERTIME")
if(ServerTime==nil or ServerTime=="")then
Errortime="Время не полученно, подключитесь к серверу!"

WriteToEndOfFile(LogFile,"Время не полученно, подключитесь к серверу!")
else

Errortime=""

end

SetCell(TableID,1,1,ServerTime)    
SetCell(TableID,1,4,Errortime)         -- запись данных в строку 1 и колонку 4

sleep(1000)
end

function DataTable()   --Данные в таблице





SetCell(TableID,1,2,InstrumentKod)
SetCell(TableID,1,5,KodClass)
SetCell(TableID,1,3,Lot)
SetCell(TableID,3,1,"Где сработает заявка")
SetCell(TableID,3,2,priceMin)
SetCell(TableID,3,3,priceMax)
SetCell(TableID,3,4,"текущая цена ==>")
SetCell(TableID,3,5,tekPrice)
sleep(100)



if(IsWindowClosed(TableID))then
CreateWindow(TableID)
PutDataToTableInit()
SetColor(TableID,1,QTABLE_NO_INDEX,RGB(0,230,0),RGB(0,0,0),RGB(0,220,220),RGB(0,0,0))






end


end


файл   Options.lua


InstrumentKod = "SiZ7" -- код инструмента(бумаги) sec_code
TorShet = "SPBFUT00877"  ---Торговый счет
KodClient = "10632"  --- Код клиента
KodClass = "SPBFUT"   --код класса
firmid = "SPBFUT000000"   -- id фирмы (можно посмотреть в ограничение по клиенским счетам 'фирма')
LotUp = 1               -- количество контрактов для покупки
LotDown = 1                -- количество контрактов на продажу
trailingSize = 100         -- размер трейлинг стопа
 
Здравствуйте,

Видим, что идет обращение к переменной Lot:
SetCell(TableID,1,3,Lot)
в то время, как сама переменная закомментирована:
--Lot=  getFuturesHolding(firmid,TorShet,InstrumentKod,0).totalnet

И рекомендуем переменную задать глобально, а не внутри функции, например вначале скрипта.  
Страницы: 1
Читают тему
Наверх