Трейлинг- стоп. Как протестировать на quik?

Страницы: 1
RSS
Трейлинг- стоп. Как протестировать на quik?
 
Здравствуйте. Хочу у себя реализовать lua скрипт реализующий функцию трейлинг-стопа с защитным временем. Вопрос в следующем: как правильно поступить, чтобы получить ситуацию, когда цена инструмента делает прокол на несколько процентов и возвращается обратно в течение 1-2 секунд. На игровых серверах таких ситуаций может и не быть совсем. Как моделировать и тестировать такие ситуации?
 
Egor Denisov, Никак. Ловля блох в стиле HFT, да ещё и на таком медленном инструменте, как Квик, ни к чему хорошему не приведёт. Максимум, что можно сделать - если у Вас УЖЕ есть заявка в нужную сторону, при таких прострелах хватать то, что есть по BID или OFFER, и только для того, чтобы зафиксировать прибыль, если она есть.
 
Цитата
Egor Denisov написал:
Здравствуйте. Хочу у себя реализовать lua скрипт реализующий функцию трейлинг-стопа с защитным временем. Вопрос в следующем: как правильно поступить, чтобы получить ситуацию, когда цена инструмента делает прокол на несколько процентов и возвращается обратно в течение 1-2 секунд. На игровых серверах таких ситуаций может и не быть совсем. Как моделировать и тестировать такие ситуации?
На демо серверах такое как раз чаще встречается.


Что же касается вопроса, то не очень понятно, что необходимо сделать. Не подтягивать стоп если это прокол?
Если так, что самое простое - это организовать таймер ожидания функции проверки изменения цены с прошлого опроса. Тогда у Вас проверка будет более большими квантами времени.
Если непрерывно, то, условно, это будет раз в 100 млс. А так - раз в установленное время секунд, скажем раз в 1 сек.

Правда здесь есть вероятность того, что именно во время проверки это аномальное изменение и случится. Для этого можно организовать счетчик. Т.е. если такое случается больше чем 1 раз проверок, то это подтвержденное изменение. Для примера:
Проверяем 1 - нет изменений. Счетчик 0.
Проверяем 2 - есть изменение. Счетчик 1.
Проверяем 3 - уже нет изменения. Счетчик сбрасывается в 0.

В результате изменение пропущено как ложное. Вот если в течении двух отсчетов изменение сохранится, то есть.
 
Цитата
Nikolay написал:
Цитата
Egor Denisov написал:
Здравствуйте. Хочу у себя реализовать lua скрипт реализующий функцию трейлинг-стопа с защитным временем. Вопрос в следующем: как правильно поступить, чтобы получить ситуацию, когда цена инструмента делает прокол на несколько процентов и возвращается обратно в течение 1-2 секунд. На игровых серверах таких ситуаций может и не быть совсем. Как моделировать и тестировать такие ситуации?
На демо серверах такое как раз чаще встречается.


Что же касается вопроса, то не очень понятно, что необходимо сделать. Не подтягивать стоп если это прокол?
как смоделировать ситуацию с проколом, для того что проверить не сработает ли стоп в момент прокола. Как вообще разработчики скриптов для quik тестирует скрипты уже в quik именно на нестандартных ситуациях? Не сидят же сутками и не ждут такие ситуации в реальности, а потом что-то подправляют в коде и опять запускают скрипт и ждут?

Мне всего лишь нужно реализовать элементарный трейлинг стоп, который бы подтягивал стоп автоматом, но не срабатывал из-за ложного прокола. Вот как ложный прокол этот получить непосредственно для теста.
 
Цитата
Egor Denisov написал: Вот как ложный прокол этот получить непосредственно для теста.
Создайте файл, в который будет записываться текущая цена. В основной программе на время теста вы будете читать текущую цену из файла. Затем напишите скрипт, который будет записывать в созданный файл текущую цену (реальную и не очень). В этом скрипте вы сможете создавать ситуацию с проколом в определенный момент времени: записали в файл текущую цену, затем цену на 2% выше, sleep (1000), затем опять текущую (реальную) цену записали.
 
Egor Denisov, А как же иначе? Как ещё узнать поведение скрипта в боевых условиях? Смоделировать-то ситуацию просто: кинуть скрипту подходящую цену, да посмотреть, что он будет с нею делать (хотя и в этом случае эффективнее просто мысленно прокрутить код), но поведение скрипта при тесте и в боевых условиях, это всё равно "две большие разницы". Не "сидеть сутками", конечно, а обложить отладочной печатью и смотреть логи. А отличить ложный прокол от настоящего практически невозможно.
 
Цитата
Игорь М написал:
Цитата
Egor Denisov написал: Вот как ложный прокол этот получить непосредственно для теста.
Создайте файл, в который будет записываться текущая цена. В основной программе на время теста вы будете читать текущую цену из файла. Затем напишите скрипт, который будет записывать в созданный файл текущую цену (реальную и не очень). В этом скрипте вы сможете создавать ситуацию с проколом в определенный момент времени: записали в файл текущую цену, затем цену на 2% выше, sleep (1000), затем опять текущую (реальную) цену записали.
а дальше подменить реальные данные - искуственными?
 
Цитата
Egor Denisov написал:
Цитата
Игорь М написал:
 
Цитата
Egor Denisov  написал: Вот как ложный прокол этот получить непосредственно для теста.
 Создайте файл, в который будет записываться текущая цена. В основной программе на время теста вы будете читать текущую цену из файла. Затем напишите скрипт, который будет записывать в созданный файл текущую цену (реальную и не очень). В этом скрипте вы сможете создавать ситуацию с проколом в определенный момент времени: записали в файл текущую цену, затем цену на 2% выше, sleep (1000), затем опять текущую (реальную) цену записали.
а дальше подменить реальные данные - искуственными?
Вы напишите дополнительный скрипт, который будет записывать цену в файл. Основная программа будет читать эту цену из этого файла вместо реальной цены, которую она получает сейчас из функции getLastPrice, например (или откуда вы её получаете). Дополнительный скрипт тоже будет записывать в файл текущую цену из функции getLastPrice, но дополнительно вы сможете сделать так, чтобы в какое-то время или с какой-либо периодичностью вместо текущей цены из функции getLastPrice в файл записывалась цена функции getLastPrice * 1.02 в течение 1-2 секунд. Это и будет ваш запрограммированный пробой. Можете делать его с началом каждой минуты, одномоментно или быстро, но плавно. Как запрограммируете, так и будет. Можете в нерабочее время, подключившись к серверу, в реальном режиме реакцию основного скрипта тестировать с выставлением/перемещением/срабатыванием реальных стопов.
 
Игорь М, Файл-то зачем? И другой скрипт тоже. Достаточно поставить заглушку на момент получения реальной цены и время от времени её корёжить.
 
Цитата
Egor Denisov написал: а дальше подменить реальные данные - искуственными?
Можно и без файла, а просто модуль дополнительный написать или функцию в основной программе.
 
Цитата
Игорь М написал:
Цитата
Egor Denisov написал: а дальше подменить реальные данные - искуственными?
Можно и без файла, а просто модуль дополнительный написать или функцию в основной программе.
а есть какой-то посмотреть?
 
Цитата
Egor Denisov написал:
Цитата
Игорь М написал:
 
Цитата
Egor Denisov  написал: а дальше подменить реальные данные - искуственными?
 Можно и без файла, а просто модуль дополнительный написать или функцию в основной программе.
а есть какой-то посмотреть?
* пример
 
Цитата
Egor Denisov написал: * пример
Так какой тут пример, реализаций же много можно придумать. Если вам просто для короткого теста, сделайте так:
Код
local T_PRICE = {150210, 150230, 150240, 150230, 150250, 150280, 150350, 150570, 150850, 150980, 150320, 150580, 151020, 151640, 150680, 150450, 150270, 150260, 150280}
local cnt = -10

local function getMyLastPrice ()                      --  функция получения цены последней сделки
   cnt = cnt + 1
   if cnt < 1 or cnt > #T_PRICE then
       return getParamEx (CLASS_CODE, SEC_CODE, "LAST").param_value       -- получение таблицы из ТТТ (цена последней сделки)
     else
       return T_PRICE[cnt]
   end
end
Таблица T_PRICE - это ваш рукописный вынос вверх примерно на 1% . Функция getMyLastPrice возвращает первые 10 циклов основной программы реальную цену, затем цену этого выноса, потом снова реальную цену (цену для sendTransaction преобразовать не забудьте). Забивайте в таблицу T_PRICE любые значения, которые нужны для теста. В вашей основной программе циклически идет определение последней цены, согласно которой и двигается стоп-заявка, например:
Код
   while is_run do
       if isConnected () == 1  then
           last_price = getMyLastPrice ()
           -- здесь будет реализация вашего алгоритма манипулирования стоп-заявкой с использованием смоделированной цены (last_price)
       end
       sleep (200)
   end
 
Цитата
Egor Denisov написал:
Здравствуйте. Хочу у себя реализовать lua скрипт реализующий функцию трейлинг-стопа с защитным временем. Вопрос в следующем: как правильно поступить, чтобы получить ситуацию, когда цена инструмента делает прокол на несколько процентов и возвращается обратно в течение 1-2 секунд. На игровых серверах таких ситуаций может и не быть совсем. Как моделировать и тестировать такие ситуации?
Можно сделать это в КВИК, а можно и без него
==================  
Для начала надо создать тестовые данные.
----------------------
Выбираем на истории нужный участок  и пишем его в файл,
можно скачать данные истории с сайта финам
или вывести из терминала КВИК
--------------------------
Далее можно корректировать тестовые данные создавая различные движения цены.
==========
После этого пишем свою функцию стопа.
--------------------------
Затем выполняем ее тестирование.
=================
Вариант в терминале КВИК.
----------------------------
Вставляем свою функцию в КВИК например в индикатор
и подменяем реальную цену торгов значением из текстового файла.
======================
Вариант без КВИК.
удобно делать в редакторе SciTe,  в котором можно исполнять скрипты.
----------------
в SciTe пишем свою функцию и исполняем ее с тестовыми данными из файла
--------------------
Примерно так.
Страницы: 1
Читают тему
Наверх