Получить настройки скрипта и агента
В блок Внешний скрипт надо добавить 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); }