А если он сразу не работает?
Сделал пример один в один вот отсюда: https://doc.tslab.pro/tslab/rabota-s-pro...-po-instrumentu

Click to reveal..

Code:
    [Input(0, TemplateTypes.SECURITY, Name = "sec")]
    public class GetFinInfo : IExternalScript, ISecurityInput0
    {
        public void Execute(IContext ctx, ISecurity sec)
        {
            var fi = security.FinInfo;
            var txt = string.Format("{0}: {1} ({2})  -  {3} ({4})", fi.LastUpdate, fi.Bid, fi.BuySqty, fi.Ask, fi.SellSqty);
            ctx.Log(txt);
        }
    }



Получил ошибку CS7036: Отсутствует аргумент, соответствующий требуемому формальному параметру "sec" из "GetFinInfo.Execute(IContext, ISecurity)".


Данная ошибка возникает, если при вызове метода пропустить какой-то параметр.

Если посмотреть, что там Tslab нагенерировал в папке temp, то там встречаем такие строчки:


private MyLib.Scripts.GetFinInfo GetFinInfo_h = new MyLib.Scripts.GetFinInfo(); //это вызов конструктора моего скрипта


И далее, в методе Execute:

Code:
// Make 'GetFinInfo' item data
this.GetFinInfo_h.Execute(var0);


И вот тут и кроется ошибка: второй параметр отсутствует.

Вопрос: почему?

Возможно надо атрибуты у класса добавить?
Я попробовал добавить классу аттрибут [Input(0, TemplateTypes.SECURITY, Name = "security")] - не помогло
Попробовал унаследоваться от ISecurityInput0 - не помогло.
Больше способов не знаю пока.

Продолжаю копать: первая переменная var0 - это и есть мой ISecurity. Тогда вопрос: почему он не передает в Execute первым параметром IContext???

Приложил скрин скрипта.




Attachments
scr_003.JPG (83 downloads)



Отредактировано aaleksander (Tue Jan 11 2022 06:12 PM)