void m_TickBars_NewBarEvent(object sender, BarsEventArgs e) // TODO возможная оптимизация (слишком часто вызываю TimeAlignment(e.bar.dt)) { if (l.IsDebugEnabled) { l.Debug(debKey + "m_TickBars_NewBarEvent новый тик " + e.bar); } Lock.AcquireWriterLock(1000); try { AggregateBar bar = FindBar(e.bar.DT) as AggregateBar; if (bar == null) { int timeAlignment = TimeAlignment(e.bar.DT); if (l.IsDebugEnabled) { l.Debug(debKey + "m_TickBars_NewBarEvent Создаю новый бар " + DateTime2Int.DateTime(timeAlignment)); } bar = new AggregateBar(timeAlignment, timeAlignment + scale.interval - 1, e.bar.Number, e.bar.Close, e.bar.Close, e.bar.Close, e.bar.Close, e.bar.Volume); bars.Add(bar); EventHandler <BarsEventArgs> ev = NewBarEvent; if (ev != null) { ev(this, new BarsEventArgs(this, bar)); } } else { l.Debug(debKey + "m_TickBars_NewBarEvent Добавляю тик в бар"); if ((m_LastTick != null) && ((m_LastTick.DT > e.bar.DT) || ((m_LastTick.DT == e.bar.DT) && (m_LastTick.Number > e.bar.Number)))) { l.Debug(debKey + "Тики пришли не по порядку. Пересчитываю весь бар"); RecalcBar(bar); } else { bar.AddTick(e.bar); } m_LastTick = e.bar; EventHandler <BarsEventArgs> changeBarEvent = ChangeBarEvent; if (changeBarEvent != null) { changeBarEvent(this, new BarsEventArgs(this, bar)); } } } finally { Lock.ReleaseWriterLock(); } }
void onBar(object sender, BarsEventArgs e) { IBar now = e.bar; IBar pre = e.bars.GetPrevious(e.bar); if ((now != null) && (pre != null)) { if (now.Close > pre.Close) { bh.BuyAtMarket(bh.MaxPosition - bh.Pos.Value - bh.Pos.ActiveBuy); } if (now.Close < pre.Close) { bh.SellAtMarket(bh.MaxPosition + bh.Pos.Value - bh.Pos.ActiveSell); } } }
void bars_NewBarEvent(object sender, BarsEventArgs e) { l.Debug("bars_NewBarEvent "); if (!m_Connect) { return; } Quote q = new Quote(); q.Symbol = (sender as IBars).symbol.ToString(); q.TimeStamp = e.bar.GetDateTime(); q.Ask = e.bar.Close; q.Bid = e.bar.Close; q.Open = e.bar.Close; q.PreviousClose = e.bar.Close; q.Price = e.bar.Close; q.Size = e.bar.Volume; UpdateQuote(q); }
void m_TickBars_ChangeBarEvent(object sender, BarsEventArgs e) { l.Fatal("Не ожидаю, что тиковые бары могут меняться"); throw new NotImplementedException("Не ожидаю, что тиковые бары могут меняться"); }
// TODO возможная оптимизация (слишком часто вызываю TimeAlignment(e.bar.dt)) void m_TickBars_NewBarEvent(object sender, BarsEventArgs e) { if(l.IsDebugEnabled) l.Debug(debKey+"m_TickBars_NewBarEvent новый тик " + e.bar); Lock.AcquireWriterLock(1000); try { AggregateBar bar = FindBar(e.bar.DT) as AggregateBar; if (bar == null) { int timeAlignment = TimeAlignment(e.bar.DT); if (l.IsDebugEnabled) l.Debug(debKey + "m_TickBars_NewBarEvent Создаю новый бар " + DateTime2Int.DateTime(timeAlignment) ); bar = new AggregateBar(timeAlignment, timeAlignment + scale.interval - 1, e.bar.Number, e.bar.Close, e.bar.Close, e.bar.Close, e.bar.Close, e.bar.Volume); bars.Add(bar); EventHandler<BarsEventArgs> ev = NewBarEvent; if (ev != null) ev(this, new BarsEventArgs(this,bar)); } else { l.Debug(debKey + "m_TickBars_NewBarEvent Добавляю тик в бар"); if ((m_LastTick != null) && ((m_LastTick.DT > e.bar.DT) || ((m_LastTick.DT == e.bar.DT) && (m_LastTick.Number > e.bar.Number)))) { l.Debug(debKey + "Тики пришли не по порядку. Пересчитываю весь бар"); RecalcBar(bar); } else bar.AddTick(e.bar); m_LastTick = e.bar; EventHandler<BarsEventArgs> changeBarEvent = ChangeBarEvent; if (changeBarEvent != null) changeBarEvent(this, new BarsEventArgs(this,bar)); } } finally { Lock.ReleaseWriterLock(); } }
void m_TickBars_ChangeBarEvent(object sender, BarsEventArgs e) { l.Fatal("Не ожидаю, что тиковые бары могут меняться"); throw new NotImplementedException("Не ожидаю, что тиковые бары могут меняться"); }
void bars_NewBarEvent(object sender, BarsEventArgs e) { l.Debug("bars_NewBarEvent "); if (!m_Connect) return; Quote q = new Quote(); q.Symbol = (sender as IBars).symbol.ToString(); q.TimeStamp = e.bar.GetDateTime(); q.Ask = e.bar.Close; q.Bid = e.bar.Close; q.Open = e.bar.Close; q.PreviousClose = e.bar.Close; q.Price = e.bar.Close; q.Size = e.bar.Volume; UpdateQuote(q); }