Сообщество. StockSharphttps://stocksharp.ru/handlers/atom.ashx?category=community&page=183Copyright @ StockSharp Platform LLC 2010 - 20242024-03-29T00:57:54Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/topic/3023/Спасибо за индивидуальное обучение2012-09-20T06:09:34Z2012-09-20T06:09:34ZManager75https://stocksharp.ru/users/6115/info@stocksharp.ruНесколько месяцев назад я решил расширить свой кругозор и попробовать свои силы в алготрейдинге. Торговля на рынке акций не является для меня основным заработком, поэтому нет много времени сидеть у мониторов и активно торговать руками. Тем не менее торговля на рынке очень интересное и отчасти захватывающее занятие, почему бы не попробовать переложить свои мысли на робота. Никакого ранее опыта в программировании на C# у меня не было. Я договорился с Алексеем на курс для новичков и занимался с Артемом в индивидуальном порядке. Такая форма обучения на мой взгляд наиболее продуктивная. Артем прекрасный учитель. Он тщательно рассказывает каждую тему и помогает разобраться во всех вопросах. Одно крупное (3-х часовое) занятие в неделю и домашняя работа помогли приобрести первые навыки программирования на C# и использования библиотеки S#. Конечно же этого далеко не достаточно, чтобы свободно программировать дальше самому хороших роботов. Поэтому я обратился к Алексею и Артему с просьбой, через обучение помочь мне сделать проект, в котором попробовать совместить технический анализ и объемно-вертикальный анализ (см. рисунок). Артем провел ряд занятий со мною, в которых обучая постепенно создал проект, где на тиковом тайфрейме, т.е. в режиме реального времени, формируется вертикальный объем. Очень хорошо, что теперь я понимаю и читаю код, который мы написали. Теперь есть возможность распознать крупные объемы и совместить их с другими элементами Библиотеки S#. По итогам обучения в целом я доволен, потому что приобрел новые знания, которые еще пока не привели к готовому роботу, но сделали эту цель более доступной. Артем и Алексей очень внимательно относятся к своим клиентам, это не бесплатно, но если Вы хотите получить знания для своих будущих проектов, то это стоит того. Теперь немного о том, чего не хватает. Все обучение качественное, но оно все построено по принципу: "В билиотеке есть вот это, а есть вот это". Это очень полезно, но на конечном этапе обучения я бы порекомендовал показывать какой-то (пусть не прибыльный) зато целостный и законченный робот. Код которого содержит все ньюансы многопозиционных входов и выходов из позиции с отслеживанием всех ошибок в нужных местах и как следствии срабатывании необходимых обработчиков событий. Где видно, как планомерно позиция формировалась, умело обходя все исключительные ситуации, и этапами закрывалась. Если бы в руки учеников на конечном этапе обучения попадал такой грамотный пример готового кода робота, то для только что новоиспеченных программистов это был бы хороший образец. В нем Вы, как профессионалы, показали бы какую структуру робота, и что именно необходимо предусмотреть в разных классах проекта, чтобы сбылась мечта: робот работает и не глючит! Мне кажется, что такое обучение давало бы большую уверенность новичкам, как им двигаться дальше самостоятельно.https://stocksharp.ru/topic/3022/Отчет по стратегии2012-09-19T19:25:57Z2012-09-19T19:25:57Zvk37https://stocksharp.ru/users/6296/info@stocksharp.ruСтранный отчет какой-то получаю при тестировании на истории (см. вложение). Не знаю в какую прибыль верить )https://stocksharp.ru/topic/3021/ContinuousSecurity2012-09-19T18:21:25Z2012-09-19T18:21:25Zvk37https://stocksharp.ru/users/6296/info@stocksharp.ruУ меня не работает при тестировании на истории. Определяю так:<br /><div class='spoilertitle'><input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_65c204d61ab744b890437396be92a849');" title='Показать спойлер' /></div><div class='spoilerbox' id='spolier_65c204d61ab744b890437396be92a849' style='display:none'><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
var riu2 = new Security()
{
Id = "RIU2@RTS",
Code = "RIU2",
Name = "РТС фьючерс",
MinStepSize = 5,
MinStepPrice = 2,
Exchange = Exchange.Rts,
};
var riz2 = new Security()
{
Id = "RIZ2@RTS",
Code = "RIZ2",
Name = "РТС фьючерс",
MinStepSize = 5,
MinStepPrice = 2,
Exchange = Exchange.Rts,
};
RtsF = new ContinuousSecurity() { Exchange = Exchange.Rts, Id = "RtsF@RTS", Code = "RtsF" };
RtsF.ExpirationJumps.Add(riu2, DateTime.ParseExact("18.06.2012", "d", CultureInfo.CurrentCulture));
RtsF.ExpirationJumps.Add(riz2, DateTime.ParseExact("18.09.2012", "d", CultureInfo.CurrentCulture));</pre>
</div></div></div><br />Судя по тому, что пишется в дебаг окно, обращение за данными происходит не туда:<br /><div class='spoilertitle'><input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_d65e7c588e274c5588e97b858364e6cf');" title='Показать спойлер' /></div><div class='spoilerbox' id='spolier_d65e7c588e274c5588e97b858364e6cf' style='display:none'><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
Loading 10.09.2012 0:00:00 Loaded Events: 0
FileAccess: D:\DBs\HydraData\Smart\RtsF@RTS\2012_09_10\quotes.bin
Loading 11.09.2012 0:00:00 Loaded Events: 48727
FileAccess: D:\DBs\HydraData\Smart\RtsF@RTS\2012_09_11\quotes.bin
Loading 12.09.2012 0:00:00 Loaded Events: 97454
FileAccess: D:\DBs\HydraData\Smart\RtsF@RTS\2012_09_12\quotes.bin
Loading 13.09.2012 0:00:00 Loaded Events: 146181
FileAccess: D:\DBs\HydraData\Smart\RtsF@RTS\2012_09_13\quotes.bin
Loading 14.09.2012 0:00:00 Loaded Events: 194908
FileAccess: D:\DBs\HydraData\Smart\RtsF@RTS\2012_09_14\quotes.bin</pre>
</div></div></div>https://stocksharp.ru/topic/3020/Живые свечи2012-09-19T12:32:10Z2012-09-19T12:32:10Ztopmanhttps://stocksharp.ru/users/28590/info@stocksharp.ruГоспода, может кто подскажет, как правильно строить свечи real-time, чтобы последняя свеча изменялась при каждой сделке (как в терминалах)? Нигде в документации не нашел стандартных решений.<br />Вот к примеру есть событие<br /><br />series.ProcessCandle += candle => this.GuiAsync(() => wnd.Chart.Candles.Add(candle))<br /><br />оно отрабатывает только при появлении новой свечки. А есть метод отлавливать событие сделки, ну допустим _trader.NewTrades и функция перерисовки последней свечки? <br />ЗЫ. Маньячил пример SampleSmartCandles, ниче не придумал ((https://stocksharp.ru/topic/3019/Падает робот, S# 4.1.32012-09-18T18:29:05Z2012-09-18T18:29:05ZOppositushttps://stocksharp.ru/users/6212/info@stocksharp.ruЗдравствуйте. Сегодня 2 раза ловил падения робота. Оба раза в ситуации, когда приходилось активно передвигать ордер по стакану, гоняясь за ценой.<br /><br />До этого сегодня и вчера двигал ордера этим же кодом - ничего подобного не было. Возможно, Квик чудит. Перезапустил Квик, пока полет нормальный.<br /><br />Перехватить исключение невозможно, потому что возникает не в моем потоке. Предложение - перехватывать его внутри S#, возможно останавливая стратегию, вызвавшую исключение. Хотя, на мой взгляд, тут останавливать слишком жестоко, лучше как-нибудь помягчу разрулить это в SlippageManager'е.<br /><br />1-е падение<br /><br /><div class='spoilertitle'><input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_c6c2237ca3a94307bf1035b4a16822a2');" title='Показать спойлер' /></div><div class='spoilerbox' id='spolier_c6c2237ca3a94307bf1035b4a16822a2' style='display:none'><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:plain">
2012.09.18 21:53:21.903| |QuikTrader|New order: TrId=76599369, Id=8927459062, Dir=Buy, Price=31421, Bal=1, Sec=SiZ2@RTS, State=Active
2012.09.18 21:53:22.106| |QuikTrader|Order changed: TrId=76599369, Id=8927459062, Dir=Buy, Price=31421, Bal=1, Sec=SiZ2@RTS, State=Active
2012.09.18 21:53:22.106| |QuikTrader|Order changed: TrId=76599369, Id=8927459062, Dir=Buy, Price=31421, Bal=1, Sec=SiZ2@RTS, State=Active
2012.09.18 21:53:27.349| |QuikTrader|New order: TrId=76599370, Id=8927460046, Dir=Buy, Price=31444, Bal=1, Sec=SiZ2@RTS, State=Active
2012.09.18 21:53:27.349| |QuikTrader|Order changed: TrId=76599369, Id=8927459062, Dir=Buy, Price=31421, Bal=1, Sec=SiZ2@RTS, State=Done
2012.09.18 21:53:27.349| |TC_SiZ2@RTS_SPBFUT00TE4|Заявка 76599369 больше не активна.
2012.09.18 21:53:27.505|Error |Unhandled Exception|System.ArgumentException: Старая и новая заявки совпадают.
Имя параметра: newOrder
в StockSharp.Algo.Slippage.SlippageManager.ReRegister(Order oldOrder, Order newOrder)
в StockSharp.Algo.Strategies.Strategy.#=qAF$cAaWD8w6Sf0n2jICfhn3SnIpbRRHW0JdqTYJw4BU=.#=q6LA44T$FSqxi6oZ3W2ppWZVAK415i9fMe2wqeMO4F28=()
в StockSharp.Algo.Strategies.Strategy.#=qfgs3t3F0QJo2uAeiNU2Ttpv2pumAF4y2coQRpub6uDk=.#=qg_9r_6HVmeb3crTgbQEYyZG1aCymBtmmqXvLAMXxG1s=()
в StockSharp.Algo.Strategies.Strategy.#=qDi$TOxQqFULo7BC_ufyNgU4LgLgC6leIVgzHqovrf2Y=.#=qGOiRqrNYsm05dsneYckP8g==(Action #=qZ1RO65PUdyczAFAlB5vbMg==)
в StockSharp.Algo.Strategies.Strategy.#=qE_CXVx3b6gFmJBM42_6QlA==(Action #=qWIPEEA7aG$_X1GVNHJoYng==)
в StockSharp.Algo.Strategies.Strategy.AddOrder(Order order)
в Ecng.Collections.CollectionHelper.ForEach[T](IEnumerable`1 source, Action`1 action)
в StockSharp.Algo.Strategies.Strategy.#=qNn0sQmqyvskl1CQs7HRigtztgUyGV$zdYiFLtyiizTg=(IEnumerable`1 #=q5yfL9IqYJgJl09s8Eg_48g==)
в Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
в StockSharp.Xaml.GuiTrader`1.<>c__DisplayClass19.<NewOrdersHandler>b__18()
в Ecng.Xaml.GuiDispatcher.ActionInfo.Process()
в Ecng.Xaml.GuiDispatcher.OnTimerTick(Object sender, EventArgs e)
в System.Windows.Threading.DispatcherTimer.FireTick(Object unused)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
в System.Windows.Threading.DispatcherOperation.InvokeImpl()
в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
в System.Threading.ExecutionContext.runTryCode(Object userData)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Windows.Threading.DispatcherOperation.Invoke()
в System.Windows.Threading.Dispatcher.ProcessQueue()
в System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
в System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
в MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
в System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
в System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
в System.Windows.Application.RunDispatcher(Object ignore)
в System.Windows.Application.RunInternal(Window window)
в System.Windows.Application.Run(Window window)
в System.Windows.Application.Run()
в R2WAR.App.Main() в C:\Users\Oppositus\documents\visual studio 2010\Projects\R2WAR\obj\x86\Debug\App.g.cs:строка 0
в System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
</pre>
</div></div></div><br /><br />2-е падение:<br /><br /><div class='spoilertitle'><input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_1d9a47905d5a49f9b924e0ccdd7743ee');" title='Показать спойлер' /></div><div class='spoilerbox' id='spolier_1d9a47905d5a49f9b924e0ccdd7743ee' style='display:none'><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:plain">
2012.09.18 22:03:53.329| |QuikTrader|New order: TrId=79334510, Id=8927512182, Dir=Sell, Price=31485, Bal=1, Sec=SiZ2@RTS, State=Active
2012.09.18 22:03:53.532| |QuikTrader|Order changed: TrId=79334510, Id=8927512182, Dir=Sell, Price=31485, Bal=1, Sec=SiZ2@RTS, State=Active
2012.09.18 22:03:53.532| |QuikTrader|Order changed: TrId=79334510, Id=8927512182, Dir=Sell, Price=31485, Bal=1, Sec=SiZ2@RTS, State=Active
2012.09.18 22:10:33.774| |QuikTrader|New order: TrId=79334511, Id=8927545315, Dir=Sell, Price=31458, Bal=1, Sec=SiZ2@RTS, State=Active
2012.09.18 22:10:33.774| |QuikTrader|Order changed: TrId=79334510, Id=8927512182, Dir=Sell, Price=31485, Bal=1, Sec=SiZ2@RTS, State=Done
2012.09.18 22:10:33.774| |TC_SiZ2@RTS_SPBFUT00TE4|Заявка 79334510 больше не активна.
2012.09.18 22:10:33.774| |QuikTrader|Order changed: TrId=79334510, Id=8927512182, Dir=Sell, Price=31485, Bal=1, Sec=SiZ2@RTS, State=Done
2012.09.18 22:10:33.805| |QuikTrader|Order changed: TrId=79334511, Id=8927545315, Dir=Sell, Price=31458, Bal=1, Sec=SiZ2@RTS, State=Active
2012.09.18 22:10:33.805| |QuikTrader|Order changed: TrId=79334511, Id=8927545315, Dir=Sell, Price=31458, Bal=1, Sec=SiZ2@RTS, State=Active
2012.09.18 22:10:33.898|Error |Unhandled Exception|System.ArgumentException: Старая и новая заявки совпадают.
Имя параметра: newOrder
в StockSharp.Algo.Slippage.SlippageManager.ReRegister(Order oldOrder, Order newOrder)
в StockSharp.Algo.Strategies.Strategy.#=qAF$cAaWD8w6Sf0n2jICfhn3SnIpbRRHW0JdqTYJw4BU=.#=q6LA44T$FSqxi6oZ3W2ppWZVAK415i9fMe2wqeMO4F28=()
в StockSharp.Algo.Strategies.Strategy.#=qfgs3t3F0QJo2uAeiNU2Ttpv2pumAF4y2coQRpub6uDk=.#=qg_9r_6HVmeb3crTgbQEYyZG1aCymBtmmqXvLAMXxG1s=()
в StockSharp.Algo.Strategies.Strategy.#=qDi$TOxQqFULo7BC_ufyNgU4LgLgC6leIVgzHqovrf2Y=.#=qGOiRqrNYsm05dsneYckP8g==(Action #=qZ1RO65PUdyczAFAlB5vbMg==)
в StockSharp.Algo.Strategies.Strategy.#=qE_CXVx3b6gFmJBM42_6QlA==(Action #=qWIPEEA7aG$_X1GVNHJoYng==)
в StockSharp.Algo.Strategies.Strategy.AddOrder(Order order)
в Ecng.Collections.CollectionHelper.ForEach[T](IEnumerable`1 source, Action`1 action)
в StockSharp.Algo.Strategies.Strategy.#=qNn0sQmqyvskl1CQs7HRigtztgUyGV$zdYiFLtyiizTg=(IEnumerable`1 #=q5yfL9IqYJgJl09s8Eg_48g==)
в Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
в StockSharp.Xaml.GuiTrader`1.<>c__DisplayClass19.<NewOrdersHandler>b__18()
в Ecng.Xaml.GuiDispatcher.ActionInfo.Process()
в Ecng.Xaml.GuiDispatcher.OnTimerTick(Object sender, EventArgs e)
в System.Windows.Threading.DispatcherTimer.FireTick(Object unused)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
в System.Windows.Threading.DispatcherOperation.InvokeImpl()
в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
в System.Threading.ExecutionContext.runTryCode(Object userData)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Windows.Threading.DispatcherOperation.Invoke()
в System.Windows.Threading.Dispatcher.ProcessQueue()
в System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
в System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
в MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
в System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
в System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
в System.Windows.Application.RunDispatcher(Object ignore)
в System.Windows.Application.RunInternal(Window window)
в System.Windows.Application.Run(Window window)
в System.Windows.Application.Run()
в R2WAR.App.Main() в C:\Users\Oppositus\documents\visual studio 2010\Projects\R2WAR\obj\x86\Debug\App.g.cs:строка 0
в System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
</pre>
</div></div></div><br />https://stocksharp.ru/topic/3015/DeltaHedgeStrategy выдает эксепшен2012-09-17T09:47:48Z2012-09-17T09:47:48Zpehashttps://stocksharp.ru/users/340/info@stocksharp.ruВсем привет!<br /><br />Не работает хеджирование через DeltaHedgeStrategy<br />Возможно, это глюк библиотеки? Делал по хелпу. <br /><br />Стратегия создается так<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
var hedge = new DeltaHedgeStrategy
{
Trader = Trader,
Portfolio = portfolio,
Security = optionDesk.BaseAsset
};
var quoting = new VolatilityQuotingStrategy(direction, VolBox.Text.To<decimal>(), volRange)
{
Trader = Trader,
Portfolio = portfolio,
Security = option.BS,
Volume = VolBox.Text.To<decimal>()
};
hedge.ChildStrategies.Add(quoting);
hedge.Start();
</pre>
</div></div><br /><br />В логе получаю такое<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
DHS_RIU2@RTS_ST30053-RF-01 | 17.09.2012 13:33:37.952 | | Стратегия запущена.
DHS_RIU2@RTS_ST30053-RF-01 | 17.09.2012 13:33:37.967 | Ошибка | System.InvalidOperationException: Используется автоматическая генерация имени стратегии. Ручное изменение не допускается.
в StockSharp.Algo.Strategies.StrategyNameGenerator.set_Value(String value)
в StockSharp.Algo.Strategies.Strategy.set_Name(String value)
в StockSharp.Algo.Strategies.HedgeStrategy.#=qfYJz2ab1REsodN_yROhAgg==..ctor(Security #=qvrY2HDT6raHK0CK0Be65Ng==)
в StockSharp.Algo.Strategies.HedgeStrategy.OnStarted()
в StockSharp.Algo.Strategies.Strategy.#=qPumxDV5SBHuCYTq_cqUWVTizHkIhg6MP_9mOGwi1SYU=(ProcessStates #=qeRNChQaniV4oK7zWNidypQ==)
VQS_ST30053-RF-01 | 17.09.2012 13:33:37.967 | | Стратегия останавливается.
VQS_ST30053-RF-01 | 17.09.2012 13:33:37.967 | Внимание | Заканчиваем котирование с неисполненным объемом равный 1.
VQS_ST30053-RF-01 | 17.09.2012 13:33:37.967 | | Ожидание снятия всех активных заявок.
DHS_RIU2@RTS_ST30053-RF-01 | 17.09.2012 13:33:37.967 | | Стратегия останавливается.
DHS_RIU2@RTS_ST30053-RF-01 | 17.09.2012 13:33:37.967 | | Ожидание снятия всех активных заявок.
VQS_ST30053-RF-01 | 17.09.2012 13:33:37.967 | | Стратегия остановлена.
DHS_RIU2@RTS_ST30053-RF-01 | 17.09.2012 13:33:37.967 | | Стратегия остановлена.
</pre>
</div></div><br /><br />Соответственно из-за ошибки стратегии хеджирования, котирование сворачивается и заявка не отрабатывает. https://stocksharp.ru/topic/3014/История стаканов и сделок по Фьючерсу РТС2012-09-17T07:44:20Z2012-09-17T07:44:20Zlongtradeshttps://stocksharp.ru/users/6094/info@stocksharp.ruКоллеги , поделитесь, плиз, историей по фьючу РТС( стаканы и сделки ) что б можно было потестить робота хотя бы месяц-два в прошлом .<br /><br />Спасибо.https://stocksharp.ru/topic/3013/Что с MarketRuleHelper.Stopping(Strategy)?2012-09-16T16:43:05Z2012-09-16T16:43:05ZInsiderHSEhttps://stocksharp.ru/users/6099/info@stocksharp.ruПочему в 4.1.3 больше нет MarketRuleHelper.Stopping(Strategy)?https://stocksharp.ru/topic/3012/Как работает ReRegisterOrder() ?2012-09-16T11:41:48Z2012-09-16T11:41:48ZNattyDhttps://stocksharp.ru/users/687/info@stocksharp.ruЗаметил, что при невозможности замене заявки (например, заявка уже исполнена, но квик об этом еще не знает), в лог выводится ошибка, старая естественно не снимется, но новая все равно регистрируется. <br />Как изменить такое поведение, чтобы новая заявка не отправлялась? Или это происходит не на уровне S#?<br /><br />При замене заявки, если меняется только цена, то в параметрах транзакции будет MODE=0; ?<br /><br />S# 4.1.3 Quik 6.3 IsSupportAtomicReRegister = true;<br /><br />Заранее спасибо за ответ!https://stocksharp.ru/topic/3011/QUIK+Гидра+робот на S#2012-09-15T20:45:13Z2012-09-15T20:45:13ZDrChemisthttps://stocksharp.ru/users/6376/info@stocksharp.ruНачал разбираться с библиотекой.<br />Возникла такая задача.<br />Работаю с терминалом QUIK.<br /><br />Мне нужно чтобы одновременно с ОДНИМ терминалом работало две программы:<br /><br />Гидра: записывает массивы исторических данных, больше от нее пока не требуется. Его задача – записать все без разрывов и остановок.<br />Робот или привод на базе S#. Он работает время от времени. Иногда его нужно закрывать. Иногда вместо одного привода нужно запускать другой. В общем, смысл в том что программа привода запущена не всегда.<br /><br />Вопрос в том, как сделать так, чтобы это все могло работать одновременно и друг другу не мешать.<br /><br />Для примера можно попытаться одновременно запустить<br />Samples\Quik\Sample\bin\Debug\Sample.exe<br />И<br />Hydra\Hydra\bin\Debug\Hydra.exe<br />Вместе они работать не будут, потому что им нужны одни и те же таблицы в квике.<br /><br />Я пытаюсь сделать это путем создания разных таблиц для S# и для Гидры.<br />Почти получилось – инструменты и сделки работают. <br />Для этого я всего лишь переделал <br /> public HydraQuikTrader(string path, string ddeServer) : base(path)<br /> {<br /> DdeServer = ddeServer;<br /> SecuritiesTable.Caption = "HYDRA инструменты";<br /> TradesTable.Caption = "HYDRA Все сделки";<br /> base.SecurityIdGenerator.Delimiter = "$";<br /> }<br /><br />И переименовал таблицы в квике.<br />Но проблемы со стаканами решить не могу. <br />Строка base.SecurityIdGenerator.Delimiter = "$";<br />Проблему не решает – почему-то используется прежний разделитель "@"<br />Кроме того, почему-то S# не допускает двух стаканов в квике по одному инструменту, хотя это возможно.<br /><br />Как поступить?<br />https://stocksharp.ru/topic/3010/Технические работы на сервере2012-09-14T22:14:40Z2012-09-14T22:14:40ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru...будут в эти выходные. Временно не будет работать сайт + форум. Всем хороших выходных отдохнуть от роботов![rolleyes] https://stocksharp.ru/topic/3009/ChildStrategies.AddRange() не доступен2012-09-14T16:34:32Z2012-09-14T16:34:32ZКотhttps://stocksharp.ru/users/27694/info@stocksharp.ruДоброго времени суток!<br /><br />При попытке использования TakeProfit и StopLoss возникла проблема...<br /><br /><br /><br /><br /> <div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
var protectiveStrategies = trades.Select(t =>
{
// выставляет тейк-профит в 40 пунктов
var takeProfit = new TakeProfitStrategy(t, 40);
// выставляет стоп-лосс в 20 пунктов
var stopLoss = new StopLossStrategy(t, 20);
return new TakeProfitStopLossStrategy(takeProfit, stopLoss);
});
[h]ChildStrategies.AddRange(protectiveStrategies);[/h]</pre>
</div></div><br /><br /><span class="highlight"><span style="color:red">""StockSharp.Algo.Strategies.IStrategyChildStrategyList" не содержит определения для "AddRange" и не был найден метод расширения "AddRange", принимающий тип "StockSharp.Algo.Strategies.IStrategyChildStrategyList" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)"</span></span>... <br /><br />Подцепляю.:<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
using StockSharp.Algo;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Indicators;
using StockSharp.Algo.Indicators.Trend;
using StockSharp.Algo.Logging;
using StockSharp.Algo.Strategies;
using StockSharp.Algo.Testing;
using StockSharp.BusinessEntities;</pre>
</div></div><br /><br />Подскажите пожалуйста что я не подцепил....https://stocksharp.ru/topic/3008/Стакан в смарте по RIU22012-09-14T09:27:23Z2012-09-14T09:27:23Zvk37https://stocksharp.ru/users/6296/info@stocksharp.ruОчередь из продавцов отсутствует: только покупатели )https://stocksharp.ru/topic/3007/Сомнения в валидности маркет данных2012-09-14T08:14:36Z2012-09-14T08:14:36Zvk37https://stocksharp.ru/users/6296/info@stocksharp.ruКачаю маркет данные со смарта.<br />Простая стратегия <br /><div class='spoilertitle'><input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_4f56df6289454944a7d3deae9c692eb3');" title='Показать спойлер' /></div><div class='spoilerbox' id='spolier_4f56df6289454944a7d3deae9c692eb3' style='display:none'><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
using StockSharp.Algo;
using StockSharp.Algo.Logging;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;
namespace AlgoTrading.Strategies.Development
{
public class MarketDepthSkeleton : Strategy
{
private Order _order;
private bool _canProcess = true;
protected override void OnStarted()
{
Security
.WhenMarketDepthChanged()
.Do(ProcessDepth)
.Apply(this);
base.OnStarted();
}
private void ProcessDepth(MarketDepth depth)
{
if (_canProcess)
{
_canProcess = false;
var orderDirection = _order == null ? OrderDirections.Buy : _order.Direction.Invert();
_order = this.CreateOrder(orderDirection, depth.GetCurrentPrice(orderDirection).Value);
this.AddInfoLog("Вход в направлении {0} по цене {1}", _order.Direction, _order.Price);
var strategy = new MarketQuotingStrategy(_order, new Unit(1, UnitTypes.Step, Security),
new Unit(1, UnitTypes.Step, Security))
{ Volume = Volume };
strategy.WhenStopped().Do(() => _canProcess = true).Apply(this);
ChildStrategies.Add(strategy);
}
}
}
}</pre>
</div></div></div><br />дает следующий график доходности (см прикрепленный файл).<br />Подскажите, пожалуйста, куда посмотреть, чтобы поправить маркет данные?<br />https://stocksharp.ru/topic/3006/StopLoss и тестирование на истории2012-09-12T17:24:42Z2012-09-12T17:24:42ZGiihttps://stocksharp.ru/users/5912/info@stocksharp.ruДобрый день!<br />Суть проблемы, начиная с версии StockSharp 4.1.3 (далее SS) не работает StopLoss,причем только с EmulationTrader. Более корректно - при включенном IsTrailing = true, StopLoss ведет себя как будто IsTrailing отключен. Конечно это суждение основанное только на результатах теста, что реально происходит мне неизвестно.<br />1. Для приготовления теста взят "SampleHistoryTesting" "SS 4.1.4" из него удален класс SmaStrategy и вставлен простой класс для тестирования StopLoss приведенный ниже. <br />2. Тестирование проводилось на всех SS начиная с версии "SS 4.1.2" и заканчивая "SS 4.1.4 bild 19213" <br />3. Тестирование проводилось на одних и тех же данных "SBER@EQBR" 02.05.12 по 10.08.12. Тиковые сделки получены через программу "Hydra (SS 4.1.3)", а так же "RIU9@RTS"<br />4. Тестирование проводилось с разными значениями ProtectiveLevel начиная с минимального =Security.MinStepSize.<br />5. Для исключения влияния характера исходных данных на полученный результат менялась дата начала теста. Картина в целом оставалась такой же, менялось только количество сделок StopLoss стратегии совершенных в начале тестирования.<br /><br />Результаты тестирования<br />1. В версии "SS 4.1.2" получен адекватный результат, ниже приведен фрагмент лога и картинка работы стратегии<br />2. Начиная с версии "SS 4.1.3" результаты были повторяющимися но не соответствующими ожиданиям в приведенном ниже логе и на картинке видно как StopLoss срабатывает один раз а затем после следующей сделки находясь в активном режиме не реагирует на изменение цены даже при ProtectiveLevel=Security.MinStepSize.<br /><br />С уважением GII <br /><br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
using System;
using System.Collections.Generic;
using System.Linq;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Logging;
using StockSharp.Algo;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;
namespace SampleHistoryTesting
{
class MyStopLossStrategy : Strategy
{
private readonly CandleSeries _series;
private readonly TimeSpan _timeFrame;
private Exchange _excheng;
private Random _random;
private Order _order=new Order();
private static readonly object Locker = new object ();
public MyStopLossStrategy( CandleSeries series, TimeSpan timeFrame )
{
_series = series;
_timeFrame = timeFrame;
}
protected override void OnStarted()
{
_excheng = Security.Exchange;
_series
.WhenCandlesFinished ()
.Do ( ProcessCandle ).Apply ( this );
// Инициализируем генератор случ величин
_random = new Random ( 1 );
base.OnStarted ();
}
private void ProcessCandle( Candle candle )
{
/* Три условия вхождения в сделку
* 1. пришла последняя свечка
* 2. Protective стратегия больше не активна
*/
var lastTime = _timeFrame.GetCandleBounds ( Trader.GetMarketTime (_excheng) ).Min - _timeFrame;
#region InfoLog
this.AddInfoLog(string.Format("LastTime / candle.OpenTime // {0} / {1} //", lastTime, candle.OpenTime));
this.AddInfoLog(string.Format("StopLoss (активна -true) = {0}", IsActiveChildStrat()));
#endregion
lock (Locker)
{
//var lastTime = Trader.GetMarketTime ( _excheng );
//var endInterval = candle.CloseTime + TimeSpan.FromSeconds ( 5 );
if (lastTime <= candle.OpenTime)
{
if (_order.State == OrderStates.Active) CancelActiveOrders ();
if (!IsActiveChildStrat ())
{
_order = null;
// Определяем направление сделки
var rd = 1 - 2 * _random.NextDouble (); // -1 < rd < 1
var direction = OrderDirections.Sell;
if (rd >= 0) direction = OrderDirections.Buy;
_order = this.CreateOrder ( direction, (decimal)Security.GetCurrentPrice ( direction ), Volume );
//Обрабатываем новые сделки только от _order.
_order.WhenNewTrades ().Do ( NewMyTrade ).Apply ( this );
RegisterOrder ( _order );
this.AddOrderInfoLog ( _order, "" );
}
}
}
}
private void NewMyTrade( IEnumerable<MyTrade> trades )
{
try
{
lock (Locker)
{
var trade = trades.Last ();
var sl = new StopLossStrategy ( trade, (int)UnitTypes.Absolute )
{
IsTrailing = true,
ProtectiveLevel =Security.MinStepSize,
Security = Security,
};
// Удоляем следы работы дочерней стратегии
sl.WhenStopped ().Do ( strategy =>
{
ChildStrategies.Remove ( strategy );
this.AddInfoLog ( string.Format ( "Кол. StopLoss активных стратегий = {0}",ChildStrategies.Count));
} ).Once ().Apply ( this );
ChildStrategies.Add ( sl );
this.AddInfoLog ( string.Format ( "ProtectivePrice / ProtectiveDirection= //{0} / {1} ", sl.ActivationPrice.ToString("F2"), sl.ProtectiveDirection.ToString() ) );
this.AddInfoLog ( string.Format ( "StopLoss = {0}", sl.IsActivated.ToString() ) );
}
}
catch (Exception e)
{
this.AddErrorLog ( string.Format ( "<NewMyTrade> Err {0}", e ) );
}
}
/* Метод проверяет активность одной из нескольких стратегий,
* если хотя бы одна активна возвращает true
*/
public bool IsActiveChildStrat()
{
try
{
if (ChildStrategies.Count == 0) return false;
if (ChildStrategies.Count > 0) return true;
/*
if (ChildStrategies.Any ( childStrategy => childStrategy.ProcessState == ProcessStates.Started || childStrategy.ProcessState == ProcessStates.Stopping ))
{
return true;
}
*/
}
catch (Exception e)
{
this.AddErrorLog ( string.Format ( "<IsActiveChildStrat> Err {0}", e ) );
}
return false;
}
protected override void OnStopping()
{
//останавливаем все доч. стратегии
foreach (var str in ChildStrategies) { str.Stop (); }
ChildStrategies.Clear ();
CancelActiveOrders ();
base.OnStopping ();
}
}
}
</pre>
</div></div><br /><a href='httpsfile:///C:/Users/Gii/Desktop/SS%204-1-2.jpg' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="http://file:///C:/Users/Gii/Desktop/SS%204-1-2.jpg" style='max-width: 600px;' alt=""/></a>https://stocksharp.ru/topic/3005/Как работать с StrategyInfo2012-09-12T16:38:24Z2012-09-12T16:38:24ZВалентин Мирошниченкоhttps://stocksharp.ru/users/6156/info@stocksharp.ruЗдравствуйте. Нашел в StockSharp.Algo.Storages класс StrategyInfo правильно ли я понимаю, что с помощью него можно сохранить состояние стратегии. И если да то, как с ним работать? В описании к апи нет, не одного примера и гугл не выдаёт нечего путного.https://stocksharp.ru/topic/3004/Как исполнить опцион через S#2012-09-12T12:01:41Z2012-09-12T12:01:41Zvaderhttps://stocksharp.ru/users/28223/info@stocksharp.ruМожно ли как-то отдать приказ об исполнении опциона через S# ?https://stocksharp.ru/topic/3003/Ошибка при построении графика2012-09-11T14:11:22Z2012-09-11T14:11:22Zqpilehttps://stocksharp.ru/users/6397/info@stocksharp.ruДобрый день!<br />В таймере постоянно обновляю график. Через некоторое время вылазиет такая ошибкаhttps://stocksharp.ru/topic/3002/Приходят мои сделки у которых в ордере Id равно нулю.2012-09-11T09:29:34Z2012-09-11T09:29:34ZMaximhttps://stocksharp.ru/users/6182/info@stocksharp.ruДобрый день.<br />Иногда в событии NewMyTrades приходят сделки, у которых значение в ордере Id равно нулю.<br /><br />В исходниках плазы нашел вот это место, касающееся МоихСделок:<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
if (orderTransactionId != 0)
{
AddMyTrade(security, 0, orderTransactionId, trade);
}
</pre>
</div></div><br /><br />Это баг или фича?https://stocksharp.ru/topic/3001/MarketQuotingStrategy2012-09-10T16:56:49Z2012-09-10T16:56:49Zvk37https://stocksharp.ru/users/6296/info@stocksharp.ruТоргую 6 контрактов RIU2 через MarketQuotingStrategy на смарте. При срабатывании сигнала на покупку робот выставляет 6 заявок. 6-я заявка выставляется через 2-3-4 сек после первой. Долгая получается реакция на сигнал ) Это нормальное поведение для MarketQuotingStrategy? Или я что-то недонастроил? Возможно ли выставлять одну заявку на 6 контратов, а не 6?