Секреты TSLab | Торговые роботы | События
10 Ноя

Виртуальные позиции в TSLab.

Для трейдера не существует понятия “виртуальные позиции”, поэтому для него данный термин может быть достаточно туманен. Но если вы начали работать с TSLab, то столкнетесь с этими “виртуальными” позициями рано или поздно. О них я даже уже упоминал в прошлых статьях. Зачем они нужны? Какая с них польза? Может быть даже опасность? Обо всем этом и поговорим ниже.

Виртуальные позиции в TSLab, или реально о нереальном.

Итак, что же есть такое эти “виртуальные позиции”? Фактически, это позиции которых на самом деле нет, но ваш алгоритм думает что они есть. Вот такие дела. И прежде чем начать кидаться ботинками в разработчиков и кричать: “Ату его!” – предлагаю разобраться. Быть может, эти виртуальные позиции приносят пользу? Узнаем ниже, но для начала хочется дать четкое определение виртуальной позиции:

Виртуальная позиция – это такая позиция, которую ваш торговый робот воспринимает как реально существующую позицию. Он может отслеживать прибыль/убыток и другие параметры данной позиции. У данной позиции есть цена входа и  есть цена выхода (если она была закрыта). Ну, и раз есть цена выхода, то данную позицию можно закрыть если уж она была открыта. У данной позиции только один недостаток – она реально не существует и на вашем депозите никак не отражается. И даже если вы заработали  на ней огромный профит, увы, ваш профит тоже виртуален.

В каких ситуациях мы можем получать виртуальные позиции вместо реальных? Можно предположить что сознательно мы не очень хотим это делать.

  1. Торговый робот должен быть запущен в режиме агента.
  2. У вас должен быть пропущенный вход.

В общем и целом, достаточные простые и понятные условия. Вы можете сами все смоделировать, поэтому прикладывать большие картинки, и писать длинную  инструкцию я не буду.

И что со всем этим делать? И как, собственно, понять что у нас позиция реальная, а не виртуальная? Какие вообще фокусы могут быть из-за этих виртуальных позиций? Про фокусы у меня неплохо получилось рассказать в одной из прошлых статей про запрос активных позиций, поэтому не буду повторяться. Сосредоточимся на способах работы с этими виртуальными позициями.

Польза или вред?

Давайте разбираться, чего больше в этих виртуальных позициях. Где хорошее, а где плохое. И как нам взять хорошее и не огрести плохого на наш депозит. Сразу оговорюсь, что рассматриваю ситуацию, когда мы в режиме агента и пытаемся реально торговать.

Попытки определить пользу, приносимую виртуальными позициями, успешно провалились. Я думал, гадал, но так и не надумал ничего. Вероятно, их существование объясняется текущей парадигмой TSLab. Для чего-то их ввели и приходится с ними мириться. Они могли бы приносить реальную пользу если бы была возможность создавать их сознательно и работать с ними особым образом. Но сейчас такой возможности нет, как нет и пользы. По секрету расскажу что обещают такую фичу в новых версиях :).

Вреда же они могут нанести достаточно много. Взять хотя бы показательный пример из прошлой статьи. Как видим, позиция то есть, то ее уже нет. В итоге, логика вашего торгового робота может исказиться до неузнаваемости. И если нет понимания всей подоплеки, то понять все эти фокусы TSLab будет весьма непросто.

В общем, остается только мириться с их присутствием. Есть таки способ определения виртуальности позиции и это уже радует. Правда есть он только для тех кто использует TSLab API. Но если так случилось, и вы “вляпались” в виртуальную позицию, что делать?

Как виртуальное сделать реальным?

Для лечения виртуальных позиций есть только один способ: сделать ее реальной. Как я уже говорил выше, виртуальная позиция возникнет в момент пропущенного входа. Следовательно, нейтрализуйте пропущенный вход и вы задавите виртуальную позицию в зародыше, а так же аннигилируете все возможные негативные последствия существования виртуальной позиции. Делается это очень просто через менеджер команд. Достаточно просто нажать на кнопку выполнить по рынку для вашего пропущенного сигнала. После совершения сделки ваша виртуальная позиция станет реальной и все будет хорошо (точка входа в реальную позицию может быть смещена от точки входа в виртуальную позицию если вы поздно среагировали на пропущенный вход). Собственно картинки:

Виртуальные позиции в TSLab.

Рисунок 1. И вдруг, появилась виртуальная позиция.

Виртуальные позиции в TSLab.

Рисунок 2. Волшебная кнопка.

Ладно, с этим разобрались. Но если есть необходимость внутри алгоритма находить эти виртуальные позиции и не учитывать их в логике? Как быть тут?

Как поймать виртуальную позицию за хвост.

Тут все проще не бывает. У каждой позиции в TSLab есть свойство IsVirtual (о том как правильно работать с позициями можно почитать в цикле статей Запрашиваем открытые позиции правильно). Если оно равно TRUE, значит позиция виртуальная, иначе она реальная. Есть еще одно свойство IsVirtualClosed, но работает оно не так как от него можно ожидать, и мой вам совет, не использовать данное свойство вообще. IsVirtual дает однозначный ответ на то, какая позиция у нас под лупой, а во всем остальном виртуальная позиция ведет себя точно так же как реальная.

В качестве примера, функция расчета прибыли на заданном баре. Да, есть такой кубик и делает он похожее, но мне удобнее использовать свои наработки. По крайне мере, всегда уверен в том как они будут работать :).

        /// <summary>
        /// Возвращает общий профит в единицах валюты по всем позициям на заданной свече.
        /// Если флаг <paramref name="fullPos"/> FALSE то профит считается по 1 контракту для каждой позиции.
        /// </summary>
        /// <param name="positionsList">Список позиций</param>
        /// <param name="bar">Номер свечи</param>
        /// <param name="fullPos">Расчет вести по полной позиции или по 1 контракту</param>
        /// <param name="allowVirtual">Учитывать в расчете виртуальные позиции или нет. 
        ///                            Если TRUE то учитывать, иначе учитывать только реальные позиции.</param>
        /// <returns></returns>
        public static double TotalProfit(this IPositionsList positionsList, int bar, bool fullPos = true, bool allowVirtual = true)
        {
            // Выбираем только те позиции, которые либо еще не закрыты либо уже закрыты для заданного бара.
            // Если все позиции брать подряд получим учет и будущих позиций тоже что неверно.
            var positions = positionsList.GetClosedOrActiveForBar(bar);

            // OpenProfit не учитывает комиссию на вход/выход из позиции.
            // Если опция allowVirtual отключена, не учитываем виртуальные позиции.
            return positions.Sum(p =>
            {
                if (!allowVirtual && p.IsVirtual)
                    return 0;

                if (p.IsActiveForbar(bar))
                    return fullPos
                        ? p.PositionOpenProfit(bar)
                        : p.OpenProfit(bar);
                else
                    return fullPos
                        ? p.Profit()
                        : p.Profit() / p.PosSize();
            });
        }

Функция может не учитывать виртуальные позиции при расчете полного профита, в зависимости от параметра. Вот и вся наука.


comments powered by HyperComments

usas
2014-11-13 14:15:41
Кроме превращения виртуальной позиции в реальную её можно попросту убрать и не парится - для этого нужно выделить данный скрипт в окне управления агентами и нажать кнопку "убрать текущие торговые ошибки". На следующем пересчете эта позиция исчезнет..
ra81
2014-11-16 12:51:47
Как вариант :). Но не очень хороший. Так как логика нарушается. Больше предпочитаю войти в позицию.
Alexandr Onishkevich
2015-04-18 16:50:50
А у меня другая проблема и по моему она то же связана с Виртуальной позицией. Сигнал на вход генериться в течении 2-5 баров, заявки выставляется лимитками по цене закрытия пред. бара. В случае когда появляется сигнал на вход на след свече если открытие было по нужной цене но потом цена резко ушла и заявка не исполнилась, появляется виртуальная позиция и пропущенный вход на след баре. И проблема в том, что в отличии от тестов, в реале по следующим сигналам позиция уже не открывается. Возможно ли это?
ra81
2015-04-19 07:51:41
да это обычное поведение. Если реально входа не вышло, так как рынок успел убежать, тогда имеете пропущенный вход и получаете виртуальную позицию. Пока она не будет виртуально же закрыта вы не сможете войти в позицию с таким же сигналом снова. Но вход еще ладно, выход из позиции может приводить к пропущенному выходу, а это уже куда более опасная история :)
Alexandr Onishkevich
2015-04-19 15:56:50
Вся опасность я уже не раз почувствовал :( А если у меня в настройках будет стоять "Виртуальная позиция макс свечей" = 1. То виртуальная позиция пропадет на след баре?
ra81
2015-04-20 08:35:10
Если она появилась при пропущенном входе то да. Она пропадет и можно будет войти снова. В статье об этой опции забыл рассказать. Но пропущенный выход так не лечится.
Alexandr Onishkevich
2015-04-20 11:55:41
А пропущенный выход лечиться только кнопкой "выполнить" в менеджере команд?
ra81
2015-04-20 15:02:06
по сути да. Только так. Или установкой автозакрытия в 1 и более. Либо по рынку автоматом закроет, либо ручные манипуляции. В случае большой позиции, может быть накладно по проскальзыванию.
Диана
2017-01-02 11:19:13
Секс знакомства http://bit.ly/2hkF2s9
8
Сен
2017

Доверительное управление. Результаты в августе 2017 года.

Доверительное управление. Результаты в августе 2017 года. Стратегия “Опционы” принесла в августе прибыль в размере… »

6
Авг
2017

Доверительное управление. Результаты в июле 2017 года.

Доверительное управление. Результаты в июле 2017 года. В июле индекс РТС вновь колебался в достаточно узком… »

14
Июл
2017

Доверительное управление. Результаты в июне 2017 года.

Доверительное управление. Результаты в июне 2017 года. Июнь индекс РТС вновь провел преимущественно в боковых движениях, а… »

11
Июн
2017

Доверительное управление. Результаты в мае 2017 года.

Доверительное управление. Результаты в мае 2017 года. В мае “болтанка” индекса РТС продолжилась, на паре… »

7
Май
2017

Доверительное управление. Результаты в апреле 2017 года.

Доверительное управление. Результаты в апреле 2017 года. В апреле мы наблюдали очередной месяц “боковика” по… »