I have made a simple test IDataProvider which inherits from Strategy and wraps the DataSimulator so that I can edit bids/asks and re-emit them, however when I try set Strategy.DataProvider = TestDataProvider it does not set. See the code and output below.
public class TestDataProvider : Strategy, IDataProvider
{
public new ProviderStatus Status => DataProvider.Status;
public bool IsConnecting => DataProvider.IsConnecting;
public bool IsConnected => DataProvider.IsConnected;
public bool IsDisconnecting => DataProvider.IsDisconnecting;
public bool IsDisconnected => DataProvider.IsDisconnected;
byte IProvider.Id { get => (byte)Id; set { } }
public TestDataProvider(Framework framework, string name)
: base(framework, name)
{
}
protected override void OnAsk(Instrument instrument, Ask ask)
{
// edit tick and emit
framework.EventManager.OnEvent(new Ask(ask) { ProviderId = (byte)Id });
}
protected override void OnAsk(Instrument instrument, Bid bid)
{
// edit tick and emit
framework.EventManager.OnEvent(new Bid (bid) { ProviderId = (byte)Id });
}
public void Subscribe(Instrument instrument)
{
DataProvider.Subscribe(instrument);
}
public void Subscribe(InstrumentList instrument)
{
DataProvider.Subscribe(instrument);
}
public void Unsubscribe(Instrument instrument)
{
DataProvider.Unsubscribe(instrument);
}
public void Unsubscribe(InstrumentList instrument)
{
DataProvider.Unsubscribe(instrument);
}
public void Connect()
{
DataProvider.Connect();
}
public bool Connect(int timeout)
{
return DataProvider.Connect(timeout);
}
public void Disconnect()
{
DataProvider.Disconnect();
}
}
public partial class MyScenario : Scenario
{
public MyScenario(Framework framework)
: base(framework)
{
}
public override void Run()
{
strategy = new MyStrategy(framework, "Backtest");
TestDataProvider testDataProvider = new TestDataProvider(framework, "TestDataProvider");
Console.WriteLine($"strategy.DataProvider:: Expected: default, Actual: {strategy.DataProvider}");
strategy.DataProvider = null;
Console.WriteLine($"strategy.DataProvider:: Expected: null, Actual: {strategy.DataProvider}");
strategy.DataProvider = testDataProvider;
Console.WriteLine($"strategy.DataProvider:: Expected: TestDataProvider, Actual: {strategy.DataProvider}");
StartStrategy();
}
}
Outputs:
strategy.DataProvider:: Expected: default, Actual: provider id = 1 DataSimulator (Default data simulator)
http://www.smartquant.com strategy.DataProvider:: Expected: null, Actual: provider id = 1 DataSimulator (Default data simulator)
http://www.smartquant.com strategy.DataProvider:: Expected: TestDataProvider, Actual: provider id = 1 DataSimulator (Default data simulator)
http://www.smartquant.comWhats going on here? Am I missing something?