В блок Внешний скрипт надо добавить TSLab.DataModel.dll и TSLab.ScriptEngine.dll.
Полный список настроек агента:
using System.Text;
using TSLab.DataModel;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.ScriptExecution.Realtime;
namespace MyLib
{
public class TestSettings : IExternalScript
{
public void Execute(IContext ctx, ISecurity sec)
{
// В блок 'Внешний скрипт' необходимо добавить TSLab.DataModel.dll, TSLab.ScriptExecution.dll.
// Получить настройки скрипта
var labOptions = ctx.GetLabOptions();
if (labOptions != null)
{
var sb = new StringBuilder();
sb.AppendLine($"=== LabOptions ===");
sb.AppendLine($"Дата от: ({labOptions.UseDateFrom}) {labOptions.DateFromEdit}");
sb.AppendLine($"Дата к: ({labOptions.UseDateTo}) {labOptions.DateToEdit}");
ctx.Log(sb.ToString(), MessageType.Info, true);
}
// Получить настройки агента
var rtOptions = ctx.GetRtOptions();
if (rtOptions != null)
{
var sb = new StringBuilder();
sb.AppendLine($"=== RtOptions ===");
sb.AppendLine($"Исполнять входы сразу: {rtOptions.DefEntryApprove}");
sb.AppendLine($"Исполнять выходы сразу: {rtOptions.DefExitApprove}");
ctx.Log(sb.ToString(), MessageType.Info, true);
}
}
}
public static class TSLabExtensions
{
public static LabOptions GetLabOptions(this IContext ctx)
{
var fi = ctx.Runtime.GetType().GetProperty("Options");
return fi?.GetValue(ctx.Runtime) as LabOptions;
}
public static RealtimeScriptOptions GetRtOptions(this IContext ctx)
{
var fi = ctx.Runtime.GetType().GetProperty("Manager");
var val = fi?.GetValue(ctx.Runtime) as RealtimeDataManager;
return val?.RtData?.Options;
}
}
}
var rtOptions = Ctx.GetAgentSettings();
if (rtOptions != null)
{
var sb = new StringBuilder();
sb.AppendLine($"=== AgentSettings ===");
sb.AppendLine($"\n\n=== Исполнение агента ===");
sb.AppendLine($"\nИсполнять входы сразу: {rtOptions.DefEntryApprove}"); // True
sb.AppendLine($"\nИсполнять выходы сразу: {rtOptions.DefExitApprove}"); // True
sb.AppendLine($"\nАвтооткрытие (баров): {rtOptions.AutoEntryBars}"); // 0
sb.AppendLine($"\nБлок по рынку с фиксированной ценой для автооткрытия: {rtOptions.AutoEntryIgnoreByMarketAsLimit }"); // False
sb.AppendLine($"\nАвтозакрытие (баров): {rtOptions.AutoCloseBars }"); // 0
sb.AppendLine($"\nБлок по рынку с фиксированной ценой для автозакрытия: {rtOptions.AutoCloseIgnoreByMarketAsLimit }"); // False
sb.AppendLine($"\nИгнорировать позиции вне история: {rtOptions.RemoveInactivePositions }"); // False
sb.AppendLine($"\nУведомлять о пропущенных входах: {rtOptions.WarnSkippedOpenPositions }"); // True
sb.AppendLine($"\nНе открывать если пропущен вход: {rtOptions.NotOpenIfHasSkippedExit}");
sb.AppendLine($"\nНе уведомлять пересчет: {rtOptions.NoCalcInfo}");
sb.AppendLine($"\nВиртуальная позиция макс. свечей: {rtOptions.MaxBarsForSignal}");
sb.AppendLine($"\nИгнорировать сигнал выхода не на последней свече: {rtOptions.ExitSignalOnlyForLastBar}");
sb.AppendLine($"\nЖдать исполнения выхода: {rtOptions.WaitExecutionExitBars}");
sb.AppendLine($"\nЖдать исполнения входа: {rtOptions.WaitExecutionEntryBars}");
sb.AppendLine($"\nУчитывать комиссию: {rtOptions.UseCommissionInProfit}");
sb.AppendLine($"\n\n=== Выставление заявок ===");
sb.AppendLine($"\nПроскальзывание в шагах: {rtOptions.Slippage}");
sb.AppendLine($"\nПроскальзывание в %: {rtOptions.SlippagePct}");
sb.AppendLine($"\nTakeProfit без проскальзывания: {rtOptions.TakeProfitNoSlippage}");
sb.AppendLine($"\nОткрытие лимитными заявками: {rtOptions.OpenPositionNoSlippage}");
sb.AppendLine($"\n\"По рынку\" с фиксированной ценой: {rtOptions.ByMarketAsLimt}");
sb.AppendLine($"\n\"Плохие\" заявки по рынку: {rtOptions.InvalidStopsByMarket}");
sb.AppendLine($"\n\n=== События ===");
sb.AppendLine($"\nЗаявка отклонена: {rtOptions.EventOrderRejected}");
sb.AppendLine($"\nЗаявка выполнена полностью: {rtOptions.EventOrderFilled}");
sb.AppendLine($"\nОткрытие позиции: {rtOptions.EventPositionOpening}");
sb.AppendLine($"\nЗакрытие позиции: {rtOptions.EventPositionClosing}");
sb.AppendLine($"\nИзменение кол-ва в заявке: {rtOptions.EventOrderQtyChanged}");
sb.AppendLine($"\nТорговля начата: {rtOptions.EventTradingIsStarted}");
sb.AppendLine($"\nТорговля остановлена: {rtOptions.EventTradingIsStopped}");
sb.AppendLine($"\nЗаявка отменена: {rtOptions.EventOrderCanceled}");
sb.AppendLine($"\nОграничение претрейда: {rtOptions.EventPretradeLimitation}");
ctx.Log(sb.ToString(), MessageType.Info, true);
}