У вас не стоит Flash Player
Настройки
#48456 - Thu Nov 01 2012 03:51 PM как работать с CompressTo по методу 3 ?
yan Offline
newbie

Registered: Fri May 04 2012
Записи: 49
хочу сжать 1-минутные свечи в 15-минутки.
не пойму, что ему надо дать в качестве 1-го параметра:
sec.CompressTo( 15, (int) shift );
что-то связано с "Interval", а что как именно написать ?

********************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Helpers;
using TSLab.Script.Optimization;
using TSLab.Script.Realtime;

namespace TSLab.Samples
{
public class zzz_20121030_Compress : IExternalScript
{
public void Execute(IContext ctx, ISecurity sec)
{
// вычислим сдвиг от начала стандартной 15-минутки
int New_TF = 15;
double shift = 0;
for (int sc = sec.Bars.Count-1; (0<sc); sc--)
{
var ost_del = Math.IEEERemainder((double)sec.Bars[sc].Date.Minute, (double)New_TF);
if (ost_del==0)
{
shift = (sec.Bars.Count-1) - sc;
break;
}
}

// сжимаем минутки в 15-мин. со сдвигом
ISecurity sec_TF = sec.CompressTo( 15, (int) shift );

// покажем данные последней свечи после сжатия
int last_bar = sec_TF.Bars.Count;
ctx.Log("Time="+sec_TF.Bars[last_bar].Date , 0);
ctx.Log("Open="+sec_TF.OpenPrices[last_bar] , 0);
ctx.Log("High="+sec_TF.HighPrices[last_bar] , 0);
ctx.Log("Low="+sec_TF.LowPrices[last_bar] , 0);
ctx.Log("Close="+sec_TF.ClosePrices[last_bar] , 0);

} // Execute
} // конец скрипта
} // TSLab.Samples
********************************************************

Наверх
#48457 - Thu Nov 01 2012 03:54 PM Re: как работать с CompressTo по методу 3 ? [Re: yan]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
параметр shift - задает сдвиг относительно начала интервала, например, если для 15мин задать 5, то свечи будут иметь время:
5мин, 20мин, 35мин и 50мин.

В классическом случае нужно задавать 0.

Наверх
#48458 - Thu Nov 01 2012 03:58 PM Re: как работать с CompressTo по методу 3 ? [Re: Nektodron]
yan Offline
newbie

Registered: Fri May 04 2012
Записи: 49
про "shift" (2-й параметр) я понял, а что задавать в качестве 1-го параметра ?

Наверх
#48459 - Thu Nov 01 2012 03:59 PM Re: как работать с CompressTo по методу 3 ? [Re: yan]
yan Offline
newbie

Registered: Fri May 04 2012
Записи: 49
я задал "15", выдает
"Argument 1: cannot convert from 'int' to 'TSLab.DataSource.Interval' (CS1503) - C:\Program Files\TSLab\Projects\my_Bots\zzz_20121030_Compress.cs:30,39"

Наверх
#48460 - Thu Nov 01 2012 03:59 PM Re: как работать с CompressTo по методу 3 ? [Re: yan]
yan Offline
newbie

Registered: Fri May 04 2012
Записи: 49
как преобразовать в тип "TSLab.DataSource.Interval"

Наверх
#48461 - Thu Nov 01 2012 04:03 PM Re: как работать с CompressTo по методу 3 ? [Re: yan]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
вам нужно использовать просто перегрузку CompressTo(15) с одним параметром

Наверх
#48462 - Thu Nov 01 2012 04:07 PM Re: как работать с CompressTo по методу 3 ? [Re: Nektodron]
yan Offline
newbie

Registered: Fri May 04 2012
Записи: 49
да, это, если при стандартном shift=0

мне нужно другое:
-------------------
допустим, сейчас время 16:05
мне нужно, чтобы 15-минутные свечи были собраны из минутных свеч таким образом:

последняя 15-мин. свеча: 15:51 - 16:05
предпоследняя 15-мин.свеча: 15:35 - 15:50
и т.д.

Наверх
#48463 - Thu Nov 01 2012 04:09 PM Re: как работать с CompressTo по методу 3 ? [Re: yan]
yan Offline
newbie

Registered: Fri May 04 2012
Записи: 49
для этого, как я понимаю и нужен "shift".
но не понимаю, что как преобразовать число 15 целого типа в данные типа "TSLab.DataSource.Interval" для передачи в качестве параметра процедуре "CompressTo"

Наверх
#48464 - Thu Nov 01 2012 04:10 PM Re: как работать с CompressTo по методу 3 ? [Re: yan]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
CompressTo(new Interval(15, DataIntervals.MINUTE), 5);

Наверх
#48466 - Thu Nov 01 2012 04:18 PM Re: как работать с CompressTo по методу 3 ? [Re: Nektodron]
yan Offline
newbie

Registered: Fri May 04 2012
Записи: 49
вот, что вышло:


Attachments
qwe-01.JPG (304 downloads)


Наверх
#48467 - Thu Nov 01 2012 04:42 PM Re: как работать с CompressTo по методу 3 ? [Re: Nektodron]
yan Offline
newbie

Registered: Fri May 04 2012
Записи: 49

уточните, пожалуйста, как надо грамотно написать команду

CompressTo(new Interval(15, DataIntervals.MINUTE), 5);

чтобы работало "по уму" ?

Наверх
#48475 - Thu Nov 01 2012 07:51 PM Re: как работать с CompressTo по методу 3 ? [Re: yan]
yan Offline
newbie

Registered: Fri May 04 2012
Записи: 49
добавил:
using TSLab.DataSource;

и заработало, спасибо !

Наверх
#48481 - Thu Nov 01 2012 09:33 PM Re: как работать с CompressTo по методу 3 ? [Re: yan]
yan Offline
newbie

Registered: Fri May 04 2012
Записи: 49
проверил сжатые свечки - есть нюанс:
последняя свеча не участвует в сжатии по методу № 3.
// ******************************************************************

using System;
using System.IO; // для работы с файлами
using System.Collections.Generic;
using System.Linq;
using System.Net; // для ConnectionAvailable()
using System.Net.NetworkInformation; // для ConnectionAvailable()

using TSLab.DataSource;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Helpers;
using TSLab.Script.Optimization;
using TSLab.Script.Realtime;

namespace TSLab.Samples
{
public class zzz_20121030_Compress : IExternalScript
{
public OptimProperty sdvig_back = new OptimProperty(2, 1, 100, 1);

public void Execute(IContext ctx, ISecurity sec_01)
{
IList<double> Line_Up_15 = new List<double>(1);
IList<double> Line_Dn_15 = new List<double>(1);

#region вычислим сдвиг от начала стандартной 15-минутки
int New_TF = 15;
double shift = 0;
for (int sc = sec_01.Bars.Count-1; (0<sc); sc--)
{
double ost_del = Math.IEEERemainder((double)sec_01.Bars[sc].Date.Minute, (double)New_TF);
if (ost_del==0)
{
shift = (sec_01.Bars.Count-1) - sc;
//shift = (sec_01.Bars.Count-1) - sc;
break;
}
}
#endregion

// сжимаем минутки в 15-мин. со сдвигом
ISecurity sec_TF = sec_01.CompressTo(new Interval(15, DataIntervals.MINUTE), (int) shift);

#region покажем данные "последней-sdvig" свечи после сжатия
int last_bar = sec_TF.Bars.Count - 1;
int tst_bar = last_bar - sdvig_back;
ctx.Log("********************************************************",0);
ctx.Log("Shift=" + shift , 0);
ctx.Log("last_bar=" + last_bar , 0);
ctx.Log("sdvig_back=" + sdvig_back , 0);
ctx.Log("tst_bar=" + tst_bar , 0);
ctx.Log("Time=" + sec_TF.Bars[tst_bar].Date , 0);
ctx.Log("Open=" + sec_TF.OpenPrices[tst_bar] , 0);
ctx.Log("High=" + sec_TF.HighPrices[tst_bar] , 0);
ctx.Log("Low=" + sec_TF.LowPrices[tst_bar] , 0);
ctx.Log("Close=" + sec_TF.ClosePrices[tst_bar] , 0);
ctx.Log("********************************************************",0);
#endregion

#region обрисовываем интересующую нас сжатую свечу
double Time_TF_Start = ((sec_TF.Bars[tst_bar ].Date.DayOfYear*100 + sec_TF.Bars[tst_bar ].Date.Hour) * 100 + sec_TF.Bars[tst_bar ].Date.Minute) * 100 + sec_TF.Bars[tst_bar ].Date.Second;
double Time_TF_Finish = ((sec_TF.Bars[tst_bar+1].Date.DayOfYear*100 + sec_TF.Bars[tst_bar+1].Date.Hour) * 100 + sec_TF.Bars[tst_bar+1].Date.Minute) * 100 + sec_TF.Bars[tst_bar+1].Date.Second;

for (int i = 0; (i < sec_01.Bars.Count); i++)
{
int ind = i;
double Time_01 = ((sec_01.Bars[ ind ].Date.DayOfYear*100 + sec_01.Bars[ ind ].Date.Hour) * 100 + sec_01.Bars[ ind ].Date.Minute) * 100 + sec_01.Bars[ ind ].Date.Second;
if ( (Time_TF_Start <= Time_01) && (Time_01 < Time_TF_Finish) )
{
Line_Up_15.Add( sec_TF.HighPrices[tst_bar] );
Line_Dn_15.Add( sec_TF.LowPrices[tst_bar] );
}
else
{
Line_Up_15.Add(0);
Line_Dn_15.Add(0);
}

}

IPane mainPane = ctx.First;
mainPane.AddList(string.Format("LU-15"), Line_Up_15, ListStyles.LINE_BW_POINTS, 0xFF00FF, LineStyles.SOLID, PaneSides.RIGHT);
mainPane.AddList(string.Format("LD-15"), Line_Dn_15, ListStyles.LINE_BW_POINTS, 0xFF00FF, LineStyles.SOLID, PaneSides.RIGHT);
#endregion

} // Execute
} // конец скрипта
} // TSLab.Samples

// ******************************************************************


Attachments
qwe.JPG (211 downloads)



Отредактировано yan (Thu Nov 01 2012 09:40 PM)

Наверх
#48483 - Thu Nov 01 2012 10:15 PM Re: как работать с CompressTo по методу 3 ? [Re: yan]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
незакрытая свеча не участвует в расчетах

Наверх


Moderator:  ViL, sar