The code below runs fine when run as a Terminal project, however if I run it from desktop-Lean using the local data installed as part of the Lean download, then I get the following error:

Error:: AlgorithmManager.Run(): RuntimeError: Slice: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'QuantConnect.Data.Market.TradeBar' does not contain a definition for 'Bid'

I checked that it was attemtping to acutally use the local data by temporarily renaming the local files, causing the following *expected* errors:

Error:: DefaultDataProvider.Fetch(): The specified file was not found: ../../../Data/crypto\gdax\minute\btcusd\20180404_quote.zip
Error:: DefaultDataProvider.Fetch(): The specified file was not found: ../../../Data/crypto\gdax\minute\btcusd\20180404_trade.zip

So it seems that the TickType is being forced to TradeBars instead of QuoteBars.

I can work around the issue for now by hacking BaseSetupHandler.cs and changing:

var configToUse = configs.OrderBy(x => x.TickType).First();

to:

var configToUse = configs.OrderBy(x => x.TickType).Last();

forcing it to choose QuoteBars from the two items in the list, however I expect there is a way to configure my Algo to use QuoteBars via a method-call.

Anyone know the correct way to achieve this?

 

Here is the same code (except for the date-range) that works from Terminal:

namespace QuantConnect.Algorithm.CSharp
{
public class TestCryptoQuoteBar : QCAlgorithm
{

// ----------------------------------------------
// Option Constants:
// ----------------------------------------------
private string _strMainSymbol;
private const decimal kStartCash = 100000;
private const decimal kSpendPerBuy = 2000;

Resolution kResolution = Resolution.Hour;

//const string kMarketCrypto = Market.GDAX;
const string kMarketCrypto = Market.Bitfinex;

//const BrokerageName kBrokerageName = BrokerageName.GDAX;
const BrokerageName kBrokerageName = BrokerageName.Bitfinex;


public override void Initialize()
{
SetStartDate(2019, 1, 1);
SetEndDate(2019, 1, 2);
SetCash(kStartCash);

_strMainSymbol = "BTCUSD";
AddCrypto(_strMainSymbol, kResolution, kMarketCrypto);
SetBrokerageModel(kBrokerageName, AccountType.Cash);
}

public override void OnData(Slice data)
{

var temp = data.QuoteBars[_strMainSymbol].Bid.Close;
Debug($"temp: {temp}");

var dataValue = data[_strMainSymbol];
var bidClose = dataValue.Bid.Close;
var askClose = dataValue.Ask.Close;
var spread = askClose - bidClose;

Debug($"Spread: {spread}");
}

}
}