示例#1
0
 public DbExecution(IBfExecution exec)
 {
     ExecutionId  = exec.ExecutionId;
     ExecutedTime = exec.ExecutedTime;
     Side         = exec.Side;
     Price        = exec.Price;
     Size         = exec.Size;
 }
示例#2
0
 public void Update(IBfExecution exec)
 {
     StartExecutionId  = Math.Min(exec.ExecutionId, StartExecutionId);
     StartExecutedTime = (exec.ExecutedTime < StartExecutedTime) ? exec.ExecutedTime : StartExecutedTime;
     EndExecutionId    = Math.Max(exec.ExecutionId, EndExecutionId);
     EndExecutedTime   = (exec.ExecutedTime > EndExecutedTime) ? exec.ExecutedTime : EndExecutedTime;
     LastUpdatedTime   = DateTime.UtcNow;
     ExecutionCount++;
 }
        public void Add(IBfExecution exec)
        {
            if (_manageRec == null)
            {
                _manageRec = new DbManageRecord();
            }
            _dbctx.Add(new DbExecution(exec));
            _manageRec.Update(exec);

            if (_manageRec.ExecutionCount >= CommitCount)
            {
                SaveChanges();
                _dbctx.ClearCache();
            }
        }
示例#4
0
        public RealtimeOhlc Update(IBfExecution exec)
        {
            ExecutionCount++;
            if (exec.ExecutedTime < Start)
            {
                Start = exec.ExecutedTime;
                Open  = exec.Price;
            }
            if (exec.ExecutedTime > End)
            {
                End   = exec.ExecutedTime;
                Close = exec.Price;
            }

            High = Math.Max(High, exec.Price);
            Low  = Math.Min(Low, exec.Price);

            switch (exec.Side)
            {
            case BfTradeSide.Buy:
                BuyVolume += unchecked ((double)exec.Size);
                break;

            case BfTradeSide.Sell:
                SellVolume += unchecked ((double)exec.Size);
                break;

            default:
                ExecutedVolume += unchecked ((double)exec.Size);
                break;
            }

            _amount += exec.Price * exec.Size;
            try
            {
                VWAP = unchecked ((double)(_amount / unchecked ((decimal)Volume)));
            }
            catch (DivideByZeroException)
            {
                VWAP = 0;
            }

            UpdateEvent?.Invoke(this);
            return(this);
        }
示例#5
0
        public void UpdateMarker(IBfExecution exec)
        {
            if (_lastExec == null)
            {
                _lastExec = exec;
                return;
            }

            var lastMarkTime    = _lastExec.ExecutedTime.Round(MarkerSpan);
            var currentMarkTime = exec.ExecutedTime.Round(MarkerSpan);

            if (lastMarkTime != currentMarkTime)
            {
                // Marked time changed
                if (_marker != null)
                {
                    if (!_ctx.Marker.Any(e => e.MarkedTime == _marker.MarkedTime))
                    {
                        _marker.StartExecutionId = _lastExec.ExecutionId;
                        _ctx.Marker.Add(_marker);
                    }
                }

                _marker = new DbMinuteMarker
                {
                    MarkedTime     = currentMarkTime,
                    EndExecutionId = exec.ExecutionId
                };
            }

            if (_marker != null)
            {
                _marker.ExecutionCount++;
            }

            _lastExec = exec;
        }
示例#6
0
 public void AddExecution(IBfExecution exec)
 {
     _ctxExec.Instance.Add(exec as DbExecution);
 }
示例#7
0
 public RealtimeOhlc(IBfExecution exec)
 {
     Update(exec);
 }
 public void AddExecution(IBfExecution exec)
 {
     _ctx.GetExecutions().Add(exec as DbExecution);
 }