В Transaq коннекторе не могу получить свечки

В Transaq коннекторе не могу получить свечки
Atom
5/30/2017
Pelmen32


Добрый день.
В приложенном простом примере не могу получить свечки через событие СandleManager.Processing.
Подключение происходит, инструмент находит, также приходят сделки через подписку NewTrade,
но свечки через CandleManager не формируются.
Transaq от Финам, библиотека StockSharp - 4.3.24.0
При создании CandleSeries, указываю BuildCandlesMode = BuildCandlesModes.Build.
Помогите, пожалуйста, в чем может быть причина?
Аналогичный пример с подключением через Квик работает.

Tags:


Thanks:


Pelmen32

Avatar
Date: 5/30/2017
Reply


using System;
using System.Linq;
using System.Net;
using Ecng.Common;
using StockSharp.Algo.Candles;
using StockSharp.BusinessEntities;
using StockSharp.Messages;
using StockSharp.Transaq;

namespace TransaqTest
{
class Program
{
private static TransaqTrader _trader;

private static Security _security;

private static CandleManager _candleManager;

private static CandleSeries _series;

private static void Main(string[] args)
{

_trader = new TransaqTrader
{
Login = "XXXXXXXXXXX",
Password = "XXXXXXXXXX",
Address = "tr1.finam.ru:3900".To<EndPoint>(),
IsHFT = false
};

if (_trader.ConnectionState == ConnectionStates.Disconnected)
{
//подписываемся на событие успешного подклюия
_trader.Connected += () =>
{
Console.WriteLine("Успешно подключились");

_candleManager.Start(_series);

//_trader.RegisterSecurity(_security);

//_trader.RegisterTrades(_security);

};

_trader.NewSecurities += securities =>
{
_security = securities.FirstOrDefault(s => s.Code.ToUpper()=="SIM7");

if (_security != null)
{
Console.WriteLine("Инструмент {0} найден", _security.Code.ToString());

_candleManager = new CandleManager((IConnector) _trader);

_candleManager.Processing += DrawElement;

_series = new CandleSeries(typeof(TimeFrameCandle), _security, TimeSpan.FromMinutes(1))
{
BuildCandlesMode = BuildCandlesModes.Build,
};

}

};

_trader.NewTrade += (t) =>
{
var t1 = t;
};

_trader.Connect();

}
else
{
_trader.Disconnect();
}

Console.ReadKey();
_trader.Disconnect();
}

private static void DrawElement(CandleSeries series, Candle candle)
{
Console.WriteLine("Свечка: {0}, {1}", candle.OpenTime, candle.CloseTime);
}
}
}

Thanks:

Support

Avatar
Date: 5/30/2017
Reply


BuildCandlesMode = BuildCandlesModes.Build. Здесь выберите другое значение, не Build...
Thanks:

Pelmen32

Avatar
Date: 5/31/2017
Reply


Менял значение BuildCandlesModes и на значение Load и LoadAndBuild - результат прежний, свечки не приходят
через событие СandleManager.Processing.

Попробовал сделать следующим образом через создание переменной IExternalCandleSourse и метод SubscribeCandles:

Code
_series = new CandleSeries(typeof(TimeFrameCandle), _security, TimeSpan.FromMinutes(5))
{
BuildCandlesMode = BuildCandlesModes.LoadAndBuild,
};

_iexternalCandleSource = _trader;

_candleManager = new CandleManager(_iexternalCandleSource);

_iexternalCandleSource.SubscribeCandles(_series,DateTimeOffset.MinValue, DateTimeOffset.MaxValue);

_candleManager.Processing += DrawElement;
_candleManager.Start(_series);


В метод DrawElement стали приходить только исторические свечки за текущий день до текущего времени,
новые свечки не формируются в CandleManger. При этом, в событие _trader.NewTrade новые сделки поступают.

1. Можно ли через Transaq коннектор и CandleManager получать не только историю, но и сформированные новые свечки в реальном времени?

2. Возможно ли сформировать свечки произвольного таймфрейма из сделок, а не загружать уже готовые свечки (в транзаке всего свечки 5 таймфреймов)?

Буду очень благодарен если поделитесь рабочим примером.

Thanks:

Support

Avatar
Date: 5/31/2017
Reply


Ок, проверим...
Thanks:

AlgoCoder

Avatar
Date: 2/12/2020
Reply


Добрый день, аналогичная проблема с коннектором Transaq, версия Stocksharp 4.4.16.
Подключение происходит, инструмент находит, изменение MarketDepth есть, но новые свечи по SubscribeCandles не приходят.
Исторические свечи загружаются, но приходят с нулевыми объёмами.
При переключении на коннектор Quik всё работает.

Как удалось решить:
В логах нашёл ошибку
Error System.InvalidCastException: Can't convert 100.0% of type 'System.String' to type 'System.Double'. ---> System.FormatException: Input string was not in a correct format.
at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
...
at StockSharp.Transaq.TransaqMessageAdapter.
at Ecng.Common.Converter.DoInCulture[T](CultureInfo cultureInfo, Func`1 func)
at StockSharp.Transaq.TransaqMessageAdapter.
которая указывает на проблему парсинга строки в Double.
Поменял в региональных настройках Windows на вкладках Numbers/Currency в поле Decimal symbol заменил запятую на точку, всё заработало.
Thanks:

Igruran

Avatar
Date: 3/26/2020
Reply


Добрый день. Так же как и Вы не могу получить объёмы исторических свечей с коннектором Transaq, версия Stocksharp 4.4.16.
Текущие объёмы свечей приходят нормально. С коннектором Quik так же всё работает. Попробовал (как Вы рекомендовали) поменять в региональных настройках Windows запятую на точку, но результат тот же самый.Может я не там запятые на точки меняю? Или проблема в разрядности Windows (у меня 32-разрядная)? А может в коде чего нибудь не учитываю?

using Ecng.Common;
using StockSharp.Algo.Candles;
using StockSharp.Messages;
using StockSharp.Transaq;
using System;
using System.Net;

namespace CandleTransaq
{
class Program
{
private static void Main(string[] args)
{

var transaqTrader = new TransaqTrader()
{
Login = "XXXXXXX",
Password = "XXXXXXX",
Address = "tr1.finam.ru:3900".To<EndPoint>(),
IsHFT = false,
};

if (transaqTrader.ConnectionState == ConnectionStates.Disconnected)
{
transaqTrader.Connected += () =>
{
Console.WriteLine("Подключено успешно");
};

transaqTrader.ConnectionError += ex => Console.WriteLine("Ошибка " + ex.ToString());

transaqTrader.NewSecurities += securities =>
{
foreach (var security in securities)
{
if (security.Id == "SBER@TQBR")
{
CandleSeries _series = new CandleSeries(typeof(TimeFrameCandle), security, TimeSpan.FromDays(1))
{
BuildCandlesMode = MarketDataBuildModes.Load,
From = DateTimeOffset.Now.AddDays(-10),
To = DateTimeOffset.Now,
};

transaqTrader.SubscribeCandles(_series, null, null);

transaqTrader.CandleSeriesProcessing += DrawElement;
}
};
};

transaqTrader.NewTrade += (t) =>
{
var t1 = t;
};

transaqTrader.Connect();
}

Console.ReadKey();
transaqTrader.Disconnect();
}

private static void DrawElement(CandleSeries series, Candle candle)
{
Console.WriteLine($"O: {candle.OpenPrice}, H: {candle.HighPrice}, L: {candle.LowPrice}, C: {candle.ClosePrice}, V: {candle.TotalVolume}");
}
}
}

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy