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


Как получить текущую свечку?
Atom
7/6/2010


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

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

Tags:


Thanks:


1 2  >
Mikhail Sukhov

Avatar
Date: 7/6/2010
Reply


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

Thanks:

Ivan Kochetkov

Avatar
Date: 7/6/2010
Reply


И так не получается, всегда 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;

Thanks:

Mikhail Sukhov

Avatar
Date: 7/6/2010
Reply


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

Thanks:

Ivan Kochetkov

Avatar
Date: 7/6/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 7/6/2010
Reply


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

Thanks:

Ivan Kochetkov

Avatar
Date: 7/6/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 7/6/2010
Reply


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

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

else
return true;

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

Thanks:

Ivan Kochetkov

Avatar
Date: 7/6/2010
Reply


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) вернет сформированную свечку

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

Thanks:

Mikhail Sukhov

Avatar
Date: 7/6/2010
Reply


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

Thanks:

Alexander

Avatar
Date: 7/6/2010
Reply


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

Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy