RC2 (Автор тем)

Выбрать дату в календареВыбрать дату в календаре

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

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

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

В целом мне необходимо реализовать трейлинг-стоп, но без выставления заявки, т.е расчет трейлинг-стопа должен быть в скрипте. На сколько я понимаю это не сделать без сохранения цен во внешний файл, т.к. между итерациями все переменные обнуляются. С добавлением строки в файл я разобрался, а вот считать последнее добавленное значение не получается. Как можно взять это значение?
Преобразование времени в число
 
Здравствуйте, решил переходить с qpile на qlua и сразу же возникла следующая проблема:
на qpile я беру время сервера таким образом
Код
SERVERTIME = GET_INFO_PARAM("SERVERTIME")
Время получается в формате чч:мм:сс, например 14:36:48, затем я преобразую это время в число
Код
time = SUBSTR(SERVERTIME,0,2) & SUBSTR(SERVERTIME,3,2) & SUBSTR(SERVERTIME,6,2)
Получается time = 143648, далее при использовании этой переменной я добавляю "+0", например
Код
time+0 > 130000
Вопрос, как мне в qlua привести время к такому же формату?
Время с сервера я беру таким образом
Код
servertime = getInfoParam("SERVERTIME")
А дальше засада, не пойму как перевести к числовому виду и как преобразовать потом полученное значение в число.
Несколько экземпляров амиброкера, Возможно ли подключение нескольких экземпляров амиброкера к квику?
 
Есть робот написанный на AFL (язык амиброкера). Робот торгует только на одном таймфрейме. Нужна торговля одновременно на 3-4 таймфреймах. Возможно ли подключить к одному торговому счету (одному терминалу квик) несколько экземпляров амиброкера, чтобы каждый торговал на своем таймфрейме? На данный момент это самый простой вариант, если нельзя, то на каком языке проще будет переписать робота торгующего одновременно на нескольких таймфреймах, на qlua или qpile?  
Страницы: 1
Наверх