Пример #1
0
        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();
            }
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
 void m_TickBars_ChangeBarEvent(object sender, BarsEventArgs e)
 {
     l.Fatal("Не ожидаю, что тиковые бары могут меняться");
     throw new NotImplementedException("Не ожидаю, что тиковые бары могут меняться");
 }
Пример #5
0
        // 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();
            }
        }
Пример #6
0
 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);
        }