I'd like to keep a running exponential moving average of the time since the last bid/ask change.
Would the following work?
double currentBid = 0;
double currentAsk = 0;
double priorBid = 0;
double priorAsk = 0;
double xmaBidImproveTime = 0;
double xmaAskImproveTime = 0;
double currentTime = 0;
double priorTime = 0;
protected override void OnMarketData(MarketDataEventArgs e)
{
if (e.MarketDataType == MarketDataType.Bid) currentBid = e.Price;
else if (e.MarketDataType == MarketDataType.Ask) currentAsk = e.Price;
currentTime = e.Time;
if (currentBid != priorBid and currentAsk == priorAsk){
if (xmaBidImproveTime == 0 && priorTime != 0) xmaBidImproveTime = currentTime - priorTime;
else if (xmaBidImproveTime != 0 && priorTime != 0) xmaBidImproveTime = xmaBidImproveTime * .9 + (currentTime - priorTime) * .1;
priorBid = currentBid;
priorTime = currentTime;
}
else if (currentBid == priorBid and currentAsk != priorAsk){
if (xmaAskImproveTime == 0 && priorTime != 0) xmaAskImproveTime = currentTime - priorTime;
else if (xmaAskImproveTime != 0 && priorTime != 0) xmaAskImproveTime = xmaAskImproveTime * .9 + (currentTime - priorTime) * .1;
priorAsk = currentAsk;
priorTime = currentTime;
}
}

Comment