Как получить текущую свечку?
Atom Ответить
05.07.2010


В примере SampleSMA пытаюсь получить текущую, не сформировавшуюся
свечку, чтобы закрывать позицию по стопу, и никак не выходит:
_candleManager.GetTimeFrameCandle(base.Security, base.TimeFrame,
_nextTime - base.TimeFrame) - возвращает последнюю сформированную
свечку
_candleManager.GetTimeFrameCandle(base.Security, base.TimeFrame,
_nextTime ) - всегда возвращает null

Как получить текущую свечку?

Теги:


Спасибо:




13 Ответов
Mikhail Sukhov

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


_candleManager.GetTimeFrameCandle(base.Security, base.TimeFrame,
_trader.MarketTime)

Спасибо:

Ivan Kochetkov

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


И так не получается, всегда null. Вот код
protected override bool OnProcess()
{
// если наша стратегия в процессе остановки
if (base.ProcessState == StrategyProcessStates.Stopping)
{
// отменяем стратегию
base.Orders.Where(o => o.State ==
OrderStates.Active).ForEach(base.Trader.GuarantyCancelOrder);
// так как все активные заявки гарантированно были отменены, то
возвращаем false
return false;
}

var candleCur =
_candleManager.GetTimeFrameCandle(base.Security, base.TimeFrame,
Trader.MarketTime);

if (candleCur != null )
{
if (LastPosition.Type == PositionType.Long) ////
никогда сюда не заходит
...
}

// событие обработки торговой стратегии вызвалось впервый раз,
что раньше, чем окончания текущей 5-минутки.
if (base.Trader.MarketTime < _nextTime)
{
// возвращаем true, так как наш алгоритм еще не закончил свою
работу, а просто ожидает следующего вызова.
return true;
}

// получаем сформированную свечку
var candle = _candleManager.GetTimeFrameCandle(base.Security,
base.TimeFrame, _nextTime - base.TimeFrame);
// если свечки не существует (не было ни одной сделке в тайм-фрейме),
то ждем окончания следующей свечки.
if (candle == null)
return true;

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

Mikhail Sukhov

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


Начнем с простого - CandleManager.NewCandles вообще вызывается?

Спасибо:

Ivan Kochetkov

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


Да, на графике все свечки есть, в том числе и текущая

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

Mikhail Sukhov

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


Тоесть, она на графике изменяется, появляются другие текущие свечки?
Тогда экспорт идет правильно. А Вы случаем с биржей временного
смещения не имеете?

Спасибо:

Ivan Kochetkov

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


Нет, поставил на компе московское время

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

Mikhail Sukhov

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


Тогда как-то странно. График ведь берет из того же источника... А
OnProcess как часто вызывается? Может из-за того, что он вызывается
раньше, чем будут получены новые следки для портсоения свечки, ничего
не находит, засывает на тайм время, опять просывается.... Попробуйте
изменить стратегию, если нужна текущая свечка:

if (candleCur != null )
{
....

else
return true;

И уменьшить тайм фремя скажем до секунды (в примере со скользящими
жестко стоят минутки насколько я помню).

Спасибо:

Ivan Kochetkov

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


OnProcess вызывается многократно внутри тайм фрейма.
Вот сейчас смотрел: ТФ - 1 мин.
На графике последняя свечка 16:37. Она есть, сделки идут, она
перерисовывается.
Ставлю брэкпоинт, смотрю MarketTime - 16:37:15,
_candleManager.GetTimeFrameCandle(base.Security, base.TimeFrame,
Trader.MarketTime); - возвращает Null
37-ая минута закончится и
_candleManager.GetTimeFrameCandle(base.Security, base.TimeFrame,
_nextTime - base.TimeFrame) вернет сформированную свечку

Мне, по стратегии, нужны и сформированные свечки и текущая. Входы по
закрытию, а вот выхожу и внутри свечи

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

Mikhail Sukhov

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


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

Спасибо:

Alexander

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


Надо как секунды, так и милисекунды обрезать. Просто 0 им присваивать,
я так поступаю. Тоже некоторое время провозился с этим.

Спасибо:

Ivan Kochetkov

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


Большое спасибо Mikhail, Alexandr! Всё заработало.
Отличная библиотека!

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

Sushko Alexei

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


n [url=][/url]?????????? ?????????? ?????? CandleManager.NewCandles ????? ?? ???????????\r\n\n
Спасибо:

Mikhail Sukhov

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


1. Не идет экспорт Всех сделок.
2. Не был вызван метод CandleManager.RegisterXXXX

Спасибо:


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

loading
clippy