[vk]http://vk.com/video_ext.php?oid=-66650972&id=167470235&hash=5354329b0f44e11a&hd=3[/vk]
[vk]http://vk.com/video_ext.php?oid=-66650972&id=167470340&hash=d4a2baaf8c533bc8&hd=3[/vk]
[vk]http://vk.com/video_ext.php?oid=-66650972&id=167470847&hash=05646cb903828f2e&hd=3[/vk]
Создание сборки с получением исторических свечей, отрисовкой графиков и запуском стратегии
В проекте с получением и отображением исторических свечей, сделать вывод меток заявок и сделок на график.
Проект CandlesDownload
Файл History.cs и SimpleSecurityStorage.cs
Было:
Код
using StockSharp.Algo.History.Finam;
 Стало:
Код
using StockSharp.Algo.History.Russian.Finam;
 Файл SimpleSecurityStorage.cs
В версии S# 4.1.19.1 интерфейс ISecurityStorage содержит свойство Securities, поэтому класс SimpleSecurityStorage, его должен реализовать.
Было:
Код
    /// <summary>
    /// Простое хранилище
    /// </summary>
    class SimpleSecurityStorage:ISecurityStorage 
    {
	private readonly SynchronizedDictionary<long, Security> _cacheByFinamId = new 
SynchronizedDictionary<long, Security>();
	public Security LoadBy(string fieldName, object fieldValue)
		{
			return _cacheByFinamId.TryGetValue((long)fieldValue);
		}
        public IEnumerable<Security> Lookup(Security criteria)
                {
                        throw new NotImplementedException();
                }
        public void Save(Security security)
		{
			TryAddToCache(security);
		}
		private void TryAddToCache(Security security)
		{
			if (security == null)
				throw new ArgumentNullException("security");
			var finamId = security.ExtensionInfo.TryGetValue(FinamHistorySource.FinamSecurityIdField);
			if (finamId != null)
				_cacheByFinamId.SafeAdd((long)finamId, key => security);
		}
    }
 Стало:
Код
    /// <summary>
    /// Простое хранилище
    /// </summary>
    class SimpleSecurityStorage:ISecurityStorage 
    {
	private readonly SynchronizedDictionary<long, Security> _cacheByFinamId = new 
SynchronizedDictionary<long, Security>();
        private IEnumerable<Security> _securities;
        public Security LoadBy(string fieldName, object fieldValue)
		{
			return _cacheByFinamId.TryGetValue((long)fieldValue);
		}
        public IEnumerable<Security> Lookup(Security criteria)
        	{
            		throw new NotImplementedException();
        	}
        public IEnumerable<Security> Securities
        {
            get { return _securities; }
        }
        public void Save(Security security)
		{
			TryAddToCache(security);
		}
	private void TryAddToCache(Security security)
		{
			if (security == null)
				throw new ArgumentNullException("security");
			var finamId = security.ExtensionInfo.TryGetValue(FinamHistorySource.FinamSecurityIdField);
			if (finamId != null)
				_cacheByFinamId.SafeAdd((long)finamId, key => security);
		}
    }
 Проект CandlesDownloadUsing
Файл BollingerStrategy.cs
Теперь класс Strategy не имеет свойства PendingOrders, все Pending заявки можно получить из общей коллекции Orders, поэтому избыточность в библиотеке была устранена, и мы в соем проекте теперь используем коллекцию Orders, и в ней, анализируя свойство State каждой заявки, используя Linq выражение.
Было:
Код
        /// <summary>
        /// Возвращает true если нет активных заявок, а противном случае возвращает false
        /// </summary>
        private bool NoActiveOrders
        {
            get
            {
                return Orders.Count(o => o.State != OrderStates.Done) == 0 && PendingOrders.Count() == 0;
            }
        }
 Стало:
Код
        /// <summary>
        /// Возвращает true если нет активных заявок, а противном случае возвращает false
        /// </summary>
        private bool NoActiveOrders
        {
            get
            {
                return Orders.Count(o => o.State != OrderStates.Done) == 0 && Orders.Where(o=>o.State == 
OrderStates.Pending).Count() == 0;
            }
        }
 Файл MainWindow.cs
Начиная с версии S# 4.1.19.1 статус подключения коннектора вынесен в специальное свойство ConnectionState, которое может принимать следующие значения:
Disconnected - Не активно,
Disconnecting - В процессе отключения,
Connected - В процессе подключения,
Connecting - Подключение активно,
Failed - Ошибка подключения
Таким образом, теперь нет свойства IsConnected, а наличие статуса подключения мы можем получать от свойства ConnectionState.
Было:
Код
        /// <summary>
        /// Обработчик события закрытия окна
        /// </summary>
        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            if (Connection.SafeConnection.Trader != null && Connection.SafeConnection.Trader.IsConnected)
            {
                Connection.SafeConnection.Trader.Dispose();
            }
            Thread.CurrentThread.Abort();
            base.OnClosing(e);
        }
 Стало:
Код
        /// <summary>
        /// Обработчик события закрытия окна
        /// </summary>
        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            if (Connection.SafeConnection.Trader != null && Connection.SafeConnection.Trader.ConnectionState == 
ConnectionStates.Connected)
            {
                Connection.SafeConnection.Trader.Dispose();
            }
            Thread.CurrentThread.Abort();
            base.OnClosing(e);
        }