lebedevsrg Работаю на S# с TransaqConnector уже около трех лет, сейчас использую двух активных роботов, построенных на основе каркаса S#.Shell. В целом связка надежная, нареканий нет.
Проблемы тут скорее платформенного плана. Периодически Финам обновляет сервер или спецификацию TransaqConnector и S# выпускает новую версию коннектора. Для подключения новой версии часто необходимо переустановить всю S#.API. А это каждый раз вызывает возникновение множества сбоев по всем модулям, так как S#.API активно развивается - какие-то методы/свойства удаляются, какие-то появляются и пр. Так как описание изменений достаточно скудное, то порой приходится возиться два-три вечера, чтобы понять как старый функционал переложить на новый S#.API и внести исправления в код.
На каких таймфремах работают роботы ? Такой код есть возможность запустить проверить на работоспособность ? Дело в том что таймфрейм 30 секундные (TimeSpan.FromSeconds(30)) несколько стратегий запускает нормально , 5 минутки выше таймфреймы не запускает TimeSpan.FromSeconds(300).
var inSeries = new CandleSeries(typeof(StockSharp.Algo.Candles.TimeFrameCandle), sec, TimeSpan.FromSeconds(300));
Trader.Connected += () =>
{
// возводим флаг, что соединение установлено
_isConnected = true;
// запускаем подписку на новости
Trader.RegisterNews();
// разблокируем кнопку Экспорт
this.GuiAsync(() => ChangeConnectStatus(true));
foreach (var portfolio in Trader.Portfolios)
{
// регистрирует портфели на обновление данных
Trader.RegisterPortfolio(portfolio);
}
if (sec != null)
{
var candleManager1 = new StockSharp.Algo.Candles.CandleManager(Trader);
var inSeries = new CandleSeries(typeof(StockSharp.Algo.Candles.TimeFrameCandle), sec, TimeSpan.FromSeconds(300));
candleManager1.WhenCandlesFinished(inSeries).Do(ProcessCandle).Apply();
candleManager1.Start(inSeries);
}
if (sec2 != null)
{
var candleManager2 = new StockSharp.Algo.Candles.CandleManager(Trader);
var inSeries = new CandleSeries(typeof(StockSharp.Algo.Candles.TimeFrameCandle), sec2, TimeSpan.FromSeconds(300));
candleManager2.WhenCandlesFinished(inSeries).Do(ProcessCandle1).Apply();
candleManager2.Start(inSeries);
}
};
Trader.NewSecurities += securities =>
{
if(sec == null)
sec = securities.FirstOrDefault(s => s.Code == @"EuH6");
if (sec2 == null)
sec2 = securities.FirstOrDefault(s => s.Code == @"SiH6");
};