Exchange working time
Atom Ответить
22.09.2010


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


Теги:


Спасибо:




17 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 22.09.2010
Ответить


А что значит не работает? Можете описать подробнее?

Спасибо:

dart

Фотография
Дата: 22.09.2010
Ответить


Просто VS не даёт прописать First к WorkingTime. Пишет - не содержит
определения для First:
var dateTime = DateTime.Today + Exchange.Rts.WorkingTime.First().Min;

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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 22.09.2010
Ответить


Потому что используется LINQ Надо прописать using System.Linq

Спасибо:

dart

Фотография
Дата: 23.09.2010
Ответить


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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.09.2010
Ответить


А чему равен ITrader.MarketTime?

Спасибо:

dart

Фотография
Дата: 23.09.2010
Ответить


Сейчас проверил для ТФ 3 часа.
Время окончания текущей свечи _nextTime = 15:00.
Соответственно предыдущие свечки начинались в 12:00. И candle.Time
первой свечки этого дня = 9:00.

Автор топика
Спасибо:

dart

Фотография
Дата: 23.09.2010
Ответить


base.Trader.MarketTime даёт текущее квиковское время, т.е. Москвы.
Здесь всё время Московское указано.
Сейчас для 3 часового ТФ я замерял _nexttime было равно 15:00. При
этом MarketTime было равно 13:58:41.
Всё в файле записано

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.09.2010
Ответить


Так а где проблема то?

Спасибо:

dart

Фотография
Дата: 23.09.2010
Ответить


Так свечки рисуются неправильно.
Сейчас пытаюсь перенести стратегию из Омеги в S#. Там свечки строятся
с начала работы биржи, как и в любой другой проге теханализа. То есть
к примеру первая 4-часовая свеча заканчивается в 14:00 А в S# по-
другому - в 12:00. Соответственно не получается перенести.
Свечки должны строиться с момента начала работы биржи. Это будет
правильно.

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.09.2010
Ответить


Переносите с поправками. Свечки в S# строяться не с какого то момента.
Они имеют свое собственно время. CandleManager строит свечки по тикам.
Выражение же base.TimeFrame.GetCandleBounds(base.Trader).Max к свечкам
относиться постольку, поскольку. Они лишь говорит, что текущая свечка
(понятие текущая берется из ITrader.MarketTime) с длинной
base.TimeFrame имеет такое то начало и окончание. Если Вы пишите, что
ITrader.MarketTime возвращает все ок, то значит проблема в
base.TimeFrame. Не нулю ли он равен?

Спасибо:

dart

Фотография
Дата: 23.09.2010
Ответить


То есть для ТФ 4ч так писать?
_nextTime =
base.TimeFrame.GetCandleBounds(base.Trader).Max.AddHours(2)

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

Автор топика
Спасибо:

dart

Фотография
Дата: 23.09.2010
Ответить


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

Автор топика
Спасибо:

dart

Фотография
Дата: 23.09.2010
Ответить


А, понял. И вот тут так сделать:
var candle = _candleManager.GetTimeFrameCandle(base.Security,
base.TimeFrame,
base.TimeFrame.GetCandleBounds(base.Trader).Min.AddHours(2));

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.09.2010
Ответить


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

Спасибо:

dart

Фотография
Дата: 24.09.2010
Ответить


Интересное явление. Как ввожу временную поправку, чтобы время свечи
правильно считалось, текущая свеча получается всё время null.
Как только поправку убираю, всё строится правильно, но при этом время
свечи, естественно, считается не с начала работы биржи.
Может всё-таки RegisterTimeFrameCandles имеет какую-то временную
привязку?

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 27.09.2010
Ответить


В Вашем случае самый дешевый вариант - стоить свечки часовые. А их уже
собирал в 4-ех часовые с нужного временного отсчета.

Спасибо:

dart

Фотография
Дата: 27.09.2010
Ответить


Понятно, но у меня время свечи даже не кратно часу.
Придётся выбирать самый малый ТФ, который кратен моему

Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy