4.2.2.25: Indicators. Метод OnProcess возвращает IIndicatorValue.
Atom Ответить
27.09.2014


У меня были написаны собственные индикаторы, возвращающие значения decimal. Как теперь нужно переписать код, чтобы возвращаемы значения были IIndicatorValue?

Можно на основе примера:
Code

public class Dummy : LengthIndicator<decimal>
    {
        protected override decimal OnProcess(IIndicatorValue input)
        {
            var i = input.GetValue<decimal>();
            return i+100;
        }
    }

Теги:


Спасибо:




10 Ответов
Mikhail Sukhov

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


Было в чате
Спасибо:

devruss

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


Михаил Сухов Go to
Было в чате


Я конечно порылся в чате и нашел. А вот что делать всем остальным пользователям, которые не имеют эту историю? Мало того, что непонятно зачем поменяли тип данных, так еще и сделали это по-тихому вообще без какой-либо документации. Неужели сложно хоть пример использования составить? Я уже не говорю про какие-то новые фичи, которые вообще непонятно как использовать без документации.
Я не первый про это пишу, но думаю, напомнить стоит.
Автор топика
Спасибо:

Rebelion

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


devruss Go to
Михаил Сухов Go to
Было в чате


Я конечно порылся в чате и нашел. А вот что делать всем остальным пользователям, которые не имеют эту историю? Мало того, что непонятно зачем поменяли тип данных, так еще и сделали это по-тихому вообще без какой-либо документации. Неужели сложно хоть пример использования составить? Я уже не говорю про какие-то новые фичи, которые вообще непонятно как использовать без документации.
Я не первый про это пишу, но думаю, напомнить стоит.


Коллега, а выложите чат для тех, кто данной инфой не обладает...
Спасибо:

devruss

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


Rebelion Go to

Коллега, а выложите чат для тех, кто данной инфой не обладает...


Code

protected override IIndicatorValue OnProcess(IIndicatorValue input)
  {
   var newValue = input.GetValue<decimal>();

   if (input.IsFinal)
   {
    Buffer.Add(newValue);
    
    if ((Buffer.Count - 1) > Length)
     Buffer.RemoveAt(o);
   }

   if (Buffer.Count == 0)
    return new DecimalIndicatorValue();

   return (DecimalIndicatorValue)(newValue - Buffer[0]);
  }

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

Rebelion

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


devruss Go to
Rebelion Go to

Коллега, а выложите чат для тех, кто данной инфой не обладает...


Code

protected override IIndicatorValue OnProcess(IIndicatorValue input)
  {
   var newValue = input.GetValue<decimal>();

   if (input.IsFinal)
   {
    Buffer.Add(newValue);
    
    if ((Buffer.Count - 1) > Length)
     Buffer.RemoveAt(o);
   }

   if (Buffer.Count == 0)
    return new DecimalIndicatorValue();

   return (DecimalIndicatorValue)(newValue - Buffer[0]);
  }




Теперь вопрос.

Было

Code
protected override decimal [] OnProcess(IIndicatorValue input)
{
     return new decimal[2] {1.0m, 1.0m};
}


На вариант

Code
protected override IIndicatorValue [] OnProcess(IIndicatorValue input)
{
     new DecimalIndicatorValue[2] {(DecimalIndicatorValue)1.0m, (DecimalIndicatorValue)1.0m};
}


ругается, что возвращаемое значение должно быть IIndicatorValue. Внимание, вопрос - что делать? Теперь массив не передать?
Спасибо:

Andrii

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


Rebelion Go to
devruss Go to
Rebelion Go to

Коллега, а выложите чат для тех, кто данной инфой не обладает...


Code

protected override IIndicatorValue OnProcess(IIndicatorValue input)
  {
   var newValue = input.GetValue<decimal>();

   if (input.IsFinal)
   {
    Buffer.Add(newValue);
    
    if ((Buffer.Count - 1) > Length)
     Buffer.RemoveAt(o);
   }

   if (Buffer.Count == 0)
    return new DecimalIndicatorValue();

   return (DecimalIndicatorValue)(newValue - Buffer[0]);
  }




Теперь вопрос.

Было

Code
protected override decimal [] OnProcess(IIndicatorValue input)
{
     return new decimal[2] {1.0m, 1.0m};
}


На вариант

Code
protected override IIndicatorValue [] OnProcess(IIndicatorValue input)
{
     new DecimalIndicatorValue[2] {(DecimalIndicatorValue)1.0m, (DecimalIndicatorValue)1.0m};
}


ругается, что возвращаемое значение должно быть IIndicatorValue. Внимание, вопрос - что делать? Теперь массив не передать?


Не уверен, что вообще когда-то можно было... походу если нужно вернуть несколько значений, то нужно сделать как у Bollinger-а BaseComplexIndicator
или этот
ComplexIndicatorValue
Спасибо: Rebelion

Rebelion

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


Работало, чесслово. Использовал BaseIndicator<decimal []>.
теперь же, видимо, придётся переделывать код - разбираться в ComplexIndicatorValue или делать какие-либо собственные обёртки...
Да, если будет возможность, пожалуйста, какой-нибудь dummy код приведите с использованием ComplexIndicatorValue. Заранее пасиба!
Спасибо:

Rebelion

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


Ап! Камрады, плз, не останьтесь безучастными к проблемам собрата!
Спасибо:

Andrii

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


Rebelion Go to
Ап! Камрады, плз, не останьтесь безучастными к проблемам собрата!


Code
class ExtraDummyMultiIndicator : BaseComplexIndicator
        {
            protected override ComplexIndicatorValue OnProcess(IIndicatorValue input)
            {
                return base.OnProcess(input);
            }
        }


Спасибо: Rebelion

Rebelion

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


Andrii Go to
Rebelion Go to
Ап! Камрады, плз, не останьтесь безучастными к проблемам собрата!


Code
class ExtraDummyMultiIndicator : BaseComplexIndicator
        {
            protected override ComplexIndicatorValue OnProcess(IIndicatorValue input)
            {
                return base.OnProcess(input);
            }
        }





Пасибочки! Этот вариант норм. Плюс ещё через
Code
SingleIndicatorValue<decimal []>
получилось сделать. Мб кривоватенько, но пашет. :-)
Спасибо:


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

loading
clippy