Support
|
Date: 6/6/2019
|
|
Thanks:
|
|
|
|
|
allint29
|
Date: 6/6/2019
Добрый день выслал на почту код из shell.
|
|
Thanks:
|
|
|
|
|
Support
|
Date: 6/8/2019
Добрый день Попробуйте вместо RoslynCompilerService использовать следующий: CodeConfigManager.RegisterService<ICompilerService>(new Fw40CompilerService(Directory.GetCurrentDirectory(), Directory.GetCurrentDirectory())); После этого ваш код у нас заработал: Code_indexSecurity = new ExpressionIndexSecurity() { Id = "INDEXTWO@FORTS", Code = "IndexMy", Expression = "RIM9@FORTS-10000", Board = ExchangeBoard.Micex, };
var result = _indexSecurity.Formula.Calculate(new[] { 167.43m });
if (result != -9832.57m) { throw new Exception(result.ToString()); }
|
|
Thanks:
|
|
|
|
|
allint29
|
Date: 6/11/2019
Здравствуйте, данная корректировка помогла, начали производиться вычисления, но теперь вычисления заканчиваются на открытии свечи, то есть если взять индекс без всяких коэффициентов, то на выходе получаю бар с открытием закрытием и телом в одну точку равным открытию бара данного инструмента на данном таймфрейме. Сначала думал, что индекс строится не из сделок а из свечей таймфрейма, но пробовал разные таймфреймы нестандартные, всегда бар начинается и заканчивается открытием свечи того таймфрейма, который выбран. Скрин экрана прилагаю. Еще хочу уточнить, что на версии 4.4.5.4 из учебного примера все работает как надо на тех же данных.
|
|
Thanks:
|
|
|
|
|
Support
|
Date: 6/11/2019
Просьба уточнить ваш вопрос. В Шелл не было индексов. О каком архиве идёт речь?
|
|
Thanks:
|
|
|
|
|
allint29
|
Date: 6/11/2019
Support Просьба уточнить ваш вопрос. В Шелл не было индексов. О каком архиве идёт речь? Я не только про Shell описываю, а программу которая написана на библиотеке версии (на которых пробовал) 4.4.15 и 4.4.16. В Shell которая у меня, например, версия библиотеки StockSharp.Algo 4.4.15 (версию библиотеки смотрю в свойствах ссылок на библиотеку), а версия из учебного примера (в котором все работает нормально) - 4.4.5.4, там даже модуль Expression выведен в отдельный файл. Я не разработчик данной библиотеки, но считаю что это баг, или, возможно, с версии обучающего видео процедура расчета индекса изменилась и тогда хотелось бы узнать эту процедуру.
|
|
Thanks:
|
|
|
|
|
Support
|
Date: 6/11/2019
Пожалуйста, пришлите ваш код для воспроизведения ошибки.
|
|
Thanks:
|
|
|
|
|
allint29
|
Date: 6/11/2019
|
|
|
|
Support Пожалуйста, пришлите ваш код для воспроизведения ошибки. В спойлере - код. using System; using System.IO; using System.Linq; using System.Windows; using System.Windows.Controls; using Ecng.Common; using Ecng.Configuration; using StockSharp.Algo.Candles; using StockSharp.Algo.Expressions; using StockSharp.Algo.Storages; using StockSharp.Algo.Testing; using StockSharp.BusinessEntities; using StockSharp.Logging; using StockSharp.Messages; using StockSharp.Xaml.Charting;
namespace FirstConsole.XAML { /// <summary> /// Логика взаимодействия для Index.xaml /// </summary> public partial class Index : UserControl { private HistoryEmulationConnector _connector; private ChartCandleElement _candleElement; private CandleManager _candleManager; // создадим менеджер свечей - из него будем получать свечи
private CandleSeries _candleSeries; private Security _security; private Security _indexSecurity; private Portfolio _portfolio; private readonly LogManager _logManager;
private readonly string _pathHistory = @"G:\Sharp\Hydra\CSVFromFinamReady\".ToFullPath(); public Index() { InitializeComponent(); //здесь без разницы какую службу включать, в Shell работает только Fw40 // ConfigManager.RegisterService<ICompilerService>(new RoslynCompilerService()); ConfigManager.RegisterService<ICompilerService>(new Fw40CompilerService(Directory.GetCurrentDirectory(), Directory.GetCurrentDirectory())); _logManager = new LogManager(); _logManager.Listeners.Add(new FileLogListener("log.txt")); _logManager.Listeners.Add(Monitor);
CandleSettingsEditor.Settings = new CandleSeries() { CandleType = typeof(TimeFrameCandle), Arg = TimeSpan.FromMinutes(5) };
DatePickerBegin.SelectedDate = new DateTime(2019, 03, 23); DatePickerEnd.SelectedDate = new DateTime(2019, 05, 10); }
private void Start_Click(object sender, RoutedEventArgs e) { //здесь без разницы какую службу включать, в Shell работает только Fw40 // ConfigManager.RegisterService<ICompilerService>(new Fw40CompilerService(Directory.GetCurrentDirectory(), Directory.GetCurrentDirectory())); // ConfigManager.RegisterService<ICompilerService>(new RoslynCompilerService()); _security = new Security { Id = "RIM9@FORTS", Code = "RTS", PriceStep = 10m, Board = ExchangeBoard.Micex, }; _indexSecurity = new ExpressionIndexSecurity() { Id = "IndexInstr@FORTS", Code = "IndexInstr", Expression = "RIM9@FORTS/2", Board = ExchangeBoard.Micex, };
_portfolio = new Portfolio { Name = "test portfolio", BeginValue = 10000000 };
var storageRegistry = new StorageRegistry { DefaultDrive = new LocalMarketDataDrive(_pathHistory), };
_connector = new HistoryEmulationConnector(new[] { _security, _indexSecurity }, new[] { _portfolio }) { HistoryMessageAdapter = { StorageRegistry = storageRegistry, StorageFormat = StorageFormats.Csv, StartDate = DatePickerBegin.SelectedDate.Value.ChangeKind(DateTimeKind.Utc), StopDate = DatePickerEnd.SelectedDate.Value.ChangeKind(DateTimeKind.Utc), }, LogLevel = LogLevels.Info, }; _logManager.Sources.Add(_connector);
//зарегистрируем в менеджере конфигураций коннектор как источник инструментов //в версии 4.15 4.16 работает и без регистрации // ConfigManager.RegisterService<ISecurityProvider>(_connector);
_candleSeries = new CandleSeries(CandleSettingsEditor.Settings.CandleType, _indexSecurity, CandleSettingsEditor.Settings.Arg) { BuildCandlesMode = MarketDataBuildModes.Build, BuildCandlesFrom = MarketDataTypes.Trades, };
InitCart();
_candleManager = new CandleManager(_connector); _candleManager.Processing += Processing; _connector.NewSecurity += Connector_NewSecurity; _connector.Connect(); }
private void Connector_NewSecurity(Security security) { if (_connector.Securities.Count() < 2) return; //в версии 4.15, 4.16 работает и без этого _connector.RegisterTrades(_indexSecurity); //запускаем менеджер свечей на получение свечей по индексу _candleManager.Start(_candleSeries); _connector.Start(); }
private void Processing(CandleSeries candleSeries, Candle candle) { //в методе отрисовки свечей нужно проверять - является ли свеча индекса или нет и только их отрисовывать на графике if (candleSeries.Security != _indexSecurity) return;
Chart.Draw(_candleElement, candle); }
private void InitCart() { Chart.ClearAreas(); var area = new ChartArea(); _candleElement = new ChartCandleElement();
Chart.AddArea(area); Chart.AddElement(area, _candleElement); }
} }
|
|
Thanks:
|
|
|
|
|
Support
|
Date: 6/12/2019
В приложении модицифированный пример SampleHistoryTesting, который выводит индексные свечи согласно формуле:
|
|
Thanks:
|
|
|
|