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

После обновления 4.0.6 не работают правила
Atom
28.11.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


Теги:


Спасибо:


1 2  >
esper

Фотография
Дата: 28.11.2011
Ответить


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

this
   .When(CandleToken.CandlesStarted())
   .Do(candles =>
   {
     var candle = candles.ElementAt(0);
   };
Спасибо:

pehas

Фотография
Дата: 29.11.2011
Ответить


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);
                    ...
                });
            ...

Спасибо:

pehas

Фотография
Дата: 29.11.2011
Ответить


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

Спасибо:

Alexander

Фотография
Дата: 29.11.2011
Ответить


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

Спасибо:

Alexander

Фотография
Дата: 30.11.2011
Ответить


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

this
   .When(order.NewTrades())
   .Do(trades =>
   {
     var trade = trades.ElementAt(0);
   });
Спасибо:

pehas

Фотография
Дата: 30.11.2011
Ответить


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

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

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

Спасибо:

Alexander

Фотография
Дата: 30.11.2011
Ответить


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

Спасибо:

pehas

Фотография
Дата: 30.11.2011
Ответить


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

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

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

Спасибо:

Alexander

Фотография
Дата: 30.11.2011
Ответить


Убедили :)

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

				this
					.When(order.NewTrades())
					.Do((t, trades) =>
					    	{
								var trade = trades.ElementAt(0);
					    	});
Спасибо: pehas

Mikhail Sukhov

Фотография
Дата: 30.11.2011
Ответить


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

this
  .When(order.NewTrades())
  .Do(trades =>
  {
	trades.ElementAt(0);
  });
Спасибо:
1 2  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy