| Alexander 
 
   
 
						
						
					 | Date: 11/13/2011 
 
 
	
			russ Alexander Mukhanchikov russ Аналогичная проблема, борюсь с фракталами Code
[left]try
                    {
                        _strategy.FractalsValues.Process((CandleIndicatorValue)candle);
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }[/left] Выдает ошибку Недопустимое приведение "System.Int32" к "StockSharp.Algo.Candles.Candle". Что не так делаю? Посмотрел дебагом индиктор фракталов, падает в  Code
public override ComplexIndicatorValue OnProcess(IIndicatorValue input) в Code
return base.OnProcess(new ShiftedIndicatorValue(0, input.SetValue(0))); Ну видимо candle у вас Int32, а вы пытаетесь не к тому типу привести. Да, ошибку я понял, но я пользуюсь индикаторами, которые идут в S#, получается они могут не работать? Quote:_strategy.FractalsValues.Process((CandleIndicatorValue)candle); Это ваш код, следовательно, ошибка у вас, а не в S#. Вы приводите Int32 к CandleIndicatorValue, а не S#, разве нет?
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| russ 
 
   
 
						
						
					 | Date: 11/13/2011 
						
							|  |  |  |   |  
 
 
	
			Alexander Mukhanchikov Quote:_strategy.FractalsValues.Process((CandleIndicatorValue)candle); Это ваш код, следовательно, ошибка у вас, а не в S#. Вы приводите Int32 к CandleIndicatorValue, а не S#, разве нет? Да, это мой код, но candle у меня это объект типа TimeFrameCandle. Если посмотреть OnProcess индикатора фракталов, который идет в библиотеке индикаторов, то: Code
public override ComplexIndicatorValue OnProcess(IIndicatorValue input)
{
    var candle = input.GetValue<Candle>();
    ....
} Насколько я понял, на вход он получает свечу  Code
input.GetValue<Candle>(); поэтому свечу я ему и подал  Code
_strategy.FractalsValues.Process((CandleIndicatorValue)candle); а ошибка происходит в том же OnProcess в строке Code
return base.OnProcess(new ShiftedIndicatorValue(0, input.SetValue(0))); и ошибка понятна, потому-что input у нас типа Candle а мы задаем ему Int32. Поэтому тут два варианта, либо на вход нужно подавать не свечу, а что-то другое, либо в input.SetValue(0) задавать не 0, а какую-то свечу. Я только начал разбираться, поэтому еще не до конца понял логику этих индикаторов, подскажите плз.
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Sergey Masyura 
 
   
 
						
						
					 | Date: 11/13/2011 
						
							|  |  |  |   |  
 
 
	
			russ Alexander Mukhanchikov Quote:_strategy.FractalsValues.Process((CandleIndicatorValue)candle); Это ваш код, следовательно, ошибка у вас, а не в S#. Вы приводите Int32 к CandleIndicatorValue, а не S#, разве нет? Да, это мой код, но candle у меня это объект типа TimeFrameCandle. Если посмотреть OnProcess индикатора фракталов, который идет в библиотеке индикаторов, то: Code
public override ComplexIndicatorValue OnProcess(IIndicatorValue input)
{
    var candle = input.GetValue<Candle>();
    ....
} Насколько я понял, на вход он получает свечу  Code
input.GetValue<Candle>(); поэтому свечу я ему и подал  Code
_strategy.FractalsValues.Process((CandleIndicatorValue)candle); а ошибка происходит в том же OnProcess в строке Code
return base.OnProcess(new ShiftedIndicatorValue(0, input.SetValue(0))); и ошибка понятна, потому-что input у нас типа Candle а мы задаем ему Int32. Поэтому тут два варианта, либо на вход нужно подавать не свечу, а что-то другое, либо в input.SetValue(0) задавать не 0, а какую-то свечу. Я только начал разбираться, поэтому еще не до конца понял логику этих индикаторов, подскажите плз. Если на входе свеча, а на выходе число, то там используется CandlePartIndicatorValue, а не CandleIndicatorValue. Весь исходный код индикаторов открыт, так что если есть возможность посмотреть самому - вполне логично этой возможностью воспользоваться.
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| russ 
 
   
 
						
						
					 | Date: 11/14/2011 
 
 
	
			sergey.masyura Если на входе свеча, а на выходе число, то там используется CandlePartIndicatorValue, а не CandleIndicatorValue. Весь исходный код индикаторов открыт, так что если есть возможность посмотреть самому - вполне логично этой возможностью воспользоваться.
 
 Я честно уже долго сижу разбираюсь, не получается [confused]  И как CandlePartIndicatorValue на вход подать вместо CandleIndicatorValue ума не приложу.
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Sergey Masyura 
 
   
 
						
						
					 | Date: 11/14/2011 
 
 
	
			russ sergey.masyura Если на входе свеча, а на выходе число, то там используется CandlePartIndicatorValue, а не CandleIndicatorValue. Весь исходный код индикаторов открыт, так что если есть возможность посмотреть самому - вполне логично этой возможностью воспользоваться.
 
 Я честно уже долго сижу разбираюсь, не получается [confused]  И как CandlePartIndicatorValue на вход подать вместо CandleIndicatorValue ума не приложу. Никак. Но если возникла такая необходимость, то можно отнаследоваться от BaseCandleIndicatorSource и вызывать у него NewCandles(candles) Codeinternal class MyIndicatorSource : BaseCandleIndicatorSource
 {
 public MyIndicatorSource () : base(BaseCandleIndicatorSource.ByClose)
 {
 
 }
 }
 
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Mikhail Sukhov 
 
   
 
						
						
					 | Date: 11/15/2011 
 
 
	
			danl Наверное это не очень красиво, но работает. По поводу правильного решения, может следует сделать реализацию IIndicatorValue подобную той, которая в тесте, что бы она могла содержать любые значения и обучить текущие реализации содавать такие классы? Тогда выходные значения полностью развяжутся с входными, что, как мне кажется, логично. На эту тему нужно еще подумать. Я так понял был еще и коммит. Не плохо бы отписывать в таких случаях. Я сделал небольшой фикс на коммит. Но не могу понять следующую ситуацию. Почему в SetValue null не является ошибочной ситуацией? Мне кажется это всегда ошибка. Нельзя передавать Candle == null.
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| danl 
 
   
 
						
						
					 | Date: 11/16/2011 
 
 
	
			Mikhail Sukhov Я так понял был еще и коммит. Не плохо бы отписывать в таких случаях.
 Ок. Mikhail Sukhov Почему в SetValue null не является ошибочной ситуацией? Мне кажется это всегда ошибка. Нельзя передавать Candle == null.
 В данный момент получается, что SetValue, по сути, является методом, который создает, а не устанавливает значение. Так как были введены пустые значения (свойство IsEmpty), то нужен способ создавать и пустые значения, вот SetValue(null) и создает пустое значение. Можно сделать отдельный метод, который бедт создавать пустое значение, но тогда придется править индикаторы, что бы они null туда никогда не передавали, в принципе большой сложности не предстваляет. Кроме того, нужно что бы в тестовом проекте, то же происходило падение, при вызове SetValue(null), а то в тесте работает,  а жизни нет (я в основном из-за этого сделал, что бы индикаторы не падали).
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Dmitriy Klimov 
 
   
 
						
						
					 | Date: 11/25/2011 
						
							|  |  |  |   |  
 
 
	
			danl По поводу ATR, он работает без фиксов, если его инициализировать вот так: Code
IndicatorManager.RegisterIndicator(new AverageTrueRange(), new CandleTokenIndicatorSource(candleToken, BaseCandleIndicatorSource.ByClose)); То что там используется BaseCandleIndicatorSource.ByClose реального значения не имеет, так как исходный индикатор будет получать свечу целиком, но источник будет передавать в индикатор класс CandlePartIndicatorValue, который поддерживает тип decimal. Наверное это не очень красиво, но работает. По поводу правильного решения, может следует сделать реализацию IIndicatorValue подобную той, которая в тесте, что бы она могла содержать любые значения и обучить текущие реализации содавать такие классы? Тогда выходные значения полностью развяжутся с входными, что, как мне кажется, логично. На эту тему нужно еще подумать. Добрый день. Создаю индикатор на базе ATR. Столкнулся с описанной выше проблемой: генерируется исключение при отправке свечки в индикатор. Я так понимаю, рекомендуется использовать IndicatorManager для наполнения индикаторов данными. Но тогда, получается, мне придется при создании индикатора отправлять ему данные об IndicatorManager и CandleTokenIndicatorSource. Получается сильная зависимость индикаторов от других классов, хотя, вроде бы, особой необходимости в этом нет. Как коллеги решают данную проблему? Или проблемы нет, я просто не там ищу?
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  |