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

Построение свечек ExpressionIndexSecurity и WeightedIndexSecurity
Atom
15.04.2017
Иван З.


При построении 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);
}

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

image5355.png 87 KB (701)



Спасибо:


Support

Фотография
Дата: 17.04.2017
Ответить


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

Спасибо:

Иван З.

Фотография
Дата: 20.04.2017
Ответить


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

Фотография
Дата: 20.04.2017
Ответить


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

Спасибо:

Иван З.

Фотография
Дата: 20.04.2017
Ответить


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

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

Спасибо:

Support

Фотография
Дата: 21.04.2017
Ответить


Проверим.

Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy