Exchange working time

23 views
Skip to first unread message

dart

unread,
Sep 22, 2010, 7:51:45 AM9/22/10
to Stock#
У меня неправильно время окончания первой свечки считает вот этим
методом:
_nextTime = base.TimeFrame.GetCandleBounds(base.Trader).Max;
Как можно узнать время начала работы биржи узнать?
В блоге находил такое:
var dateTime = DateTime.Today + exchange.WorkingTime.First().Min;
Не работает. По-разному пробовал.
А нельзя самому задавать время работы биржи, как это делается в прогах
теханализа?

Mikhail Sukhov

unread,
Sep 22, 2010, 9:46:27 AM9/22/10
to Stock#
А что значит не работает? Можете описать подробнее?

dart

unread,
Sep 22, 2010, 10:01:06 AM9/22/10
to Stock#
Просто VS не даёт прописать First к WorkingTime. Пишет - не содержит
определения для First:
var dateTime = DateTime.Today + Exchange.Rts.WorkingTime.First().Min;

Метод GetCandleBounds начинает считать для РТС с 10:00 если я
правильно понимаю. То есть к примеру:
свеча с ТФ 57 мин, должна заканчиваться в 10:57 по идее.

Mikhail Sukhov

unread,
Sep 22, 2010, 10:11:38 AM9/22/10
to Stock#
Потому что используется LINQ Надо прописать using System.Linq

dart

unread,
Sep 23, 2010, 5:52:43 AM9/23/10
to Stock#
По этой команде:
_nextTime = base.TimeFrame.GetCandleBounds(base.Trader).Max
у меня свечки отсчитываются со времени 0:00:00.
То есть например, первая свечка с ТФ 4 часа начнётся (имеется ввиду
candle.Time) в 8:00, следующие в 12:00, затем в 16:00 и т.д.
А начало торгов в РТС 10:00, здесь всё верно.

Mikhail Sukhov

unread,
Sep 23, 2010, 5:59:44 AM9/23/10
to Stock#
А чему равен ITrader.MarketTime?

dart

unread,
Sep 23, 2010, 6:02:37 AM9/23/10
to Stock#
Сейчас проверил для ТФ 3 часа.
Время окончания текущей свечи _nextTime = 15:00.
Соответственно предыдущие свечки начинались в 12:00. И candle.Time
первой свечки этого дня = 9:00.

dart

unread,
Sep 23, 2010, 6:06:33 AM9/23/10
to Stock#
base.Trader.MarketTime даёт текущее квиковское время, т.е. Москвы.
Здесь всё время Московское указано.
Сейчас для 3 часового ТФ я замерял _nexttime было равно 15:00. При
этом MarketTime было равно 13:58:41.
Всё в файле записано

Mikhail Sukhov

unread,
Sep 23, 2010, 6:50:41 AM9/23/10
to Stock#
Так а где проблема то?

dart

unread,
Sep 23, 2010, 6:55:45 AM9/23/10
to Stock#
Так свечки рисуются неправильно.
Сейчас пытаюсь перенести стратегию из Омеги в S#. Там свечки строятся
с начала работы биржи, как и в любой другой проге теханализа. То есть
к примеру первая 4-часовая свеча заканчивается в 14:00 А в S# по-
другому - в 12:00. Соответственно не получается перенести.
Свечки должны строиться с момента начала работы биржи. Это будет
правильно.

Mikhail Sukhov

unread,
Sep 23, 2010, 7:40:07 AM9/23/10
to Stock#
Переносите с поправками. Свечки в S# строяться не с какого то момента.
Они имеют свое собственно время. CandleManager строит свечки по тикам.
Выражение же base.TimeFrame.GetCandleBounds(base.Trader).Max к свечкам
относиться постольку, поскольку. Они лишь говорит, что текущая свечка
(понятие текущая берется из ITrader.MarketTime) с длинной
base.TimeFrame имеет такое то начало и окончание. Если Вы пишите, что
ITrader.MarketTime возвращает все ок, то значит проблема в
base.TimeFrame. Не нулю ли он равен?

dart

unread,
Sep 23, 2010, 7:57:24 AM9/23/10
to Stock#
То есть для ТФ 4ч так писать?
_nextTime =
base.TimeFrame.GetCandleBounds(base.Trader).Max.AddHours(2)

base.Trader.MarketTime даёт текущее квиковское время.
base.TimeFrame в данном примере и равен 4 часам.

dart

unread,
Sep 23, 2010, 8:13:11 AM9/23/10
to Stock#
> Переносите с поправками. Свечки в S# строяться не с какого то момента.
> Они имеют свое собственно время. CandleManager строит свечки по тикам.

Так у меня и
var candle = _candleManager.GetTimeFrameCandle(base.Security,
base.TimeFrame, base.TimeFrame.GetCandleBounds(base.Trader).Min);
candle.Time (время текущей свечи) = 8:00, затем 12:00 и т.д.


On 23 сен, 18:40, Mikhail Sukhov <msouk...@gmail.com> wrote:

dart

unread,
Sep 23, 2010, 8:16:58 AM9/23/10
to Stock#
А, понял. И вот тут так сделать:

var candle = _candleManager.GetTimeFrameCandle(base.Security,
base.TimeFrame,
base.TimeFrame.GetCandleBounds(base.Trader).Min.AddHours(2));

Mikhail Sukhov

unread,
Sep 23, 2010, 9:23:02 AM9/23/10
to Stock#
Я бы не использовать GetCandleBounds напрямую. Данный метод вычисляет
границы свечки не учитывая время работы биржи. Сделайте свой аналог,
чтобы время было кратно началу работы биржи.

dart

unread,
Sep 24, 2010, 3:11:53 AM9/24/10
to Stock#
Интересное явление. Как ввожу временную поправку, чтобы время свечи
правильно считалось, текущая свеча получается всё время null.
Как только поправку убираю, всё строится правильно, но при этом время
свечи, естественно, считается не с начала работы биржи.
Может всё-таки RegisterTimeFrameCandles имеет какую-то временную
привязку?

Mikhail Sukhov

unread,
Sep 27, 2010, 5:21:49 AM9/27/10
to Stock#
В Вашем случае самый дешевый вариант - стоить свечки часовые. А их уже
собирал в 4-ех часовые с нужного временного отсчета.

dart

unread,
Sep 27, 2010, 6:14:11 AM9/27/10
to Stock#
Понятно, но у меня время свечи даже не кратно часу.
Придётся выбирать самый малый ТФ, который кратен моему
Reply all
Reply to author
Forward
0 new messages