﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">не понятен механизм работы метода AddRange</title>
  <id>~/topic/1755/ne-ponyaten-mehanizm-raboty-metoda-addrange/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-25T11:01:59Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=1755" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/10147/</id>
    <title type="text">У вас логика работы некорректная. Зачем использовать Trader у MainWindow.Instance ? Ведь он есть у S...</title>
    <published>2011-08-03T11:36:05Z</published>
    <updated>2011-08-03T11:36:05Z</updated>
    <author>
      <name>vader</name>
      <uri>https://stocksharp.ru/users/28223/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Alexander &lt;a href="https://stocksharp.ru/posts/m/9748/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;У вас логика работы некорректная.&lt;br /&gt;&lt;br /&gt;Зачем использовать Trader у MainWindow.Instance ? Ведь он есть у Strategy&lt;br /&gt;&lt;br /&gt;Блокировки не нужны, пользуйтесь событиями и When\Do.&lt;br /&gt;Коллекции вообще не нужны. Все сделки есть в Strategy.MyTrades, заявки - Strategy.Orders&lt;br /&gt;Эти коллекции - синхронизированные (SynchronizedList и SynchronizedSet соответственно).&lt;br /&gt;&lt;br /&gt;А вы объявляете свою коллекцию как ObservableCollection и удивляетесь что она не синхронизирована :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;А так - надо пользоваться &lt;br /&gt;When(order.Matched()).Do(blablabla);&lt;br /&gt;When(order.NewTrades()).Do(blablabla);&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Alexander? не моглы бы вы прояснить, как правильно использовать коллекции заявок и сделок.&lt;br /&gt;я хочу вычтавлять заявки последовательно, онда за другой.&lt;br /&gt;Есть условие для высталения завок и дополнительное условие ,заключающееся в том, что пока одна заявка не исполнится, следующая не выставляается.&lt;br /&gt;Но списки сделок и заявок не успевают обновится.&lt;br /&gt;Допустим в этом методе дожен расчитыватся обший объем купленных лотов ,но из-за того ,что список сделок не успевает дополнится, часто объем считается не верно.&lt;br /&gt;К примеру, прошли две сделки объемом 1 и 7, купленный объем посчитается как 2.&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

private bool RecalculateVolume()
	{		if(this.MyTrades.Count &amp;gt; 0){
			_curLotBuySellNow += this.MyTrades[this.MyTrades.Count-1].Trade.Volume;
			//MessageBox.Show(_curLotBuySellNow.ToString() + &amp;quot; Volume= &amp;quot; + this.Volume.ToString());
			if (_curLotBuySellNow &amp;gt;= this.Volume){
				this.Stop();
				return false;
			}
		}
		return true;
	}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;можно ли как-то заставить все стратегию выполнятся в одном потоке?&lt;br /&gt;Атрибут [Synchronization] не помогает.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/9754/</id>
    <title type="text">esper, да я это видел, но я прошу пример не только стратегии но и её комплексного использования в ро...</title>
    <published>2011-07-21T08:37:03Z</published>
    <updated>2011-07-21T08:37:03Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;vader &lt;a href="https://stocksharp.ru/posts/m/9752/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;esper, да я это видел, но я прошу пример не только стратегии но и её комплексного использования в роботе.&lt;br /&gt;чтобы было понятно, как с ней работать.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;см. SampleSMA.&lt;br /&gt;Работа с событийной стратегией ничем не отличается.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/9752/</id>
    <title type="text">esper, да я это видел, но я прошу пример не только стратегии но и её комплексного использования в ро...</title>
    <published>2011-07-21T08:32:58Z</published>
    <updated>2011-07-21T08:32:58Z</updated>
    <author>
      <name>vader</name>
      <uri>https://stocksharp.ru/users/28223/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">esper, да я это видел, но я прошу пример не только стратегии но и её комплексного использования в роботе.&lt;br /&gt;чтобы было понятно, как с ней работать.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/9751/</id>
    <title type="text">Ориентируюся на ваши посты, я понял, что надо писать через стратегии. я видел у вас пример позиционн...</title>
    <published>2011-07-21T08:25:50Z</published>
    <updated>2011-07-21T08:25:50Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.ru/users/5990/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;vader &lt;a href="https://stocksharp.ru/posts/m/9750/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Ориентируюся на ваши посты, я понял, что надо писать через стратегии.&lt;br /&gt;я видел у вас пример позиционной стратегии(итерационной).&lt;br /&gt;Есть ли у вас пример использование и работы с событийной стратегии?( как  у вас есть пример SampleSMA)?&lt;br /&gt;А то тяжеловато разобратся.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;В &lt;a href="http://stocksharp.com/doc/html/8c0327db-494a-4fe0-aba8-0d4b93dea60e.htm" title="http://stocksharp.com/doc/html/8c0327db-494a-4fe0-aba8-0d4b93dea60e.htm"&gt;документации&lt;/a&gt; есть пример</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/9750/</id>
    <title type="text">Ориентируюся на ваши посты, я понял, что надо писать через стратегии. я видел у вас пример позиционн...</title>
    <published>2011-07-21T08:22:26Z</published>
    <updated>2011-07-21T08:22:26Z</updated>
    <author>
      <name>vader</name>
      <uri>https://stocksharp.ru/users/28223/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Ориентируюся на ваши посты, я понял, что надо писать через стратегии.&lt;br /&gt;я видел у вас пример позиционной стратегии(итерационной).&lt;br /&gt;Есть ли у вас пример использование и работы с событийной стратегии?( как  у вас есть пример SampleSMA)?&lt;br /&gt;А то тяжеловато разобратся.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/9748/</id>
    <title type="text">У вас логика работы некорректная. Зачем использовать Trader у MainWindow.Instance ? Ведь он есть у S...</title>
    <published>2011-07-21T07:41:01Z</published>
    <updated>2011-07-21T07:41:01Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">У вас логика работы некорректная.&lt;br /&gt;&lt;br /&gt;Зачем использовать Trader у MainWindow.Instance ? Ведь он есть у Strategy&lt;br /&gt;&lt;br /&gt;Блокировки не нужны, пользуйтесь событиями и When\Do.&lt;br /&gt;Коллекции вообще не нужны. Все сделки есть в Strategy.MyTrades, заявки - Strategy.Orders&lt;br /&gt;Эти коллекции - синхронизированные (SynchronizedList и SynchronizedSet соответственно).&lt;br /&gt;&lt;br /&gt;А вы объявляете свою коллекцию как ObservableCollection и удивляетесь что она не синхронизирована :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;А так - надо пользоваться &lt;br /&gt;When(order.Matched()).Do(blablabla);&lt;br /&gt;When(order.NewTrades()).Do(blablabla);&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/9747/</id>
    <title type="text">MainWindow.Instance.Trader.RegisterOrder(order); я использую для регистрации заявки. Для чего нужны ...</title>
    <published>2011-07-21T06:52:57Z</published>
    <updated>2011-07-21T06:52:57Z</updated>
    <author>
      <name>vader</name>
      <uri>https://stocksharp.ru/users/28223/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">MainWindow.Instance.Trader.RegisterOrder(order); я использую для регистрации заявки. &lt;br /&gt;&lt;br /&gt;Для чего нужны эти блокировки (waitHandle.WaitOne();...)?&lt;br /&gt;Для того. чтобы знать, что заявки исполнена. Блокировка снимается, когда происходит событие получения новой сделки.&lt;br /&gt;Добавление в коллекцию - для того, чтобы отображать собственные заявки.&lt;br /&gt;Удаляю я не активные заявки.&lt;br /&gt;&lt;br /&gt;Это делается не внутри класса Strategy.&lt;br /&gt;public ObservableCollection&amp;lt;MyTrade&amp;gt; Trades { get; private set; }&lt;br /&gt;public ObservableCollection&amp;lt;Order&amp;gt; Orders { get; private set; }&lt;br /&gt;&lt;br /&gt;По поводу главного вопроса. &lt;br /&gt;Я в цикле сталю заявки, и жду их исполнения, чтобы ставить следующие, опираясь на зену исполнения последней сделки.&lt;br /&gt;Как мне узнать о том, что заявки исполнена?&lt;br /&gt;Раньше я проверял так -  Orders[Orders.Count-1].IsMatched()&lt;br /&gt;Но, видимо, если часть заявки исполняется сразу, то коллекция не успевает обновится и робот, думает, что заявка исполнена, т.к. он видит прошлую, которая уже исполнена.&lt;br /&gt;Я предролагаю, что анонимных метод синхронизированый, но видимо, это не так, иначе бы все заявки и сделки попадлибы в свои коллекции, а потом происходили бы дальнейшие действия.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/9730/</id>
    <title type="text">Про метод AddRange есть на MSDN Совсем не понятно зачем строить такую логику - использовать внутри с...</title>
    <published>2011-07-20T14:46:52Z</published>
    <updated>2011-07-20T14:46:52Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Про метод AddRange &lt;a target="_blank" href="http://msdn.microsoft.com/ru-ru/library/system.collections.arraylist.addrange.aspx" title="http://msdn.microsoft.com/ru-ru/library/system.collections.arraylist.addrange.aspx"&gt;есть на MSDN&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Совсем не понятно зачем строить такую логику - использовать внутри стратегии обращение к MainWindow.Instance.Trader к примеру.&lt;br /&gt;Для чего нужны эти блокировки (waitHandle.WaitOne();...)?&lt;br /&gt;Зачем удалять \ добавлять в коллекции?&lt;br /&gt;&lt;br /&gt;Или же это делается не внутри стратегии (класса Strategy)? Как тогда задеклорированы Trades и Orders?&lt;br /&gt;В любом случае отвечая на вопрос в заголовке - см. MSDN, там есть описание данного метода</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/9728/</id>
    <title type="text">здравствуйте. Пытаюсь реализовать такую стратегию, в которой, цена следующей заявки зависит от цены ...</title>
    <published>2011-07-20T14:24:53Z</published>
    <updated>2011-07-20T14:24:53Z</updated>
    <author>
      <name>vader</name>
      <uri>https://stocksharp.ru/users/28223/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">здравствуйте.&lt;br /&gt;Пытаюсь реализовать такую стратегию, в которой, цена следующей заявки зависит от цены предидущей.&lt;br /&gt;Для этого подпислся на событие получения новых моих сделок, сохраняю их в коллекцию, и получаю цену последней сделки.&lt;br /&gt;Регистрирую заявку, жду когда придет сделка, извлекаю последную сдлку и беру цену.&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

MainWindow.Instance.Trader.RegisterOrder(order);
waitHandle.WaitOne();
						if (_backgroundWorker.CancellationPending){return;}
						_backgroundWorker.ReportProgress(4, order); 						                                curLotBuyNow += Trades[Trades.Count-1].Order.Volume;
						MessageBox.Show(&amp;quot;Id= &amp;quot;+Trades[Trades.Count-1].Order.Id.ToString()+&amp;quot; curLotBuyNow= &amp;quot; + curLotBuyNow.ToString());
						waitHandle.Reset();
						
						price = Math.Min(_priceOfOrder, Trades[Trades.Count-1].Trade.Price);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;При получении сделки, я хочу чтобы сначала, сделки добавились в коллекцию, а потом произошла разблокировка потока и произошло извлечение цены. &lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

MainWindow.Instance.Trader.NewMyTrades += trades =&amp;gt;this.GuiAsync(() =&amp;gt;
			                                                                 {
			                                                                 	lock(this)
			                                                                 	{
			                                                                 		trades = from n in trades
			                                                                 			where (n.Trade.Security == _security) &amp;amp;&amp;amp; (n.Order.ExtensionInfo == &amp;quot;S#&amp;quot;)
			                                                                 			select n;
			                                                                 		int startSize = Trades.Count;
			                                                                 		MessageBox.Show(&amp;quot;startSize= &amp;quot;+startSize.ToString());
			                                                                 		this.Trades.AddRange(trades);
			                                                                 		while(startSize == Trades.Count){
			                                                                 		}
			                                                                 		MessageBox.Show(&amp;quot;Count= &amp;quot;+Trades.Count.ToString());
			                                                                 		//Если по другому инструменту?
			                                                                 		if((Orders.Count != 0) &amp;amp;&amp;amp; Orders[Orders.Count-1].IsMatched()){
			                                                                 			this.Orders.RemoveAt(Orders.Count-1);
			                                                                 			waitHandle.Set();
			                                                                 		}
			                                                                 	}
			                                                                 });
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Но этого не происходит. Часто этот код  curLotBuyNow += Trades[Trades.Count-1].Order.Volume;&lt;br /&gt;извлает предпоследнуюю сделку. Я пытался и цикл ожидания использовать(while(startSize == Trades.Count){}) и lock, но ничего не помогает.&lt;br /&gt;Помогите, пожалуйста, разобратся.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>