не понятен механизм работы метода AddRange~/topic/1755/ne-ponyaten-mehanizm-raboty-metoda-addrange/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-28T14:42:01Zhttps://stocksharp.com/images/logo.pnghttps://stocksharp.com/posts/m/10147/У вас логика работы некорректная. Зачем использовать Trader у MainWindow.Instance ? Ведь он есть у S...2011-08-03T11:36:05Z2011-08-03T11:36:05Zvaderhttps://stocksharp.com/users/28223/info@stocksharp.com<div class="quote"><span class="quotetitle">Alexander <a href="https://stocksharp.com/posts/m/9748/"><img src="https://stocksharp.com/images/icon_latest_reply.gif" title="Go to" alt="Go to" /></a></span><div class="innerquote">У вас логика работы некорректная.<br /><br />Зачем использовать Trader у MainWindow.Instance ? Ведь он есть у Strategy<br /><br />Блокировки не нужны, пользуйтесь событиями и When\Do.<br />Коллекции вообще не нужны. Все сделки есть в Strategy.MyTrades, заявки - Strategy.Orders<br />Эти коллекции - синхронизированные (SynchronizedList и SynchronizedSet соответственно).<br /><br />А вы объявляете свою коллекцию как ObservableCollection и удивляетесь что она не синхронизирована :)<br /><br /><br />А так - надо пользоваться <br />When(order.Matched()).Do(blablabla);<br />When(order.NewTrades()).Do(blablabla);<br /></div></div><br />Alexander? не моглы бы вы прояснить, как правильно использовать коллекции заявок и сделок.<br />я хочу вычтавлять заявки последовательно, онда за другой.<br />Есть условие для высталения завок и дополнительное условие ,заключающееся в том, что пока одна заявка не исполнится, следующая не выставляается.<br />Но списки сделок и заявок не успевают обновится.<br />Допустим в этом методе дожен расчитыватся обший объем купленных лотов ,но из-за того ,что список сделок не успевает дополнится, часто объем считается не верно.<br />К примеру, прошли две сделки объемом 1 и 7, купленный объем посчитается как 2.<br /><div class="code"><strong>Code</strong><div class="innercode"><pre class="brush:csharp">
private bool RecalculateVolume()
{ if(this.MyTrades.Count > 0){
_curLotBuySellNow += this.MyTrades[this.MyTrades.Count-1].Trade.Volume;
//MessageBox.Show(_curLotBuySellNow.ToString() + " Volume= " + this.Volume.ToString());
if (_curLotBuySellNow >= this.Volume){
this.Stop();
return false;
}
}
return true;
}
</pre>
</div></div><br />можно ли как-то заставить все стратегию выполнятся в одном потоке?<br />Атрибут [Synchronization] не помогает.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/9754/esper, да я это видел, но я прошу пример не только стратегии но и её комплексного использования в ро...2011-07-21T08:37:03Z2011-07-21T08:37:03ZAlexanderhttps://stocksharp.com/users/2826/info@stocksharp.com<div class="quote"><span class="quotetitle">vader <a href="https://stocksharp.com/posts/m/9752/"><img src="https://stocksharp.com/images/icon_latest_reply.gif" title="Go to" alt="Go to" /></a></span><div class="innerquote">esper, да я это видел, но я прошу пример не только стратегии но и её комплексного использования в роботе.<br />чтобы было понятно, как с ней работать.</div></div><br /><br />см. SampleSMA.<br />Работа с событийной стратегией ничем не отличается.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/9752/esper, да я это видел, но я прошу пример не только стратегии но и её комплексного использования в ро...2011-07-21T08:32:58Z2011-07-21T08:32:58Zvaderhttps://stocksharp.com/users/28223/info@stocksharp.comesper, да я это видел, но я прошу пример не только стратегии но и её комплексного использования в роботе.<br />чтобы было понятно, как с ней работать.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/9751/Ориентируюся на ваши посты, я понял, что надо писать через стратегии. я видел у вас пример позиционн...2011-07-21T08:25:50Z2011-07-21T08:25:50Zesperhttps://stocksharp.com/users/5990/info@stocksharp.com<div class="quote"><span class="quotetitle">vader <a href="https://stocksharp.com/posts/m/9750/"><img src="https://stocksharp.com/images/icon_latest_reply.gif" title="Go to" alt="Go to" /></a></span><div class="innerquote">Ориентируюся на ваши посты, я понял, что надо писать через стратегии.<br />я видел у вас пример позиционной стратегии(итерационной).<br />Есть ли у вас пример использование и работы с событийной стратегии?( как у вас есть пример SampleSMA)?<br />А то тяжеловато разобратся.</div></div><br /><br />В <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">документации</a> есть примерCopyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/9750/Ориентируюся на ваши посты, я понял, что надо писать через стратегии. я видел у вас пример позиционн...2011-07-21T08:22:26Z2011-07-21T08:22:26Zvaderhttps://stocksharp.com/users/28223/info@stocksharp.comОриентируюся на ваши посты, я понял, что надо писать через стратегии.<br />я видел у вас пример позиционной стратегии(итерационной).<br />Есть ли у вас пример использование и работы с событийной стратегии?( как у вас есть пример SampleSMA)?<br />А то тяжеловато разобратся.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/9748/У вас логика работы некорректная. Зачем использовать Trader у MainWindow.Instance ? Ведь он есть у S...2011-07-21T07:41:01Z2011-07-21T07:41:01ZAlexanderhttps://stocksharp.com/users/2826/info@stocksharp.comУ вас логика работы некорректная.<br /><br />Зачем использовать Trader у MainWindow.Instance ? Ведь он есть у Strategy<br /><br />Блокировки не нужны, пользуйтесь событиями и When\Do.<br />Коллекции вообще не нужны. Все сделки есть в Strategy.MyTrades, заявки - Strategy.Orders<br />Эти коллекции - синхронизированные (SynchronizedList и SynchronizedSet соответственно).<br /><br />А вы объявляете свою коллекцию как ObservableCollection и удивляетесь что она не синхронизирована :)<br /><br /><br />А так - надо пользоваться <br />When(order.Matched()).Do(blablabla);<br />When(order.NewTrades()).Do(blablabla);<br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/9747/MainWindow.Instance.Trader.RegisterOrder(order); я использую для регистрации заявки. Для чего нужны ...2011-07-21T06:52:57Z2011-07-21T06:52:57Zvaderhttps://stocksharp.com/users/28223/info@stocksharp.comMainWindow.Instance.Trader.RegisterOrder(order); я использую для регистрации заявки. <br /><br />Для чего нужны эти блокировки (waitHandle.WaitOne();...)?<br />Для того. чтобы знать, что заявки исполнена. Блокировка снимается, когда происходит событие получения новой сделки.<br />Добавление в коллекцию - для того, чтобы отображать собственные заявки.<br />Удаляю я не активные заявки.<br /><br />Это делается не внутри класса Strategy.<br />public ObservableCollection<MyTrade> Trades { get; private set; }<br />public ObservableCollection<Order> Orders { get; private set; }<br /><br />По поводу главного вопроса. <br />Я в цикле сталю заявки, и жду их исполнения, чтобы ставить следующие, опираясь на зену исполнения последней сделки.<br />Как мне узнать о том, что заявки исполнена?<br />Раньше я проверял так - Orders[Orders.Count-1].IsMatched()<br />Но, видимо, если часть заявки исполняется сразу, то коллекция не успевает обновится и робот, думает, что заявка исполнена, т.к. он видит прошлую, которая уже исполнена.<br />Я предролагаю, что анонимных метод синхронизированый, но видимо, это не так, иначе бы все заявки и сделки попадлибы в свои коллекции, а потом происходили бы дальнейшие действия.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/9730/Про метод AddRange есть на MSDN Совсем не понятно зачем строить такую логику - использовать внутри с...2011-07-20T14:46:52Z2011-07-20T14:46:52ZAlexanderhttps://stocksharp.com/users/2826/info@stocksharp.comПро метод AddRange <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">есть на MSDN</a><br /><br />Совсем не понятно зачем строить такую логику - использовать внутри стратегии обращение к MainWindow.Instance.Trader к примеру.<br />Для чего нужны эти блокировки (waitHandle.WaitOne();...)?<br />Зачем удалять \ добавлять в коллекции?<br /><br />Или же это делается не внутри стратегии (класса Strategy)? Как тогда задеклорированы Trades и Orders?<br />В любом случае отвечая на вопрос в заголовке - см. MSDN, там есть описание данного методаCopyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/9728/здравствуйте. Пытаюсь реализовать такую стратегию, в которой, цена следующей заявки зависит от цены ...2011-07-20T14:24:53Z2011-07-20T14:24:53Zvaderhttps://stocksharp.com/users/28223/info@stocksharp.comздравствуйте.<br />Пытаюсь реализовать такую стратегию, в которой, цена следующей заявки зависит от цены предидущей.<br />Для этого подпислся на событие получения новых моих сделок, сохраняю их в коллекцию, и получаю цену последней сделки.<br />Регистрирую заявку, жду когда придет сделка, извлекаю последную сдлку и беру цену.<br /><div class="code"><strong>Code</strong><div class="innercode"><pre class="brush:csharp">
MainWindow.Instance.Trader.RegisterOrder(order);
waitHandle.WaitOne();
if (_backgroundWorker.CancellationPending){return;}
_backgroundWorker.ReportProgress(4, order); curLotBuyNow += Trades[Trades.Count-1].Order.Volume;
MessageBox.Show("Id= "+Trades[Trades.Count-1].Order.Id.ToString()+" curLotBuyNow= " + curLotBuyNow.ToString());
waitHandle.Reset();
price = Math.Min(_priceOfOrder, Trades[Trades.Count-1].Trade.Price);
</pre>
</div></div><br />При получении сделки, я хочу чтобы сначала, сделки добавились в коллекцию, а потом произошла разблокировка потока и произошло извлечение цены. <br /><div class="code"><strong>Code</strong><div class="innercode"><pre class="brush:csharp">
MainWindow.Instance.Trader.NewMyTrades += trades =>this.GuiAsync(() =>
{
lock(this)
{
trades = from n in trades
where (n.Trade.Security == _security) && (n.Order.ExtensionInfo == "S#")
select n;
int startSize = Trades.Count;
MessageBox.Show("startSize= "+startSize.ToString());
this.Trades.AddRange(trades);
while(startSize == Trades.Count){
}
MessageBox.Show("Count= "+Trades.Count.ToString());
//Если по другому инструменту?
if((Orders.Count != 0) && Orders[Orders.Count-1].IsMatched()){
this.Orders.RemoveAt(Orders.Count-1);
waitHandle.Set();
}
}
});
</pre>
</div></div><br />Но этого не происходит. Часто этот код curLotBuyNow += Trades[Trades.Count-1].Order.Volume;<br />извлает предпоследнуюю сделку. Я пытался и цикл ожидания использовать(while(startSize == Trades.Count){}) и lock, но ничего не помогает.<br />Помогите, пожалуйста, разобратся.Copyright @ StockSharp Platform LLC 2010 - 2024