А если он сразу не работает?
Сделал пример один в один вот отсюда:
https://doc.tslab.pro/tslab/rabota-s-pro...-po-instrumentu
[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:
// Make 'GetFinInfo' item data
this.GetFinInfo_h.Execute(var0);
И вот тут и кроется ошибка: второй параметр отсутствует.
Вопрос: почему?
Возможно надо атрибуты у класса добавить?
Я попробовал добавить классу аттрибут [Input(0, TemplateTypes.SECURITY, Name = "security")] - не помогло
Попробовал унаследоваться от ISecurityInput0 - не помогло.
Больше способов не знаю пока.
Продолжаю копать: первая переменная var0 - это и есть мой ISecurity. Тогда вопрос: почему он не передает в Execute первым параметром IContext???
Приложил скрин скрипта.