stocksharp. StockSharphttps://stocksharp.ru/handlers/atom.ashx?category=tag&id=stocksharp&type=forum&page=51Copyright @ StockSharp Platform LLC 2010 - 20242024-03-29T05:15:36Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/topic/1230/Сериализация2010-11-16T19:11:34Z2010-11-16T19:11:34Zanotharhttps://stocksharp.ru/users/6089/info@stocksharp.ruДобрый день, Михаил.<br />Пытаюсь воспользоваться вашей сериализацией. Возникло несколько вопросов:1) как объявить XML-атрибут. 2)как объявить корень сериализации( то есть название типа) 3) есть ли у Вас <br />какая-нить документация по вашей сериализации. Пришлось отказаться от родного XmlSerializer ибо как я узнал он не умеет десериализовать типы типа internal. Вот пример моего кода:<br /><div class="code"><strong>Код</strong><div class="innercode"><br /> [XmlRoot(ElementName = "result")]<br /> public class CommandResult<br /> {<br /> private static XmlSerializer _serializer;<br /><br /> protected static XmlSerializer Serializer<br /> {<br /> get<br /> {<br /> if (_serializer == null)<br /> {<br /> _serializer = new XmlSerializer(typeof(CommandResult));<br /> }<br /> return _serializer;<br /> }<br /> }<br /><br /> [XmlAttribute("success")]<br /> public bool Success<br /> {<br /> get;<br /> set;<br /> }<br /><br /> [XmlAttribute("transactionid")]<br /> public String TransactionId<br /> {<br /> get;<br /> set;<br /> }<br /><br /> [XmlElement("message")]<br /> public String Message<br /> {<br /> get;<br /> set;<br /> }<br /><br /> [XmlIgnore]<br /> public int? Difference<br /> {<br /> get;<br /> set;<br /> }<br /><br /> [XmlAttribute("diff")]<br /> public String DifferenceAsString<br /> {<br /> get<br /> {<br /> if (Difference == null) return null;<br /> else<br /> return ((int)Difference).ToString();<br /> }<br /> set<br /> {<br /> if (value == null) Difference = null;<br /> else<br /> Difference = int.Parse(value);<br /> }<br /><br /> }<br /><br /> public static CommandResult FromXmlString(String s)<br /> {<br /> s = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + s;<br /> XmlSerializer serializer = Serializer;<br /> MemoryStream str = new MemoryStream(Encoding.UTF8.GetBytes(s));<br /> CommandResult result = (CommandResult)serializer.Deserialize(str);<br /> str.Close();<br /> return result;<br /> }<br /> }<br /></div></div>https://stocksharp.ru/topic/1229/Неверная свеча из CandleManager2010-11-16T18:39:20Z2010-11-16T18:39:20Zartemoxhttps://stocksharp.ru/users/490/info@stocksharp.ruПривет!<br /><br />По моему в CandleManager неверно строятся свечи.<br />Например сегодня построилась такая 15минутка:<br />16.11.2010 14:30:00 158040 158150 157770 158070<br /><br />В квике эта же свеча имеет цену закрытия 158080<br />В таблице сделок видим:<br /><a href='http://hostpix.ru/upload_image/8fbadf9582ae4f54d70be02726ac82d6.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="http://hostpix.ru/upload_image/8fbadf9582ae4f54d70be02726ac82d6.png" style='max-width: 600px;' alt=""/></a><br /><br />Возможно CandleManager берет первую попавшуюся сделку последней секунды (в данном случае 14:44:57)?https://stocksharp.ru/topic/1227/Снова ActionStrategy в 2.5.22010-11-16T13:50:48Z2010-11-16T13:50:48Zustashttps://stocksharp.ru/users/27611/info@stocksharp.ruДобрый день уважаемым Михаилу и коллегам.<br /><br />Остаются вопросы по работе ActionStrategy в 2.5.2<br /><br />Вот простой пример (ниже), который работает как и ожидается - т.е. просто переодически выводит<br />слово "Работает" плюс текущее время <br /><br />Но, есть два вопрса<br />1. Судя по выводу When отрабатывает раз в секунду а не за Interval стратегии который я пытался установить (см. в TryCreateStrategy <br /> _strat.Interval = TimeSpan.FromSeconds(0.10);)<br /><br />2. Если в стратегии переписать OnProcess, например так<br /><div class="code"><strong>Код</strong><div class="innercode"> <br /> protected override StrategyProcessResults OnProcess()<br /> {<br /> return StrategyProcessResults.Continue;<br /> } <br /><br /></div></div><br /><br />то стратегия просто перестанет выполняться. Что я снова сделал не так?<br /><br />Спасибо и с уважением!<br /><br />Пример привожу полностью можете легко воспроизвести у себя<br /><br /><div class="code"><strong>Код</strong><div class="innercode"><br />namespace test<br />{<br /> using System;<br /> using System.Linq;<br /> using System.Threading;<br /> using System.Collections.Generic;<br /> using System.ComponentModel;<br /> <br /> using Ecng.Trading.Algo;<br /> using Ecng.Trading.Algo.Candles;<br /> using Ecng.Trading.Algo.Strategies;<br /> using Ecng.Trading.Algo.Logging;<br /> using Ecng.Trading.BusinessEntities;<br /> using Ecng.Trading.Quik;<br /> using Ecng.Interop;<br /> using Ecng.Data;<br /> using Ecng.Common;<br /> using Ecng.ComponentModel;<br /><br /> <br /> public class Program<br /> {<br /> private static TestStrategy _strat;<br /> private static StrategyManager _manager;<br /> private static Portfolio _port;<br /> private static Security _sec;<br /> private static QuikTrader _trader;<br /> private static void OnLog(Strategy strategy, StrategyErrorStates errorState, string message)<br /> {<br /> // если стратегия вывела не просто сообщение, то вывести на экран.<br /> // if (errorState != StrategyErrorStates.None)<br /> Console.WriteLine(message);<br /> }<br /><br /> <br /> private static void TryCreateStrategy()<br /> {<br /> _strat = new TestStrategy() { Volume=1};<br /> _strat.Log += OnLog;<br /> _strat.PropertyChanged += OnStrategyPropertyChanged;<br /> _manager.Register(_strat, _port, _sec);<br /> _strat.Interval = TimeSpan.FromSeconds(0.10);<br /> _strat.I = 0;<br /> _strat.Start();<br /> var logger = new FileStrategyLogger("mylog.txt");<br /> logger.Strategies.Add(_strat);<br /> }<br /><br /><br /> static void Main()<br /> { <br /> using (var waitHandle = new ManualResetEvent(false))<br /> {<br /> <br /> _trader = new QuikTrader();<br /> _trader.Connect();<br /><br /> _trader.NewPortfolios += portfolios =><br /> {<br /> if (_port == null)<br /> {<br /> _port = portfolios.FirstOrDefault();<br /><br /> if (_port != null)<br /> {<br /> Console.WriteLine("Портфель {0} появился.", _port.Name); <br /> waitHandle.Set();<br /> }<br /> }<br /> };<br /><br /> _manager = new StrategyManager(_trader);<br /><br /> _trader.NewSecurities += securities =><br /> {<br /> if (_sec == null)<br /> {<br /> _sec = securities.FirstOrDefault(sec => sec.Code == "SRZ0");<br /> if (_sec != null)<br /> {<br /> Console.WriteLine(_sec.Code+" появился");<br /> waitHandle.Set();<br /><br /> }<br /> }<br /> };<br /><br /> waitHandle.WaitOne();<br /><br /> _trader.IsAsyncMode = true;<br /> _trader.Terminal.StartDde(new[] { _trader.SecuritiesTable }); <br /> <br /><br /> _trader.Connected += () =><br /> {<br /><br /> Console.WriteLine("Connected");<br /> waitHandle.Set();<br /><br /><br /> };<br /><br /> waitHandle.WaitOne();<br /><br /><br /> TryCreateStrategy();<br /> Console.WriteLine("Чтобы закончить, нажмите любую кнопку...");<br /> Console.Read();<br /><br /> }<br /><br /> }<br /><br /> static private void OnStrategyPropertyChanged(object sender, PropertyChangedEventArgs e)<br /> {<br /> Console.WriteLine("process state: " + _strat.ProcessState);<br /> Console.WriteLine("PnL: " + _strat.PnLManager.PnL);<br /> Console.WriteLine("slippage: " + _strat.SlippageManager.Slippage);<br /> Console.WriteLine("Position: " + _strat.PositionManager.Position);<br /> Console.WriteLine("Latency: " + _strat.LatencyManager.Latency);<br /> }<br /><br /> private static void OnError(Exception error)<br /> {<br /> Console.BackgroundColor = ConsoleColor.White;<br /> Console.ForegroundColor = ConsoleColor.Red;<br /> Console.WriteLine(error);<br /> // Console.Read();<br /> }<br /> }<br /><br /><br /><br /> class TestStrategy : ActionStrategy<br /> {<br /> <br /> private int i=0;<br /> <br /> public int I<br /> {<br /> get { return i; }<br /> set<br /> {<br /> i = value;<br /> When( () => true ).<br /> Do(() => {<br /> Console.WriteLine("Работает "+DateTime.Now.TimeOfDay);<br /> <br /> }).<br /> MakePeriodical(); <br /> }<br /> }<br /><br /> <br /> //не работает если раскомментировать OnProcess<br />/*<br /> protected override StrategyProcessResults OnProcess()<br /> {<br /> <br /> return StrategyProcessResults.Continue;<br /> } <br /> */<br /> }<br /> <br />}<br /></div></div> <br />https://stocksharp.ru/topic/1224/StopLossStrategy IsTrailing как работает?2010-11-15T16:49:19Z2010-11-15T16:49:19Zustashttps://stocksharp.ru/users/27611/info@stocksharp.ruПриветствую уважаемых Михаила и коллег.<br /><br />Расскажите, пжл, подробнее как работает IsTrailing. Когда происходит пересчёт, как часто и от каких значений цены?<br />(2.5.2) <br /><br />Спасибо и с уважением!https://stocksharp.ru/topic/1221/О LastTradeQuotingStrategy2010-11-15T08:05:04Z2010-11-15T08:05:04ZSolotonhttps://stocksharp.ru/users/80/info@stocksharp.ruЧто-то оно совсем не так работает, как описано в документации.<br />Насколько я понял, в конструкторе <em>LastTradeQuotingStrategy</em> предполагается в качестве параметра передать <em>Unit</em>, с параметрами которого стратегия будет работать для изменения цены выставляемой заявки. Пробую:<br /><div class="code"><strong>Код</strong><div class="innercode">...<br />strategy = new QuotingStrategy(order, new Unit() { Type = UnitTypes.Percent, Value = 1 });<br />if (strategy != null)<br />{<br /> base.ChildStrategies.Add(strategy);<br /> strategy.Start();<br />}<br />...</div></div><br /><br />В логе вижу, что стратегия работает, выставляет заявку и, как и ожидалось, меняет её с учётом последней сделки, но почему-то Unit не учитывается совсем. Я что-то не так делаю?https://stocksharp.ru/topic/1219/IsTradeTime в выходные2010-11-13T07:59:16Z2010-11-13T07:59:16ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ruЯ так понимаю IsTradeTime проверяет также и TimeOfDay.<br />Есть ли возможность от этого уйти?<br /><br />Т.к., допустим, сегодня - суббота, мы работаем, а этот метод возвращает false...https://stocksharp.ru/topic/1217/Stock# 2.5.22010-11-11T16:38:55Z2010-11-11T16:38:55ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ruОписание - <a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAABSPcEqI0ATrgKHUCtM97F-JU-J5UfsNRSbDZHIf7GAKicvgMZdSavjIk8IdUUVrsVSfNBWhoNPtGxwBWsR3LjA" title="http://stockmarketdotnet.blogspot.com/2010/11/stock-252.html">http://stockmarketdotnet.blogspot.com/2010/11/stock-252.html</a>https://stocksharp.ru/topic/1214/ActionStrategy частота проверки 1 сек?2010-11-09T07:50:59Z2010-11-09T07:50:59Zustashttps://stocksharp.ru/users/27611/info@stocksharp.ruПриветствую уважаемых Михаила и коллег.<br /><br />Один вопросик и одно пожелание.<br /><br />Вопрос:<br />Так всё таки проверка выполнения условия When в ActionStrategy - происходит ежесекундно , а не по событию?<br /><br /><br />Пожелание:<br />Хотелось бы увидеть пример использования в ActionStrategy новой фичи ActionStrategyConditionHelper. Например использования ActionStrategyConditionHelper.LastTradePriceMore или даже лучше CurrentCandleTotalVolumeMore. Т.к. я туповат и мне до конца не совсем ясно как автор подразумевает применение ActionStrategy вообще. Тот пример который в доке всё таки скорее таймфреймовый так как в нём необходимо чтобы условие в When было == true в каждый новый timeframe. А что если в один из таймфремов проверочное условие не выполнится, как тогда?<br /><br />Спасибо и с уважением!https://stocksharp.ru/topic/1213/Сеттер у QuotingStrategy.Order2010-11-08T21:05:27Z2010-11-08T21:05:27ZAlterhttps://stocksharp.ru/users/5036/info@stocksharp.ruМихаил, верните пожалуйста сеттер у QuotingStrategy.Order. У меня котировщик, унаследованный от QuotingStrategy и переопределяющий OnProcess, но использующий вспомогательные методы QuotingStrategy, ему никак без сеттера.https://stocksharp.ru/topic/1208/Stock# 2.5.12010-11-06T21:57:37Z2010-11-06T21:57:37ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<div class="quote"><span class="quotetitle">Alexander</span><div class="innerquote"><br />Ждём фикс для простых смертных =)</div></div><br /><br /><a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAABSPcEqI0ATrgKHUCtM97F-JU-J5UfsNRSbDZHIf7GAKicvgMZdSavjIk8IdUUVrsWgSkJFXdMwyH8mcfTtt6oP" title="http://stockmarketdotnet.blogspot.com/2010/11/stock-251.html">Выложил S# 2.5.1</a>https://stocksharp.ru/topic/1206/Генерация отчётов2010-11-02T22:38:17Z2010-11-02T22:38:17ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ru1) Отчёт в excel не генерируется (стоит на компе Excel 2010).<br />Пытаюсь генерировать даже следующим кодом:<br /><div class="code"><strong>Код</strong><div class="innercode">new ExcelStrategyReport(strategy, "1.xls").Generate();</div></div><br /><br />2) Если заявка кидается по рынку на фортсе (по цене лимита), то в отчёте неверно считается проскальзывание. Можно ли в отчёт подставлять реальную цену исполнения, а не цену заявки?https://stocksharp.ru/topic/1204/сжатие таймфрейма2010-11-01T18:39:03Z2010-11-01T18:39:03Zromanickhttps://stocksharp.ru/users/28047/info@stocksharp.ruДобрый день!<br />В Wealth-Lab есть полезная функция ToIntradayCompressed, которая может сжать тиковые данные до, например, минутных баров. Как это сделать в Stock#?https://stocksharp.ru/topic/1200/Не приходит лог через SmsStrategyLogger2010-10-30T17:01:47Z2010-10-30T17:01:47ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ruСоздаю <br /><div class="code"><strong>Код</strong><div class="innercode"> var smsLogger = new SmsStrategyLogger("<...>@gmail.com", "<...>");<br /> smsLogger.Strategies.Add(tfStrategy);</div></div><br /><br />Пытаюсь отправить из OnProcess стратегии:<br /><div class="code"><strong>Код</strong><div class="innercode"> AddLog(StrategyErrorStates.Error, "123");<br /> AddLog(StrategyErrorStates.Warning, "Test");<br /> AddLog(StrategyErrorStates.None, @"Тест");</div></div><br /><br />В итоге ничего не приходит.<br /><br />Уведомления в Гугл настроены так (как и написано в документации - выключил): <a href='http://img.pixs.ru/storage/2/8/4/googlecale_5953602_1133284.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="http://img.pixs.ru/storage/2/8/4/googlecale_5953602_1133284.png" style='max-width: 600px;' alt=""/></a><br />Пробовал включать уведомления - тоже не приходит. С чем может быть связано? (Телефон в гугл введён и подтверждён правильно)https://stocksharp.ru/topic/1199/Потокобезопасность2010-10-30T12:20:27Z2010-10-30T12:20:27Zanotharhttps://stocksharp.ru/users/6089/info@stocksharp.ruМихаил, добрый день/вечер/утро, при написании коннектора к транзаку возникло несколько вопросов про iTrader-решил что проще спросить сразу у Вас чем тестировать самому. Если я правильно понимаю, то скажем для того чтобы узнать что у Security что-то изменилось достаточно попросить у iTrader все security и подписаться на событие INotifyPropertyChanged у нужной? Если это так то Security потокобезопасна? Ведь поток Callback изменяет данные, а пользователь может их запросить из любого потока. https://stocksharp.ru/topic/1194/Stock# 2.52010-10-28T17:52:18Z2010-10-28T17:52:18ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ruВсех приветствую.<br /><br />Выложил новую версию. Новость будет позже. Изменений получилось много, но революционного нет. Для тех кто прогает под Квик интересен будет класс QuikTerminal. Для тех кто под Смарт - появилась поддержка 2.0. Подробнее и об остальном напишу в блоге.https://stocksharp.ru/topic/1191/Проблема с методом Strategy.OnProcess()2010-10-28T09:50:54Z2010-10-28T09:50:54ZMCTuTeJ|19951995https://stocksharp.ru/users/18/info@stocksharp.ruОн не хочет никак работать.<br />Код такой:<br />Создается Стратегия:<br /> <div class="code"><strong>Код</strong><div class="innercode"><br /> strategyManager = new StrategyManager(Trader);<br /> MyStrategy ms = new MyStrategy(indent, offset, volumeOrder, security);<br /> <br /> strategyManager.Register(ms, portfolio, security);<br /> <br /> ms.Start();<br /></div></div><br /><br />Стратегия:<br /><div class="code"><strong>Код</strong><div class="innercode"><br /> class MyStrategy : Strategy<br /> {<br /> public MyStrategy(int _indent, int _offset, int _volumeOrder, Security s)<br /> : base(){......}<br /><br /> protected override bool OnProcess()<br /> {<br /> //Тут некоторые действия происходят.<br /><br /> return true;<br /> }<br />}<br /></div></div><br /><br />Пробовал ставить брейк-поинт в начало метода OnProcess - он ни разу туда не зашел за 5 минут. В чем можеь быть проблема ?https://stocksharp.ru/topic/1180/Должен ли работать файл настроек стратегий на другом компьютере?2010-10-19T13:23:25Z2010-10-19T13:23:25Zsergunhttps://stocksharp.ru/users/6139/info@stocksharp.ruНемного смущает <First>db59caee-b131-4b6a-82d3-bb756039c860</First>.<br />javascript:__doPostBack('forum$ctl01$PostReply','')https://stocksharp.ru/topic/1178/Минимальный таймфрейм свечи2010-10-18T09:17:50Z2010-10-18T09:17:50ZAntonhttps://stocksharp.ru/users/28649/info@stocksharp.ruДобрый день.<br />Свечи какого минимальный таймфрейма можно получить с помощью S#? Хотелось бы 2 сек. Это возможно?<br />Поясню, свечи, вроде получаются, но они перепутаны по времени: с более поздним временем может стоять перед той, у которой время раньше, а затем опять с тем же временем (которое позже), но уже с другими ценами.<br />В чём причина не понятно, то ли так S# формирует свечи из Таблицы всех сделок (в ней он-лайн сделки идут в правильной последовательности), то ли S# формирует свечи по каким-то другим данным...<br />Спасибо.https://stocksharp.ru/topic/1174/ActionStrategyConditionHelper не нашёл в 2.42010-10-14T11:29:07Z2010-10-14T11:29:07Zustashttps://stocksharp.ru/users/27611/info@stocksharp.ruВ доке есть упоминание ActionStrategyConditionHelper сборка Ecng.Trading.Algo (in Ecng.Trading.Algo.dll)<br /><br />Но я его нигде не нашёл ни в одной либе. ( на всякий случай скачивал я StockSharp_2.4_Sources.zip )<br /><br />Ткните меня носом, туда где искать. Дайте пример использования, пжл, этого класса.<br /><br />Спасибо и с уважением!https://stocksharp.ru/topic/1167/Переход на .NET 4.02010-10-11T20:47:05Z2010-10-11T20:47:05ZAlmazovhttps://stocksharp.ru/users/27984/info@stocksharp.ruМихаил, добрый вечер.<br />Собственно сабж. Когда планируется, и планируется ли вообще?<br />Спасибо.