У вас не стоит Flash Player
Настройки
#51758 - Fri Feb 01 2013 11:22 AM Не могу понять где ошибка в сжатии данных.
KolesAV Offline
stranger

Registered: Fri Feb 01 2013
Записи: 3
Есть минутки РТС, в своем коде сжимаю в 10-минутки и получаю разницу если сжимать через кубики.

Причем эффект имеет свойство исчезать и появляться.

Вообщем вопрос почему это происходит и как избавиться.

Ниже код и скрины

Сжатие через кубики:
*******************************************************
// Initialize 'Volume1' item
this.Volume1_h.Context = context;
// Initialize 'Сжать1' item
this.Сжать1_h.Interval = 10;
this.Сжать1_h.Shift = this.Сжать1_Shift;
// Make 'Сжать1' item data
TSLab.Script.ISecurity Сжать1;
try
{
Сжать1 = this.Сжать1_h.Execute(Sec1);
}
catch (System.ArgumentOutOfRangeException )
{
throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'Сжать1\'. Индекс за пределам диапазона.");
}
// Make 'Volume1' item data
System.Collections.Generic.IList<double> Volume1 = context.GetData("Volume1", new string[] {
this.Сжать1_h.Interval.ToString(),
this.Сжать1_h.Shift.ToString(),
"Сжать1"
}, delegate {
try {
return this.Volume1_h.Execute(Сжать1);
}
catch (System.ArgumentOutOfRangeException ) {
throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'Volume1\'. Индекс за пределам диапазона.");
}

});
*********************************************

Теперь мой код:
****************************************************
compress.Interval = 10; // сжимает минутки до 10-минуток
compress.Shift = 0; //сдвига нет
ISecurity NewCompSec; //данны в новой компрессии
try
{
NewCompSec = this.compress.Execute(sec);
}
catch (System.ArgumentOutOfRangeException)
{
MessageBox.Show("Ошибка при вычислении блока компрессии. Индекс за пределам диапазона.");
throw new TSLab.Script.ScriptException("Ошибка при вычислении блока компрессии. Индекс за пределам диапазона.");
}
unCompVolume.Context = ctx;
IList<double> nVolume = ctx.GetData("myVolume", new[] { VolumeSMAPeriod.ToString() },
delegate { return unCompVolume.Execute(NewCompSec); });

*******************************************

Красные бары это мое сжатие, синие - через кубики.



Attachments
1_about_volume.png (330 downloads)



Отредактировано KolesAV (Fri Feb 01 2013 11:23 AM)

Наверх
#51761 - Fri Feb 01 2013 11:53 AM Re: Не могу понять где ошибка в сжатии данных. [Re: KolesAV]
Gji Offline
member

Registered: Fri Apr 22 2011
Записи: 137
Возможно просто графики на разных шкалах

Наверх
#51763 - Fri Feb 01 2013 12:34 PM Re: Не могу понять где ошибка в сжатии данных. [Re: Gji]
KolesAV Offline
stranger

Registered: Fri Feb 01 2013
Записи: 3
Да, точно, было на разных шкалах.

Но есть еще вопрос.

На рисунке сжатые(синем) и не сжатые (красным) минутки, виден лаг. Код тот же как его избежать?

Дело видимо здесь:

// Initialize 'Сжать1' item
this.Сжать1_h.Interval = 10;
this.Сжать1_h.Shift = this.Сжать1_Shift; <-- задаеться по умолчанию??

******************
compress.Interval = 10; // сжимает минутки до 10-минуток
compress.Shift = 0; //сдвига нет


Attachments
2_about_volume.png (359 downloads)



Отредактировано KolesAV (Fri Feb 01 2013 01:38 PM)

Наверх
#51764 - Fri Feb 01 2013 01:36 PM Re: Не могу понять где ошибка в сжатии данных. [Re: KolesAV]
Gji Offline
member

Registered: Fri Apr 22 2011
Записи: 137
Originally Posted By: KolesAV
На рисунке сжатые(синем) и не сжатые (красным) минутки, виден лаг. Код тот же как его избежать?

Не нужно этого делать. На скриншоте все правильно.
Пересчет скрипта происходит по окончании интервала и значит в этот момент становится известно значение индикатора на закончившемся интеравле и которое будет действительным до окончания следующего интервала. Например, в 10:10 закончилась 10-минутка [10:00-10:10] и скрипт рассчитал значение индикатора для следующей дестиминутки. Это значение показано на графике с 10:09 до 10:19.
На графике отображаются значения оответствующие концу каждого предыдущего интервала.
Про другие методы декомпрессии (отличные от того что по умолчанию) можно почитать в документации.

Наверх


Moderator:  ViL, sar