Цена сделки вне лимита

Страницы: 1
RSS
Цена сделки вне лимита, Как избавиться от данной ошибки?
 
Доброго времени суток, возникла проблема с ошибкой "Цена сделки вне лимита". Ситуация следующая:

Написал скрипт на луа, скрипт работает таким образом образом - появляется сигнал на вход, скрипт открывает короткую или длинную позицию, далее работает блок трейлинг-стопа. Трейлинг работает внутри скрипта, без перевыставления заявки в квике. Как только цена достигнет уровня стоп-лосса посылается заявка на закрытие позиции, в таблице сообщений появляется запись о том, на сколько пунктов был убыток. После выхода из позиции по трейлинг-стопу сразу же открывается противоположная позиция, т.е. если закрылась длинная, то открывается короткая и наоборот. По сути происходит переворот позиции.

В ходе теста на реальном счете выяснилось что, блок входа в позицию работает отлично, трейлинг-стоп работает отлично, переворот работает отлично. Получается что работает все как и задумано, кроме одного. Во время вечернего клиринга (торгую на фортс), если открыта (ИМЕННО!!!) короткая позиция скрипт пытается выйти по трейлинг-стопу, и появляется ошибка "Цена сделки вне лимита". На сколько я понимаю, квик выдает какой-то параметр равным 0 или равным не пойми чему, т.к. в сообщении об убытке совершенно непомерные числа (скрин ниже). Код прилагаю, хотелось бы понять, какие значения обнуляются (или изменяются) в квике в момент вечернего клиринга. Бьюсь с проблемой уже долго, добавлял разные фильтры на предмет проверки параметров что они не 0. Вычислить не смог.

Часть кода выхода из позиции:
Код
local last_price = getParamEx(classcode, seccode, "LAST").param_value   -- Цена последней сделки из таблицы текущих параметров
                     
БЛОК ТРЕЙЛИНГ-СТОПА
                        
exit_price = price + stop_level_2000 + sl      -- Цена выхода по стоп-лоссу (через трейлинг-стоп)

if tonumber(last_price) >= tonumber(exit_price) and tonumber(last_price) ~= nil and tonumber(last_price) > z then   -- ПРОБИТ УРОВЕНЬ СТОП-ЛОССА, последние 2 условия возможно не нужны, пытался отловить эту ошибку
                        
    exit_price = exit_price + p            -- Скорректированная (рыночная) цена, p = 200
    Sl_and_tp_for_sell(exit_price, 9999)      -- Выход из короткой позиции по стоп-лоссу, 9999 - id заявки
    message("Осуществлен выход по стоп-лоссу из короткой позиции. Убыток составил "..math.abs(price-(exit_price+p)).." пунктов.")
    stop_loss_sell = true            -- Флаг выхода по стоп-лоссу из короткой позиции активен
    stop_loss_buy = false            -- Флаг выхода по стоп-лоссу из длинной позиции снят
    sell_to_buy = false               -- Флаг переворота позиции снят, т.е. далее будет переворот
    stop_level_2000 = 0               -- Сброс трейлинг-стопа 
                           
end



P.S. Тест веду на фьючерсе Si-12.16. В сообщении "убыток составил..." примерная цена вечернего клиринга.  
 
Забыл указать, что параметр "price" в третьей строке и далее, это цена текущей сделки из таблицы сделок.
 
В Квике все получаемые параметры из терминала надо проверять не только на nil, но и на ноль:

Код
local last_price = getParamEx(classcode, seccode, "LAST").param_value
if last_price == nil then
  -- Ошибка получения цены последней сделки
elseif last_price == 0 then
  -- отправляем гневное сообщение в адрес разработчиков
else
  -- работаем дальше
end

Уверен, что такая же беда при вычислении
Код
exit_price = price + stop_level_2000 + sl
Я не могу быть заинтересован в устранении ошибок в чужом ПО больше, чем его разработчик.
Страницы: 1
Читают тему (гостей: 1)
Наверх