Концептуально алгоритм работает, так (за основу раздела "//Торговля" взяты примеры приведённые выше в теме):
Code:
using System.Collections.Generic;										
using TSLab.Script;										
using TSLab.Script.Handlers;										
using TSLab.Script.Optimization;										
using TSLab.Script.Helpers;										
using TSLab.Script.Realtime;										
										
namespace TSLab.Samples										
{										
	public class Final : IExternalScript									
	{									
		public …
		public virtual void Execute(IContext ctx, ISecurity sec)								
		{								
			var …						
			IList<double> …
			{			
				int barsCount = sec.Bars.Count;
				for (int i = 50; (i < barsCount); i++)
					
				{							
					if …						
					else …
					{						
						BT = …;					
						ST = …;
					}
	
				}
			}
			// Торговля.
			if (!sec.Positions.IsRealtime) return;
			{
				int i = sec.Bars.Count - 1;							
				if (i < 0) return;
				//текущая позиция. если больше нуля-в лонге. меньше нуля-в шорте					
				double lotsBalance = 0;					
				//пробегаемся по всем исполненным ордерам. необходимо текущее число лотов					
				foreach (IOrder order in secRt.Orders)					
				//Проверка что мы на этом баре не ставили заявки!!!					
				if (order.Date >= sec.Bars[i].Date) return;						
				else						
				if (order.OrderType == TSLab.DataSource.OrderType.Limit)						
				{					
					lotsBalance += order.IsBuy ? (order.Quantity-order.RestQuantity) :				
					(-order.Quantity+order.RestQuantity);				
					//для примера-если ордер не исполнился-убиваем				
					if (!order.IsExecuted) secRt.CancelOrder(order);				
				}					
					//условие-у нас нулевой баланс лотов				
				if (lotsBalance == 0)					
				{					
					//ставим стоп-лимит на бай				
					secRt.NewOrder(TSLab.DataSource.OrderType.Growth, true, BT, Contracts, "LE");				
					//ставим стоп-лимит на селл				
					secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, ST, Contracts, "SE");				
				}					
				else					
				if (lotsBalance < 0)					
				{					
					//закрываем отрицательный баланс покупкой				
					secRt.NewOrder(TSLab.DataSource.OrderType.Growth, true, BT, -lotsBalance + Contracts, "SXLE");				
					{				
						//если есть промежуточный профит закрываем nn контрактов			
						if (sec.LowPrices[i] <= sec.Positions.LastPositionActive.EntryPrice - OtskokS)
						secRt.NewOrder(TSLab.DataSource.OrderType.Growth, true, sec.Positions.LastPositionActive.EntryPrice - buS, nn, "SXTP");			
					}				
				}					
				else					
				{					
					//закрываем положительный баланс лотов продажей				
					secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, ST, lotsBalance - Contracts, "LXSE");				
					{				
						//если есть промежуточный профит закрываем nn контрактов			
						if (sec.HighPrices[i] >= sec.Positions.LastPositionActive.EntryPrice + OtskokL)
						secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, sec.Positions.LastPositionActive.EntryPrice + buL, nn, "LXTP");			
					}				
				}
			}							
		}								
	}									
 }
Прошу помощи, как довести алгоритм до робастного состояния. Из-за скудности навыков программирования, буду признателен, если внесёте исправления в раздел "//Торговля", т. к. боюсь не все замечания смогу воспринять правильно.