У вас не стоит Flash Player
Page 4 of 9 < 1 2 3 4 5 6 7 8 9 >
Настройки
#18042 - Tue Dec 07 2010 06:59 PM Re: Использование TSLab API в SharpDevelop. [Re: ViL]
Stanley Offline
enthusiast

Registered: Mon Jun 21 2010
Записи: 283
нет, я про как бы сказать точку отсчёта свечей, а не про ввод переменных.(когда я хочу ввести обращение к предыдущей свече) Вот например в примере создания скрипта http://www.tslab.ru/docs/online/
в документации есть запись
int barsCount = source.Bars.Count;

for (int i = 0; (i < barsCount); i++)
создаётся цикл, а в нём получается инициализируется переменная i?


Отредактировано Stanley (Tue Dec 07 2010 07:00 PM)

Наверх
#18057 - Tue Dec 07 2010 09:49 PM Re: Использование TSLab API в SharpDevelop. [Re: Stanley]
ViL Offline
TSLab
Carpal Tunnel

Registered: Sun Oct 17 2010
Записи: 8137
Да.

Наверх
#18603 - Fri Dec 17 2010 12:39 PM Re: Использование TSLab API в SharpDevelop. [Re: andy]
Афанасий Offline
newbie

Registered: Fri Sep 17 2010
Записи: 25
Originally Posted By: andy
- Скрипт. Представляет из себя файл с расширением *.cs (например, Script.cs). В приложении TSLab такие скрипты могут быть использованы посредством кубика «Внешний скрипт» из закладки «Служебные элементы», в котором задается ссылка на файл *.cs.


Создав свой первый скрипт при помощи API, я попробовал его оптимизировать. Сразу на глаз заметно - оптимизация идет очень медленно и чем дальше, тем все более заметно замедление.
Мне есть что сравнивать - ради чистоты эксперимента был созан скрипт, имеющий почти полный аналог "в кубиках". При одинаковых параметрах оптимизации "кубики" оптимизируются заметно быстрее. Цифры:
- количество комбинаций: более 100 тысяч;
- оптимизация "кубиков": 1.5 часа; изначально прогнозирует 1ч 15 мин, но затем эта цифра падает немного медленнее, чем 1 мин за минуту, но вполне равномерно;
- оптимизация API-скрипта: более 10 часов (точнее сказать трудно - оставляю на ночь, к утру готово); первоначальный прогноз - 2.5 часа, затем прогноз некоторе время улучшается, потом останавливается и начинает расти; через два часа TSLab прогнозирует завершение процесса в течение 5 часов, через три - в течение 6 часов и т.д.

Предполагаю, что компиляция скрипта производится на каждом шаге, что с любой точки зрения как минимум нерационально.
Кроме того, во время оптимизации регулярно сыплются сообщения об ошибках компиляции - см. приложенную картинку. Но оптимизация не останавливается. Чтобы это могло значить? Что некоторые комбинации пропускаются? Или делаются повторные попытки и весь ущерб сводится к потере времени?

Где-то видел, но сейчас не могу найти, ветку обсуждения, в которой говорилось о возможности представления внешнего скрипта в скомпилированном виде (dll) и ответ, что работа над этим ведется. Вероятно, описанные проблемы будут таким образом решены. Когда можно ожидать такую функциональность?


Attachments
Сообщения - ошибки компиляции.PNG (638 downloads)


Наверх
#18610 - Fri Dec 17 2010 04:37 PM Re: Использование TSLab API в SharpDevelop. [Re: Афанасий]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Компиляция скрипта не происходит на каждом шаге, только при его изменении.
Говорить о разнице модно только видя скрипт. Используете ли вы кеш индикаторов IContext.GetData
Если нет, то "кубики" будут заметно быстрее.

Наверх
#18632 - Fri Dec 17 2010 06:34 PM Re: Использование TSLab API в SharpDevelop. [Re: Nektodron]
Афанасий Offline
newbie

Registered: Fri Sep 17 2010
Записи: 25
Originally Posted By: Nektodron
Компиляция скрипта не происходит на каждом шаге, только при его изменении.


ОК.
Но что тогда означают десятки сообщений "CantCompile"?
и почему тогда нельзя прикрутить скрипт в виде dll?

Originally Posted By: Nektodron
Говорить о разнице модно только видя скрипт. Используете ли вы кеш индикаторов IContext.GetData
Если нет, то "кубики" будут заметно быстрее.


Использую IContext.GetData для всего, что можно вычислить из входящих баров. Но многое вычисляется отдельно на каждом шаге (баре) и зависит от вещей, заранее неизвестных, например наличия открытой позиции, которая в свою очередь открывается или закрывается в зависимости от многих услови, в т.ч. от параметров оптимизации.

Наверх
#18633 - Fri Dec 17 2010 07:08 PM Re: Использование TSLab API в SharpDevelop. [Re: Афанасий]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Originally Posted By: Афанасий

Но что тогда означают десятки сообщений "CantCompile"?
и почему тогда нельзя прикрутить скрипт в виде dll?

"CantCompile" - это ошибка локализации, означает сообщение, что не получается собраться скрипт. Точнее можно сказать, увидев, что там вообще собирается.
В блоке внешний скрипт уже давно можно использовать dll наравне с cs файлами.

Наверх
#18676 - Mon Dec 20 2010 02:17 PM Re: Использование TSLab API в SharpDevelop. [Re: Nektodron]
Афанасий Offline
newbie

Registered: Fri Sep 17 2010
Записи: 25
Originally Posted By: Nektodron
"CantCompile" - это ошибка локализации, означает сообщение, что не получается собраться скрипт. Точнее можно сказать, увидев, что там вообще собирается.


Может быть делу поможет, что вместе с "CantCompile" иногда выскакивает вот такое сообщение:

System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
в TSLab.DataModel.TemplateExecutor.get_ScriptType()
в TSLab.ScriptEngine.TemplateContext.GetProperties(TemplateData templ)
в TSLab.ScriptEngine.TemplateContext.UpdatedProperties(TemplateData templ, IEnumerable`1 parameters)
в TSLab.ScriptEngine.TemplateContext.Execute(TemplateData templ, IEnumerable`1 parameters, Boolean clearCaches)


Originally Posted By: Nektodron
В блоке внешний скрипт уже давно можно использовать dll наравне с cs файлами.


Следует, в таком случае, поправить статью, в обсуждении которой мы сейчас переписываемся. Там по-прежнему скрипт - это .cs-файл "в отличие от индикатора".

Наверх
#18686 - Mon Dec 20 2010 03:21 PM Re: Использование TSLab API в SharpDevelop. [Re: Афанасий]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Originally Posted By: Афанасий

Может быть делу поможет, что вместе с "CantCompile" иногда выскакивает вот такое сообщение:

System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
в TSLab.DataModel.TemplateExecutor.get_ScriptType()
в TSLab.ScriptEngine.TemplateContext.GetProperties(TemplateData templ)
в TSLab.ScriptEngine.TemplateContext.UpdatedProperties(TemplateData templ, IEnumerable`1 parameters)
в TSLab.ScriptEngine.TemplateContext.Execute(TemplateData templ, IEnumerable`1 parameters, Boolean clearCaches)


А вы можете прислать скрипт, который выдает такую ошибку на contact@tslab.ru ?

Наверх
#18768 - Tue Dec 21 2010 10:46 AM Re: Использование TSLab API в SharpDevelop. [Re: Nektodron]
Афанасий Offline
newbie

Registered: Fri Sep 17 2010
Записи: 25
Originally Posted By: Nektodron

А вы можете прислать скрипт, который выдает такую ошибку на contact@tslab.ru ?


Нет.

Наверх
#18784 - Tue Dec 21 2010 12:36 PM Re: Использование TSLab API в SharpDevelop. [Re: Афанасий]
Афанасий Offline
newbie

Registered: Fri Sep 17 2010
Записи: 25
Originally Posted By: Афанасий
Originally Posted By: Nektodron
В блоке внешний скрипт уже давно можно использовать dll наравне с cs файлами.


Следует, в таком случае, поправить статью, в обсуждении которой мы сейчас переписываемся. Там по-прежнему скрипт - это .cs-файл "в отличие от индикатора".


А также дописать туда, что есть различия при использовании 32- и 64-разрядной версии TSlab (или исправить ошибку).
Суть: одна и та же dll прекрасно работает с 32-разрядной версией и выдает ошибку в 64-разрядной.
Ошибка повторяется раз 5-6 при каждой попытке запуска и выглядит так:

c:\...\AppData\Local\TSLab\TSLab\temp\code4.cs(22,22) : error CS0234: Имя типа или пространства имен 'ScriptEngine' отсутствует в пространстве имен 'TSLab' (пропущена ссылка на сборку?)

Строка 22 файла code4.cs, где возникает ошибка:

public TSLab.ScriptEngine.Template.ExternalScriptItem.Handler XXX_script_h = new TSLab.ScriptEngine.Template.ExternalScriptItem.Handler();

TSLab.ScriptEngine в референсах упомянута, но в скрипте code4.cs строки "using TSLab.ScriptEngine" нет.


Если же запускать 32-разрядную версию, то все работает. Вероятно, потому что в этом случае строка 22 правильная:

public TSLab.XXX_namespace.XXX_class XXX_class_script_h = new TSLab.XXX_namespace.XXX_class();

Наверх
#18789 - Tue Dec 21 2010 12:49 PM Re: Использование TSLab API в SharpDevelop. [Re: Nektodron]
Афанасий Offline
newbie

Registered: Fri Sep 17 2010
Записи: 25
Originally Posted By: Nektodron
Originally Posted By: Афанасий

Может быть делу поможет, что вместе с "CantCompile" иногда выскакивает вот такое сообщение:

System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
в TSLab.DataModel.TemplateExecutor.get_ScriptType()
в TSLab.ScriptEngine.TemplateContext.GetProperties(TemplateData templ)
в TSLab.ScriptEngine.TemplateContext.UpdatedProperties(TemplateData templ, IEnumerable`1 parameters)
в TSLab.ScriptEngine.TemplateContext.Execute(TemplateData templ, IEnumerable`1 parameters, Boolean clearCaches)


А вы можете прислать скрипт, который выдает такую ошибку на contact@tslab.ru ?


А вот только что выскочило при самопроизвольном закрытии 32-разрядного TSlab (см приложенную картинку):

В экземпляре объекта не задана ссылка на объект.

в TSLab.LabView.ParametersManagerControl.UpdateData()
в TSLab.LabView.ParametersManagerControl.ManagerPropertyChanged(Object sender, PropertyChangedEventArgs e)
в System.ComponentModel.PropertyChangedEventHandler.Invoke(Object sender, PropertyChangedEventArgs e)
в TSLab.LabView.Script.ScriptDataManager.FirePropertyChanged(String name)
в TSLab.LabView.ExTemplateEditor.UpdateMinSize()
в TSLab.TemplatesEditor.Wrappers.TemplateItemWrapper.FireLocationUpdated()
в TSLab.TemplatesEditor.Wrappers.SecuritySourceItemWrapper.set_Mapping(String value)
в TSLab.TemplatesEditor.Wrappers.SecuritySourceItemWrapper.UpdateMapping()
в TSLab.TemplatesEditor.Wrappers.SecuritySourceItemWrapper.EditorPropertyChanged(Object sender, PropertyChangedEventArgs e)
в System.ComponentModel.PropertyChangedEventHandler.Invoke(Object sender, PropertyChangedEventArgs e)
в TSLab.TemplatesEditor.TemplatesEditor.set_SourceMappings(Dictionary`2 value)
в TSLab.LabView.ExTemplateEditor.UpdateMappings()


Attachments
Сообщение об ошибке.PNG (559 downloads)


Наверх
#18837 - Tue Dec 21 2010 07:20 PM Re: Использование TSLab API в SharpDevelop. [Re: Афанасий]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Originally Posted By: Афанасий


А также дописать туда, что есть различия при использовании 32- и 64-разрядной версии TSlab (или исправить ошибку).
Суть: одна и та же dll прекрасно работает с 32-разрядной версией и выдает ошибку в 64-разрядной.


Проблема скорее всего в том, что dll скомпилирована для 32бит, а должна для any processor.

Наверх
#18888 - Wed Dec 22 2010 10:52 AM Re: Использование TSLab API в SharpDevelop. [Re: Nektodron]
Афанасий Offline
newbie

Registered: Fri Sep 17 2010
Записи: 25
Originally Posted By: Nektodron
Проблема скорее всего в том, что dll скомпилирована для 32бит, а должна для any processor.


Так и оказалось. Тоже неплохо бы внести в документацию, если считать статью на форуме таковой.

Наверх
#18958 - Thu Dec 23 2010 01:30 PM Re: Использование TSLab API в SharpDevelop. [Re: Nektodron]
Афанасий Offline
newbie

Registered: Fri Sep 17 2010
Записи: 25
Originally Posted By: Nektodron
Компиляция скрипта не происходит на каждом шаге, только при его изменении.
Говорить о разнице модно только видя скрипт. Используете ли вы кеш индикаторов IContext.GetData
Если нет, то "кубики" будут заметно быстрее.


Верю, что компиляция внешнего скрипта производится один раз. Потому что теперь прикладываю dll, созданный собственными руками.

Однако, не все так просто.
Вот сейчас идет очень медленная оптимизация ТС c внешним скриптом. Любопытно стало - пошел посмотреть
C:\...\AppData\Local\TSLab\TSLab\temp.
И наблюдаю создание десятков тысяч файлов codeXXXX.cs, их компиляцию в соответствующие библиотеки codeXXXX.dll и попутное создание таких же codeXXXX.pdb. Чем дальше - тем медленнее идет процесс.

codeXXXX.cs внутри незатейлив:

namespace TSLab.User
{
using System;
using TSLab.Script;


public class Script
{

private TSLab.Script.Handlers.RelativeCommisionWithMinimal Comission1_h = new TSLab.Script.Handlers.RelativeCommisionWithMinimal();

public TSLab.XXX.XXX XXX_script_h = new TSLab.XXX.XXX();

public virtual void Execute(TSLab.Script.Handlers.IContext context, TSLab.Script.ISecurity var0)
{
// =================================================
// Panels
// =================================================
// Make 'Главное' pane
TSLab.Script.IPane Главное_pane = context.CreatePane("Главное", 50, false);
Главное_pane.Visible = true;
// =================================================
// Handlers
// =================================================
// Initialize 'Comission1' item
this.Comission1_h.MinimalCommission = 30.0;
this.Comission1_h.CommissionPct = 0.03;
this.Comission1_h.MarginPct = 10;
this.Comission1_h.Execute(var0);
this.XXX_script_h.Execute(context, var0);
// =================================================
// Trading
// =================================================
int barsCount = var0.Bars.Count;
for (int i = context.TradeFromBar; (i < barsCount); i++)
{
}
// =================================================
// Charts
// =================================================
}
}
}

То есть, содержит:
- описание двух кубиков - комиссии и внешнего скрипта
- функцию Execute, которая:
-- инициализирует кубик комиссии и выполняет его функцию Execute
-- выполняет функцию Execute внешнего скрипта, которая и делает всю работу
-- прокручивает пустой ненужный цикл по барам

Все, больше ничего.

А теперь скажите мне, не означает ли это генерации и компиляции скрипта на каждом шаге?

Если оптимизировать скрипт, созданный в кубиках, такого не происходит. Генерится один и прокручивается много раз.

Наверх
#18959 - Thu Dec 23 2010 02:20 PM Re: Использование TSLab API в SharpDevelop. [Re: Афанасий]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
файл codeXXXX.cs создается при любом изменении в редакторе, но не при каждом запуске скрипта.

Наверх
#18961 - Thu Dec 23 2010 02:38 PM Re: Использование TSLab API в SharpDevelop. [Re: Nektodron]
Афанасий Offline
newbie

Registered: Fri Sep 17 2010
Записи: 25
Originally Posted By: Nektodron
файл codeXXXX.cs создается при любом изменении в редакторе, но не при каждом запуске скрипта.


Вы невнимательно читаете. Я же пишу: запускаю оптимизацию, жду почти сутки, в течение которых наблюдаю создание и компиляцию десятков тысяч файлов. Кадые несколько секунд - файл .cs, файл .dll, файл .pdb. Файлы .cs и .pdb уничтожаются, dll - остаются.

Может быть, у меня что-то не то в настройках?

Наверх
#18965 - Thu Dec 23 2010 03:11 PM Re: Использование TSLab API в SharpDevelop. [Re: Афанасий]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
я проверю, это когда внешний скрипт только из dll состоит?

Наверх
#18967 - Thu Dec 23 2010 03:42 PM Re: Использование TSLab API в SharpDevelop. [Re: Nektodron]
Афанасий Offline
newbie

Registered: Fri Sep 17 2010
Записи: 25
Да.

Наверх
#18968 - Thu Dec 23 2010 03:49 PM Re: Использование TSLab API в SharpDevelop. [Re: Афанасий]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
А какой версией сейчас пользуетесь?

Наверх
#18971 - Thu Dec 23 2010 04:03 PM Re: Использование TSLab API в SharpDevelop. [Re: Nektodron]
Афанасий Offline
newbie

Registered: Fri Sep 17 2010
Записи: 25
1.1.16.9.
Описанное явление было обнаружено при запуске 64-битной версии (после того как вы же дали совет как компилировать, чтобы можно было использовать внешний скрипт в dll-виде).
Но, судя по всему то же самое происходило и при запуске 32-битной версии. А также и при использовании внешнего скрипта в cs-варианте.

Наверх
Page 4 of 9 < 1 2 3 4 5 6 7 8 9 >


Moderator:  ViL, sar