Сообщество. StockSharphttps://stocksharp.ru/handlers/atom.ashx?category=community&page=246Copyright @ StockSharp Platform LLC 2010 - 20242024-03-29T07:36:27Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/topic/1691/Ошибки компиляции SampleHistoryTesting2011-06-28T12:32:22Z2011-06-28T12:32:22ZEvgeny_Khttps://stocksharp.ru/users/436/info@stocksharp.ruРешил начать изучение S# c примера SampleHistoryTesting из библиотеки. Хочу его откомпилировать, запустить на исполнение. Щелкнул 2 раза на файле \stocksharp\Sources\SampleHistoryTesting\SampleHistoryTesting.csproj. Открылся проект в среде разработки Visual C#. Выбрал из меню Debug -> Start debugging. На этапе сборки (build) появились 2 ошибки:<br /><hr />Error 1: No overload for method 'GetMarketPrice' takes '1' arguments <br />File: C:\projects-data\asset_management\trading\stocksharp\Sources\SampleHistoryTesting\SmaStrategy.cs<br />Line: 89<br />Column: 45<br />Project: SampleHistoryTesting<br /><br />Error 2: 'StockSharp.Algo.Logging.FileStrategyLogger' does not contain a constructor that takes '1' arguments<br />File: C:\projects-data\asset_management\trading\stocksharp\Sources\SampleHistoryTesting\MainWindow.xaml.cs <br />Line: 145<br />Column: 14<br />Project: SampleHistoryTesting<br /><hr />Наверно библиотеку не подключил? Если "да", то как подключить? Расскажите пожалуйста, как исправить ошибки?<br />https://stocksharp.ru/topic/1690/InvalidOperationException on CancelActiveOrders2011-06-24T09:48:41Z2011-06-24T09:48:41ZGreene-nskhttps://stocksharp.ru/users/27932/info@stocksharp.ruS# 3.2.2<br />OnRunning стратегии отработал, затем через некоторое время стратгия остаавливается по команде Stop().<br /><br /><div class="code"><strong>Код</strong><div class="innercode"><br /> protected override void OnStopping()<br /> {<br /> // останавливаем стратегию<br /> CancelActiveOrders();<br /></div></div><br />выдает ошибку:<br /><br />[OpenWealth.StockSharpStuff.TraderIface.TraderProcessDataError] ERROR: Ошибка обработки данных System.InvalidOperationException: Необходимо вначале зарегистрировать стратегию.<br /> в StockSharp.Algo.Strategies.Strategy.#=qO9f8aq1kTjeDFVJ76l8Ghgpmk4d54yx23bUoYKQ4zgQ=()<br /> в StockSharp.Algo.Strategies.Strategy.#=qbY1VLf1ndhw1ySbYMFFlMk1EBwFfhhlXVwDlmPPrm5I=(SynchronizedSet`1 #=qsOHYLLNTyTTAzbf249xKnQ==)<br /> в StockSharp.Algo.Strategies.Strategy.CancelActiveOrders()<br /> в OpenWealth.StockSharpStuff.StrategyProcessOrder.OnStopping() в D:\home\work\MTS\OpenWealth\StockSharpStuff\StrategyProcessOrder.cs:строка 73<br /> в StockSharp.Algo.Strategies.Strategy.#=qF80M91vO$wL4Q_hdDt07aGyTnplCad9glUG6su24s3s=(StrategyProcessStates #=qVD6DbfnzbeUZEh8lM7LurA==)<br /> в StockSharp.Algo.Strategies.Strategy.Stop()<br /> в OpenWealth.StockSharpStuff.StrategyProcessOrder.OnNewMyTrades(IEnumerable`1 trades) в D:\home\work\MTS\OpenWealth\StockSharpStuff\StrategyProcessOrder.cs:строка 123<br /> в System.Action`1.Invoke(T obj)<br /> в Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)<br /> в StockSharp.Algo.Strategies.Strategy.#=qgTG_0$KM5Yg7McUPQs2zcQ==(IEnumerable`1 #=qjh$R2RcFpRScAswJOGzF1w==)<br /> в StockSharp.Algo.Strategies.Strategy.#=q9bsewFz4W$PBHfAM0ZMdCA==(IEnumerable`1 #=qtkaQTMTL0qEP7i9xTaCc3w==)<br /> в System.Action`1.Invoke(T obj)<br /> в Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)<br /> в StockSharp.Algo.BaseTrader.#=qCShKTbqJTVmmfu48SmdzkIqhq_f$ljv1HDBVbsnofCQ=.#=qoxhUX87tcowE4b51IGMQCg==(IEnumerable`1 #=qhBbuGOwsDBAEQciofJ5UXg==)https://stocksharp.ru/topic/1689/переход на 3.2.2, OnProcess отсутствует2011-06-24T06:30:06Z2011-06-24T06:30:06ZGreene-nskhttps://stocksharp.ru/users/27932/info@stocksharp.ruНе могу догадаться.. Подскажите, пожалуйста.<br /><br />У меня на версии 3.1.10 были стратегии ActionStrategy и для них вызывался <br /><div class="code"><strong>Код</strong><div class="innercode"><br /> protected override StrategyProcessResults OnProcess()<br /> {<br /> // если стратегия в процессе остановки;<br /> if (ProcessState == StrategyProcessStates.Stopping)<br /> {<br /> ...<br /> return StrategyProcessResults.Stop;<br /> }<br /> }<br /></div></div><br /><br />Сейчас этого метода нет. Что делать? Как по задумке сейчас надо отписываться от событий и т.п. при остановке стратегии?https://stocksharp.ru/topic/1688/База стаканов2011-06-23T15:48:00Z2011-06-23T15:48:00Zvslaykovskyhttps://stocksharp.ru/users/28159/info@stocksharp.ruДобрый день. <br /><br />Кто-нибудь может поделиться базой стаканов, сохраненных в Гидре? <br />Можно небезвозмездно. https://stocksharp.ru/topic/1687/Стратегия некорректно вычисляет текущую позицию2011-06-23T07:33:42Z2011-06-23T07:33:42ZAlex Anderhttps://stocksharp.ru/users/710/info@stocksharp.ruСтратегия корректно работает, но иногда некорректно вычисляет текущую позицию.<br />Иногда сбивается через несколько часов работы, иногда (крайне редко) - уже на первой сделке.<br />Ордер выставляется, сделка совершается, подсчет PnL идет верно, а позиция - нулевая (реже - удвоенная).<br /><br />Используется QuikTrader. Дочерних стратегий нет. В работу PnLManager и PositionManager не вмешивался.<br /><br />Stock# 3.1.10.https://stocksharp.ru/topic/1686/[FIXED] TakeProfitStrategy отправляет неправильный ордер2011-06-23T07:18:48Z2011-06-23T07:18:48ZPresidenthttps://stocksharp.ru/users/510/info@stocksharp.ruРазобравшись с <a href="http://stocksharp.com/forum/1684/-BUG--BatchStrategy---Value-cannot-be-null--Parameter-name--security/
" title="http://stocksharp.com/forum/1684/-BUG--BatchStrategy---Value-cannot-be-null--Parameter-name--security/
">http://stocksharp.com/fo...rameter-name--security/
</a><br />наткнулся на другую проблему:<br /><br />var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);<br /><br />в момент срабатывания посылает в QUIK заявку с Price = this.TakeProfitThreshold что существенно ниже лимитов рынка и заявка отвергается:<br /><br />23.06.2011 11:11:00.667 [BS] [BS] [SLS] System.ArgumentException: Транзакции 'ACCOUNT=SPBFUT00al8; CLIENT_CODE=S#; TRANS_ID=40036888; CLASSCODE=SPBFUT; SECCODE=LKU1; QUANTITY=1; OPERATION=B; TYPE=L; ACTION=NEW_ORDER; PRICE=6;' не была зарегистрирована. Причина 'Ошибка создания заявки. [FORTS] "Цена сделки вне лимита".'.<br />Parameter name: transactionTxt<br /> at #=q3C5AM$iq8NbweFUGFWK_sU7Vcw7Z$U4vlB2Hc50kdH4=.#=qLgL84qMEfuN5KhECfgmmVtmEjdZHFTZu$WkBCYieTcI=(String #=qgclQ_YrKOL8W24OU8dAXtQ==, OrderStatus& #=q_xaMqAhWgI5tV2SZaQTgUw==, UInt32& #=q9f$NCAgNEA2P_dgSYQX4ag==, Int64& #=qwVmYFYP0ooLLxsTPLQePQg==, String& #=qR6gf_ntTXrn2yuZ9RSMZLQ==)<br /> at StockSharp.Quik.QuikTrader.#=q4vcoB7VlrVy4GatAp8_nMJ6AYLGi58dOpiGwxMBn6UQ=(Order #=qbn0ghccP_Nk8KrwPARMMqA==, TransactionBuilder #=qxOobaox1SG$xe4kqR2_8ZA==)<br /> at StockSharp.Quik.QuikTrader.OnRegisterOrder(Order order)<br /> at StockSharp.Algo.BaseTrader.RegisterOrder(Order order)<br /> at StockSharp.Algo.Strategies.Strategy.RegisterOrder(Order order)<br /> at StockSharp.Algo.Strategies.QuotingStrategy.#=qFNjSJ7N1u5acr$1keu3nHg==()<br /> at StockSharp.Algo.Strategies.QuotingStrategy.#=qeubD$wKedi$ApPCf6cLO3rlmhGW$ZeerQHKTqhIth$w=.#=qEsRZe$IDBR8A0j$0apLQ$Q==()<br /> at StockSharp.Algo.Strategies.StrategyRule.#=qm8VBf4GDpEbeabai3WtCE_YuhOxfkovbmj6wDnrDrR0=.#=q0OgKPN9vlMKZZIjBhTnAcw==(Object #=q0xxkRlvbFaZQkdN1O3pBCA==)<br /> at StockSharp.Algo.Strategies.StrategyRule.#=qwurDVpnPEgnquLK$nRLn9OHeSuX4XtP79q8cEhLyYMI=.#=qTxwzPP4CbQG2ITMlWDV$_nA93xIudHPYiyO3YFbU4x4=()<br /> at StockSharp.Algo.Strategies.Strategy.#=qIHDBOzkYlc1Ka0H4Q5rQnQ==(StrategyRule #=qsRkj9dGU3TX31YwcXiQefQ==, Action #=qREJnLkxJR0fsGiLETZNSBg==)<br /><br /><br />Environment: S# v3.2.2, QUIKhttps://stocksharp.ru/topic/1685/Ошибки в 3.2.X2011-06-22T17:24:39Z2011-06-22T17:24:39ZRoman0https://stocksharp.ru/users/6034/info@stocksharp.ruПохоже в версии 3.2.2 в Security.BestBid\BestAsk Volume и Price поменялись местамиhttps://stocksharp.ru/topic/1684/[BUG] BatchStrategy - Value cannot be null. Parameter name: security2011-06-22T16:22:45Z2011-06-22T16:22:45ZPresidenthttps://stocksharp.ru/users/510/info@stocksharp.ruпытаюсь использовать TakeProfitStrategy и StopLossStrategy.<br />ловлю событие OnNewTrades и для трейдов которые принадлежат стратегии вызываю метод:<br /><br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
private void CoverTrades(IEnumerable<MyTrade> trades)
{
var batch = new BatchStrategy(BatchFinishModes.All); // { IsParallel = true };
// для каждой сделки добавляем для защиты по пакетной стратегии
foreach (MyTrade t in trades)
{
var s = new BatchStrategy(BatchFinishModes.First);
var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);
//takeProfit.BestPriceOffset = 0m.Pips(t.Order.Security);
//takeProfit.PriceOffset = 0m.Pips(t.Order.Security);
//takeProfit.MaxErrorCount = 2;
//takeProfit.UseMarketQuoting = true;
var stopLoss = new StopLossStrategy(t, this.StopLossThreshold);
//stopLoss.BestPriceOffset = 0m.Pips(t.Order.Security);
//stopLoss.PriceOffset = 0m.Pips(t.Order.Security);
//stopLoss.MaxErrorCount = 2;
//stopLoss.UseMarketQuoting = true;
this.AddInfoLog("Trade is protected. trade price was: {0}", t.Trade.Price);
s.ChildStrategies.Add(takeProfit);
s.ChildStrategies.Add(stopLoss);
batch.ChildStrategies.Add(s);
}
this.ChildStrategies.Add(batch);
}
</pre>
</div></div><br /><br />в последней строчке возникает эксепшн:<br /> Message "Value cannot be null.\r\nParameter name: security" string<br /> StackTrace " at StockSharp.Algo.Strategies.StrategyRuleConditionHelper.#=q5t20hZ5NhMsnLhhoVmupPA==..ctor(Security #=qyOMCKzzXfCVNZ_GTO6s6Mw==)\r\n at StockSharp.Algo.Strategies.StrategyRuleConditionHelper.#=qE_i7$K1H6gPzl54YI1f60g22aN8KJNIzpQoV8M31CwU=..ctor(Security #=qZ_BCqXMY5Y$FSVkvqc$gSQ==)\r\n at StockSharp.Algo.Strategies.StrategyRuleConditionHelper.MarketDepthChanged(Security security)\r\n at StockSharp.Algo.Strategies.QuotingStrategy.OnRunning()\r\n at StockSharp.Algo.Strategies.Strategy.#=qF80M91vO$wL4Q_hdDt07aGyTnplCad9glUG6su24s3s=(StrategyProcessStates #=qVD6DbfnzbeUZEh8lM7LurA==)\r\n at StockSharp.Algo.Strategies.Strategy.#=qXB1Yax1xNzLXbDjRPCi7tCznkY9B4AmNwgAE8teNSnbLKOZ7pea69ymbJ6ftrBi8(Strategy #=qrdDj0efX3T7$tYfaMwHvSQ==)\r\n at Ecng.Collections.CollectionHelper.ForEach[T](IEnumerable`1 source, Action`1 action)\r\n at StockSharp.Algo.Strategies.Strategy.#=q3VsDgMm8EXknr4XwbQrzykk558DdB7AhrA0MenkIG4mOslFGa0jsUnoLXmPep_w$(IStrategyChildStrategyList #=qc8MS2wPBl0aYmiPlK7OPpw==)\r\n at Ecng.Collections.CollectionHelper.SyncDo[TCollection](TCollection collection, Action`1 action)\r\n at StockSharp.Algo.Strategies.Strategy.#=qqFxvsG_qDTMVCsiaiuO627TvkpI1QdJuWpQNBvO9AJ4=()\r\n at StockSharp.Algo.Strategies.Strategy.#=qF80M91vO$wL4Q_hdDt07aGyTnplCad9glUG6su24s3s=(StrategyProcessStates #=qVD6DbfnzbeUZEh8lM7LurA==)\r\n at StockSharp.Algo.Strategies.Strategy.#=qXB1Yax1xNzLXbDjRPCi7tCznkY9B4AmNwgAE8teNSnbLKOZ7pea69ymbJ6ftrBi8(Strategy #=qrdDj0efX3T7$tYfaMwHvSQ==)\r\n at Ecng.Collections.CollectionHelper.ForEach[T](IEnumerable`1 source, Action`1 action)\r\n at StockSharp.Algo.Strategies.Strategy.#=q3VsDgMm8EXknr4XwbQrzykk558DdB7AhrA0MenkIG4mOslFGa0jsUnoLXmPep_w$(IStrategyChildStrategyList #=qc8MS2wPBl0aYmiPlK7OPpw==)\r\n at Ecng.Collections.CollectionHelper.SyncDo[TCollection](TCollection collection, Action`1 action)\r\n at StockSharp.Algo.Strategies.Strategy.#=qqFxvsG_qDTMVCsiaiuO627TvkpI1QdJuWpQNBvO9AJ4=()\r\n at StockSharp.Algo.Strategies.Strategy.#=qF80M91vO$wL4Q_hdDt07aGyTnplCad9glUG6su24s3s=(StrategyProcessStates #=qVD6DbfnzbeUZEh8lM7LurA==)\r\n at StockSharp.Algo.Strategies.Strategy.#=qsJWnJ8ZS9kSeAG1NqJcSp94tYPTlnBSEn47C45iDRy4=.OnAdding(Strategy #=qqSQo0oCIzWI6DLEPymMnJw==)\r\n at Ecng.Collections.BaseCollection`1.Add(T item)\r\n at Ecng.Collections.SynchronizedCollection`1.Add(T item)\r\n at MyTrading.StrategiesLib.LimitStatArb.CoverTrades(IEnumerable`1 trades) in C:\\MyProjects\\MyTrading\\StrategiesLib\\LimitStatArb.cs:line 69\r\n at MyTrading.StrategiesLib.LimitStatArb.Trader_NewMyTrades(IEnumerable`1 trades) in C:\\MyProjects\\MyTrading\\StrategiesLib\\LimitStatArb.cs:line 37\r\n at System.Action`1.Invoke(T obj)\r\n at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)\r\n at StockSharp.Algo.Testing.RealTimeEmulationTrader`1.#=qhrvZySd33X_Q1SUCxf9oHwTQM__bQsMfo6Ro$Vha9u8=(IEnumerable`1 #=q4cgjILI8t5UOKN9_Pe_4AA==)\r\n at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)\r\n at StockSharp.Algo.Testing.MarketEmulator.RaiseNewMyTrades(IEnumerable`1 trades)\r\n at StockSharp.Algo.Testing.MarketEmulator.#=qEs$l0LvYhUYco3GGJLa5Eg==(Order #=qyVorZok67K51uOTgGrDkZg==, Int32 #=qBpUMVYqCJzL6R934ZM7bfw==, Decimal #=q5IDE$gbf5rRP8Otn1c4lGg==)\r\n at StockSharp.Algo.Testing.MarketEmulator.#=q09JR5JSudo6W2SF8rRogNaemQQj9SvO8f6qfU4UJ6X0=(MarketDepth #=qkR4xVruXydpTJT6goOjVUA==, Order #=qOLTChJHz0$_wWdGKO8a6bg==, Quote #=qc62acyKRiEqBWmUljTXhkw==, Boolean #=qYlKiojNUC81EB4Oszvgf62Y9Z_OzVquViVi0HzEnfNk=)\r\n at StockSharp.Algo.Testing.MarketEmulator.#=qY7ZKrEE2PZZbw_nJENCeJITZxF4l1pc9UH2JbVicIcI=(Order #=qsv6eKFrooFYED5AtXg3W5Q==, MarketDepth #=qrb3r5_EyE_lzdjYf1MQESQ==)\r\n at StockSharp.Algo.Testing.MarketEmulator.#=qeAmKRIl9XhEvkcdH_dOhbg==(SynchronizedDictionary`2 #=q41csUsfkEwhy5_L12UKUFw==)\r\n at Ecng.Collections.CollectionHelper.SyncDo[TCollection](TCollection collection, Action`1 action)\r\n at StockSharp.Algo.Testing.MarketEmulator.Emulate()\r\n at StockSharp.Algo.Testing.MarketEmulator.UpdateQuotes(IEnumerable`1 marketDepths)\r\n at StockSharp.Algo.Testing.RealTimeEmulationTrader`1.#=qMpi1M1KJMzur45zCCnhMeb0RCRP7LJozIcjoJQn_TZE=(IEnumerable`1 #=qK1FO3nQWTP8MUVNFADz9nA==)\r\n at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)\r\n at StockSharp.Algo.BaseTrader.#=qCShKTbqJTVmmfu48SmdzkIqhq_f$ljv1HDBVbsnofCQ=.#=qoxhUX87tcowE4b51IGMQCg==(IEnumerable`1 #=qhBbuGOwsDBAEQciofJ5UXg==)" string<br /><br />PS. возможно это как-то связано с <a href="http://stocksharp.com/forum/1683/TraderHelper-ShrinkPrice---Instrumient-imieiet-nulievoi-shagh-tsieny/ " title="http://stocksharp.com/forum/1683/TraderHelper-ShrinkPrice---Instrumient-imieiet-nulievoi-shagh-tsieny/ ">http://stocksharp.com/fo...-nulievoi-shagh-tsieny/ </a>?https://stocksharp.ru/topic/1683/[SOLVED] TraderHelper.ShrinkPrice -> Инструмент имеет нулевой шаг цены2011-06-22T15:29:21Z2011-06-22T15:29:21ZPresidenthttps://stocksharp.ru/users/510/info@stocksharp.ruВ версии 3.2 кусок кода выполнялся нормально:<br />TraderHelper.ShrinkPrice(security, price);<br /><br />а в версии 3.2.2 выдает исключение:<br />"Инструмент имеет нулевой шаг цены.<br />Parameter name: security"<br /><br />и под дебаггером видно что: MinPrice = 0, MinStepPrice=null, MinStepSize=0<br />в Quik в таблице "Инструменты" "Шаг цены" = 1 (инструмент - LKU1@RTS)https://stocksharp.ru/topic/1682/Не работает StopLossStrategy - CurrentBestPrice = 02011-06-22T13:30:12Z2011-06-22T13:30:12ZInsiderHSEhttps://stocksharp.ru/users/6099/info@stocksharp.ruНикак не могу разобраться со стоп-лосс стратегией. Цена инструмента в стакане опускается ниже поога, а стратегия не срабаывает. Посмотрел дебаггером - метод GetNewPrice() все время возвращает 0, CurrentBestPrice также всегда 0, хотя массив из 20 лучших оферов присутствует. У кого-нибудь стратегия работает? Прошу подсказать, в какую сторону копать, замучался уже(https://stocksharp.ru/topic/1681/Изменения в версии 3.2.12011-06-21T22:16:31Z2011-06-21T22:16:31Zl-wayhttps://stocksharp.ru/users/16565/info@stocksharp.ruДобрый день<br /><br />Подскажите, пожалуйста, есть ли где то описание всех изменений и когда будет обновление хелпа?<br /><br />Например, интересует - куда пропал strategymanager и как работать без него?https://stocksharp.ru/topic/1680/Фундаментальный вопрос по использованию2011-06-21T16:31:39Z2011-06-21T16:31:39ZDenhttps://stocksharp.ru/users/6003/info@stocksharp.ruМихаил,<br /><br />почитав темы про стратегии, и в частности <b>ActionStrategy</b>, я понял, что новичкам сложно понять use cases.<br /><br />Если использовать <b>TimeFrameStrategy</b>, то <b>OnProcess()</b> вызывается с частотой согласно значению <b>Interval</b>.<br />Если использовать <b>ActionStrategy</b>, то условие <b>When()</b> проверяется с частотой согласно значению <b>Interval</b>.<br />Т.о. в обоих случаях мы зависим от значения <b>Interval</b>.<br /><br />Допустим, я хочу совершать заявки по событию <b>ITrader.NewTrades</b>. Но это событие никак не коррелирует с фиксированным <b>Interval</b>'ом,<br />и может возникать как каждую миллисекунду (напр. RI), так и раз в 5 мин. (второй эшелон)<br />И получается, что мне не подходит ни <b>OnProcess()</b>, ни <b>When()</b>, и свои активности мне надо писать прямо в обработчике <b>ITrader.NewTrades</b><br /><br />Можно конечно <b>Interval </b>выставить в одну миллисекунду, но это как-то не красиво...<br /><br />Правильно ли я все понимаю или где-то есть ошибки в моих рассуждениях?<br />Или можно все-таки обернуть в <b>When()</b> событие <b>ITrader.NewTrades</b>, так чтобы время проверки не зависело от <b>Interval</b>?<br /><br /><br />P.S. еще раз спасибо за отличную библиотеку и великолепную поддержку!https://stocksharp.ru/topic/1679/round trip подачи заявки через stock# + plaza22011-06-20T11:43:53Z2011-06-20T11:43:53Zvslaykovskyhttps://stocksharp.ru/users/28159/info@stocksharp.ruЗдравствуйте. <br /><br />Подскажите, пожалуйста, какой средний round-trip подачи заявки стоит ожидать сейчас при использовании plaza2+stock# в течение дня на forts при торговле фьючерсом на индекс rts? <br />Quik, подключенный через брокера, показывает ~500ms, что совершенно не устраиваетhttps://stocksharp.ru/topic/1678/Поменял урл у проекта на CodePlex2011-06-19T17:34:54Z2011-06-19T17:34:54ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAAAbncQVTu8T5yVB2LlB47S-tp-C5I90Ke9gFsHRpkIkYs4772shyt5yS-wnjtnsFMQ" title="http://stocksharp.codeplex.com/ ">http://stocksharp.codeplex.com/ </a>По-моему, проще набивать.https://stocksharp.ru/topic/1677/Проблема при тестировании примера SampleGUI2011-06-19T11:21:47Z2011-06-19T11:21:47ZFiNickhttps://stocksharp.ru/users/6053/info@stocksharp.ruТестирую пример SampleGUI, при нажатии кнопки подключится выдается следующая ошибка: <br />{"Не удалось получить фабрику класса COM для компонента с CLSID {43FB494A-620B-4588-A9DD-DB0BE4B6694A} из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))."}<br /><br />Протрассировал, ошибка исходит из конструктора PlazaTrader, внутрь зайти не получается. Такое ощущение, что какая-то библиотечка должна была быть зарегана в GAC, но в исходниках никакая библиотека с таким CLSID не фигурирует. Что это может быть??<br /><br />З.Ы. Буду искать способ зайти в конструктор PlazaTrader, чтоб выудить доп информацию.https://stocksharp.ru/topic/1676/Стратегия работающая с несколькими инструментами и портфелями2011-06-18T19:46:17Z2011-06-18T19:46:17ZPresidenthttps://stocksharp.ru/users/510/info@stocksharp.ruДобрый день.<br /><br />Стратегия работает с несколькими инструментами и портфелями.<br />Как иделологически это правильнее реализовывать на Stock#?<br /><br />Вижу два варианта:<br />1.<br />В MyStrategy добавляется нужное количество полей для содержания всех security и portfolio<br />Вся логика в MyStrategy.OnProcess()<br />При этом поля Strategy.Security и Strategy.Portfolio не используются.<br /><br />2.<br />В MyStrategy добавляются child-стратегии - по одной на каждый инструмент.<br />Вся логика по-прежнему в MyStrategy.OnProcess(), при этом если нужно что-то купить-продать - имплементация этого делается в ChildStrategy.СвойМетод(). А ChildStrategy.OnProcess() насколько я понимаю тут не используется.<br />Алгоритм самой стратегии тут усложняется (лишние сущности без которых можно обойтись) но преимуществом тут наверное может быть использование PnLManager и других классов до изучения которых я еще не добрался.<br /><br />Я пока пользуюсь первым вариантом - но наличие неиспользуемых полей Strategy.Security и Strategy.Portfolio смущает.https://stocksharp.ru/topic/1675/Важное изменение портфелей Stock# для биржи ММВБ2011-06-18T10:47:03Z2011-06-18T10:47:03ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ruРазбираясь с <a href="http://stocksharp.com/forum/1633/Svoistvo-Portfolio-u-position-v-sobytiiakh/" title="http://stocksharp.com/forum/1633/Svoistvo-Portfolio-u-position-v-sobytiiakh/">этой проблемой</a> наткнулся на следующее:<br />у нас сейчас портфель на ММВБ характеризуется Фирмой (для портфеля по бумагам) и Счётом депо (для позициям по бумагам).<br /><br />Судя по документации квика:<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><span class="highlight">Фирма</span> - Код участника торгов в торговой системе</div></div><br /><br />Сейчас загрузил 2 разных квика в Открытии - в обоих квиках фирма одинаковая - MC01396000000.<br />Т.е. это действительно код брокера как участника, а не различный счёт клиентов.<br /><br />Портфели, как мне кажется, должны создаваться по коду клиента - именно они разные для каждого клиента.<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><span class="highlight">Код клиента</span> - Идентификатор клиента в системе QUIK</div></div> - говорится в документации Квика.<br />Т.е. портфель по ссылке выше должен быть один - OPEN408.<br /><br />Именно по этому коду клиента можно сопоставить позицию с текущим портфелем, именно из-за этого приходят портфели, которые приходить не должны.<br /><br /><br />Собственно возникли вопросы:<br />Вопрос к тем кто торгует на мамбе - правильно ли я понял сущность портфелей на бирже ММВБ в квике (сам не торговал акциями с 2008)?<br />Если да, то кто-нибудь кроме Ивана сталкивался с этой проблемой?<br /><br />И если действительно необходимо надо будет создавать портфели по коду клиента, а не по фирме - нужны ли кому-нибудь поля Фирма в таблице Портфель по бумагам и поле Счёт депо в таблице Позиции по бумагам (они, повторюсь, судя по всему характеризуют именно код брокера)?https://stocksharp.ru/topic/1674/Предложение по таблице "Портфель по деривативам"2011-06-18T09:43:49Z2011-06-18T09:43:49ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ruВ настоящее время у нас в Портфель по деривативам выводится предыдущий лимит открытых позиций (записывается в Portfolio.BeginAmount).<br />По документации квика:<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><span class="highlight">Предыд. лимит откр. поз.</span> - Лимит открытых позиций по всем инструментам <b>предыдущей торговой сессии</b> в денежном выражении.</div></div><br /><br />Portfolio.BeginAmount же:<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">Размер денежных средств <b>на начало торговой сессии</b>.</div></div><br /><br />В результате одно получается - на начало предыдущей торговой сессии, другое - на начало текущей торговой сессии.<br />В квике есть замечательный столбец лимит открытых позиций:<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><span class="highlight">Лимит откр. поз.</span> - Текущий лимит открытых позиций по всем инструментам в денежном выражении. Для рынка RTS Standard отображается лимит на покупку спотовых активов.</div></div><br /><br />От себя добавлю - я с самой первой версии у себя заменил пред. лимит откр. поз. на просто лими откр. поз.<br />Он действительно показывает средства на начало текущей сессии - то что и надо.<br />Правда за исключением одного - если на начало текущей сессии было X, а потом с данного счёта вывели или добавили Y, то лимит откр. поз. изменится до <span class="highlight">X +(-) Y</span><br /><br />Что тоже, на мой взгляд, не далеко от истины. К примеру, у вас на начало сессии было 0 рублей, но в течение сессии поступило переведённые вами 100 тысяч рублей - лимит откр. поз. изменится на 100 тысяч.<br /><br /><br /><br />Поэтому у меня предложение - заменить столбец по умолчанию в Портфеле по деривативам с Пред. лимит откр. поз. на Лимит откр. поз.<br />Деньги на начало предыдущей сессии, если они действительно нужны, могут быть выведены в отдельном столбце и получены через ExtensionInfo - всё согласно документации.<br /><br /><br />Как? Возражающих нет?https://stocksharp.ru/topic/1673/Не приходит событие NewMyTrades в MarketQuotingStrategy2011-06-17T13:40:23Z2011-06-17T13:40:23ZInsiderHSEhttps://stocksharp.ru/users/6099/info@stocksharp.ruсабж. Причем по родительской стратегии событие приходит. Я так понимаю, стратегия успевает остановиться перед вызовом этого события. Это так задумано или баг?<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
var strategy = new MyStrategy(Security)
{
Volume = 1,
Portfolio = Portfolio_FORTS,
Trader = this.Trader,
};
strategy.NewMyTrades += t =>
{
MyTrade tr = t.FirstOrDefault();
Debug.WriteLine("Родительская стратегия: Пришла новая сделка - " + DateTime.Now.ToLongTimeString() + " " + tr.ToString());
};
</pre>
</div></div><br />В коде стратеги при получении сигнала прописываю:<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
var order = base.BuyAt(Security.LastTrade.Price);
var qstr = new MyMarketQuotingStrategy(order, 0m.Pips(order.Security), 0m.Pips(order.Security)) { PriceType = MarketPriceTypes.Middle, MaxErrorCount = 1 };
qstr.NewMyTrades += t =>
{
MyTrade tr = t.FirstOrDefault();
Debug.WriteLine("Котирование: Пришла новая сделка - " + DateTime.Now.ToLongTimeString() + " " + tr.ToString());
};
base.ChildStrategies.Add(qstr);
</pre>
</div></div><br />Получаю:<br />Родительская стратегия: Пришла новая сделка - 17:07:56 StockSharp.BusinessEntities.MyTrade<br />Родительская стратегия: Пришла новая сделка - 17:08:17 StockSharp.BusinessEntities.MyTrade<br /><br />Причем иногда сделка по котированию все-таки приходит, иногда с третьего раза, бывает позже.https://stocksharp.ru/topic/1672/Полезные функции2011-06-17T13:36:23Z2011-06-17T13:36:23ZАртем_2https://stocksharp.ru/users/27723/info@stocksharp.ruВсем доброго времени суток! <br />Ради интереса и для обмена опытом написания роботов/приводов под Stock# решил открыть небольшую темку на форуме. Сюда выложу некоторые процедуры и функции, которые использую в своем приводе. Возможно, кто-то почерпнет для себя нечто интересное или готов предложить свои варианты. Программирую на C# не так давно, поэтому код не претендует на нобелевскую премию...<br /><br />1) Процедура для запска Квика с последующей автризацией StartQuikConnection()<br />2) Функция для проверки настроек таблиц<br /><br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
#region QUIK CONNECTION
public static Ecng.Trading.Quik.QuikTrader Trader;
private static Ecng.Trading.Algo.Strategies.StrategyManager StrategyManager;
public delegate void Connected_EventHandler(Boolean IsOK);
public static event Connected_EventHandler Connected;
public static Boolean IsTraderConnected
{
get
{
if (Trader == null || !Trader.IsConnected)
{
return false;
}
else
{
return true;
}
}
}
private static System.Threading.AutoResetEvent _OnTerminalConnectedWaitHandle;
public static void StartQuikConnection()
{
if (IsTraderConnected)
{
Globals.Сообщить("Подключение уже активно!", Globals.СтатусСообщения.Инфо);
}
else
{
//System.Threading.ManualResetEvent waitHandle_ЗапускТерминала = new System.Threading.ManualResetEvent(false);
if (!StartTerminal())
{ return; }
//waitHandle_ЗапускТерминала.WaitOne(60000);
/////////////////////////////////////////////////
try
{
if (!IsTraderConnected)
{
_OnTerminalConnectedWaitHandle = new System.Threading.AutoResetEvent(false);
if (Trader == null) //Если null, регистрируем новый trader
{
Trader = new Ecng.Trading.Quik.QuikTrader(_QuikPath);
Trader.IsAsyncMode = false;
Trader.ConnectionError += OnTraderConnectionError;
//подписываемся на событие успешного подключения
//все действия необходимо производить только после подключения
Trader.Connected += OnTraderConnected;
Trader.Connect();
}
else
{
Trader.Reconnect();
}
_OnTerminalConnectedWaitHandle.WaitOne(10000);
}
}
catch (Exception e)
{
OnConnect(false);
if (Trader != null)
{
Trader.Dispose();
Trader = null;
}
MessageBox.Show("Ошибка при подключении к Quik: " + '\n' + e.Message, "Подключение к QUIK!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private static Boolean StartTerminal()
{
try
{
Ecng.Trading.Quik.QuikTerminal terminal = QuikTerminal.DefaultTerminal;
if (terminal == null || !terminal.IsConnected)
{
Globals.Состояние("Подключение к Quik...");
terminal = QuikTerminal.Get(_QuikPath);
if (!terminal.IsLaunched)
{
Globals.Сообщить("Запускаем Quik <" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + ">", Globals.СтатусСообщения.Инфо);
terminal.Launch();
Globals.Сообщить("Quik запущен <" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + ">", Globals.СтатусСообщения.Инфо);
}
}
else
{
Globals.Сообщить("Найден запущенный Quik", Globals.СтатусСообщения.Инфо);
}
if (terminal == null)
{
return false;
}
if (!terminal.IsConnected)
{
terminal.Login(_QuikLogin, _QuikPassword);
Globals.Сообщить("Авторизация произведена", Globals.СтатусСообщения.Инфо);
}
Globals.Состояние("");
return true;
}
catch (Exception e)
{
Globals.Состояние("");
Globals.Сообщить("Ошибка запуска QUIK: " + e.Message, Globals.СтатусСообщения.Важное);
return false;
}
}
private static void OnConnect(Boolean IsOK)
{
if (Connected != null) Connected(IsOK);
}
public static Boolean CheckDDE()
{
StartQuikConnection();
if (IsTraderConnected)
{
return CheckDDE_OnConnected();
}
else
{
return false;
}
}
private static Boolean CheckDDE_OnConnected()
{
Boolean _resault = true;
Trader.ProcessDataError += OnTraderProcessDataError;
try
{
var _errors = Trader.Terminal.GetTableSettings();
foreach (var _err in _errors)
{
Globals.СтатусСообщения _статус = Globals.СтатусСообщения.Обычное;
if (_err.IsCritical)
{
_статус = Globals.СтатусСообщения.Важное;
_resault = false;
}
Globals.Сообщить(_err.Error.Message, _статус);
}
}
catch
{
_resault = false;
}
finally
{
Trader.ProcessDataError -= OnTraderProcessDataError;
}
return _resault;
}
#region STATIC ОБРАБОТЧИНИК СОБЫТИЙ
private static void OnTraderConnected()
{
_OnTerminalConnectedWaitHandle.Set();
Globals.Сообщить("Подключение было произведено успешно!", Globals.СтатусСообщения.Инфо);
OnConnect(true);
}
private static void OnTraderConnectionError(Exception e)
{
Globals.Сообщить("Ошибка при подключении к Quik: " + e.Message, Globals.СтатусСообщения.Важное);
OnConnect(false);
}
private static void OnTraderProcessDataError(Exception e)
{
Globals.Сообщить("Ошибка при получении/обработке данных с сервера Quik: " + e.Message, Globals.СтатусСообщения.Важное);
}</pre>
</div></div>