У вас не стоит Flash Player
Настройки
#70925 - Thu Jun 18 2015 01:58 PM Отложенный ордер на баре открытия позиции.
lukas Offline
stranger

Registered: Wed Mar 25 2015
Записи: 7
Добрый день.
Вкраце о проблеме:
Возникла необходимость строить линии поддержки и сопротивления. Поскольку TSLab не предоставляет такой возможности, то был реализован класс, который по тангенсу рассчитывает линию для всех баров между двумя задаваемыми точками. Алгоритм входа в позицию работает при закрытии бара выше(ниже) линии поддержки или сопротивления. Возникает проблема следующего характера:
1. Рабочий таймфрейм часовой;
2. Необходимо выставлять стоплосс сразу или, хотя бы, через минуту;
3. Необходимо реализвать один скрипт, который будет работать и в лаборатории, и в агенте;
4. Для того, чтобы выставить стоплосс через минуту, необходимо использовать основной таймфрейм - минутный, а расчетным - часовой, используя компрессию (спасибо RusAlgo за статьи).
5. Но построить линию поддержки(сопротивления) на часовом таймфреме, полученным методом компрессии, либо не представляется возможным, либо будет очень ресурсозатратным, поскольку при компрессии один часовой бар представляется массивом одинаковых баров, размерностью 60 или менее.

Было предложено следующее решение:

1. На баре открытия позиции дополнительно выставляется противоположный отложенный ордер на место стоплосса;
2. Если на следующем баре отложенный ордер не сработал, то он снимается и для позиции начинает выставляться стоплосс;
3. Если на следующем баре стало известно, что отложенный ордер сработал, то все позиции закрываются.

Для реализации такой модели был написан класс, который отлично работает в лаборатории.

Возникает следующие два вопроса:
1. Какие проблемы могут возникнуть при реальной торговле?
2. Есть ли в TsLab функция, которая позволяет не закрывать позицию, а просто про нее "забыть".

Спасибо.

p.s. Прикладываю файл с классом открытия позиции и пример на обычных скользящих средних.


Attachments
CPosition.cs (63 downloads)
PositionTest.cs (51 downloads)


Наверх
#70932 - Thu Jun 18 2015 09:51 PM Re: Отложенный ордер на баре открытия позиции. [Re: lukas]
Kermit Offline
enthusiast

Registered: Wed Jan 18 2012
Записи: 256
На реальных торгах будет две комиссии, два спреда, два проскальзывания. Идея прямо скажем не фонтан.
Все намного проще делается. Два скрипта - один на часовике считает индикаторы, другой на минутах/секундах/тиках торгует.

Наверх
#70942 - Fri Jun 19 2015 06:31 AM Re: Отложенный ордер на баре открытия позиции. [Re: Kermit]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
не очень ясно в чем проблема использования сжатого таймфрейма. Берете часовые бары и считаете. О каких там 60 барах внутри каждого бара идет речь вообще не ясно.
_________________________
__


Наверх
#70952 - Fri Jun 19 2015 11:45 AM Re: Отложенный ордер на баре открытия позиции. [Re: ra81]
lukas Offline
stranger

Registered: Wed Mar 25 2015
Записи: 7
Originally Posted By: ra81
не очень ясно в чем проблема использования сжатого таймфрейма. Берете часовые бары и считаете. О каких там 60 барах внутри каждого бара идет речь вообще не ясно.


Постараюсь объяснить.
Основной таймфрейм минутный для быстрого выставления стоплосса.
Рассчитать линии поддержки необходимо на часовом таймфрейме.
Если использовать компрессию, то возникает проблема следующего характера:

//Компрессия минуток в часовики
var compressed = sec.CompressTo(new Interval(60, DataIntervals.MINUTE));

Теперь, если я обращусь к первому и второму элементу, то я получу одинаковые значения, то есть

compressed.Bars[0].Open == compressed.Bars[1].Open

И так 60 элементов. То есть по сути сжатый массив имеет такую же размерность, как и минутный, в котором дублируются бары. Но проблема в том, что если хоть один минутный бар в котировках будет пропущен, то одинаковых баров в это часе будет не 60, а 59, поэтому формулу Compressed.Bars[j*60+1].Open, где j - индекс часового бара - использовать нельзя.

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

Надеюсь, вы поняли суть моей проблемы =)


Отредактировано lukas (Fri Jun 19 2015 12:01 PM)

Наверх
#70953 - Fri Jun 19 2015 11:52 AM Re: Отложенный ордер на баре открытия позиции. [Re: Kermit]
lukas Offline
stranger

Registered: Wed Mar 25 2015
Записи: 7
Originally Posted By: Kermit
На реальных торгах будет две комиссии, два спреда, два проскальзывания. Идея прямо скажем не фонтан.
Все намного проще делается. Два скрипта - один на часовике считает индикаторы, другой на минутах/секундах/тиках торгует.


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

У меня еще есть пару вопросов:

1. надеюсь, я правильно понял, что, для того, чтобы условная заявка больше не выставлялась, просто надо на следующем пересчете про нее "забыть", то есть не вызывать функцию BuyIfGreater, SellIfLess и т. д.?

2. просто для уточнения:
sec.Positions.SellIfLess(i+1, shares, stoploss, sStoplossName);
На следующих пересчетах:
stoplossPosition = sec.Positions.GetLastActiveForSignal(sStoplossName, i);
в этом случае stoplossPosition == false, если условная заявка еще не сработала?

Спасибо =)

p.s. Идея с двумя скриптами не подходит, поскольку необходимо, чтобы скрипт работал и в лаборатории. Хотя, спасибо за наводку wink


Отредактировано lukas (Fri Jun 19 2015 12:05 PM)

Наверх
#70954 - Fri Jun 19 2015 12:31 PM Re: Отложенный ордер на баре открытия позиции. [Re: lukas]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
И откуда вы взяли такой вывод?
Code:
Теперь, если я обращусь к первому и второму элементу, то я получу одинаковые значения, то есть
compressed.Bars[0].Open == compressed.Bars[1].Open

Это уже что то из области "сам придумал сам решаю".
По факту сжатые бары будут отличаться и не будет никаких там равенств и так далее.
_________________________
__


Наверх
#70955 - Fri Jun 19 2015 01:06 PM Re: Отложенный ордер на баре открытия позиции. [Re: ra81]
lukas Offline
stranger

Registered: Wed Mar 25 2015
Записи: 7
Да, действительно, дебаггер сказал по поводу равенства, что Вы правы. Я уже загоняюсь.
Надеюсь, с декомпрессией линии с часового на минутку у меня не возникнет проблем.

Спасибо =)

Наверх
#70971 - Sat Jun 20 2015 12:13 AM Re: Отложенный ордер на баре открытия позиции. [Re: lukas]
Kermit Offline
enthusiast

Registered: Wed Jan 18 2012
Записи: 256
1. Да. Если не вызывать метод то заявка снимется.
2. Нет. stoplossPosition == null.

Наверх


Moderator:  ViL, sar