У вас не стоит Flash Player
Настройки
#81365 - Mon Mar 06 2017 07:18 PM .CompressTo, .Decompress - Нужна помощь.
foktov Offline
stranger

Registered: Mon Aug 29 2016
Записи: 6
Добрый день, уважаемые, прошу помощи.

Недопонимания в части сжатия, разжатия в торговом алгоритме.
1.
Сжимаю свечи:
ISecurity tf = sec.CompressTo(new Interval(tfPeriod, DataIntervals.MINUTE)); //tfPeriod - оптим.параметр;

2.
Рассчитываю, например, Macd (С этим и проблема), за основу беру Wma написанный собственноручно:
IList<double> WmaSlow = tf.Decompress(TradeHelper.WMA(tf.ClosePrices, WmaSlowPeriod));
IList<double> WmaFast = tf.Decompress(TradeHelper.WMA(tf.ClosePrices, WmaFastPeriod));
IList<double> Gist =
tf.Decompress(
TradeHelper.Subtract(TradeHelper.WMA(tf.ClosePrices, WmaFastPeriod),
TradeHelper.WMA(tf.ClosePrices, WmaSlowPeriod)));
IList<double> SmaSignal = tf.Decompress(
Series.SMA(
TradeHelper.Subtract(TradeHelper.WMA(tf.ClosePrices, WmaFastPeriod),
TradeHelper.WMA(tf.ClosePrices, WmaSlowPeriod)), SmaSignalPeriod));

Т.е. если создать список, в который буду вкладывать результаты расчета wma, а я рассчитываю их на основе сжатого tf, а потом произвести декомпрессию, получаю список некорректный. Он будет равен длине ctx.barscount, но я на его основе не смогу посчитать Sma например, он будет заполнен равными значениями в определенном периоде. Поэтому приходится индикатор рассчитывать заново. Как это указано выше. Каждый элемент заново. Как можно этого избежать?

Неужели каждый расчет нужно выполнять на сжатых свечах, и каждый расчет разжимать?

Наверх
#81366 - Mon Mar 06 2017 08:41 PM Re: .CompressTo, .Decompress - Нужна помощь. [Re: foktov]
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
Добрый день.
Объекты и функции для того и придумали, чтобы скрывать детали реализации и не смешивать не смешиваемое. Использовать локальные переменные для хранения промежуточных результатов тоже не запрещается. Компьютеру все равно сколько вы ему букв подсунете, а вот нормальные люди откажутся вникать в простынь неформатированного кода.
Code:
    IList<double> Calc( IList<double> close ) {
      var WmaSlow = TradeHelper.WMA( сlose, WmaSlowPeriod );
      var WmaFast = TradeHelper.WMA( сlose, WmaFastPeriod );
      var Gist = TradeHelper.Subtract( WmaFast, WmaSlow );
      var SmaSignal = Series.SMA( Gist );
      return SmaSignal;
    }

    public ISecurity Execute( ISecurity sec ) {
      ISecurity tf = sec.CompressTo( new Interval( tfPeriod, DataIntervals.MINUTE ) ); //tfPeriod - оптим.параметр;
      var signals = tf.Decompress( Calc( tf.ClosePrices ));
      ...
    }
_________________________
Не пишите мне! Никому ничего делать не буду.

Наверх


Moderator:  ViL, sar