Общие ошибки
Atom
13.01.2012
Daenur


Не хватает ветки форума, куда можно было бы писать об ошибках, не попадающих ни в одну из текущих категорий. Вот сейчас даже не знаю, куда было бы правильно сообщить об обнаруженной проблеме. Напишу сюда.

Обновился до последней версии. Такой код перестал работать:

Код

candleToken = candleManager.RegisterVolumeCandles(this.SelectedSecurity, 10000);

IEnumerable<Candle> tmpCandles = candleManager.GetVolumeCandles(this.SelectedSecurity, 10000);

error.png 65 KB (280)

Теги:


Спасибо:


1 2  >
Alexander

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


Это Стратегии и Алгоритмы. Именно эта тема является общей.

По проблеме - чему равен SelectedSecurity ну и полный Stack Trace конечно нужен.
Не в виде скриншота только, а ctr+c, ctr+v.
Спасибо:

Mikhail Sukhov

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


Не плохо бы стек трейс вставлять текстом. Можно даже без скрина.
Спасибо:

Daenur

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


Попробую собрать нужную информацию.

StackTrace:

Код

"   в System.Collections.Generic.Dictionary`2.FindEntry(TKey key)\r\n   в System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value)\r\n   в Ecng.Collections.SynchronizedDictionary`2.TryGetValue(TKey key, TValue& value)\r\n   в Ecng.Collections.CollectionHelper.TryGetValue[TKey,TValue](IDictionary`2 dict, TKey key)\r\n   в Ecng.Collections.CollectionHelper.<>c__DisplayClass18`2.<TryGetValue>b__17(SynchronizedDictionary`2 d)\r\n   в Ecng.Collections.CollectionHelper.SyncGet[TCollection,TResult](TCollection collection, Func`2 func)\r\n   в Ecng.Collections.CollectionHelper.TryGetValue[TKey,TValue](SynchronizedDictionary`2 dict, TKey key)\r\n   в StockSharp.Algo.Candles.CandleContainer.GetCandles(CandleToken token)\r\n   в StockSharp.Algo.Candles.CandleHelper.#=qXPZdkiELNitOraCeUw3h6mbW_ZhW23wLr6MshczzY68=.#=qLfa4JiJMrbEqPJA6hzH2m608MOaOOijlarRl7Z$3aMk=(CandleToken #=q5u5aT6qdR2hDtsXOSvFynA==)\r\n   в StockSharp.Algo.Candles.CandleHelper.#=qO2oigosOfL6g_3qV9vlVxw==[TCandle,TResult](ICandleManager #=qjc3pxbiY4fMHarI0AUsnvw==, Security #=q$GFj7jGA1FP2qn_P0_CcWg==, Object #=qBUhgKrrw8a31HGATMnMQLw==, Func`2 #=qKEm1UAsHZ2xzYy7Y30K3HA==)\r\n   в StockSharp.Algo.Candles.CandleHelper.#=qukl$s6Y4xrx1F2ehBo526w==[TCandle](ICandleManager #=qoZcRJSbTGIM9712gDOua7Q==, Security #=qSfOAxa1CTSn$spwmQ2qHEQ==, Object #=qkqIAN2y3eo4tS4GHxBewHg==)\r\n   в StockSharp.Algo.Candles.CandleHelper.GetVolumeCandles(ICandleManager manager, Security security, Int32 volume)"


После вызова candleManager.GetVolumeCandles() и до момента ошибки стек вызовов такой:
Код

StockSharp.Algo.dll!StockSharp.Algo.Candles.CandleHelper.GetVolumeCandles(StockSharp.Algo.Candles.ICandleManager manager = {StockSharp.Algo.Candles.CandleManager}, StockSharp.BusinessEntities.Security security = {StockSharp.BusinessEntities.Security}, int volume = 10000) + 0x51 байт	

StockSharp.Algo.dll!StockSharp.Algo.Candles.CandleHelper.#=qukl$s6Y4xrx1F2ehBo526w==<StockSharp.Algo.Candles.VolumeCandle>(StockSharp.Algo.Candles.ICandleManager #=qoZcRJSbTGIM9712gDOua7Q== = {StockSharp.Algo.Candles.CandleManager}, StockSharp.BusinessEntities.Security #=qSfOAxa1CTSn$spwmQ2qHEQ== = {StockSharp.BusinessEntities.Security}, object #=qkqIAN2y3eo4tS4GHxBewHg== = 10000) + 0x10e байт	

StockSharp.Algo.dll!StockSharp.Algo.Candles.CandleHelper.#=qO2oigosOfL6g_3qV9vlVxw==<StockSharp.Algo.Candles.VolumeCandle,System.Collections.Generic.IEnumerable<StockSharp.Algo.Candles.VolumeCandle>>(StockSharp.Algo.Candles.ICandleManager #=qjc3pxbiY4fMHarI0AUsnvw== = {StockSharp.Algo.Candles.CandleManager}, StockSharp.BusinessEntities.Security #=q$GFj7jGA1FP2qn_P0_CcWg== = {StockSharp.BusinessEntities.Security}, object #=qBUhgKrrw8a31HGATMnMQLw== = 10000, System.Func<StockSharp.Algo.Candles.CandleToken,System.Collections.Generic.IEnumerable<StockSharp.Algo.Candles.VolumeCandle>> #=qKEm1UAsHZ2xzYy7Y30K3HA== = {Method = {System.Reflection.RuntimeMethodInfo}}) + 0xc6 байт	

StockSharp.Algo.dll!StockSharp.Algo.Candles.CandleHelper.#=qXPZdkiELNitOraCeUw3h6mbW_ZhW23wLr6MshczzY68=<StockSharp.Algo.Candles.VolumeCandle>.#=qLfa4JiJMrbEqPJA6hzH2m608MOaOOijlarRl7Z$3aMk=(StockSharp.Algo.Candles.CandleToken #=q5u5aT6qdR2hDtsXOSvFynA== = null) + 0x35 байт	

StockSharp.Algo.dll!StockSharp.Algo.Candles.CandleContainer.GetCandles(StockSharp.Algo.Candles.CandleToken token = null) + 0x38 байт	

Ecng.Collections.dll!Ecng.Collections.CollectionHelper.TryGetValue<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==>(Ecng.Collections.SynchronizedDictionary<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==> dict = {Ecng.Collections.SynchronizedDictionary<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==>}, StockSharp.Algo.Candles.CandleToken key = null) + 0x132 байт	

Ecng.Collections.dll!Ecng.Collections.CollectionHelper.SyncGet<Ecng.Collections.SynchronizedDictionary<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==>,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==>(Ecng.Collections.SynchronizedDictionary<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==> collection = {Ecng.Collections.SynchronizedDictionary<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==>}, System.Func<Ecng.Collections.SynchronizedDictionary<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==>,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==> func = {Method = {System.Reflection.RuntimeMethodInfo}}) + 0xda байт	

Ecng.Collections.dll!Ecng.Collections.CollectionHelper.TryGetValue<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==>.AnonymousMethod__17(Ecng.Collections.SynchronizedDictionary<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==> d = {Ecng.Collections.SynchronizedDictionary<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==>}) + 0x5d байт	

Ecng.Collections.dll!Ecng.Collections.CollectionHelper.TryGetValue<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==>(System.Collections.Generic.IDictionary<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==> dict = {Ecng.Collections.SynchronizedDictionary<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==>}, StockSharp.Algo.Candles.CandleToken key = null) + 0x92 байт	

Ecng.Collections.dll!Ecng.Collections.SynchronizedDictionary<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==>.TryGetValue(StockSharp.Algo.Candles.CandleToken key = null, out StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ== value = null) + 0xaa байт	

mscorlib.dll!System.Collections.Generic.Dictionary<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==>.TryGetValue(StockSharp.Algo.Candles.CandleToken key, out StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ== value = null) + 0x12 байт	

mscorlib.dll!System.Collections.Generic.Dictionary<StockSharp.Algo.Candles.CandleToken,StockSharp.Algo.Candles.CandleContainer.#=q4Qy0qedHXGsKO$J5dbXJIQ==>.FindEntry(StockSharp.Algo.Candles.CandleToken key) + 0x14a байт	


System.Diagnostics.StackFrame дает такую инфу:
Код

"InitCandleManager at offset 1348 in file:line:column <filename unknown>:0:0\r\n"



Если нужно еще что-то - выложу.

Да, по поводу темы понятно, буду туда выкладывать в дальнейшем.
SelectedSecurity - {Фьючерсный контракт SBRF-3.12@RTS} при подключении к Смарту или, например, RIH2 при подключении к КВИКу.
Роли не играет, ошибка все равно возникает.
Спасибо:

Alexander

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


Как candlemanager создаётся?
Какая версия S#? 4.0.15?

На это смотрели?
Спасибо:

Daenur

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


Код

...

trader = new QuikTrader(SelectedTerminal.FileName);
// или
trader = new SmartTrader(login, password, address);
trader.Connect();

...

candleManager = new CandleManager(trader);

...

switch (candleType)
{
	...

	case CandleTypes.Volume:
		candleToken = candleManager.RegisterVolumeCandles(SelectedSecurity, 10000);
	break;
}

...

IEnumerable<Candle> tmpCandles = candleManager.GetVolumeCandles(SelectedSecurity, 10000);


в промежутках ... несущественный код

Собственно, код и был взят изначально из примера. И не так давно работал, пока не обновился до последней версии, которая сейчас выложена. Обновлялся два-три дня назад, работаю с trunk веткой. Обновлялся полностью удалив старую папку и залив новую с сервера.
Если запускаю тот же код на версии, которая была до обновления (не знаю как проверить версию, просто перед обновлением сохранил всю папку) - все отлично исполняется, рисуются бары по объему каждые 10000.

А у вас все нормально отрабатывается, ошибка не воспроизводится?
Спасибо:

Daenur

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


Удалил все, заново забрал последнюю версию с сервера, создал тестовый проект - ошибка повторяется. Единственное - проверял на Смарте, т.к. КВИК сейчас вырублен, а к Смарту можно подключиться. Но и на КВИКе ошибка была.
Бумага выбирается первая попавшаяся.

Код проекта для проверки:

Код

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

using Ecng.Collections;
using Ecng.Common;
using Ecng.ComponentModel;
using Ecng.Xaml;

using StockSharp.Algo;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Logging;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;
using StockSharp.Smart;
using StockSharp.Quik;
using StockSharp.Xaml;


namespace TestProject
{
	/// <summary>
	/// Логика взаимодействия для MainWindow.xaml
	/// </summary>
	public partial class MainWindow : Window
	{
		public BaseTrader trader;
		private CandleManager candleManager;
		private CandleToken candleToken;
		private Security selectedSecurity;

		public MainWindow()
		{
			InitializeComponent();

			// Вставить сюда сервер, логин и пароль
			System.Net.IPEndPoint address = Utils.CreateIPEndPoint("");
			string login = "";
			string password = "";

			trader = new SmartTrader(login, password, address);
			candleManager = new CandleManager(trader);

			trader.Connected += new Action(trader_Connected);
			trader.NewSecurities += new Action<IEnumerable<Security>>(trader_NewSecurities);
			trader.Connect();
		}

		private void trader_NewSecurities(IEnumerable<Security> tmpSecurities)
		{
			this.GuiAsync(() =>
			{
				// Выбираем первую бумагу
				if (trader.Securities.Count() > 0)
				{
					selectedSecurity = trader.Securities.ElementAt(0);

					//TimeSpan currentTimeFrame = TimeSpan.FromSeconds(60);
					//candleToken = candleManager.RegisterTimeFrameCandles(selectedSecurity, currentTimeFrame);

					candleToken = candleManager.RegisterVolumeCandles(selectedSecurity, 10000);

					try
					{
						//IEnumerable<Candle> tmpCandles = candleManager.GetTimeFrameCandles(selectedSecurity, currentTimeFrame);
						IEnumerable<Candle> tmpCandles = candleManager.GetVolumeCandles(selectedSecurity, 10000);
					}
					catch (Exception ex)
					{
						throw new Exception(ex.Message, ex);
					}
					finally
					{
						trader.StopExport();
						trader.Disconnect();
					}
				}
			});
		}
	}		private void trader_Connected()
		{
			this.GuiAsync(() =>
			{
				trader.StartExport();
			});
		}

		private void trader_NewSecurities(IEnumerable<Security> tmpSecurities)
		{
			this.GuiAsync(() =>
			{
				// Выбираем первую бумагу
				if (trader.Securities.Count() > 0)
				{
					selectedSecurity = trader.Securities.ElementAt(0);

					candleToken = candleManager.RegisterVolumeCandles(selectedSecurity, 10000);

					try
					{
						IEnumerable<Candle> tmpCandles = candleManager.GetVolumeCandles(selectedSecurity, 10000);
					}
					catch (Exception ex)
					{
						throw new Exception(ex.Message, ex);
					}
					finally
					{
						trader.StopExport();
						trader.Disconnect();
					}
				}
			});
		}
	}

	public class Utils
	{
		/// <summary>
		/// Создание IP адреса из строки
		/// </summary>
		/// <param name="endPoint">Адрес в формате 111.222.333.444:6789</param>
		/// <returns></returns>
		public static IPEndPoint CreateIPEndPoint(string endPoint)
		{
			IPAddress ip;
			int port;

			string[] ep = endPoint.Split(':');

			if (ep.Length != 2)
			{
				throw new FormatException("Invalid endpoint format");
			}

			if (IPAddress.TryParse(ep[0], out ip) == false)
			{
				throw new FormatException("Invalid ip-adress");
			}

			if (int.TryParse(ep[1], NumberStyles.None, NumberFormatInfo.CurrentInfo, out port) == false)
			{
				throw new FormatException("Invalid port");
			}

			return new System.Net.IPEndPoint(ip, port);
		}
	}
}

Спасибо:

Alexander

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


Бага. Буду разбираться с чем связано.
В общем будет 4.0.16 с фиксом
Спасибо:

Alexander

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


Фикс готов, положил на codeplex в trunk.
Будет время - соберу архивы и выложу релиз.
Спасибо:

Daenur

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


Спасибо за оперативность, забираю!

Кстати, вопрос по выкладыванию. Немного доработал индикатор JurikMovingAverage, хочу его выложить. Могу прямо в trunk класть?
Спасибо:

Alexander

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


Daenur
Спасибо за оперативность, забираю!

Кстати, вопрос по выкладыванию. Немного доработал индикатор JurikMovingAverage, хочу его выложить. Могу прямо в trunk класть?


Нет, в dev.
В trunk - только баг-фиксы относящиеся к версии 4.0, в фиксах которых уверены.
Вся доработка и непосредственно разработка - в dev.

Будет готов 4.1 - будет мёрж dev с trunk.
Спасибо:
1 2  >

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

loading
clippy