У вас не стоит Flash Player
Настройки
#82186 - Wed Jul 26 2017 06:26 PM Создание Объёмных Свечей при помощи API TSLab 2.0
Sergiy Offline
stranger

Registered: Mon Oct 15 2012
Записи: 15
Уважаемые Знатоки API TSLab 2.0, прошу Вашей Помощи!
Пытаюсь создать Объёмные Свечи через API TSLab 2.0.
В "TSLab API Docs" (http://www.tslab.ru/docs/2.0/ru/api/class_t_s_lab_1_1_data_source_1_1_bar_utils.html) указано, что в классе BarUtils существуют три метода: 1) "static List< T > CompressToVolume< T > (IReadOnlyList< T > bars, Interval interval, Interval curInterval)";
2) "static List< IDataBar > CompressToVolume (IReadOnlyList< IDataBar > bars, Interval interval)";
3) "static List< IDataBar > CompressToVolume (IDataBar bar, Interval interval)".

В библиотеке TSLab 2.0 "TSLab.DataSource.dll" в классе "TSLab.DataSource.BarUtils" находятся эти же методы: 1) "TSLab.DataSource.BarUtils.CompressToVolume<T>(System.Collections.Generic.IReadOnlyList<T>, TSLab.DataSource.Interval, TSLab.DataSource.Interval)"; 2) "TSLab.DataSource.BarUtils.CompressToVolume(System.Collections.Generic.IReadOnlyList<TSLab.DataSource.IDataBar>, TSLab.DataSource.Interval)"; 3) "TSLab.DataSource.BarUtils.CompressToVolume(TSLab.DataSource.IDataBar, TSLab.DataSource.Interval)". А также в этом классе существует 4-ый метод: "TSLab.DataSource.BarUtils.CompressIntradayToVolumes(System.Collections.Generic.IReadOnlyList<TSLab.DataSource.IDataBar>, TSLab.DataSource.Interval)".

Мне удалось получить доступ только к одному методу, сделал я это через инструмент.

В результате я сделал так:

using TSLab.DataSource;
using TSLab.Script;
using TSLab.Script.Handlers;

namespace Test_1_VS2012
{
public class Test_1_VS2012 : IExternalScript
{
public void Execute(IContext ctx, ISecurity sec)
{
var volumeBarsList = sec.CompressToVolume(new Interval(10, DataIntervals.VOLUME));
var pane = ctx.CreateGraphPane(sec.ToString(), null);
var color = new Color(System.Drawing.Color.Green.ToArgb());
var lst = pane.AddList(sec.ToString(), sec.ToString(), volumeBarsList, CandleStyles.BAR_CANDLE, color, PaneSides.RIGHT);
}
}
}

Через "sec" другие методы "CompressToVolume" я вызвать не могу, так как в "IntelliSense" других методов НЕТ.

Присоединил кубик "Внешний Скрипт" к кубику "Источник" (все остальные кубики я удалил). В "Свойствах лаборатории" у меня в "Интервальном периоде" стояли "Минуты", а в "Интервале" 5 минут (эти настройки остались от предыдущих экспериментов). В результате я получаю ошибку:
"21.07.2017 18:02:35 138 TSLab.DataSource.InvalidIntervalsException: Невозможно сжать 5M в 10V. Ожидаемая база - Объём.
at TSLab.DataSource.BarUtils.CompressToVolume[T](IReadOnlyList`1 bars, Interval interval, Interval curInterval)
at TSLab.ScriptExecution.Script.ScriptCache.<>c__DisplayClass51_0.<GetCompressedByVolume>b__0()
at TSLab.DataCommon.Cache.ObjectsCacheBase`3.Get(TKey name, CacheObjectMaker`1 maker)
at TSLab.ScriptExecution.Script.ScriptCache.GetCompressedByVolume(Interval interval)
at TSLab.ScriptExecution.Script.SecurityImpl.CompressToVolume(Interval interval)
at Test_1_VS2012.Test_1_VS2012.Execute(IContext ctx, ISecurity sec)
at TSLab.User.Script.Execute(IContext context, ISecurity Источник1)".

По разному экспериментировал с кодом, но положительного результата не было. А потом я просто в "Свойствах лаборатории" в "Интервальном периоде" поставил "Объём", а в "Интервале" 10, и всё заработало - Объёмные свечи появились на графике.
Но у меня есть ощущение, что так не должно быть. Созданный код сам должен полностью конвертировать свечи в "Объёмные", без ручного вмешательства в "Свойства лаборатории". На мой взгляд код кривой, но как по другому решить вопрос я не могу догадаться. В классе "TSLab.DataSource.BarUtils" есть метод "TSLab.DataSource.BarUtils.Decompress<T, TK>(System.Collections.Generic.IReadOnlyList<T>, TSLab.DataSource.Interval, System.Collections.Generic.IReadOnlyList<TK>, TSLab.DataSource.Interval, System.Collections.Generic.IReadOnlyList<T>, TSLab.DataSource.DecompressMethod)" может его необходимо применять для разжатия сжатых "Объёмных Свечей"?
Как вызывать другие методы "CompressToVolume", в том числе "CompressIntradayToVolumes"? Прошу Ваших подсказок, а в идеале примера решения вопроса создания "объёмных Свечей".
Заранее благодарен Вам за помощь.

Наверх
#82190 - Wed Jul 26 2017 08:22 PM Re: Создание Объёмных Свечей при помощи API TSLab 2.0 [Re: Sergiy]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Объемные свечи из минутных построить не возможно, только из тиков.

Наверх
#82191 - Wed Jul 26 2017 09:55 PM Re: Создание Объёмных Свечей при помощи API TSLab 2.0 [Re: Nektodron]
Sergiy Offline
stranger

Registered: Mon Oct 15 2012
Записи: 15
Я в качестве Источника данных использовал Тиковый Кэш переведённый в текстовый формат.

Наверх
#82192 - Thu Jul 27 2017 09:54 AM Re: Создание Объёмных Свечей при помощи API TSLab 2.0 [Re: Sergiy]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Базовые свечи должны быть тиками

Наверх


Moderator:  ViL, sar