local classCode = "TQBR"
l[B][/B]ocal secCode = "GAZP"
local param = "last"
local is_run = true
function candlesProcessing ()
while true do
local paramEx = getParamEx(classCode, secCode, param)
dr1 = paramEx.param_value
message (dr1)
uvb =20
ovb =( dr1*uvb/100/1000)
ovbm=dr1+ovb
sleep (900)
local paramEx = getParamEx(classCode, secCode, param)
dr2 = paramEx.param_value
massage (dr2)
u =20
ovbml =( dr2*u/100/1000)
if dr2>ovbm+dr1 then
OpenPosition()
sleep (900)
local paramEx = getParamEx(classCode, secCode, param)
dr3 = paramEx.param_value
u =20
ovbml =( dr2*u/100/1000)
ovbm2= ovbml+dr2
ovbmln= dr2-ovbml
if dr3 > ovbm2 then
massage (dr2)
ClosePositionorders()
delete()
if dr3 > ovbmln then
message (dr2)
OpenPosition()
end
end
end
end
-- Функция ОТКРЫВАЕТ позицию
function OpenPosition()
-- Устанавливает флаг текущего процесса в ОТКРЫТИЕ позиции
STATE = "OPEN";
-- Сбрасывает флаг обработки открытия позиций
OpenPosProcessed = false;
trans_id_OPT = math.random(1,9999);
-- Заполняет структуру для отправки транзакции на покупку 2-х ОПЦИОНОВ
local Transaction={
["TRANS_ID"] = tostring(trans_id_OPT),
["ACTION"] = "NEW_ORDER",
["CLASSCODE"] = classCode,
["SECCODE"] = secCode ,
["OPERATION"] = "B", -- покупка (BUY)
["TYPE"] = "M", -- по рынку (MARKET)
["QUANTITY"] = "2", -- количество
["ACCOUNT"] = TRADE_ACC,
["PRICE"] = tostring(getParamEx(CLASS_CODE_OPT, SEC_CODE_OPT_FOR_OPEN, "offer").param_value + 10*getParamEx(CLASS_CODE_OPT, SEC_CODE_OPT_FOR_OPEN, "SEC_PRICE_STEP").param_value), -- по цене, завышенной на 10 мин. шагов цены
["COMMENT"] = "Покупка опционов скриптом"
["ORDER_KEY"] = tostring(number_order)
}
-- Флаг, что ОПЦИОНЫ еще не куплены
NotBuy_OPT = true;
local Result = sendTransaction(Transaction);
-- ЕСЛИ функция вернула строку диагностики ошибки, ТО значит транзакция не прошла
if Result ~= "" then
-- Выводит сообщение с ошибкой
message("Покупка ОПЦИОНОВ не удалась!\nОШИБКА: "..Result);
-- Завершает выполнение функции
return(0);
end;
end
-- Функция ЗАКРЫВАЕТ позицию
function ClosePosition()
-- Устанавливает флаг текущего процесса в ЗАКРЫТИЕ позиции
STATE = "CLOSE";
-- Сбрасывает флаг обработки закрытия позиций
ClosePosProcessed = false;
trans_id_OPT = math.random(1,9999);
-- Заполняет структуру для отправки транзакции на продажу 2-х ОПЦИОНОВ
local Transaction={
["TRANS_ID"] = tostring(trans_id_OPT),
["ACTION"] = "NEW_ORDER",
["CLASSCODE"] = classCode,
["SECCODE"] = secCode ,
["OPERATION"] = "S", -- продажа (SELL)
["TYPE"] = "M", -- по рынку (MARKET)
["QUANTITY"] = "2", -- количество
["ACCOUNT"] = TRADE_ACC,
["PRICE"] = tostring(getParamEx(CLASS_CODE_OPT, SEC_CODE_OPT_FOR_OPEN, "bid").param_value - 10*getParamEx(CLASS_CODE_OPT, SEC_CODE_OPT_FOR_OPEN, "SEC_PRICE_STEP").param_value), -- по цене, заниженной на 10 мин. шагов цены
["COMMENT"] = "Продажа опционов скриптом"
["ORDER_KEY"] = tostring(number_order)
}
-- Флаг, что ОПЦИОНЫ еще не проданы
NotSell_OPT = true;
local Result = sendTransaction(Transaction);
-- ЕСЛИ функция вернула строку диагностики ошибки, ТО значит транзакция не прошла
if Result ~= "" then
-- Выводит сообщение с ошибкой
message("Продажа ОПЦИОНОВ не удалась!\nОШИБКА: "..Result);
-- Завершает выполнение функции
return(0);
end;
end
function trasactiondelete(number_order)
id_transact = id_transact + 1
deleteorder =
{
["TRANS_ID"] = tostring(id_transact),
["ACTION"] = "KILL_ORDER",
["CLASSCODE"] =classCode,
["SECCODE"] = secCode ,
["ACCOUNT"] = account,
["ORDER_KEY"] = tostring(number_order)
}
end
function delete()
num_orders = getNumberOf("orders")
for i = num_orders - 1, 0, -1 do
myorder = getItem("orders", i)
if myorder["client_code"]==client_code and myorder["sec_code"]==tiker then
if bit.band(tonumber(myorder["flags"]),1) > 0 then
message(progname.." ����� ������: "..myorder.order_num)
trasactiondelete(myorder.order_num)
error_transaction = sendTransaction(deleteorder)
sleep(300)
if error_transaction ~= "" then
message(progname.." : ������ ="..error_transaction, 3)
else
message(progname.." : ������ ������ "..myorder["order_num"].." ����:"..myorder["price"].." �����: "..myorder["balance"].." �����������:"..myorder["brokerref"], 2)
end
--break -- ������� �� ����� ����� ���� ��� ����� 1 �������� ������
end
end
end
end
function ClosePositionorders()
num_orders = getNumberOf("orders")
for i = num_orders - 1, 0, -1 do
myorder = getItem("orders", i)
if myorder["client_code"]==client_code and myorder["sec_code"]==tiker then
if bit.band(tonumber(myorder["flags"]),1) > 0 then
message(progname.." ����� ������: "..myorder.order_num)
ClosePosition(myorder.order_num)
error_transaction = sendTransaction(deleteorder)
sleep(300)
if error_transaction ~= "" then
message(progname.." : ������ ="..error_transaction, 3)
else
message(progname.." : ������ ������ "..myorder["order_num"].." ����:"..myorder["price"].." �����: "..myorder["balance"].." �����������:"..myorder["brokerref"], 2)
end
--break -- ������� �� ����� ����� ���� ��� ����� 1 �������� ������
end
end
end
end
function main ()
while is_run do
candlesProcessing ()
end
end
Скрипт правильно ли написан
Пользователь
Сообщений: Регистрация: 04.09.2025
21.11.2025 16:54:40
Есть ли програмисты,хотел бы проверить правильно ли написан. local classCode = "TQBR" local secCode = "GAZP" local param = "last" local is_run = true
function candlesProcessing () while true do local paramEx = getParamEx(classCode, secCode, param) dr1 = paramEx.param_value print (dr1) uvb =20 ovb =( dr1*uvb/100/1000) ovbm=dr1+ovb sleep (900)
local paramEx = getParamEx(classCode, secCode, param) dr2 = paramEx.param_value print (dr2) u =20 ovbml =( dr2*u/100/1000) if dr2>ovbm+dr1 : OpenPosition() sleep (900) local paramEx = getParamEx(classCode, secCode, param) dr3 = paramEx.param_value u =20 ovbml =( dr2*u/100/1000) ovbm2= ovbml+dr2 ovbmln= dr2-ovbml if dr3 > ovbm2: print (dr2) ClosePositionorders() delete()
if dr3 > ovbmln: print (dr2) OpenPosition() end end end end
-- Функция ОТКРЫВАЕТ позицию function OpenPosition() -- Устанавливает флаг текущего процесса в ОТКРЫТИЕ позиции STATE = "OPEN"; -- Сбрасывает флаг обработки открытия позиций OpenPosProcessed = false;
trans_id_OPT = math.random(1,9999); -- Заполняет структуру для отправки транзакции на покупку 2-х ОПЦИОНОВ local Transaction={ ["TRANS_ID"] = tostring(trans_id_OPT), ["ACTION"] = "NEW_ORDER", ["CLASSCODE"] = CLASS_CODE_OPT, ["SECCODE"] = SEC_CODE_OPT_FOR_OPEN, ["OPERATION"] = "B", -- покупка (BUY) ["TYPE"] = "M", -- по рынку (MARKET) ["QUANTITY"] = "2", -- количество ["ACCOUNT"] = TRADE_ACC, ["PRICE"] = tostring(getParamEx(CLASS_CODE_OPT, SEC_CODE_OPT_FOR_OPEN, "offer").param_value + 10*getParamEx(CLASS_CODE_OPT, SEC_CODE_OPT_FOR_OPEN, "SEC_PRICE_STEP").param_value), -- по цене, завышенной на 10 мин. шагов цены ["COMMENT"] = "Покупка опционов скриптом" ["ORDER_KEY"] = tostring(number_order) } -- Флаг, что ОПЦИОНЫ еще не куплены NotBuy_OPT = true; local Result = sendTransaction(Transaction);
-- ЕСЛИ функция вернула строку диагностики ошибки, ТО значит транзакция не прошла if Result ~= "" then -- Выводит сообщение с ошибкой message("Покупка ОПЦИОНОВ не удалась!\nОШИБКА: "..Result); -- Завершает выполнение функции return(0); end; end
-- Функция ЗАКРЫВАЕТ позицию function ClosePosition() -- Устанавливает флаг текущего процесса в ЗАКРЫТИЕ позиции STATE = "CLOSE"; -- Сбрасывает флаг обработки закрытия позиций ClosePosProcessed = false;
trans_id_OPT = math.random(1,9999); -- Заполняет структуру для отправки транзакции на продажу 2-х ОПЦИОНОВ local Transaction={ ["TRANS_ID"] = tostring(trans_id_OPT), ["ACTION"] = "NEW_ORDER", ["CLASSCODE"] = CLASS_CODE_OPT, ["SECCODE"] = SEC_CODE_OPT_IN_POS, ["OPERATION"] = "S", -- продажа (SELL) ["TYPE"] = "M", -- по рынку (MARKET) ["QUANTITY"] = "2", -- количество ["ACCOUNT"] = TRADE_ACC, ["PRICE"] = tostring(getParamEx(CLASS_CODE_OPT, SEC_CODE_OPT_FOR_OPEN, "bid").param_value - 10*getParamEx(CLASS_CODE_OPT, SEC_CODE_OPT_FOR_OPEN, "SEC_PRICE_STEP").param_value), -- по цене, заниженной на 10 мин. шагов цены ["COMMENT"] = "Продажа опционов скриптом" ["ORDER_KEY"] = tostring(number_order) } -- Флаг, что ОПЦИОНЫ еще не проданы NotSell_OPT = true; local Result = sendTransaction(Transaction); -- ЕСЛИ функция вернула строку диагностики ошибки, ТО значит транзакция не прошла if Result ~= "" then -- Выводит сообщение с ошибкой message("Продажа ОПЦИОНОВ не удалась!\nОШИБКА: "..Result); -- Завершает выполнение функции return(0); end; end