Здравствуйте помогите исправить ошибку, я учу язык 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
Пользователь
Сообщений: Регистрация: 09.02.2015
QUIK software testing
07.11.2017 07:05:11
Добрый день. Функция 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'
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 08:31:14
Цитата
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
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 08:39:42
Может быть я не правильно сделал, мне нужно получить целое число в виде цены, а не таблицу, что бы его можно было использовать в конструкции if()then
Пользователь
Сообщений: Регистрация: 09.02.2015
QUIK software testing
07.11.2017 08:49:50
Из кода сейчас не совсем понятно, какая строка 25. Вот здесь похоже не дописали, отсутствует сравнение с nil в последнем выражении:
Код
if(tonumber(tekPrice)==nil or tonumber(priceMin) == nil or tonumber(priceMax))then
Так же для информативности выведите изначальные значения, полученные в:
возможно функция не возвращает значения, т.к. были указаны некорректный код класса или инструмента, также можно смотреть на поле getParamEx(...).result
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf'
Пользователь
Сообщений: Регистрация: 23.01.2015
07.11.2017 09:06:27
Цитата
Nikolay Pavlov написал: возможно функция не возвращает значения, т.к. были указаны некорректный код класса или инструмента, также можно смотреть на поле getParamEx(...).result
или торги еще не начались
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 09:16:33
Есть еще вопрос, существует ли параметр что бы считать минимум и максимум пред идущей свечи на графике
Пользователь
Сообщений: Регистрация: 23.01.2015
07.11.2017 09:21:58
Цитата
Алексей написал: Есть еще вопрос, существует ли параметр что бы считать минимум и максимум пред идущей свечи на графике
для доступа к свечкам можно использовать функцию getCandlesByIndex Что касается минимумов и максимумов, то чтобы их найти нужно с чем-то сравнивать, не совсем понятно, с чем нужно сравнивать значения
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 10:17:38
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
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 10:19:10
Цитата
Алексей написал: 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
Рынок сейчас работает,номер счета правильный и код класса тоже
Пользователь
Сообщений: Регистрация: 23.01.2015
07.11.2017 10:26:28
Алексей, Для того чтобы понять причину нужен весь код целиком, а не только часть
Пользователь
Сообщений: Регистрация: 09.02.2015
QUIK software testing
07.11.2017 10:33:07
Выведите перед проблемным местом значения 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'
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 10:44:40
Цитата
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, только не понятно почему
Нашел ошибку, исправил, спасибо за помощь, есть еще вопрос каким параметром можно получить "текущая чистая позиция" и вариационная маржа, и есть ли команда для закрытия всех сделок?
Пользователь
Сообщений: Регистрация: 09.02.2015
QUIK software testing
07.11.2017 11:13:09
Цитата
Алексей написал: Нашел ошибку, исправил, спасибо за помощь, есть еще вопрос каким параметром можно получить "текущая чистая позиция" и вариационная маржа, и есть ли команда для закрытия всех сделок?
Для получения Текущей чистой позиции и Вариационной маржи на срочном рынке используйте функцию getFuturesHolding() (формат использования смотрите в официальной справке). Что имеется ввиду под закрытием всех сделок, закрытие позиции?
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf'
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 11:21:33
Цитата
Алексей написал: Нашел ошибку, исправил, спасибо за помощь, есть еще вопрос каким параметром можно получить "текущая чистая позиция" и вариационная маржа, и есть ли команда для закрытия всех сделок?
текущая чистая позиция из позиции по клиенским счетам на срочном рынке
Алексей написал: Нашел ошибку, исправил, спасибо за помощь, есть еще вопрос каким параметром можно получить "текущая чистая позиция" и вариационная маржа, и есть ли команда для закрытия всех сделок?
Для получения Текущей чистой позиции и Вариационной маржи на срочном рынке используйте функцию getFuturesHolding() (формат использования смотрите в официальной справке). Что имеется ввиду под закрытием всех сделок, закрытие позиции?
Насколько мне известно, отдельной транзакции по закрытию позиции срочный рынок FORTS не предоставляет (если конечно имеется ввиду рынок FORTS). Но зная свою длинную/короткую позицию легко сформировать транзакцию на продажу/покупку по рыночной цене, что приведет к закрытию позиции.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf'
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 12:54:55
Помогите пожалуйста не могу разобраться, в гугле тоже нечего путного найти не могу
как мне получить текущюю чистую позицию , сделал все по официальной документации, но он не получает значения, что я делаю не так?
Алексей написал: Помогите пожалуйста не могу разобраться, в гугле тоже нечего путного найти не могу
как мне получить текущюю чистую позицию , сделал все по официальной документации, но он не получает значения, что я делаю не так?
Код
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
Я ее закоментировал
QUIK clients support
Сообщений: Регистрация: 27.01.2015
08.11.2017 04:59:22
Добрый день.
В скрипте не видно входных параметров. Проверяйте фирму, торговый счет, код инструмента. Наличие текущей чистой позиции в таблице позиций по клиентским счетам.
В скрипте не видно входных параметров. Проверяйте фирму, торговый счет, код инструмента. Наличие текущей чистой позиции в таблице позиций по клиентским счетам.
InstrumentKod = "SiZ7" -- код инструмента(бумаги) sec_code TorShet = "00000A" ---Торговый счет KodClient = "400000" --- Код клиента KodClass = "SPBFUT" --код класса firmid = "MC01300000" -- id фирмы (можно посмотреть в ограничение по клиенским счетам 'фирма') LotUp = 1 -- количество контрактов для покупки LotDown = 1 -- количество контрактов на продажу trailingSize = 100 -- размер трейлинг стопа
функция getFuturesHolding вызывается внутри функции obnov(), которая нигде в коде не используется. Либо в этом и есть причина, либо Вы опять привели не полный код скрипта. И Вы так и не представили скриншот таблицы позиций по клиентским счетам, на котором видно что данные которые Вы запрашиваете, действительно существуют.
функция 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,"Не удалось получить цены с графика, нет соеденения с сервером!")
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
InstrumentKod = "SiZ7" -- код инструмента(бумаги) sec_code TorShet = "SPBFUT00877" ---Торговый счет KodClient = "10632" --- Код клиента KodClass = "SPBFUT" --код класса firmid = "SPBFUT000000" -- id фирмы (можно посмотреть в ограничение по клиенским счетам 'фирма') LotUp = 1 -- количество контрактов для покупки LotDown = 1 -- количество контрактов на продажу trailingSize = 100 -- размер трейлинг стопа
QUIK clients support
Сообщений: Регистрация: 27.01.2015
21.11.2017 10:57:13
Здравствуйте,
Видим, что идет обращение к переменной Lot: SetCell(TableID,1,3,Lot) в то время, как сама переменная закомментирована: --Lot= getFuturesHolding(firmid,TorShet,InstrumentKod,0).totalnet
И рекомендуем переменную задать глобально, а не внутри функции, например вначале скрипта.