Компиляция скрипта не происходит на каждом шаге, только при его изменении.
Говорить о разнице модно только видя скрипт. Используете ли вы кеш индикаторов 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 внешнего скрипта, которая и делает всю работу
-- прокручивает пустой ненужный цикл по барам
Все, больше ничего.
А теперь скажите мне, не означает ли это генерации и компиляции скрипта на каждом шаге?
Если оптимизировать скрипт, созданный в кубиках, такого не происходит. Генерится один и прокручивается много раз.