← Zurück

Построение свечек ExpressionIndexSecurity и WeightedIndexSecurity

При построении ExpressionIndexSecurity и WeightedIndexSecurity вылетает ошибка Код для WeightedIndexSecurity


_indexInstr1 = new WeightedIndexSecurity() { Board = ExchangeBoard.Forts, Id = "IndexInstr" };
_indexInstr1.Weights.Add(_instr1.Id.ToSecurityId(), 1m);
_indexInstr1.Weights.Add(_instr2.Id.ToSecurityId(), -1m);

var series2 = new CandleSeries(typeof(TimeFrameCandle), _indexInstr1, TimeSpan.FromMinutes(5))
{
    BuildCandlesMode = BuildCandlesModes.Build,
};

_candleManager.Start(series2);

Код для ExpressionIndexSecurity


_indexInstr3 = new ExpressionIndexSecurity
{
    Id = "IndexInstr@FORTS",
    Expression = "SBER@QJSIM*2",
    Board = ExchangeBoard.Forts, 
};

var series3 = new CandleSeries(typeof(TimeFrameCandle), _indexInstr3, TimeSpan.FromMinutes(5))
{
    BuildCandlesMode = BuildCandlesModes.Build
};
_candleManager.Start(series2);

image5355.png Exception и StackTrace

Microsoft.Practices.ServiceLocation.ActivationException was unhandled by user code HResult=-2146233088 Message=Activation error occurred while trying to get instance of type ISecurityProvider, key "" Source=Ecng.Configuration StackTrace: в Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key) в Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstanceTService в Ecng.Configuration.ConfigManager.GetService() в StockSharp.Algo.Candles.CandleManager.Start(CandleSeries series, DateTimeOffset from, DateTimeOffset to) в StockSharp.Algo.Candles.CandleHelper.Start(ICandleManager manager, CandleSeries series) в SampleQuikCandles.MainWindow.ShowChartClick(Object sender, RoutedEventArgs e) в C:\Users\Ivan\Downloads\StockSharp_4.3.23_ru (2)\Samples\Quik\SampleQuikCandles\MainWindow.xaml.cs:строка 230 в System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs) в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) в System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args) в System.Windows.UIElement.RaiseEvent(RoutedEventArgs e) в System.Windows.Controls.Primitives.ButtonBase.OnClick() в System.Windows.Controls.Button.OnClick() в System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) в System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e) в System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget) в System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target) в System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs) в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) в System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent) в System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e) в System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget) в System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target) в System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs) в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) в System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args) в System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args) в System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted) в System.Windows.Input.InputManager.ProcessStagingArea() в System.Windows.Input.InputManager.ProcessInput(InputEventArgs input) в System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport) в System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel) в System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled) в System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) в System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) InnerException: HResult=-2146233088 Message=Resolution of the dependency failed, type = "StockSharp.BusinessEntities.ISecurityProvider", name = "(none)". Exception occurred while: while resolving. Exception is: InvalidOperationException - The current type, StockSharp.BusinessEntities.ISecurityProvider, is an interface and cannot be constructed. Are you missing a type mapping?

At the time of the exception, the container was:

Resolving StockSharp.BusinessEntities.ISecurityProvider,(none)

   Source=Ecng.Configuration
   TypeRequested=ISecurityProvider
   StackTrace:
        в Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
        в Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
        в Microsoft.Practices.Unity.UnityServiceLocator.DoGetInstance(Type serviceType, String key)
        в Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key)
   InnerException: 
        HResult=-2146233079
        Message=The current type, StockSharp.BusinessEntities.ISecurityProvider, is an interface and cannot be constructed. Are you missing a type mapping?
        Source=Ecng.Configuration
        StackTrace:
             в Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForAttemptingToConstructInterface(IBuilderContext context)
             в BuildUp_StockSharp.BusinessEntities.ISecurityProvider(IBuilderContext )
             в Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
             в Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
             в Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
             в Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
        InnerException: 

Все пробовал на примере SampleQuikCandles изменил метод ShowChartClick


private void ShowChartClick(object sender, RoutedEventArgs e)
{
	var security = SelectedSecurity;

    Security _instr1 = _trader.Securities.FirstOrDefault((x) => x.Id == "SBER@QJSIM");
    Security _instr2 = _trader.Securities.FirstOrDefault((x) => x.Id == "LKOH@QJSIM");
    
    _indexInstr1 = new WeightedIndexSecurity() { Board = ExchangeBoard.Forts, Id = "IndexInstr" };
    _indexInstr1.Weights.Add(_instr1.Id.ToSecurityId(), 1m);
    _indexInstr1.Weights.Add(_instr2.Id.ToSecurityId(), -1m);
    
    _indexInstr3 = new ExpressionIndexSecurity
    {
        Id = "IndexInstr@FORTS",
        Expression = "SBER@QJSIM*2",
        Board = ExchangeBoard.Forts, 
    };


    var series1 = new CandleSeries(typeof(TimeFrameCandle), security, TimeSpan.FromMinutes(5))
    {
        BuildCandlesMode = BuildCandlesModes.Build,
        
    };
    var series2 = new CandleSeries(typeof(TimeFrameCandle), _indexInstr1, TimeSpan.FromMinutes(5))
    {
        BuildCandlesMode = BuildCandlesModes.Build,

    };
    var series3 = new CandleSeries(typeof(TimeFrameCandle), _indexInstr3, TimeSpan.FromMinutes(5))
    {
        BuildCandlesMode = BuildCandlesModes.Build
    };
    _chartWindows.SafeAdd(series1, key =>
	{
		var wnd = new ChartWindow();

		wnd.MakeHideable();

		var area = new ChartArea();
		wnd.Chart.Areas.Add(area);

		var candlesElem = new ChartCandleElement();
		area.Elements.Add(candlesElem);

		return wnd;
	}).Show();
    
    _candleManager.Start(series2);
}

Как правильно построить индекс?

Kommentare (5)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Support
Support

Будем разбираться..

Иван З.
Иван З. Autor

Support: Будем разбираться..

Чтобы этой ошибки не было необходимо зарегистрировать ISecurityProvider


ConfigManager.RegisterService<ISecurityProvider>(_trader);


private void ShowChartClick(object sender, RoutedEventArgs e)
{
    ConfigManager.RegisterService<ISecurityProvider>(_trader);

    Security _instr1 = _trader.Securities.FirstOrDefault((x) => x.Id == "SBER@QJSIM");
    Security _instr2 = _trader.Securities.FirstOrDefault((x) => x.Id == "LKOH@QJSIM");
    
    _indexInstr1 = new WeightedIndexSecurity() { Board = ExchangeBoard.Forts, Id = "IndexInstr" };
    _indexInstr1.Weights.Add(_instr1.Id.ToSecurityId(), 1m);
    _indexInstr1.Weights.Add(_instr2.Id.ToSecurityId(), -1m);
    
    _indexInstr3 = new ExpressionIndexSecurity
    {
        Id = "IndexInstr@FORTS",
        Expression = "SBER@QJSIM*2",
        Board = ExchangeBoard.Forts, 
    };
    _indexInstr3.WhenChanged(_trader).Do((s,d) =>
    {

    }).Apply();

    var series1 = new CandleSeries(typeof(TimeFrameCandle), _instr1, TimeSpan.FromMinutes(5))
    {
        BuildCandlesMode = BuildCandlesModes.Build,
        
    };
    var series2 = new CandleSeries(typeof(TimeFrameCandle), _indexInstr1, TimeSpan.FromMinutes(5))
    {
        BuildCandlesMode = BuildCandlesModes.Build,

    };
    var series3 = new CandleSeries(typeof(TimeFrameCandle), _indexInstr3, TimeSpan.FromMinutes(5))
    {
        BuildCandlesMode = BuildCandlesModes.Build
    };
   
    _chartWindows.SafeAdd(series3, key =>
	{
		var wnd = new ChartWindow();

		wnd.MakeHideable();

		var area = new ChartArea();
		wnd.Chart.Areas.Add(area);

		var candlesElem = new ChartCandleElement();
		area.Elements.Add(candlesElem);

		return wnd;
	}).Show();
   // _candleManager.Start(series1);
    _candleManager.Start(series3);
}


Но свечи все равно не приходят, событие WhenChanged не срабатывает.


_indexInstr3.WhenChanged(_trader).Do((s,d) =>
{

}).Apply();

Но если тут же дополнительно прописать _candleManager.Start(series1); то событие _indexInstr3.WhenChanged начинает приходить, но свечей по индексу так и нет.

Support
Support

SBER@QJSIM в таблице обезличенных сделок есть?

Иван З.
Иван З. Autor

Support: SBER@QJSIM в таблице обезличенных сделок есть?

Да, есть. Свечи SBER@QJSIM строятся без проблем.

Support
Support

Проверим.