﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Инициализация стратегии в тестировании на истории</title>
  <id>~/topic/3156/initsializatsiya-strategii-v-testirovanii-na-istorii/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-05T02:58:52Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3156" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/48378/</id>
    <title type="text">Получилось разобраться? </title>
    <published>2019-09-08T17:00:31Z</published>
    <updated>2019-09-08T17:00:31Z</updated>
    <author>
      <name>komaranton</name>
      <uri>https://stocksharp.com/users/104641/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Получилось разобраться?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22452/</id>
    <title type="text">[quote=vk37;22451][quote=Mikhail Sukhov;22449]Дебаггер, рефлектор.[/quote]деобфускатор? ) [/quote] Д...</title>
    <published>2012-11-12T21:09:16Z</published>
    <updated>2012-11-12T21:09:16Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;[quote=vk37;22451][quote=Mikhail Sukhov;22449]Дебаггер, рефлектор.[/quote]деобфускатор? )&lt;/p&gt;
&lt;p&gt;[/quote]&lt;/p&gt;
&lt;p&gt;Да я про ваш код имел ввиду. Хотя конечно я бы начал с основ - что такое исключение и что такое стектрейс. Но я так понял вы не из тех, кто любит на всякие разности отвлекаться.[rolleyes]&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22451/</id>
    <title type="text">[quote=Mikhail Sukhov;22449]Дебаггер, рефлектор.[/quote]деобфускатор? ) </title>
    <published>2012-11-12T21:05:55Z</published>
    <updated>2012-11-12T21:05:55Z</updated>
    <author>
      <name>vk37</name>
      <uri>https://stocksharp.com/users/6296/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;[quote=Mikhail Sukhov;22449]Дебаггер, рефлектор.[/quote]деобфускатор? )&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22449/</id>
    <title type="text">[quote=vk37;22446]Может неявно как-то вызывается. Могу выслать код стратегии котирования. Для ревью ...</title>
    <published>2012-11-12T20:23:05Z</published>
    <updated>2012-11-12T20:23:05Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;[quote=vk37;22446]Может неявно как-то вызывается. Могу выслать код стратегии котирования. Для ревью )
[/quote]&lt;/p&gt;
&lt;p&gt;Если только Михаил заинтересуется[biggrin] Мне и своего кода для ревьирования хватает, спасибо. Надо поднтянуть матчасть связанную с отладкой ошибок. Дебаггер, рефлектор.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22446/</id>
    <title type="text">[quote=Mikhail Sukhov;22442][quote]System.InvalidOperationException: Operation is not valid due to t...</title>
    <published>2012-11-12T20:08:06Z</published>
    <updated>2012-11-12T20:08:06Z</updated>
    <author>
      <name>vk37</name>
      <uri>https://stocksharp.com/users/6296/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;[quote=Mikhail Sukhov;22442][quote]System.InvalidOperationException: Operation is not valid due to the current state of the object.
at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)
at AlgoTrading.HistoryTesting.Optimizer.&amp;lt;&amp;gt;c__DisplayClassb.&lt;Optimize&gt;b__5(ParamsDto period) in c:\ActiveProjects\AlgoTrading3\trunk\SourceCode\HistoryTesting\Optimizer.cs:line 83[/quote]&lt;/p&gt;
&lt;p&gt;По стек трейсу видно, что напрямую вызывается BaseTrader.ProcessEvents. Зачем?[/quote]
Даже не знаю что это такое. Строка 83 - инициализация стратегии.
Упрощенный код моей стратегии:
[SPOILER][code=csharp]    public sealed class MyStrategy : AbstractStrategy
{
private bool _canProcess = true;
private readonly object _locker = new object();
public CsvLogManager CsvLogManager { get; set; }&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    protected override void OnStarted()
    {
        Security
            .WhenMarketDepthChanged()
            .Do(ProcessDepth)
            .Sync(_locker)
            .Apply(this);

        this.WhenNewMyTrades()
            .Do(myTrades =&amp;gt;
                {
                    foreach (var myTrade in myTrades)
                    {
                        CsvLogManager.WriteLine(new MyTradeLogItem()
                        {
                            Now = DateTime.Now,
                            CurrentTime = CurrentTime,
                            TradeId = myTrade.Trade.Id,
                            TransactionId = myTrade.Order.TransactionId,
                            Time = myTrade.Trade.Time,
                            TradePrice = myTrade.Trade.Price,
                            OrderPrice = myTrade.Order.Price,
                            TradeVolume = myTrade.Trade.Volume,
                            Direction = myTrade.Order.Direction,
                            OrderId = myTrade.Order.Id,
                            Slippage = myTrade.GetSlippage(true),
                            SlippageQuoting = SlippageManager.GetSlippage(myTrade),
                            Comment = comment,
                        });

                        CsvLogManager.WriteLine(new MyTradeWmsLogItem()
                        {
                            Time = myTrade.Trade.Time,
                            SecurityCode = Security.Id == Securities.Instance.RtsF.Id ? &amp;quot;RTS&amp;quot; : Security.Code,
                            Direction = myTrade.Order.Direction,
                            Price = myTrade.Trade.Price,
                            Volume = myTrade.Trade.Volume,
                            Comission = myTrade.Trade.Volume * 2,
                        });
                    } 
                })
            .Apply(this);

        base.OnStarted();
    }

    protected override void OnStopped()
    {
        base.OnStopped();
        CsvLogManager.Dispose();
    }

    private void ProcessDepth(MarketDepth depth)
    {
        if (!Security.Exchange.IsTradeTime(depth.LastChangeTime))
            return;

        if (CsvLogManager.MarketDepthLogEnabled)
            CsvLogManager.WriteLine(new MarketDepthLogItem()
                {
                    Now = DateTime.Now,
                    CurrentTime = CurrentTime,
                    MarketDepthTime = depth.LastChangeTime,
                    Ratio = ratio,
                    CanProcess = Convert.ToInt32(_canProcess),
                    CurrentPrice = price,
                    BestAsk = depth.BestAsk == null ? 0 : depth.BestAsk.Price,
                    BestBid = depth.BestBid == null ? 0 : depth.BestBid.Price,
                    PnL = PnL,
                    PortfolioBeginValue = Portfolio.BeginValue,
                    PortfolioCurrentValue = Portfolio.CurrentValue,
                    PortfolioVariationMargin = Portfolio.VariationMargin,
                    PortfolioComission = Portfolio.Commission,
                    PortfolioGetPrice = Portfolio.GetPrice(),
                });

        if (!_canProcess)
            return;

        var closePosition = ShouldClose();
        var openPosition = ShouldOpen();;

        if (closePosition || openPosition)
        {
            _canProcess = false;
            var volume = 0m;

            if (closePosition)
                volume += Math.Abs(Position);
            
            if (openPosition)
               volume += Volume;

            var strategy = new MyQuotingStrategy(orderDirection,
                                                 new Unit(price, UnitTypes.Absolute, Security),
                                                 new Unit(1, UnitTypes.Step, Security),
                                                 comment) { Volume = volume };
            strategy
                .WhenStopped()
                .Do(() =&amp;gt;
                {
                    _canProcess = true;
                })
                .Once()
                .Sync(_locker)
                .Apply(this);

            ChildStrategies.Add(strategy);
        }
    }
}[/code][/SPOILER]Может неявно как-то вызывается. Могу выслать код стратегии котирования. Для ревью )
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22442/</id>
    <title type="text">[quote]System.InvalidOperationException: Operation is not valid due to the current state of the obje...</title>
    <published>2012-11-12T19:36:21Z</published>
    <updated>2012-11-12T19:36:21Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;[quote]System.InvalidOperationException: Operation is not valid due to the current state of the object.
at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)
at AlgoTrading.HistoryTesting.Optimizer.&amp;lt;&amp;gt;c__DisplayClassb.&lt;Optimize&gt;b__5(ParamsDto period) in c:\ActiveProjects\AlgoTrading3\trunk\SourceCode\HistoryTesting\Optimizer.cs:line 83[/quote]&lt;/p&gt;
&lt;p&gt;По стек трейсу видно, что напрямую вызывается BaseTrader.ProcessEvents. Зачем?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22439/</id>
    <title type="text">В упрощенном виде код оптимизации такой: [SPOILER][code=csharp] public class Optimizer { private ISt...</title>
    <published>2012-11-12T17:16:55Z</published>
    <updated>2012-11-12T17:17:20Z</updated>
    <author>
      <name>vk37</name>
      <uri>https://stocksharp.com/users/6296/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;В упрощенном виде код оптимизации такой:
[SPOILER][code=csharp]    public class Optimizer
{
private IStorageRegistry _storageRegistry;
private LocalMarketDataDrive _defaultDrive;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    public void Optimize()
    {
        var startTime = new DateTime(2012, 9, 10);
        var stopTime = new DateTime(2012, 11, 8);
        _storageRegistry = new StorageRegistry();
        _defaultDrive = (LocalMarketDataDrive)_storageRegistry.DefaultDrive;
        _defaultDrive.Path = @&amp;quot;D:\DBs\HydraData\Smart&amp;quot;;
        var security = Securities.Instance.RtsF;
        var periods = MyStrategy.GetParamCombinations();

        Parallel.ForEach(periods, new ParallelOptions { MaxDegreeOfParallelism = 8 }, period =&amp;gt;
            {
                using (var waitHandle = new AutoResetEvent(false))
                {
                    var rts = security.Clone();
                    var portfolio = new Portfolio { Name = &amp;quot;test account&amp;quot;, BeginValue = 100000m };
                    var trader = new EmulationTrader(
                        new[] { rts },
                        new[] { portfolio },
                        _storageRegistry)
                        {
                            UseMarketDepth = true,
                            StorageRegistry = _storageRegistry,
                        };

                    trader.MarketEmulator.Settings.Latency = TimeSpan.FromSeconds(1);
                    trader.RegisterMarketDepth(rts);
                    trader.Connect();
                    trader.StartExport();
                    var strategy = new MyStrategy(period)
                    {
                        Volume = 1,
                        Security = rts,
                        Portfolio = portfolio,
                        Trader = trader,
                        CommissionManager = rts.GetComissionManager(),
                    };

                    trader.StateChanged += (oldState, newState) =&amp;gt;
                        {
                            if (trader.State == EmulationStates.Started)
                                strategy.Start();
                            else if (trader.State == EmulationStates.Stopped)
                            {
                                new ExcelStrategyReport(strategy, path).Generate();
                                waitHandle.Set();
                            }
                        };

                    trader.Start(startTime, stopTime);
                    waitHandle.WaitOne();
                }
            });
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[/code][/SPOILER]Вроде EmulationTrader на правильном месте. Не знаю как правильно )&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22436/</id>
    <title type="text">судя по колстаку у вас Parallel.For или что-то в этом духе. Там точно нет ситуации что EmulationTrad...</title>
    <published>2012-11-12T16:16:21Z</published>
    <updated>2012-11-12T16:16:21Z</updated>
    <author>
      <name>pyhta4og</name>
      <uri>https://stocksharp.com/users/497/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;судя по колстаку у вас Parallel.For или что-то в этом духе. Там точно нет ситуации что EmulationTrader дергается из двух разных потоков? Он вполне может быть не потокобезопасным.&lt;/p&gt;
&lt;p&gt;если вам надо сделать оптимизацию гораздо быстрее будет сделать кучу экземпляров стратегии с разными параметрами и всю кучу прогнать в одном эмуляйшн-трейдере.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22393/</id>
    <title type="text">Ошибка, в общем, возникает при инициализации старетгии. Вне зависимости в каком месте ее инициализир...</title>
    <published>2012-11-09T20:27:34Z</published>
    <updated>2012-11-09T20:31:00Z</updated>
    <author>
      <name>vk37</name>
      <uri>https://stocksharp.com/users/6296/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Ошибка, в общем, возникает при инициализации старетгии. Вне зависимости в каком месте ее инициализировать. Возникает не при каждом запуске. Одна и та же сборка иногда нормально сработает, а иногда с ошибкой. Может кто сталкивался?
[SPOILER][code=plain]System.AggregateException: One or more errors occurred. ---&amp;gt; System.InvalidOperationException: Operation is not valid due to the current state of the object.
at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)
at AlgoTrading.HistoryTesting.Optimizer.&amp;lt;&amp;gt;c__DisplayClassb.&lt;Optimize&gt;b__5(ParamsDto period) in c:\ActiveProjects\AlgoTrading3\trunk\SourceCode\HistoryTesting\Optimizer.cs:line 83
at System.Threading.Tasks.Parallel.&amp;lt;&amp;gt;c__DisplayClassf&lt;code&gt;1.&amp;lt;ForWorker&amp;gt;b__c() at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) at System.Threading.Tasks.Task.&amp;lt;&amp;gt;c__DisplayClass10.&amp;lt;ExecuteSelfReplicating&amp;gt;b__f(Object param0) --- End of inner exception stack trace --- at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) at System.Threading.Tasks.Task.Wait() at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action&lt;/code&gt;1 body, Action&lt;code&gt;2 bodyWithState, Func&lt;/code&gt;4 bodyWithLocal, Func&lt;code&gt;1 localInit, Action&lt;/code&gt;1 localFinally)
at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable&lt;code&gt;1 source, ParallelOptions parallelOptions, Action&lt;/code&gt;1 body, Action&lt;code&gt;2 bodyWithState, Action&lt;/code&gt;3 bodyWithStateAndIndex, Func&lt;code&gt;4 bodyWithStateAndLocal, Func&lt;/code&gt;5 bodyWithEverything, Func&lt;code&gt;1 localInit, Action&lt;/code&gt;1 localFinally)
at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable&lt;code&gt;1 source, ParallelOptions parallelOptions, Action&lt;/code&gt;1 body)
at AlgoTrading.HistoryTesting.Optimizer.Optimize() in c:\ActiveProjects\AlgoTrading3\trunk\SourceCode\HistoryTesting\Optimizer.cs:line 129
at AlgoTrading.HistoryTesting.Program.Main() in c:\ActiveProjects\AlgoTrading3\trunk\SourceCode\HistoryTesting\Program.cs:line 29
---&amp;gt; (Inner Exception #0) System.InvalidOperationException: Operation is not valid due to the current state of the object.
at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)
at AlgoTrading.HistoryTesting.Optimizer.&amp;lt;&amp;gt;c__DisplayClassb.&lt;Optimize&gt;b__5(ParamsDto period) in c:\ActiveProjects\AlgoTrading3\trunk\SourceCode\HistoryTesting\Optimizer.cs:line 83
at System.Threading.Tasks.Parallel.&amp;lt;&amp;gt;c__DisplayClassf`1.&lt;ForWorker&gt;b__c()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.&amp;lt;&amp;gt;c__DisplayClass10.&lt;ExecuteSelfReplicating&gt;b__f(Object param0)&amp;lt;---&lt;/p&gt;
&lt;p&gt;---&amp;gt; (Inner Exception #1) System.InvalidOperationException: Operation is not valid due to the current state of the object.
at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)
at AlgoTrading.HistoryTesting.Optimizer.&amp;lt;&amp;gt;c__DisplayClassb.&lt;Optimize&gt;b__5(ParamsDto period) in c:\ActiveProjects\AlgoTrading3\trunk\SourceCode\HistoryTesting\Optimizer.cs:line 83
at System.Threading.Tasks.Parallel.&amp;lt;&amp;gt;c__DisplayClassf`1.&lt;ForWorker&gt;b__c()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.&amp;lt;&amp;gt;c__DisplayClass10.&lt;ExecuteSelfReplicating&gt;b__f(Object param0)&amp;lt;---&lt;/p&gt;
&lt;p&gt;---&amp;gt; (Inner Exception #2) System.InvalidOperationException: Operation is not valid due to the current state of the object.
at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)
at AlgoTrading.HistoryTesting.Optimizer.&amp;lt;&amp;gt;c__DisplayClassb.&lt;Optimize&gt;b__5(ParamsDto period) in c:\ActiveProjects\AlgoTrading3\trunk\SourceCode\HistoryTesting\Optimizer.cs:line 83
at System.Threading.Tasks.Parallel.&amp;lt;&amp;gt;c__DisplayClassf`1.&lt;ForWorker&gt;b__c()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.&amp;lt;&amp;gt;c__DisplayClass10.&lt;ExecuteSelfReplicating&gt;b__f(Object param0)&amp;lt;---&lt;/p&gt;
&lt;p&gt;---&amp;gt; (Inner Exception #3) System.InvalidOperationException: Operation is not valid due to the current state of the object.
at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)
at AlgoTrading.HistoryTesting.Optimizer.&amp;lt;&amp;gt;c__DisplayClassb.&lt;Optimize&gt;b__5(ParamsDto period) in c:\ActiveProjects\AlgoTrading3\trunk\SourceCode\HistoryTesting\Optimizer.cs:line 83
at System.Threading.Tasks.Parallel.&amp;lt;&amp;gt;c__DisplayClassf`1.&lt;ForWorker&gt;b__c()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.&amp;lt;&amp;gt;c__DisplayClass10.&lt;ExecuteSelfReplicating&gt;b__f(Object param0)&amp;lt;---&lt;/p&gt;
&lt;p&gt;---&amp;gt; (Inner Exception #4) System.InvalidOperationException: Operation is not valid due to the current state of the object.
at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)
at AlgoTrading.HistoryTesting.Optimizer.&amp;lt;&amp;gt;c__DisplayClassb.&lt;Optimize&gt;b__5(ParamsDto period) in c:\ActiveProjects\AlgoTrading3\trunk\SourceCode\HistoryTesting\Optimizer.cs:line 83
at System.Threading.Tasks.Parallel.&amp;lt;&amp;gt;c__DisplayClassf`1.&lt;ForWorker&gt;b__c()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.&amp;lt;&amp;gt;c__DisplayClass10.&lt;ExecuteSelfReplicating&gt;b__f(Object param0)&amp;lt;---&lt;/p&gt;
&lt;p&gt;---&amp;gt; (Inner Exception #5) System.InvalidOperationException: Operation is not valid due to the current state of the object.
at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)
at AlgoTrading.HistoryTesting.Optimizer.&amp;lt;&amp;gt;c__DisplayClassb.&lt;Optimize&gt;b__5(ParamsDto period) in c:\ActiveProjects\AlgoTrading3\trunk\SourceCode\HistoryTesting\Optimizer.cs:line 83
at System.Threading.Tasks.Parallel.&amp;lt;&amp;gt;c__DisplayClassf`1.&lt;ForWorker&gt;b__c()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.&amp;lt;&amp;gt;c__DisplayClass10.&lt;ExecuteSelfReplicating&gt;b__f(Object param0)&amp;lt;---&lt;/p&gt;
&lt;p&gt;---&amp;gt; (Inner Exception #6) System.InvalidOperationException: Operation is not valid due to the current state of the object.
at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)
at AlgoTrading.HistoryTesting.Optimizer.&amp;lt;&amp;gt;c__DisplayClassb.&lt;Optimize&gt;b__5(ParamsDto period) in c:\ActiveProjects\AlgoTrading3\trunk\SourceCode\HistoryTesting\Optimizer.cs:line 83
at System.Threading.Tasks.Parallel.&amp;lt;&amp;gt;c__DisplayClassf`1.&lt;ForWorker&gt;b__c()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.&amp;lt;&amp;gt;c__DisplayClass10.&lt;ExecuteSelfReplicating&gt;b__f(Object param0)&amp;lt;---&lt;/p&gt;
&lt;p&gt;---&amp;gt; (Inner Exception #7) System.InvalidOperationException: Operation is not valid due to the current state of the object.
at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)
at AlgoTrading.HistoryTesting.Optimizer.&amp;lt;&amp;gt;c__DisplayClassb.&lt;Optimize&gt;b__5(ParamsDto period) in c:\ActiveProjects\AlgoTrading3\trunk\SourceCode\HistoryTesting\Optimizer.cs:line 83
at System.Threading.Tasks.Parallel.&amp;lt;&amp;gt;c__DisplayClassf`1.&lt;ForWorker&gt;b__c()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.&amp;lt;&amp;gt;c__DisplayClass10.&lt;ExecuteSelfReplicating&gt;b__f(Object param0)&amp;lt;---[/code][/SPOILER]&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22389/</id>
    <title type="text">[quote=vk37;22371]Я бы инициализацию стратегии перенес сюда. А то ошибка происходит, про состояние о...</title>
    <published>2012-11-09T14:33:32Z</published>
    <updated>2012-11-09T14:33:32Z</updated>
    <author>
      <name>pyhta4og</name>
      <uri>https://stocksharp.com/users/497/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;[quote=vk37;22371]Я бы инициализацию стратегии перенес сюда. А то ошибка происходит, про состояние объекта что-то.&lt;/p&gt;
&lt;p&gt;[code=csharp]_trader.StateChanged += (oldState, newState) =&amp;gt;
{
if (_trader.State == EmulationStates.Stopped)
{
this.GuiAsync(() =&amp;gt;
{
StartBtn.IsEnabled = true;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;		if (_trader.IsFinished)
		{
			TestingProcess.Value = TestingProcess.Maximum;
			MessageBox.Show(this, &amp;quot;Закончено за &amp;quot; + (DateTime.Now - _startEmulationTime));
		}
		else
			MessageBox.Show(this, &amp;quot;Отменено&amp;quot;);
	});
}
else if (_trader.State == EmulationStates.Started)
{
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // создаем торговую стратегию, скользящие средние на 80 5-минуток и 10 5-минуток
    _strategy = new SmaStrategy(series, new SimpleMovingAverage { Length = 80 }, new SimpleMovingAverage { Length = 10 })
    {
        Volume = 1,
        Portfolio = portfolio,
        Security = security,
        Trader = _trader
    };
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	// запускаем стратегию когда эмулятор запустился
	_strategy.Start();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;};[/code][/quote]&lt;/p&gt;
&lt;p&gt;тогда у вас стратегия не факт что запустится с начала данных - эмулятор уедет вперед&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22371/</id>
    <title type="text">Я бы инициализацию стратегии перенес сюда. А то ошибка происходит, про состояние объекта что-то. [co...</title>
    <published>2012-11-09T10:49:09Z</published>
    <updated>2012-11-09T10:49:09Z</updated>
    <author>
      <name>vk37</name>
      <uri>https://stocksharp.com/users/6296/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Я бы инициализацию стратегии перенес сюда. А то ошибка происходит, про состояние объекта что-то.&lt;/p&gt;
&lt;p&gt;[code=csharp]_trader.StateChanged += (oldState, newState) =&amp;gt;
{
if (_trader.State == EmulationStates.Stopped)
{
this.GuiAsync(() =&amp;gt;
{
StartBtn.IsEnabled = true;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;		if (_trader.IsFinished)
		{
			TestingProcess.Value = TestingProcess.Maximum;
			MessageBox.Show(this, &amp;quot;Закончено за &amp;quot; + (DateTime.Now - _startEmulationTime));
		}
		else
			MessageBox.Show(this, &amp;quot;Отменено&amp;quot;);
	});
}
else if (_trader.State == EmulationStates.Started)
{
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // создаем торговую стратегию, скользящие средние на 80 5-минуток и 10 5-минуток
    _strategy = new SmaStrategy(series, new SimpleMovingAverage { Length = 80 }, new SimpleMovingAverage { Length = 10 })
    {
        Volume = 1,
        Portfolio = portfolio,
        Security = security,
        Trader = _trader
    };
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	// запускаем стратегию когда эмулятор запустился
	_strategy.Start();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;};[/code]&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>