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


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


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

Теги:


Спасибо:


Pelmen32

Фотография
Дата: 30.05.2017
Ответить


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);
}
}
}

Спасибо:

Support

Фотография
Дата: 30.05.2017
Ответить


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

Pelmen32

Фотография
Дата: 31.05.2017
Ответить


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

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

Код
_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 таймфреймов)?

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

Спасибо:

Support

Фотография
Дата: 31.05.2017
Ответить


Ок, проверим...
Спасибо:

AlgoCoder

Фотография
Дата: 12.02.2020
Ответить


Добрый день, аналогичная проблема с коннектором 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 заменил запятую на точку, всё заработало.
Спасибо:

Igruran

Фотография
Дата: 26.03.2020
Ответить


Добрый день. Так же как и Вы не могу получить объёмы исторических свечей с коннектором 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}");
}
}
}

Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy