проблемы с остановкой стратегии~/topic/1061/problemy-s-ostanovkoi-strategii/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-28T21:02:45Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/posts/m/3844/Свою проблему решил следующим образом: создал список в который добавляются данные из Strategy.Log. д...2010-08-26T12:50:00Z2010-08-26T12:50:00ZSerghttps://stocksharp.ru/users/484/info@stocksharp.ruСвою проблему решил следующим образом:<br />создал список в который добавляются данные из Strategy.Log.<br />добавил таймер на форму и теперь по таймеру синхронизирую гуи и свой<br />список с логом. пока вроде все работает) <br /> Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3843/Вот что иногда бывает в лог файле (первые 5 строк): S S 12:33:36.0820929 working 0820929 S запущена....2010-08-26T12:39:00Z2010-08-26T12:39:00ZSerghttps://stocksharp.ru/users/484/info@stocksharp.ruВот что иногда бывает в лог файле (первые 5 строк):<br /><br />S S 12:33:36.0820929 working<br />0820929 S запущена.<br />S запуS 12:33:36.0977180 working<br />S 12:33:36.0977180 working<br />S 12:33:36.1133431 working<br /><br />а в OnProcess сделано так:<br /> protected override bool OnProcess()<br /> {<br /> if (this.ProcessState == StrategyProcessStates.Stopping)<br /> return false;<br /><br /> int inUse = Interlocked.CompareExchange(ref _inUse, 1, 0);<br /> if (inUse == 0)<br /> {<br /> try<br /> {<br /> AddLog(StrategyErrorStates.Error, /<br />*DateTime.Now.ToString("H:mm:ss:fff") + */" working", this);<br /> AddLog(StrategyErrorStates.None, /<br />*DateTime.Now.ToString("H:mm:ss:fff") + */" working", this);<br /> AddLog(StrategyErrorStates.Warning, /<br />*DateTime.Now.ToString("H:mm:ss:fff") + */" working", this);<br /> }<br /> finally<br /> {<br /> Interlocked.Exchange(ref _inUse, 0);<br /> }<br /> }<br /> return true;<br /> }<br />а интервал стратегии this.Interval = TimeSpan.Zero;<br /> <br /> Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3842/Да, почитал про StreamWriter. Не все так хорошо. Заодно наткнулся на интересный методhttp://msdn.mic...2010-08-26T03:20:00Z2010-08-26T03:20:00ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ruДа, почитал про StreamWriter. Не все так хорошо. Заодно наткнулся на<br />интересный метод<a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.io.textwriter.synchronized.aspx" title="http://msdn.microsoft.com/en-us/library/system.io.textwriter.synchronized.aspx">http://msdn.microsoft.com/en-us/library/system.io.textwriter.synchronized.aspx</a><br /><br />Думаю будет элегантнее, чем вводить в коде свой маркер.<br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3841/Строчки одна за другой, но из разных стратегий, будут идти при любом раскладе -- организовывать в мн...2010-08-26T01:05:00Z2010-08-26T01:05:00ZИванов Андрейhttps://stocksharp.ru/users/28064/info@stocksharp.ruСтрочки одна за другой, но из разных стратегий, будут идти при любом<br />раскладе -- организовывать в многопоточной многопроцессорной среде<br />ордеринг потоков данных обычно неразумно. Где-то рядом обсуждали про<br />приход данных об изменении баланса для закрытой сделки или что-то типа<br />того -- это из той же серии. Если я правильно понял про строки --<br />каждая строка это одна запись в лог.<br /><br />Разрывы в строках да, могут быть. Может быть перемешано. Это в лучшем<br />случае =) А в худшем можно получить мусор, потому что StreamWriter не<br />тредсейфовый и можно поломать его состояние. Но такое получить<br />непросто, надо высокую concurrency иметь, чтобы постоянно ловить.<br /><br />Лечится просто.<br />private object _syncRoot; // вместо этого можно использовать любой<br />reference type филд<br /><br />lock(_syncRoot)<br />{<br />_writer.WriteLine("{0:T} {1}", DateTime.Now, message);<br /><br />Вряд ли синхронизация спасёт автора темы, но с логом всё будет<br />нормально.<br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3840/А что с ними произойдет? Будут разрыва в строчках? Или просто строчки будут идти одна за другой но и...2010-08-25T21:22:00Z2010-08-25T21:22:00ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ruА что с ними произойдет? Будут разрыва в строчках? Или просто строчки<br />будут идти одна за другой но из разных стратегий?<br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3839/Думаю, это когда несколько потоков параллельно пишут в один файл. 2010-08-25T21:08:00Z2010-08-25T21:08:00ZИванов Андрейhttps://stocksharp.ru/users/28064/info@stocksharp.ruДумаю, это когда несколько потоков параллельно пишут в один файл.<br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3838/Строки вылазят одна на другую - это как? В LogWindow может быть чуть шустрее, за счет того, что он н...2010-08-25T17:00:00Z2010-08-25T17:00:00ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ruСтроки вылазят одна на другую - это как?<br /><br />В LogWindow может быть чуть шустрее, за счет того, что он не<br />конкатенирует текст в контроле, а используется ListView. Попробуйте,<br />может и хватит скорости. А вообще вариант напрашивается писать в некую<br />очередь, из которой ГУИ поток выгребает данные и отображает на форме.<br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3837/в файл пишу через StategyLogger все норм. но если часто писать то бывает что строки одна на другую в...2010-08-25T16:18:00Z2010-08-25T16:18:00ZSerghttps://stocksharp.ru/users/484/info@stocksharp.ruв файл пишу через StategyLogger все норм. но если часто писать то<br />бывает что строки одна на другую вылазят) А как обстоят дела с wpf и<br />LogWindow? там таких проблем нет? <br /> Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3836/А если писать в файл? 2010-08-25T12:28:00Z2010-08-25T12:28:00ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ruА если писать в файл?<br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3835/вызывается минимум раз в секунду, а то и чаще. пробую обновлять данные порциями - не очень информати...2010-08-25T12:21:00Z2010-08-25T12:21:00ZSerghttps://stocksharp.ru/users/484/info@stocksharp.ruвызывается минимум раз в секунду, а то и чаще. пробую обновлять данные<br />порциями - не очень информативно.<br />видимо нужно придумать прокладку между гуи и логгированием. хотя по<br />сути логи нужны лишь при тестировании. <br /> Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3834/А как часто вызывается Log событие? Invoke - это ведь синхронизация с ГУИ потоком. Может быть фишка ...2010-08-25T12:09:00Z2010-08-25T12:09:00ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ruА как часто вызывается Log событие? Invoke - это ведь синхронизация с<br />ГУИ потоком. Может быть фишка в том, что все время уходит на эту саму<br />синхронизацию?<br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3398/Михаил, а в чем может быть причина того что во время выполнения стратегии метод ToLog работает норма...2010-08-24T23:40:00Z2010-08-24T23:40:00ZSerghttps://stocksharp.ru/users/484/info@stocksharp.ruМихаил, а в чем может быть причина того что во время выполнения<br />стратегии метод ToLog работает нормально, а после OnStopping<br />происходит зависание? <br /> Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3397/кажется разобрался. я видимо заумно (не правильно) использовал Strategy.Log вот как было: private vo...2010-08-24T23:16:00Z2010-08-24T23:16:00ZSerghttps://stocksharp.ru/users/484/info@stocksharp.ruкажется разобрался. я видимо заумно (не правильно) использовал<br />Strategy.Log<br />вот как было:<br /><br />private void ToLog(string message)<br /> {<br /> if (this.messageBox.InvokeRequired)<br /> {<br /> SetTextDeleg d = new SetTextDeleg(ToLog);<br /> this.Invoke(d, new object[] { message });<br /> }<br /> else<br /><br />messageBox.AppendText(DateTime.Now.ToString("HH:mm:ss.fff")+ ": " +<br />message + "\r\n");<br /> }<br /><br />void Log(Strategy arg1, StrategyErrorStates arg2, string arg3)<br /> {<br /> ToLog(arg3);<br /> }<br /><br />strat = new Arbitrage(quik, t1, t2, Convert.ToDouble(textBox1.Text),<br />1, 20);<br />strat.Log += new Action<Strategy, StrategyErrorStates, string>(Log);<br /><br />избавившись от strat.Log += ... все стало работать нормально.<br />осталось понять где ошибка. думаю в методе ToLog...<br /> <br /> Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3396/Так прога виснет или стратегия не нотифицирует о своей остановке? Какая версия S#? 2010-08-24T21:53:00Z2010-08-24T21:53:00ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ruТак прога виснет или стратегия не нотифицирует о своей остановке?<br />Какая версия S#?<br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3395/прога виснет. в логах вижу что стратегия останавливается но не вижу что она остановилась. еще раз по...2010-08-24T21:41:00Z2010-08-24T21:41:00ZSerghttps://stocksharp.ru/users/484/info@stocksharp.ruпрога виснет. в логах вижу что стратегия останавливается но не вижу<br />что она остановилась. еще раз повторюсь такая ситуация проявляется не<br />регулярно но довольно часто. <br /> Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3394/А что значит завис? В чем это проявилось? 2010-08-24T21:31:00Z2010-08-24T21:31:00ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ruА что значит завис? В чем это проявилось?<br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3393/после выхода из OnStopping() сразу завис :( 2010-08-24T21:02:00Z2010-08-24T21:02:00ZSerghttps://stocksharp.ru/users/484/info@stocksharp.ruпосле выхода из OnStopping() сразу завис :( <br /> Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3392/ÓÏÂÓÔ×ÅÎÎÁÑ. public class Arbitrage : Strategy { ... ÐÅÒÅÍÅÎÎÙÅ ... public Arbitrage(QuikTrader trad...2010-08-24T20:35:00Z2010-08-24T20:35:00ZSerghttps://stocksharp.ru/users/484/info@stocksharp.ruÓÏÂÓÔ×ÅÎÎÁÑ.<br />public class Arbitrage : Strategy<br />{<br /> ... ÐÅÒÅÍÅÎÎÙÅ ...<br /> public Arbitrage(QuikTrader trader, TradeSec ts1, TradeSec<br />ts2, double spreadInPercent, int minimalQty, int maxiQty)<br /> : base()<br /> {<br /> _trader = trader;<br /> this.Interval = TimeSpan.FromSeconds(1);<br /> minQty = minimalQty;<br /> maxQty = maxiQty;<br /> Portf1 = ts1.p;<br /> Portf2 = ts2.p;<br /> ClientCode1 = ts1.client;<br /> ClientCode2 = ts2.client;<br /> Sec1 = ts1.s;<br /> Sec2 = ts2.s;<br /> k1 = ts1.koef;<br /> k2 = ts2.koef;<br /> Spread = spreadInPercent;<br /> md1 = new MarketDepth(Sec1);<br /> md2 = new MarketDepth(Sec2);<br /> _trader.RegisterQuotes(Sec1);<br /> _trader.RegisterQuotes(Sec2);<br /> _trader.QuotesChanged += new<br />Action<MarketDepth>(_trader_QuotesChanged);<br /> }<br /><br /> void _trader_QuotesChanged(MarketDepth md)<br /> {<br /> if (md.Security == Sec1)<br /> {<br /> md1 = md;<br /> }<br /> if (md.Security == Sec2)<br /> {<br /> md2 = md;<br /> }<br /> }<br /><br /> protected override bool OnProcess()<br /> {<br /> if (this.ProcessState == StrategyProcessStates.Stopping)<br /> {<br /> return false;<br /> }<br /> if (!this.buzzy)<br /> {<br /> this.buzzy = true;<br /> var ords = AlgoSpread();<br /> if (ords != null && ords.Length >= 2)<br /> {<br /> // done ËÌÉÒÉÎÇ?<br /> if (!Sec1.Exchange.IsTradeTime(Trader) || !<br />Sec2.Exchange.IsTradeTime(Trader))<br /> {<br /> AddLog(ErrorState, "îÅÔÏÒÇÏ×ÒÅ ×ÒÅÍÑ", this);<br /> return true;<br /> }<br /><br /> foreach (Order o in ords)<br /> {<br /> if (o.Portfolio == Portf1)<br /> _trader.ClientCode = ClientCode1 + "//" +<br />orderParNum.ToString();<br /> else if (o.Portfolio == Portf2)<br /> _trader.ClientCode = ClientCode2 + "//" +<br />orderParNum.ToString();<br /> else<br /> _trader.ClientCode = "X";<br /><br /> AddLog(ErrorState, "new order " +<br />o.Direction.ToString() + " " +<br /> o.Security.Code + " " + o.Price + " " +<br />o.Volume,<br /> this);<br /><br /> try<br /> {<br /> RegisterOrder(o);<br /> }<br /> catch (Exception regOrderError)<br /> {<br /> AddLog(this.ErrorState, " ïÛÉÂËÁ<br />×ÙÓÔÁ×ÌÅÎÉÑ ÚÁÑ×ËÉ", this);<br /> AddLog(ErrorState, regOrderError.Message,<br />this);<br /> }<br /> }<br /> }<br /> this.buzzy = false;<br /> }<br /> return true;<br /> }<br /><br /> protected override void OnRunned()<br /> {<br /> base.OnRunned();<br /> buzzy = false;<br /> }<br /><br /> void QuotesChanged(OrderDirections arg1, IDictionary<int,<br />Quote> arg2)<br /> {<br /> if (!buzzy)<br /> this.OnProcess();<br /> }<br /><br /> protected override void OnStopping()<br /> {<br /> Trader.QuotesChanged -= _trader_QuotesChanged;<br /> base.OnStopping();<br /> }<br />×ÏÔ ÐÒÉÍÅÒÎÏ ÔÁË. ÓÔÁÒÁÌÓÑ ÄÅÌÁÔØ ËÁË × ÐÒÉÍÅÒÁÈ ÎÏ ×ÉÄÉÍÏ ÞÔÏÔÏ<br />ÕÐÕÓÔÉÌ.<br /> <br /> Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3391/А что за стратегия? Собственная или из примеров? 2010-08-24T20:21:00Z2010-08-24T20:21:00ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ruА что за стратегия? Собственная или из примеров?<br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/3390/Не совсем понимаю почему... ведь первая часть кода вызывается при нажатии кнопки и никак не должна з...2010-08-24T20:11:00Z2010-08-24T20:11:00ZSerghttps://stocksharp.ru/users/484/info@stocksharp.ruНе совсем понимаю почему... ведь первая часть кода вызывается при<br />нажатии кнопки и никак не должна зацикливаться... или я не прав? <br /> Copyright @ StockSharp Platform LLC 2010 - 2024