После обновления 4.0.6 не работают правила

После обновления 4.0.6 не работают правила
Atom
11/28/2011
pehas


Доброго времени суток

После обновления на версию 4.0.6, перестал работать вот такой код


this
   .When(CandleToken.CandlesStarted())
   .Do<IEnumerable<Candle>>(candles =>
   {
     var candle = candles.ElementAt(0);
   };


Ошибка	1	Делегат "System.Func<StockSharp.Algo.Strategies.StrategyRule<System.Collections.Generic.IEnumerable<StockSharp.Algo.Candles.Candle>>,System.Collections.Generic.IEnumerable<StockSharp.Algo.Candles.Candle>,System.Collections.Generic.IEnumerable<StockSharp.Algo.Candles.Candle>>" не принимает "1" аргументов	C:\VS2010\AmBot\Strategy.cs	53	42	AmBot


Tags:


Thanks:


1 2  >
esper

Avatar
Date: 11/28/2011
Reply


Попробуйте так

this
   .When(CandleToken.CandlesStarted())
   .Do(candles =>
   {
     var candle = candles.ElementAt(0);
   };
Thanks:

pehas

Avatar
Date: 11/29/2011
Reply


esper: Попробуйте так

this .When(CandleToken.CandlesStarted()) .Do(candles => ;


Какая-то ерунда. Если сделать так как в вашем примере, то candles - это не IEnumerable<candles>, а StrategyRule IEnumerable<candles>. Соответственно, когда ставишь после candles точку, студия показывает все методы и свойства StrategyRule. Хотя если навести на candles указатель мыши, показывает что candles имеет тип IEnumerable<candles>
Может в какие-то библиотеки конфликтуют после апдейта? (я не так давно знаком со студией, не уверен что такое возможно, но очень похоже)

Вот что я пользую
:::spoiler


```csharp

namespace AmBot
{
    using System;
    using System.Collections.Generic;
    using System.Linq;

    using StockSharp.Algo;
    using StockSharp.Algo.Logging;
    using StockSharp.Algo.Candles;
    using StockSharp.Algo.Indicators;
    using StockSharp.Algo.Indicators.Trend;
    using StockSharp.Algo.Indicators.Misc;
    using StockSharp.Algo.Indicators.Oscillator;
    using StockSharp.Algo.Strategies;
    using StockSharp.BusinessEntities;
    using StockSharp.Quik;

    class TurtleStrategy : Strategy
    {
        ...
        protected override void OnStarting()
        {
            var CandleToken = this.CM.Tokens.ElementAt(0);

            this
                .When(CandleToken.CandlesStarted())
                .Do(candles => {
                    var candle = candles.ElementAt(0);
                    ...
                });
            ...

Thanks:

pehas

Avatar
Date: 11/29/2011
Reply


Вот это еще интересно

Thanks:

Alexander

Avatar
Date: 11/29/2011
Reply


Обновите все либы, перекомпилируйте проект. всё очень смахивает на локальные баги

Thanks:

Alexander

Avatar
Date: 11/30/2011
Reply


Проверил - всё работает как прежде. Нужно пересобрать всё локально Проверял на таком примере:

this
   .When(order.NewTrades())
   .Do(trades =>
   {
     var trade = trades.ElementAt(0);
   });
Thanks:

pehas

Avatar
Date: 11/30/2011
Reply


Я новичек в с#. Не совсем понимаю, что значит пересобрать локально. Но, надеюсь, делаю правильно.

  • Перезалил папку References,
  • удалил obj и bin из проекта.
  • Запустил проект,
  • удалил из него все лишние юсинги и все ссылки.
  • Добавил заново нужные ссылки из References.
  • В меню отладка выбрал "пересобрать проект"

Если просто вставить ваш пример, то да ошибок не выдает (что уже плюс). Но если поставить точку после trades в теле Do, то все равно выдает методы StrategyRule в автокомплите. У вас нет? Я приложил скрин, может проблема в этой перегрузке?

Thanks:

Alexander

Avatar
Date: 11/30/2011
Reply


Он у вас подсказку выдаёт для метода Do. candle тут не при чём.

Thanks:

pehas

Avatar
Date: 11/30/2011
Reply


Alexander Mukhanchikov: Он у вас подсказку выдаёт для метода Do. candle тут не при чём.

Подсказку я имею ввиду внутри Do а не на самом Do, как в первом моем скриншоте

Разве так должно быть? В версии 4.0.5 такого не было, выдавались методы для коллекции IEnumerable ...

Thanks:

Alexander

Avatar
Date: 11/30/2011
Reply


Убедили :)

Вот так работает:

				this
					.When(order.NewTrades())
					.Do((t, trades) =>
					    	{
								var trade = trades.ElementAt(0);
					    	});
Thanks: pehas

Mikhail Sukhov

Avatar
Date: 11/30/2011
Reply


У меня и вот такой работает:

this
  .When(order.NewTrades())
  .Do(trades =>
  {
	trades.ElementAt(0);
  });
Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy