Добрый день В прошлой статье мы начали разбирать основные инструменты, используемые в биржевой торговле и крипо-торговле в частности. Мы рассмотрели такой важный элемент как график. Напомним, что графики бывают различные, и каждый трейдер может использовать графики различного вида, различного тайм фрейма. Например программа S#.Data (Hydra) позволяет строить графики различных торговых элементов, таких как: тики, свечи различных периодов, графики объёмов. Все это позволяет разносторонне посмотреть на ситуацию на рынке, оценить риски и перспективы. торговля-построение-графиков.png Одна и пара может иметь различные графики, отличающиеся временными промежутками. Так, например график может быть пятиминутный или пятнадцатиминутным. Данный период называют ТайФреймом (TimeFrame). график-тайфрейм-5-минут.png график-тайфрейм-1-день.png Давайте рассмотрим основные элементы японской свечи. Прямоугольники на графике - тело свечи. Тело свечи формируется на основании значений на начало и на конец выбранного периода. график-японские-свечи-тело-свечи.png Свеча бывает бычьей (1), если цена открытия ниже цены закрытия, или в обратном случает медвежьей (2). В программе S#.Data (Hydra) свечи имеют зеленый и красный цвет соответственно. Таким образом определяется рост или падения выбранного биржевого инструмента. Так же из тела свечи исходит линия - тень свечи (3). Тени указывают на максимум и минимум цены в процессе формирования. В случаи отсутствия верхней тени - считают, что у свечи «срезана вершина», в противном случае - срезано основание. Если у свечи отсутствует тело, то она называется - доджем (цена на начало равна цене на конец периода). Если тело свечи мало, то ее называют волчком. Программы от S# максимально позволяют пользователю читать свечи. Удобный интерфейс и расширенные возможности для анализа делают их незаменимым для трейдера, ведь уметь читать свечи — это облегчить себе торговлю, в особенности на рынке криптовалют.
Добрый день! Перешел на библиотеку 5.0, прочитал документацию. Сформировал подключение к Quik через адаптер. Connector connector = new Connector(); var luaFixMarketDataMessageAdapter = new LuaFixMarketDataMessageAdapter(connector.TransactionIdGenerator) { Address = \"localhost:5001\".To(), Login = \"quik\", Password = \"quik\".To(), }; var luaFixTransactionMessageAdapter = new LuaFixTransactionMessageAdapter(connector.TransactionIdGenerator) { Address = \"localhost:5001\".To(), Login = \"quik\", Password = \"quik\".To(), }; connector.Adapter.InnerAdapters.Add(luaFixMarketDataMessageAdapter); connector.Adapter.InnerAdapters.Add(luaFixTransactionMessageAdapter); connector.NewSecurity += securitity =\u003e this.GuiAsync(() =\u003e { connector.SubscribeLevel1(securitity); if (securitity.PriceStep != null \u0026\u0026 securitity.Board == ExchangeBoard.MicexTqbr) { SecurityPicker.Items.Add(securitity); } }); connector..CandleSeriesProcessing += DrawCandle; connector.Connect(); Инструменты получил. На инструменты зарегистрировался с помощью метода SubscribeLevel1 Подписался на получение свеч через trader.CandleSeriesProcessing += DrawCandle; По инструкции \"Свечной график\" запросил свечи в определенном диапазоне: var tf = (TimeSpan)CandlesPeriods.SelectedValue; candleSeries.CandleType = typeof(TimeFrameCandle); candleSeries.Security = (Security)SecurityPicker.Items; candleSeries.Arg = tf; candleSeries.BuildCandlesMode = MarketDataBuildModes.Load; connector.SubscribeCandles(series, DateTime.Today.Subtract(TimeSpan.FromDays(10)), DateTime.Now); Свечи не приходят, т.е. не заходит в метод DrawCandle. Пробовал через CandleManager стартовать, также не приходят. В файле lua логах смотрел, информация level1 по инструментам приходит. Как мне выяснить в чем дело?
Здравствуйте! Не могу получить данные по свечам в консоль. Не срабатывает событие CandleManager.Processing хотя тиковые сделки приходят. К стати пример \"SampleQuikCandles\" тоже не отображает свечи на графике. Инструмент получаю по классу \"QJSIM\", так как с другим кодом класса не работает вывод тиков. Использую quik 7.9 запущенный от администратора. Студия тоже от администратора. Код: using System; using System.Linq; using System.Threading; using StockSharp.Algo.Candles; using StockSharp.BusinessEntities; using StockSharp.Quik; namespace ConsoleRobot_candle { class Program { private static string _code = \"SBER\"; private static Security _sec; private static CandleManager _candleManager; static void Main(string args) { using (var trader = new QuikTrader()) { using ( AutoResetEvent ewentConnect = new AutoResetEvent(false), ewentSecurity = new AutoResetEvent(false) ) { #region подключаемся /////////////////////////////////////// //подключаемся /////////////////////////////////////// trader.Connected += () =\u003e { ewentConnect.Set(); Console.WriteLine(\"Подключение успешно выполнено\"); }; Console.WriteLine(\"Подключаемся\"); trader.Connect(); ewentConnect.WaitOne(); #endregion #region Получаем инструмент /////////////////////////////////////// //Получаем инструмент /////////////////////////////////////// Console.WriteLine(\"Запрашиваем инструмент {0}\", _code); trader.NewSecurities += (securitys) =\u003e { if (_sec != null) return; _sec = securitys.FirstOrDefault(s =\u003e s.Code == _code \u0026\u0026 s.Board.Code == \"QJSIM\"); // MICEX // QJSIM // EQRP_INFO if (_sec != null) { trader.RegisterSecurity(_sec); trader.RegisterTrades(_sec); Console.WriteLine(\"Инструмент {0} получен\", _sec.Name); ewentSecurity.Set(); } }; #endregion ewentSecurity.WaitOne(); #region Подписываемся все сделки //trader.NewTrade += trade =\u003e //{ // Console.WriteLine(\"{0} = {1}--\u003e {2:0000}--\u003e{3}\", trade.Id, trade.Security.Name, trade.Volume, _sec.LocalTime - trade.Time); //}; #endregion _candleManager = new CandleManager(trader); var series = new CandleSeries(typeof(TimeFrameCandle), _sec, TimeSpan.FromSeconds(10)); _candleManager.Processing += ProcessCandle; _candleManager.Start(series); Console.ReadKey(); _candleManager.Dispose(); } } } private static void ProcessCandle(CandleSeries series, Candle candle) { Console.WriteLine(\"Свеча....\"); } } } В логе вот такая ошибка: ... 2017/05/01 19:53:56.208|Error |LuaServer |Пустой код инструмента для класса EQRP_INFO. 2017/05/01 19:53:56.273|Error |LuaServer |Пустой код инструмента для класса CROSSRATE. ... 2017/05/01 19:45:48.910|Error |FixServer |System.IO.IOException: Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение. ---\u003e System.Net.Sockets.SocketException: Удаленный хост принудительно разорвал существующее подключение в System.Net.Sockets.Socket.Receive(Byte buffer, Int32 offset, Int32 size, SocketFlags socketFlags) в System.Net.Sockets.NetworkStream.Read(Byte buffer, Int32 offset, Int32 size) --- Конец трассировки внутреннего стека исключений --- в System.Net.Sockets.NetworkStream.Read(Byte buffer, Int32 offset, Int32 size) в Ecng.Serialization.BinaryHelper.ReadBytes(Stream stream, Byte buffer, Int32 len, Int32 pos) в StockSharp.Fix.Native.BaseFixReader.ReadByte() в StockSharp.Fix.Native.TextFixReader.ReadTag() в #=qyypzVTbPR2krovn$eYvTzVQBRFOfj6PLtZam5EztLKPUloKea4wWxfsPt088JSbh.#=q8SHpRb8id2Pi8kvEf0SGeQ==(IFixReader #=qrkfols$7ORYHoZjWc9wZnQ==, FixTags #=q6mdfSdmwikKrV4pYIzAvQA==) в #=qyypzVTbPR2krovn$eYvTzVQBRFOfj6PLtZam5EztLKPUloKea4wWxfsPt088JSbh.#=qTryfmrwciqeLeTDCNAA8AQ==(IFixReader #=qrkfols$7ORYHoZjWc9wZnQ==, Boolean #=q3LFjH$G9rchgnHX0OC6o4JtMsMOJ4smmzbhtA3iinLI=, String #=qmkUIe3bFHLcQ6HQHYYJUodHdsqOcN636OkudxRkzGB8=) в StockSharp.Fix.FixServer.#=qok8otZ8UOLVhowTSVbDAMA==(IFixReader #=qrkfols$7ORYHoZjWc9wZnQ==, FixSession #=qOUBxiTmvxbkO5QDu1XPlKQ==, #=qY4n0C1d6p1w3$LiV_2Iy97TebzYi2_6GB_4To3a7NbdDzQeCrLUURmuSIPWn8_vm\u0026 #=q3QIkQpwOGhLju8ZFpvoUEg==, TcpClient #=qz7KtgIMgW7WruVYBJ1Yktg==, EndPoint #=qL44tr0d8vMPdd0XSskRH$Q==, String\u0026 #=q68muavX0mJLcV6rpfZlOiw==, Boolean\u0026 #=qaWjCphkHUNy4qV99017Ing==) в StockSharp.Fix.FixServer.#=qnVc6o3wurX9oBh1kY1cQKklUtdjDLu9UbFilw5iowhk=.#=qU56GDdlAwvYqVZ4S1Ed79w==(IAsyncResult #=qPptR28HQdJ6abF_a2Fy0IA==) 2017/05/01 19:45:48.911| |FixServer |Disconnect quik (127.0.0.1:8005) 2017/05/01 19:45:48.912|Error |FixServer |System.IO.IOException: Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение. ---\u003e System.Net.Sockets.SocketException: Удаленный хост принудительно разорвал существующее подключение в System.Net.Sockets.Socket.Receive(Byte buffer, Int32 offset, Int32 size, SocketFlags socketFlags) в System.Net.Sockets.NetworkStream.Read(Byte buffer, Int32 offset, Int32 size) --- Конец трассировки внутреннего стека исключений --- в System.Net.Sockets.NetworkStream.Read(Byte buffer, Int32 offset, Int32 size) в Ecng.Serialization.BinaryHelper.ReadBytes(Stream stream, Byte buffer, Int32 len, Int32 pos) в StockSharp.Fix.Native.BaseFixReader.ReadByte() в StockSharp.Fix.Native.TextFixReader.ReadTag() в #=qyypzVTbPR2krovn$eYvTzVQBRFOfj6PLtZam5EztLKPUloKea4wWxfsPt088JSbh.#=q8SHpRb8id2Pi8kvEf0SGeQ==(IFixReader #=qrkfols$7ORYHoZjWc9wZnQ==, FixTags #=q6mdfSdmwikKrV4pYIzAvQA==) в #=qyypzVTbPR2krovn$eYvTzVQBRFOfj6PLtZam5EztLKPUloKea4wWxfsPt088JSbh.#=qTryfmrwciqeLeTDCNAA8AQ==(IFixReader #=qrkfols$7ORYHoZjWc9wZnQ==, Boolean #=q3LFjH$G9rchgnHX0OC6o4JtMsMOJ4smmzbhtA3iinLI=, String #=qmkUIe3bFHLcQ6HQHYYJUodHdsqOcN636OkudxRkzGB8=) в StockSharp.Fix.FixServer.#=qok8otZ8UOLVhowTSVbDAMA==(IFixReader #=qrkfols$7ORYHoZjWc9wZnQ==, FixSession #=qOUBxiTmvxbkO5QDu1XPlKQ==, #=qY4n0C1d6p1w3$LiV_2Iy97TebzYi2_6GB_4To3a7NbdDzQeCrLUURmuSIPWn8_vm\u0026 #=q3QIkQpwOGhLju8ZFpvoUEg==, TcpClient #=qz7KtgIMgW7WruVYBJ1Yktg==, EndPoint #=qL44tr0d8vMPdd0XSskRH$Q==, String\u0026 #=q68muavX0mJLcV6rpfZlOiw==, Boolean\u0026 #=qaWjCphkHUNy4qV99017Ing==) в StockSharp.Fix.FixServer.#=qnVc6o3wurX9oBh1kY1cQKklUtdjDLu9UbFilw5iowhk=.#=qU56GDdlAwvYqVZ4S1Ed79w==(IAsyncResult #=qPptR28HQdJ6abF_a2Fy0IA==) Помогите пожалуйста разобраться. В чем может быть причина?
Добрый день Аналогично примеру создаю правила обработки свечек в стратегии _candleManager .WhenCandlesChanged(_series) .Do(ProcessCandle) .Apply(this); _candleManager .WhenCandlesFinished(_series) .Do(ProcessCloseCandle) .Apply(this); перед этим подписываюсь на портфель, инструмент, создаю менеджер свечек, и, казалось бы инициирую их передачу из терминала var timeFrame = TimeSpan.FromMinutes(1); candleManager = new CandleManager(qTrader); series = new CandleSeries(typeof(TimeFrameCandle), security, timeFrame); candleManager.Start(series); qTrader.SubscribeMarketData(security,MarketDataTypes.CandleTimeFrame); Но после старта стратегии правило обработки свечей не стартует. В примере по историческим данным все работало, но там был эмулятор терминала... Подскажите пожалуйста.