| 
| 
| 
| 
| #48456 - Thu Nov 01 2012 03:51 PM  как работать с CompressTo по методу 3 ? |  
|   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
 ********************************************************
 |  
| Наверх |  |  |  |  
| 
| 
| #48458 - Thu Nov 01 2012 03:58 PM  Re: как работать с CompressTo по методу 3 ?
[Re: Nektodron] |  
|   newbie
 
 Registered:  Fri May 04 2012
 Записи: 49
 | 
про "shift" (2-й параметр) я понял, а что задавать в качестве 1-го параметра ? |  
| Наверх |  |  |  |  
| 
| 
| #48459 - Thu Nov 01 2012 03:59 PM  Re: как работать с CompressTo по методу 3 ?
[Re: yan] |  
|   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] |  
|   newbie
 
 Registered:  Fri May 04 2012
 Записи: 49
 | 
как преобразовать в тип "TSLab.DataSource.Interval" |  
| Наверх |  |  |  |  
| 
| 
| #48462 - Thu Nov 01 2012 04:07 PM  Re: как работать с CompressTo по методу 3 ?
[Re: Nektodron] |  
|   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] |  
|   newbie
 
 Registered:  Fri May 04 2012
 Записи: 49
 | 
для этого, как я понимаю и нужен "shift".но не понимаю, что как преобразовать число 15 целого типа в данные типа "TSLab.DataSource.Interval" для передачи в качестве параметра процедуре "CompressTo"
 |  
| Наверх |  |  |  |  
| 
| 
| #48466 - Thu Nov 01 2012 04:18 PM  Re: как работать с CompressTo по методу 3 ?
[Re: Nektodron] |  
|   newbie
 
 Registered:  Fri May 04 2012
 Записи: 49
 | 
вот, что вышло:Attachments
qwe-01.JPG  (334 downloads) |  
| Наверх |  |  |  |  
| 
| 
| #48467 - Thu Nov 01 2012 04:42 PM  Re: как работать с CompressTo по методу 3 ?
[Re: Nektodron] |  
|   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] |  
|   newbie
 
 Registered:  Fri May 04 2012
 Записи: 49
 | 
добавил:using TSLab.DataSource;
 
 и заработало, спасибо !
 |  
| Наверх |  |  |  |  
| 
| 
| #48481 - Thu Nov 01 2012 09:33 PM  Re: как работать с CompressTo по методу 3 ?
[Re: yan] |  
|   newbie
 
 Registered:  Fri May 04 2012
 Записи: 49
 | 
проверил сжатые свечки - есть нюанс:Attachments
qwe.JPG  (246 downloads)последняя свеча не участвует в сжатии по методу № 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
 
 // ******************************************************************
 
 
 Отредактировано yan (Thu Nov 01 2012 09:40 PM)
 |  
| Наверх |  |  |  |  
 
 |  |