У вас не стоит Flash Player
Настройки
#60697 - Sat Feb 15 2014 09:47 PM Как обращаться к индикаторам из внешнего скрипта?
Den Commander Offline
member

Registered: Sat Sep 28 2013
Записи: 130
У меня при добавлении в кубик "Внешний скрипт" файлика с моим скриптом, проект не компилируется. В отладчике выдается ошибка
Quote:
d:\111\DeltaScript.cs(23,42) : error CS0246: Не удалось найти имя типа или пространства имен 'handlers' (возможно, пропущена используемая директива или ссылка на сборку)


т.е. я так понимаю, изнутри моего скрипта пространство имен handlers недоступно, хотя извне скрипта оно прекрасно доступно (сам файл code11.cs, который генерит TSLAB из визуального редактора, прекрасно работает с этим пространством и использует те же индикаторы, которые я хочу вызвать изнутри моего внешнего скрипта.

вот кусочек моего кода:
Quote:

using System;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Optimization;

namespace DeltaScript
{
public class DeltaScript : IExternalScript
{
// Непосредственно тело скрипта.
public void Execute(IContext ctx, ISecurity sec)
{
// Для получения дельт используем ранее созданные индикаторы. А так же используем
// механизм кэшироваиня данных ТСЛаба для ускорения оптимизации в несколько раз.
var buyDeltaList = ctx.GetData("BuyDelta",
new string[] { },
() => new handlers.BuyVolumeDelta().Execute(sec));

компилятор ругается на последнюю строку

вот кусок кода, который сделан на кубиках
Quote:
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.1022
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------

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


public sealed class Script
{

private TSLab.Script.Handlers.Volume Volume1_h = new TSLab.Script.Handlers.Volume();

private handlers.BuyVolumeDelta BuyVolumeDelt1_h = new handlers.BuyVolumeDelta();

т.е. тот же самый индикатор handlers.BuyVolumeDelta() без проблем используется.
Чего не хватает в моем скрипте?
(Конечно, "в моём" это громко сказано. Основа взята из интернета, похоже от пользователя ra81 smile


Отредактировано Den Commander (Sat Feb 15 2014 10:11 PM)

Наверх
#60699 - Sun Feb 16 2014 08:55 AM Re: Как обращаться к индикаторам из внешнего скрипта? [Re: Den Commander]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
прежде чем использовать
new handlers.BuyVolumeDelta().Execute(sec));
вы должны указать компилятору где собственно брать сей handlers.BuyVolumeDelta() и видимо вы этого не указали. Попробуйте в блок внешнего скрипта добавить библиотеку с этими handlers.BuyVolumeDelta().
Подобные проблемы кажется были ранее. Что свои же индикаторы не получалось использовать в своих же скриптах. Я решал это просто вставкой кода индикатора сразу в скрипт.
_________________________
__


Наверх
#60702 - Sun Feb 16 2014 09:11 PM Re: Как обращаться к индикаторам из внешнего скрипта? [Re: ra81]
Den Commander Offline
member

Registered: Sat Sep 28 2013
Записи: 130
Я так и поступил пока. Скомпилировал библиотеку, в которой уже была добавлена библиотека с самодельными индикаторами в качестве ссылки. Но это кривое решение. Если изменится индикатор мне придется менять его и в tslabe и перекомпилировать библиотеку со скриптом, чтобы обновить в ней dll-ку с самодельными индикаторами. Кроме того, если индикатор не самодельный, а стандартный, то как к нему обратиться? Или,например, это вообще не индикатор, а константа, заданная через кубик. Я посмотрел, стандартный код обращается к константам также через tslab.script.handlers
Вопрос в том почему из скрипта(назовем его code11.cs), сгенерированного tslab`ом из кубиков, пространство handlers видно. Т.е. code11.cs легко выполняет строку TSLab.Script.Handlers.ConstGen Профит_h = new TSLab.Script.Handlers.ConstGen();, а из кубика "внешний скрипт", который находится внутри того же самого code11.cs эта же команда не выполняется, а сообщается об отсутствии пространства handlers

Наверх
#60711 - Mon Feb 17 2014 11:46 AM Re: Как обращаться к индикаторам из внешнего скрипта? [Re: Den Commander]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
возможно тут баг. Проверю.
_________________________
__


Наверх
#60721 - Mon Feb 17 2014 02:05 PM Re: Как обращаться к индикаторам из внешнего скрипта? [Re: ra81]
Den Commander Offline
member

Registered: Sat Sep 28 2013
Записи: 130
выяснил, что если нужный класс находится в пространстве имен Tslab.Script.Handlers изначально, т.е. описан в библиотеке Tslab.Script.Handlers.dll, то он видится без проблем как из кубика "внешний скрипт", так и из codeXX.cs
например TSLab.Script.Handlers.Time
Если же пространство имен Tslab.Script.Handlers было дополнено классом, описанным в другой библиотеке, находящейся в папке handlers, то из кубика "внешний скрипт" этот класс не виден, а из codeXX.cs виден.
Quote:
d:\temp\DeltaScript.cs(16,33) : error CS0234: Имя типа или пространства имен 'BuyVolumeDelta' отсутствует в пространстве имен 'TSLab.Script.Handlers' (пропущена ссылка на сборку?)

код файла codeXX.cs http://codepaste.ru/16954/
код кубика "внешний скрипт" http://codepaste.ru/16954/
код индикатора http://codepaste.ru/16955/


Отредактировано Den Commander (Mon Feb 17 2014 02:08 PM)

Наверх
#60750 - Tue Feb 18 2014 08:54 AM Re: Как обращаться к индикаторам из внешнего скрипта? [Re: Den Commander]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
вообще не рекомендуется внедрять чтото в пространства имен уже существующие в ТСЛабе. Может выйти неприятность.

А проблему проверю как я уже выше говорил.
_________________________
__


Наверх
#60790 - Thu Feb 20 2014 12:28 PM Re: Как обращаться к индикаторам из внешнего скрипта? [Re: ra81]
Den Commander Offline
member

Registered: Sat Sep 28 2013
Записи: 130
В поддержке сказали что это баг. Будут исправлять

Наверх
#60808 - Thu Feb 20 2014 08:36 PM Re: Как обращаться к индикаторам из внешнего скрипта? [Re: Den Commander]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Originally Posted By: Den Commander
В поддержке сказали что это баг. Будут исправлять

Да я в курсе smile
_________________________
__


Наверх


Moderator:  ViL, sar