Пример скрипта с самостоятельным управлением заявками
using System.Linq;
using TSLab.DataSource;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Realtime;
namespace MyLib
{
/// <summary>
/// Пример скрипта с самостоятельным управлением заявками
/// Скрипт получает текущие активные заявки, если нет активных заявок, то выставляет лимитку.
/// Если есть активные заявки, то снимает их. И так далее.
/// В свойстве скрипта нужно поставить галочку 'Отключить генерацию позиций'
/// Нужно запустить скрипт в режиме агента.
/// </summary>
public class RtSecurityLimit : IExternalScript
{
public void Execute(IContext ctx, ISecurity sec)
{
var secRt = sec as ISecurityRt;
if (secRt == null) // Скрипт работает только в режиме агента
return;
if (!secRt.IsPortfolioReady) // Инструмент еще не готов к торговле
return;
if (ctx.BarsCount == 0) // Нет баров
return;
var ordersAll = secRt.Orders.ToList(); // Получить все заявки
var ordersActive = secRt.Orders.Where(x => x.IsActive).ToList(); // Получить все активные заявки
var ordersCancelled = secRt.CancelledOrders.ToList(); // Получить отмененные заявки
if (ordersActive.Count == 0)
{
// Если заявок нет, то выставляем одну заявку
var price = sec.Bars.Last().Close * 0.98;
secRt.NewOrder(OrderType.Limit, true, price, 1, "LN");
}
else
{
// Если есть активные заявки, то все снимаем
foreach (var order in ordersActive)
{
secRt.CancelOrder(order);
}
}
}
}
}Last updated
Was this helpful?