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


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

После обновления на версию 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

Теги:


Спасибо:




18 Ответов
esper

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


Попробуйте так
Код
this
   .When(CandleToken.CandlesStarted())
   .Do(candles =>
   {
     var candle = candles.ElementAt(0);
   };
Спасибо:

pehas

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


esper Перейти
Попробуйте так
Код
this
   .When(CandleToken.CandlesStarted())
   .Do(candles =>
   {
     var candle = candles.ElementAt(0);
   };


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

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



Автор топика
Спасибо:

pehas

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


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

Автор топика
Спасибо:

Alexander

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


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

Alexander

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


Проверил - всё работает как прежде. Нужно пересобрать всё локально
Проверял на таком примере:
Код
this
   .When(order.NewTrades())
   .Do(trades =>
   {
     var trade = trades.ElementAt(0);
   });
Спасибо:

pehas

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


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

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

Автор топика
Спасибо:

Alexander

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


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

pehas

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


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


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


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

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);
  });
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 30.11.2011
Ответить


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

Код
this
  .When(order.NewTrades())
  .Do(trades =>
  {
	trades.ElementAt(0);
  });


И вот такое:

Код
this
  .When(new CandleToken<TimeFrameCandle, TimeSpan>(null, TimeSpan.MinValue).CandlesStarted())
  .Do(candles =>
  {
    var candle = candles.ElementAt(0);
  });


Что-то видимо не до конца указываете. Можете прислать проектный файл целиком с минимальным не компилирующимся кодом.
Спасибо:

pehas

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


Alexander Mukhanchikov Перейти
Убедили :)

Вот так работает:
Код
				this
					.When(order.NewTrades())
					.Do((t, trades) =>
					    	{
								var trade = trades.ElementAt(0);
					    	});


О, другое дело!) Так работает. Ато я уже думал, у меня крыша начинает ехать Cursing
Автор топика
Спасибо:

pehas

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


Mikhail Sukhov Перейти


Что-то видимо не до конца указываете. Можете прислать проектный файл целиком с минимальным не компилирующимся кодом.


Работать то у меня работают и те примеры, что вы указали. Но это если их просто скопировать и вставить. А когда начинаешь там что-то менять - добавлять, студия сходит с ума.

Но если определение Do делать, как указал Александр, то все в порядке
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 30.11.2011
Ответить


pehas Перейти

Работать то у меня работают и те примеры, что вы указали. Но это если их просто скопировать и вставить. А когда начинаешь там что-то менять - добавлять, студия сходит с ума.


У меня то не сходит.
Спасибо:

Alexander

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


pehas Перейти
Mikhail Sukhov Перейти


Что-то видимо не до конца указываете. Можете прислать проектный файл целиком с минимальным не компилирующимся кодом.


Работать то у меня работают и те примеры, что вы указали. Но это если их просто скопировать и вставить. А когда начинаешь там что-то менять - добавлять, студия сходит с ума.

Но если определение Do делать, как указал Александр, то все в порядке


приложите проект. может дело в юзингах \ референсах.
дайте посмотреть, лучше сейчас разобраться чем откладывать.
Спасибо:

pehas

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


Александр, Михаил

Отправил вам проект в личку. Файл TurtleStrategy.cs

Пробую на двух машинах - домашней и рабочей. Результат одинаковый
Референсес все качал из 4.0.6 - Sources c SourceForge
Проект перестраивал, юсинги все неиспользуемые удалял. Сыылки тоже все по одной передобавил только те, что были нужны.

Так же пробовал создать чистый проект и вставил туда только те либы, которые нужны были для запуска примера. Результат тот же..

Действительно студия себя ведет неадекватно..
Автор топика
Спасибо:

Alexander

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


К сообщению прикрепляю файл - всё ок. Ничего не менял в проектах, просто вписал это правило вместо того что там было.

Узнал что это нормально когда студия по нажатию . (интелли сенс) думает что candles - StrategyRule. Тип-то не знает. А он действительно может быть StrategyRule.
Допишите руками ElementAt(0) и всё нормально.

в общем - удалите старые файлы, перекомпилируйте - и в бой :)
321.png 14 KB (0)
Спасибо: pehas

pehas

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


Значит не глюк.. Видимо просто добавили перегрузку и теперь оно может быть и StrategyRule тоже. Раньше видимо не могло в предыдущих версиях.
Ладно, тогда мылю лыжи и в перед к новым подвигам. Хорошо что разобрались Cool
Автор топика
Спасибо:


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

loading
clippy