Задача решена, землекопа полтора.
-- получить параметры последней моей выставленной заявки
local n_orders = getNumberOf("orders")
local last_order = getItem("orders", n_orders - 1)
-- message('Номер последней заявки: ' ..last_order.order_num.. 'Бумаге ' ..last_order.sec_code.. ' Цена ' ..last_order.price.. 'Лотов ' ..last_order.qty )
local class_code = "TQBR"
local sec_code = last_order.sec_code
local lots = math.floor(last_order.qty)
local lots1 = tostring(lots)
-- Получаем минимальный шаг цены (также известен как шаг цены)
local price_step = tonumber( getParamEx(class_code, sec_code, "SEC_PRICE_STEP").param_value)
local priceLAST = tonumber( getParamEx(class_code, sec_code, "LAST").param_value )
-- Вычисляем цену, на которую выставим лимитную заявку на покупку
local xxx -- Объявляем переменную xxx
if priceLAST/price_step > 40610 then xxx = 131
elseif priceLAST/price_step > 40300 then xxx = 130
elseif priceLAST/price_step > 39990 then xxx = 129
elseif priceLAST/price_step > 39680 then xxx = 128
elseif priceLAST/price_step > 39370 then xxx = 127
elseif priceLAST/price_step > 39060 then xxx = 126
elseif priceLAST/price_step > 38750 then xxx = 125
elseif priceLAST/price_step > 38440 then xxx = 124
elseif priceLAST/price_step > 38130 then xxx = 123
elseif priceLAST/price_step > 37820 then xxx = 122
elseif priceLAST/price_step > 37510 then xxx = 121
elseif priceLAST/price_step > 37200 then xxx = 120
elseif priceLAST/price_step > 36890 then xxx = 119
elseif priceLAST/price_step > 36580 then xxx = 118
elseif priceLAST/price_step > 36270 then xxx = 117
elseif priceLAST/price_step > 35960 then xxx = 116
elseif priceLAST/price_step > 35650 then xxx = 115
elseif priceLAST/price_step > 35340 then xxx = 114
elseif priceLAST/price_step > 35030 then xxx = 113
elseif priceLAST/price_step > 34720 then xxx = 112
elseif priceLAST/price_step > 34410 then xxx = 111
elseif priceLAST/price_step > 34100 then xxx = 110
elseif priceLAST/price_step > 33790 then xxx = 109
elseif priceLAST/price_step > 33480 then xxx = 108
elseif priceLAST/price_step > 33170 then xxx = 107
elseif priceLAST/price_step > 32860 then xxx = 106
elseif priceLAST/price_step > 32550 then xxx = 105
elseif priceLAST/price_step > 32240 then xxx = 104
elseif priceLAST/price_step > 31930 then xxx = 103
elseif priceLAST/price_step > 31620 then xxx = 102
elseif priceLAST/price_step > 31310 then xxx = 101
elseif priceLAST/price_step > 31000 then xxx = 100
elseif priceLAST/price_step > 30690 then xxx = 99
elseif priceLAST/price_step > 30380 then xxx = 98
elseif priceLAST/price_step > 30070 then xxx = 97
elseif priceLAST/price_step > 29760 then xxx = 96
elseif priceLAST/price_step > 29450 then xxx = 95
elseif priceLAST/price_step > 29140 then xxx = 94
elseif priceLAST/price_step > 28830 then xxx = 93
elseif priceLAST/price_step > 28520 then xxx = 92
elseif priceLAST/price_step > 28210 then xxx = 91
elseif priceLAST/price_step > 27900 then xxx = 90
elseif priceLAST/price_step > 27590 then xxx = 89
elseif priceLAST/price_step > 27280 then xxx = 88
elseif priceLAST/price_step > 26970 then xxx = 87
elseif priceLAST/price_step > 26660 then xxx = 86
elseif priceLAST/price_step > 26350 then xxx = 85
elseif priceLAST/price_step > 26040 then xxx = 84
elseif priceLAST/price_step > 25730 then xxx = 83
elseif priceLAST/price_step > 25420 then xxx = 82
elseif priceLAST/price_step > 25110 then xxx = 81
elseif priceLAST/price_step > 24800 then xxx = 80
elseif priceLAST/price_step > 24490 then xxx = 79
elseif priceLAST/price_step > 24180 then xxx = 78
elseif priceLAST/price_step > 23870 then xxx = 77
elseif priceLAST/price_step > 23560 then xxx = 76
elseif priceLAST/price_step > 23250 then xxx = 75
elseif priceLAST/price_step > 22940 then xxx = 74
elseif priceLAST/price_step > 22630 then xxx = 73
elseif priceLAST/price_step > 22320 then xxx = 72
elseif priceLAST/price_step > 22010 then xxx = 71
elseif priceLAST/price_step > 21700 then xxx = 70
elseif priceLAST/price_step > 21390 then xxx = 69
elseif priceLAST/price_step > 21080 then xxx = 68
elseif priceLAST/price_step > 20770 then xxx = 67
elseif priceLAST/price_step > 20460 then xxx = 66
elseif priceLAST/price_step > 20150 then xxx = 65
elseif priceLAST/price_step > 19840 then xxx = 64
elseif priceLAST/price_step > 19530 then xxx = 63
elseif priceLAST/price_step > 19220 then xxx = 62
elseif priceLAST/price_step > 18910 then xxx = 61
elseif priceLAST/price_step > 18600 then xxx = 60
elseif priceLAST/price_step > 18290 then xxx = 59
elseif priceLAST/price_step > 17980 then xxx = 58
elseif priceLAST/price_step > 17670 then xxx = 57
elseif priceLAST/price_step > 17360 then xxx = 56
elseif priceLAST/price_step > 17050 then xxx = 55
elseif priceLAST/price_step > 16740 then xxx = 54
elseif priceLAST/price_step > 16430 then xxx = 53
elseif priceLAST/price_step > 16120 then xxx = 52
elseif priceLAST/price_step > 15810 then xxx = 51
elseif priceLAST/price_step > 15500 then xxx = 50
elseif priceLAST/price_step > 15190 then xxx = 49
elseif priceLAST/price_step > 14880 then xxx = 48
elseif priceLAST/price_step > 14570 then xxx = 47
elseif priceLAST/price_step > 14260 then xxx = 46
elseif priceLAST/price_step > 13950 then xxx = 45
elseif priceLAST/price_step > 13640 then xxx = 44
elseif priceLAST/price_step > 13330 then xxx = 43
elseif priceLAST/price_step > 13020 then xxx = 42
elseif priceLAST/price_step > 12710 then xxx = 41
elseif priceLAST/price_step > 12400 then xxx = 40
elseif priceLAST/price_step > 12090 then xxx = 39
elseif priceLAST/price_step > 11780 then xxx = 38
elseif priceLAST/price_step > 11470 then xxx = 37
elseif priceLAST/price_step > 11160 then xxx = 36
elseif priceLAST/price_step > 10850 then xxx = 35
elseif priceLAST/price_step > 10540 then xxx = 34
elseif priceLAST/price_step > 10230 then xxx = 33
elseif priceLAST/price_step > 9920 then xxx = 32
elseif priceLAST/price_step > 9610 then xxx = 31
elseif priceLAST/price_step > 9300 then xxx = 30
elseif priceLAST/price_step > 8990 then xxx = 29
elseif priceLAST/price_step > 8680 then xxx = 28
elseif priceLAST/price_step > 8370 then xxx = 27
elseif priceLAST/price_step > 8060 then xxx = 26
elseif priceLAST/price_step > 7750 then xxx = 25
elseif priceLAST/price_step > 7440 then xxx = 24
elseif priceLAST/price_step > 7130 then xxx = 23
elseif priceLAST/price_step > 6820 then xxx = 22
elseif priceLAST/price_step > 6510 then xxx = 21
elseif priceLAST/price_step > 6200 then xxx = 20
elseif priceLAST/price_step > 5890 then xxx = 19
elseif priceLAST/price_step > 5580 then xxx = 18
elseif priceLAST/price_step > 5270 then xxx = 17
elseif priceLAST/price_step > 4960 then xxx = 16
elseif priceLAST/price_step > 4650 then xxx = 15
elseif priceLAST/price_step > 4340 then xxx = 14
elseif priceLAST/price_step > 4030 then xxx = 13
elseif priceLAST/price_step > 3720 then xxx = 12
elseif priceLAST/price_step > 3410 then xxx = 11
elseif priceLAST/price_step > 3100 then xxx = 10
elseif priceLAST/price_step > 2790 then xxx = 9
elseif priceLAST/price_step > 2480 then xxx = 8
elseif priceLAST/price_step > 2170 then xxx = 7
elseif priceLAST/price_step > 1860 then xxx = 6
elseif priceLAST/price_step > 1550 then xxx = 5
elseif priceLAST/price_step > 1240 then xxx = 4
elseif priceLAST/price_step > 930 then xxx = 3
elseif priceLAST/price_step > 620 then xxx = 2
local buy_price = priceLAST - price_step * (xxx*4 + 5) -- цена выставится при сработке стопа, лонг тоесть - и цена чуть ниже цены последних сделок
local take_profit_offset = priceLAST + price_step * xxx
local take_profit_offset1 = math.floor(take_profit_offset)
local take_profit_offset2 = tostring(take_profit_offset1)
local stop_loss_offset = priceLAST - price_step * (xxx*4-2)-- цена сработки стопа
local stop_loss_offset1 = math.floor(stop_loss_offset) -- math.floor много бед из за нее tostring надо
local stop_loss_offset2 = tostring(stop_loss_offset1)
local order_params = {
ACCOUNT = "ххххххххххх",
CLASSCODE = "TQBR",
CLIENT_CODE = "ххххххх",
ACTION = "NEW_STOP_ORDER",
TRANS_ID = "1",
SECCODE = sec_code,
OPERATION = "S", -- Тип операции (B - покупка «S» - продажа.)
PRICE = tostring(buy_price), -- цена для стопа
QUANTITY = lots1,
STOP_ORDER_KIND = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER",
STOPPRICE = tostring(take_profit_offset), --профит - обязательно
STOPPRICE2 = tostring(stop_loss_offset), --стоп tostring - обязательно
OFFSET_UNITS = "PERCENTS",
OFFSET = "0",
SPREAD_UNITS = "PERCENTS",
SPREAD = "0",
--MARKET_TAKE_PROFIT = "YES",
EXPIRY_DATE = "TODAY"
}
-- OFFSET - Величина отступа от максимума (минимума) цены последнеи? сделки. Используется при «STOP_ORDER_KIND» = «TAKE_PROFIT_STOP_ORDER» или «ACTIVATED_BY_ORDER_TAKE_PROFIT_STOP_ORDER»
-- OFFSET_UNITS - Единицы измерения отступа. Возможные значения: «PERCENTS» – в процентах (шаг изменения – одна сотая процента),«PRICE_UNITS» – в параметрах цены (шаг изменения равен шагу цены по данному инструменту)Используется при «STOP_ORDER_KIND» = «TAKE_PROFIT_STOP_ORDER» или «ACTIVATED_BY_ORDER_TAKE_PROFIT_STOP_ORDER»
-- SPREAD - Величина защитного спрэда. Используется при
-- SPREAD_UNITS - Единицы измерения защитного спрэда. Возможные значения: «PERCENTS» – в процентах (шаг изменения – одна сотая процента),«PRICE_UNITS» – в параметрах цены (шаг изменения равен шагу цены
-- BASE_ORDER_KEY - Регистрационныи? номер заявки-условия. Используется при
-- отправляем заявку на сервер QUIK
local result = sendTransaction(order_params)
if result ~= "OK" then
--если при отправке заявки произошла ошибка, выводим сообщение об ошибке
message("Ошибка при отправке заявки: " .. result)
else
--если заявка была успешно отправлена, выводим сообщение об успешном выполнении
message("Заявка успешно отправлена")
end -- закрываем блок 'if'