Как получить всего заявок по инструменту (покупок / продаж)
Пользователь
Сообщений: Регистрация: 07.11.2017
09.01.2018 08:44:56
Здравствуйте, помогите получить значение из таблицы всего заявок на покупку и на продажу по инструменту из таблицы "Котировки фьючерсов" Кажется через getItem но как точно не могу понять
Как получить текущую чистую позицию quik
Пользователь
Сообщений: Регистрация: 07.11.2017
26.12.2017 09:45:22
Здравствуйте, подскажите как получить текущую чистую позицию quik, все обыскал толковой информации не могу найти , программировать только учусь, не судите строго. если можно напишите пожалуйста пример
Как посмотреть цену последней своей заявки
Пользователь
Сообщений: Регистрация: 07.11.2017
07.12.2017 11:35:32
Здравствуйте, подскажите пожалуйста с помощью какой функции можно посмотреть цену своей последней исполненной заявки? GetItem() не нашел такого параметра, можно пожалуйста с примером, что бы разобраться, я только учусь программировать роботов.
функция 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 -- размер трейлинг стопа
В скрипте не видно входных параметров. Проверяйте фирму, торговый счет, код инструмента. Наличие текущей чистой позиции в таблице позиций по клиентским счетам.
InstrumentKod = "SiZ7" -- код инструмента(бумаги) sec_code TorShet = "00000A" ---Торговый счет KodClient = "400000" --- Код клиента KodClass = "SPBFUT" --код класса firmid = "MC01300000" -- id фирмы (можно посмотреть в ограничение по клиенским счетам 'фирма') LotUp = 1 -- количество контрактов для покупки LotDown = 1 -- количество контрактов на продажу trailingSize = 100 -- размер трейлинг стопа
Не отправляет транзакцию на сервер
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 14:36:23
Здравствуйте, скрипт не хочет отправлять транзакцию на сервер, скрипт запускается, работает, но нечего не происходит, запуск функции для проверки записан в OnInit код транзакции ниже
Код
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
Алексей написал: Нашел ошибку, исправил, спасибо за помощь, есть еще вопрос каким параметром можно получить "текущая чистая позиция" и вариационная маржа, и есть ли команда для закрытия всех сделок?
Для получения Текущей чистой позиции и Вариационной маржи на срочном рынке используйте функцию getFuturesHolding() (формат использования смотрите в официальной справке). Что имеется ввиду под закрытием всех сделок, закрытие позиции?
да, как закрыть все позиции
Ошибка, attempt to compare two table values
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 11:21:33
Цитата
Алексей написал: Нашел ошибку, исправил, спасибо за помощь, есть еще вопрос каким параметром можно получить "текущая чистая позиция" и вариационная маржа, и есть ли команда для закрытия всех сделок?
текущая чистая позиция из позиции по клиенским счетам на срочном рынке
Ошибка, attempt to compare two table values
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 11:01:10
Нашел ошибку, исправил, спасибо за помощь, есть еще вопрос каким параметром можно получить "текущая чистая позиция" и вариационная маржа, и есть ли команда для закрытия всех сделок?
Ошибка, attempt to compare two table values
Пользователь
Сообщений: Регистрация: 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, только не понятно почему
Алексей написал: 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
Рынок сейчас работает,номер счета правильный и код класса тоже
Ошибка, attempt to compare two table values
Пользователь
Сообщений: Регистрация: 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
Ошибка, attempt to compare two table values
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 09:16:33
Есть еще вопрос, существует ли параметр что бы считать минимум и максимум пред идущей свечи на графике
Ошибка, attempt to compare two table values
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 08:39:42
Может быть я не правильно сделал, мне нужно получить целое число в виде цены, а не таблицу, что бы его можно было использовать в конструкции if()then
Ошибка, attempt to compare two table values
Пользователь
Сообщений: Регистрация: 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
Ошибка, attempt to compare two table values
Пользователь
Сообщений: Регистрация: 07.11.2017
07.11.2017 06:56:48
Здравствуйте помогите исправить ошибку, я учу язык 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