Есть ли програмисты,хотел бы проверить
правильно ли написан.
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
function trasactiondelete(number_order)
id_transact = id_transact + 1
deleteorder =
{
["TRANS_ID"] = tostring(id_transact),
["ACTION"] = "KILL_ORDER",
["CLASSCODE"] = class ,
["SECCODE"] = tiker,
["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
правильно ли написан.
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
function trasactiondelete(number_order)
id_transact = id_transact + 1
deleteorder =
{
["TRANS_ID"] = tostring(id_transact),
["ACTION"] = "KILL_ORDER",
["CLASSCODE"] = class ,
["SECCODE"] = tiker,
["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