Mikhail Sukhov 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 2/1/2010
					
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
								 
							 | 
						 
					 
			
					 
					 
					
	
			Создать свой собственный контрол. Те, что входят в S# такого не умеют. И я пока не думаю их развивать. Фактически, они появились благодаря тому, что они потребовались в нескольких примерах. Вот код OrderGird:
  <ListView x:Name="_orders" IsSynchronizedWithCurrentItem="True" EcngXaml:GridViewSort.AutoSort="True" HorizontalAlignment="Stretch" SelectionChanged="_orders_SelectionChanged" ItemsSource="{Binding ElementName=_orderGrid, Path=Orders}">                 <ListView.View>                         <GridView>                                 <GridViewColumn Width="70" Header="Номер" DisplayMemberBinding="{Binding Path=Id}" EcngXaml:GridViewSort.PropertyName="Id" />                                 <GridViewColumn Width="70" Header="Время" DisplayMemberBinding="{Binding Path=Time, Converter={StaticResource valueConverter}, ConverterParameter='\{0:HH:mm:ss\}'}" EcngXaml:GridViewSort.PropertyName="Time" />                                 <GridViewColumn Width="45" Header="Объем" EcngXaml:GridViewSort.PropertyName="Volume">                                         <GridViewColumn.CellTemplate>                                                 <DataTemplate>                                                         <TextBlock Text="{Binding Path=Volume}" TextAlignment="Right" /
                                                 </DataTemplate>                                         </GridViewColumn.CellTemplate>                                 </GridViewColumn>                                 <GridViewColumn Width="45" Header="Баланс" EcngXaml:GridViewSort.PropertyName="Balance">                                         <GridViewColumn.CellTemplate>                                                 <DataTemplate>                                                         <TextBlock Text="{Binding Path=Balance}" TextAlignment="Right" /
                                                 </DataTemplate>                                         </GridViewColumn.CellTemplate>                                 </GridViewColumn>                                 <GridViewColumn Width="60" Header="Цена" EcngXaml:GridViewSort.PropertyName="Price">                                         <GridViewColumn.CellTemplate>                                                 <DataTemplate>                                                         <TextBlock Text="{Binding Path=Price}" TextAlignment="Right" />                                                 </DataTemplate>                                         </GridViewColumn.CellTemplate>                                 </GridViewColumn>                                 <GridViewColumn Width="60" Header="Тип" EcngXaml:GridViewSort.PropertyName="Direction">                                         <GridViewColumn.CellTemplate>                                                 <DataTemplate>                                                         <TextBlock x:Name="DirectionCtrl" Text="{Binding Path=Direction}" TextAlignment="Center" />                                                         <DataTemplate.Triggers>                                                                 <DataTrigger Binding="{Binding Path=Direction}" Value="Sell">                                                                         <Setter TargetName="DirectionCtrl" Property="Foreground" Value="Blue"/>                                                                 </DataTrigger>                                                                 <DataTrigger Binding="{Binding Path=Direction}" Value="Buy">                                                                         <Setter TargetName="DirectionCtrl" Property="Foreground" Value="Red"/>                                                                 </DataTrigger>                                                         </DataTemplate.Triggers>                                                 </DataTemplate>                                         </GridViewColumn.CellTemplate>                                 </GridViewColumn>                                 <GridViewColumn Width="80" Header="Статус" EcngXaml:GridViewSort.PropertyName="State">                                         <GridViewColumn.CellTemplate>                                                 <DataTemplate>                                                         <TextBlock x:Name="StateCtrl" Text="{Binding Path=State}" TextAlignment="Center" />                                                         <DataTemplate.Triggers>                                                                 <DataTrigger Binding="{Binding Path=State}" Value="None">                                                                         <Setter TargetName="StateCtrl" Property="Foreground" Value="Black"/>                                                                 </DataTrigger>                                                                 <DataTrigger Binding="{Binding Path=State}" Value="Active">                                                                         <Setter TargetName="StateCtrl" Property="Foreground" Value="Red"/>                                                                 </DataTrigger>                                                                 <DataTrigger Binding="{Binding Path=State}" Value="Cancelled">                                                                         <Setter TargetName="StateCtrl" Property="Foreground" Value="Blue"/>                                                                 </DataTrigger>                                                                 <DataTrigger Binding="{Binding Path=State}" Value="Matched">                                                                         <Setter TargetName="StateCtrl" Property="Foreground" Value="Green"/>                                                                 </DataTrigger>                                                         </DataTemplate.Triggers>                                                 </DataTemplate>                                         </GridViewColumn.CellTemplate>                                 </GridViewColumn>                         </GridView>                 </ListView.View>         </ListView>
  /// <summary>         /// Визуальный контрол-таблица, отображающая заявки (коллекцию объектов класса <see cref="Order"/>).         /// </summary>         public partial class OrderGrid         {                 /// <summary>                 /// Создать объект класса <see cref="OrderGrid"/>.                 /// </summary>                 public OrderGrid()                 {                         this.Orders = new SynchronisedObservableList<Order>();                         InitializeComponent();                 }
                 /// <summary>                 /// Коллекция заявок, которые необходимо отобразить.                 /// </summary>                 public IList<Order> Orders { get; private set; }
                 /// <summary>                 /// Происходит при новом выделении заявки.                 /// </summary>                 public event EventHandler<EventArgs> OrderSelected;
                 /// <summary>                 /// Выбранная заявка.                 /// </summary>                 public Order SelectedOrder                 {                         get                         {                                 return this.SelectedOrders.FirstOrDefault();                         }                 }
                 /// <summary>                 /// Выбранный заявки.                 /// </summary>                 public IEnumerable<Order> SelectedOrders                 {                         get                         {                                 return _orders.SelectedItems.Cast<Order>();                         }                 }
                 private void _orders_SelectionChanged(object sender, SelectionChangedEventArgs e)                 {                         this.OrderSelected.SafeInvoke(this);                 }         }
  
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					AndreiFX 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 2/1/2010
					
					
			
					 
					 
					
	
			Спасибо. А может быть исходник этого компонента сможете выложить? Впервые сталкиваюсь с созданием компонентов в шарпе,потому исходник компонента очень поможет в разборе ситуации....    
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					AndreiFX 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 2/2/2010
					
					
			
					 
					 
					
	
			Хотя уже не надо, разобрался. Спасибо   
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Mikhail Sukhov 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 2/2/2010
					
					
			
					 
					 
					
	
			А это и был исходник.
  
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					AndreiFX 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 2/23/2010
					
					
			
					 
					 
					
	
			Теперь вот какая ошибка появилась, которая возникает при дде экспорте данных если имеется много ордеров
  Необработанное исключение типа "System.StackOverflowException" произошло в Ecng.Xaml.dll
  Подскажите, в чем может быть дело?
  
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					AndreiFX 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 2/23/2010
					
					
			
					 
					 
					
	
			Теперь возниклает вот какая проблема Когда много ордеров имею, то выскакивает вот эта ошибка при включении дде экспорта:
  Необработанное исключение типа "System.StackOverflowException" произошло в Ecng.Xaml.dll
  Подскажите, где копать?   
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Mikhail Sukhov 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 2/25/2010
					
					
			
					 
					 
					
	
			Судя по всему, переполнение стека (много вызовов). А что сделали? Можете локализовать и послать исходники с багой?
  
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					AndreiFX 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 2/25/2010
					
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
								 
							 | 
						 
					 
			
					 
					 
					
	
			Эта ошибка возникла из за моей ошибки: робот начинает открывать очень большое количество ордеров(это мой баг), соответственно в таблице "мои сделки" очень много строк и из за этого возникает данная ошибка. Вот код моей вредоносной процедуры(не исправленной) Эту процедуру делал для закрытия ордеров к определенному времени, она вызывается на каждом тике после заданного времени. И косяк здесь в том, что пока робот открывает рыночный ордер, противоположный тому, что сейчас есть в рынке, эта процедура заново вызывается и открывается еще один противоположный и таким образом получается очень много сделок, привод зависает, а когда заново его включаю и начинаю делать дде вывод, то появляется вышеописанная ошибка. Она же, я полагаю может появиться если просто будет очень много сделок и сделаем заново вывод по дде.
  private void CloseAllOrd()         {
                 for (int i = Limits.Count() - 1; i >= 0; i--)                 {                     Order ord = Limits[i];                     if (ord.State == OrderStates.Active) CancelOrder(ord);                 }                 for (int i = this.StopOrders.Count() - 1; i >= 0; i--)                 {                     Order ord = this.StopOrders[i];                     if (ord.State == OrderStates.Active) CancelOrder(ord);                 }
                 count = 0;                 foreach (MyOrderss x in Trades)                 {                     if (x.Direction == OrderDirections.Buy) count += x.Volume;                     if (x.Direction == OrderDirections.Sell) count -= x.Volume;                 }
                 if (count > 0)                 {                     var order = new Order                     {                         Account = acc,                         Volume = count,                         Security = secur,                         Price = secur.BestBid - otst * secur.MinStepSize,                         Direction = OrderDirections.Sell,                         Type = OrderTypes.Limit,                     };                     this.Trader.RegisterOrder(order);                     ВремяОтмены = DateTime.Now;                 }                 if (count < 0)                 {
                     var order = new Order                     {                         Account = acc,                         Volume = -count,                         Security = secur,                         Price = secur.BestAsk + otst * secur.MinStepSize,                         Direction = OrderDirections.Buy,                         Type = OrderTypes.Limit,                     };                     this.Trader.RegisterOrder(order);
             }         }    
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Mikhail Sukhov 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 2/25/2010
					
					
			
					 
					 
					
	
			Я правильно понял, что ошибка появляется не только в процессе работы (продолжительной или не совсем), а даже тогда, когда Вы перезапустили робота (вот тут уточняю, робота или ДДЕ) и сразу же получили ошибку?
  Насчет большого объема заявок - не думаю. Таблица всех сделок содержит такое количество заявок, что никакому роботу не создать такое количество. И ничего, у все экспортируется на раз. Тем более, что при перезапуске ДДЕ сделки, которые уже вызывались через событие NewTrades, не будут более вызываться.
  
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					AndreiFX 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 3/1/2010
					
					
			
					 
					 
					
	
			Да, совершенно верно. Ошибка появлялась даже если я полностью перезагружал робота и даже квик. И даже комп)
  
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 |