Помогите разобраться с TakeProfitStrategy...~/topic/2159/pomogite-razobratsya-s-takeprofitstrategy___/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-29T05:08:24Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/posts/m/14198/Правильно понял? Сделал следующим образом: _secRIZ1.Exchange.IsSupportAtomicReRegister = false; orde...2011-12-02T09:51:03Z2011-12-02T09:51:03ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ru<div class="quote"><span class="quotetitle">profts <a href="https://stocksharp.ru/posts/m/14006/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">Правильно понял? Сделал следующим образом:<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />_secRIZ1.Exchange.IsSupportAtomicReRegister = false;<br /> order_buy1 = this.CreateOrder(OrderDirections.Buy, _secRIZ1.BestAsk.Price, 1);<br /> order_buy1.Security = _secRIZ1;<br /><br />var strategy1 = new MarketQuotingStrategy(order_buy1, 1, 5);<br /> strategy1.Security = _secRIZ1;<br /> <br /> base.ChildStrategies.Add(strategy1);<br /><br /> this<br /> .When(strategy1.StrategyNewMyTrades())<br /> <br /> .Do(Takeprofit1);<br /></div></div><br /><br />В итоге след лог:<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />12:35:54.283 | | OS | Стратегия запущена.<br />12:36:05.438 | | OS | лонг<br />12:36:05.446 | | MQS | Стратегия запущена.<br />12:36:06.276 | | MQS | Регистрация новой заявки на Buy с ценой 145005 и объемом 1.<br />12:36:06.293 | | MQS | Заявка 45347685 на Buy отправлена с ценой 145005 объемом 1.<br />12:36:07.134 | | OS | Новая Buy сделка 460581557 по цене 145005 на 1 заявки 45347685.<br />12:36:07.138 | | MQS | Котируемая заявка 45347685 исполнилась.<br />12:36:07.138 | | MQS | Регистрация новой заявки на Buy с ценой 145005 и объемом 1.<br />12:36:07.141 | | MQS | Заявка 45347686 на Buy отправлена с ценой 145005 объемом 1.<br />12:36:07.145 | | MQS | Позиция изменилась на 1.<br />12:36:07.145 | | MQS | Заканчиваем котирование с неисполненным объемом равный 0.<br />12:36:07.147 | | MQS | Стратегия останавливается.<br />12:36:07.149 | | MQS | Заканчиваем котирование с неисполненным объемом равный 0.<br />12:36:07.149 | | MQS | Заканчиваем котирование с неисполненным объемом равный 0.<br />12:36:07.151 | | MQS | Стратегия остановлена.<br /></div></div><br /><br />Сделка продит два раза - первый из основной стратегии, второй раз из котирования. Плюс не срабатывает событие новых сделок по стратегии. </div></div><br /><br />Будет фикс для защитных стратегий.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/14197/Обновитесь до 4.0.7 с codeplex2011-12-02T09:47:48Z2011-12-02T09:47:48ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ruОбновитесь до 4.0.7 с codeplexCopyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/14032/Обновился до 4.0.6. Котирование вообще перестало работать. order_buy1 = this.CreateOrder(OrderDirect...2011-11-28T14:10:02Z2011-11-28T14:10:02Zproftshttps://stocksharp.ru/users/6174/info@stocksharp.ruОбновился до 4.0.6.<br />Котирование вообще перестало работать. <br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />order_buy1 = this.CreateOrder(OrderDirections.Buy, base.Security.BestAsk.Price, 1);<br />var strategy1 = new MarketQuotingStrategy(order_buy1, new Unit(5), new Unit(5));<br />base.ChildStrategies.Add(strategy1);<br /></div></div><br /><br />Лог:<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />17:28:14.692 | | OS | Стратегия запущена.<br />17:28:35.209 | | MQS | Стратегия запущена.<br /></div></div><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/14006/Правильно понял? Сделал следующим образом: _secRIZ1.Exchange.IsSupportAtomicReRegister = false; orde...2011-11-28T08:47:16Z2011-11-28T08:47:16Zproftshttps://stocksharp.ru/users/6174/info@stocksharp.ruПравильно понял? Сделал следующим образом:<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />_secRIZ1.Exchange.IsSupportAtomicReRegister = false;<br /> order_buy1 = this.CreateOrder(OrderDirections.Buy, _secRIZ1.BestAsk.Price, 1);<br /> order_buy1.Security = _secRIZ1;<br /><br />var strategy1 = new MarketQuotingStrategy(order_buy1, 1, 5);<br /> strategy1.Security = _secRIZ1;<br /> <br /> base.ChildStrategies.Add(strategy1);<br /><br /> this<br /> .When(strategy1.StrategyNewMyTrades())<br /> <br /> .Do(Takeprofit1);<br /></div></div><br /><br />В итоге след лог:<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />12:35:54.283 | | OS | Стратегия запущена.<br />12:36:05.438 | | OS | лонг<br />12:36:05.446 | | MQS | Стратегия запущена.<br />12:36:06.276 | | MQS | Регистрация новой заявки на Buy с ценой 145005 и объемом 1.<br />12:36:06.293 | | MQS | Заявка 45347685 на Buy отправлена с ценой 145005 объемом 1.<br />12:36:07.134 | | OS | Новая Buy сделка 460581557 по цене 145005 на 1 заявки 45347685.<br />12:36:07.138 | | MQS | Котируемая заявка 45347685 исполнилась.<br />12:36:07.138 | | MQS | Регистрация новой заявки на Buy с ценой 145005 и объемом 1.<br />12:36:07.141 | | MQS | Заявка 45347686 на Buy отправлена с ценой 145005 объемом 1.<br />12:36:07.145 | | MQS | Позиция изменилась на 1.<br />12:36:07.145 | | MQS | Заканчиваем котирование с неисполненным объемом равный 0.<br />12:36:07.147 | | MQS | Стратегия останавливается.<br />12:36:07.149 | | MQS | Заканчиваем котирование с неисполненным объемом равный 0.<br />12:36:07.149 | | MQS | Заканчиваем котирование с неисполненным объемом равный 0.<br />12:36:07.151 | | MQS | Стратегия остановлена.<br /></div></div><br /><br />Сделка продит два раза - первый из основной стратегии, второй раз из котирования. Плюс не срабатывает событие новых сделок по стратегии. Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13973/Попробуйте Security.Exchange.Rts выставить IsSupportAtomicReRegister в false на move посмотрим2011-11-26T19:33:25Z2011-11-26T19:33:25ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ruПопробуйте Security.Exchange.Rts выставить IsSupportAtomicReRegister в false<br />на move посмотримCopyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13962/Выставляю заявку с помощью MarketQuotingStrategy. Объем 1 лот. В итоге проходит покупка 2-х лотов. л...2011-11-25T14:42:39Z2011-11-25T14:42:39Zproftshttps://stocksharp.ru/users/6174/info@stocksharp.ruВыставляю заявку с помощью MarketQuotingStrategy. Объем 1 лот.<br />В итоге проходит покупка 2-х лотов.<br />лог:<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />18:22:42.323 | | OS | Стратегия запущена.<br />18:23:23.043 | | OS | лонг<br />18:23:23.050 | | MQS | Стратегия запущена.<br />18:23:23.475 | | MQS | Регистрация новой заявки на Buy с ценой 138660 и объемом 1.<br />18:23:23.493 | | MQS | Заявка 66144576 на Buy отправлена с ценой 138660 объемом 1.<br />18:23:23.545 | Warning | MQS | Заявка 66144576 не имеет состояния.<br />18:23:23.668 | | MQS | Цена текущей 138660 и лучшей 138670.<br />18:23:23.668 | | MQS | Лучший бид 138665 и лучший аск 138670.<br />18:23:23.668 | | MQS | Котирование заявки 66144576 на Buy с ценой 138660 объемом 1.<br />18:23:23.673 | | MQS | Перекотирование зарегистрировано для заявки 66144577 на Buy с ценой 138670 объемом 1.<br />18:23:23.740 | Error | MQS | Заявка 66144577 не была принята по причине System.InvalidOperationException: Сервер для транзакции 'ACTION=MOVE_ORDERS; TRANS_ID=66144577; CLASSCODE=SPBFUT; SECCODE=RIZ1; MODE=0; FIRST_ORDER_NUMBER=6019530259; FIRST_ORDER_NEW_PRICE=138670; FIRST_ORDER_NEW_QUANTITY=1;' вернул неправильное сообщение 'Ошибка перестановки заявок. [FORTS] "Не найдена заявка для перестановки.".' по передвинутым заявкам..<br />18:23:23.780 | Error | MQS | Котируемая заявка 66144577 не принята биржей по причине 'Сервер для транзакции 'ACTION=MOVE_ORDERS; TRANS_ID=66144577; CLASSCODE=SPBFUT; SECCODE=RIZ1; MODE=0; FIRST_ORDER_NUMBER=6019530259; FIRST_ORDER_NEW_PRICE=138670; FIRST_ORDER_NEW_QUANTITY=1;' вернул неправильное сообщение 'Ошибка перестановки заявок. [FORTS] "Не найдена заявка для перестановки.".' по передвинутым заявкам.'.<br />18:23:23.780 | | MQS | Регистрация новой заявки на Buy с ценой 138670 и объемом 1.<br />18:23:23.783 | | MQS | Заявка 66144578 на Buy отправлена с ценой 138670 объемом 1.<br />18:23:23.868 | | OS | Новая Buy сделка 460128443 по цене 138660 на 1 заявки 66144576.<br />18:23:23.883 | Warning | MQS | Заявка 66144578 не имеет состояния.<br />18:23:23.968 | | MQS | Позиция изменилась на 1.<br />18:23:23.968 | | MQS | Заканчиваем котирование с неисполненным объемом равный 0.<br />18:23:23.968 | | MQS | Отмена заявки 66144578.<br />18:23:23.968 | | OS | Новая Buy сделка 460128451 по цене 138670 на 1 заявки 66144578.<br />18:23:23.970 | | OS | создается тэйк<br />18:23:23.970 | | OS | тэйк1<br />18:23:23.973 | | MQS | Стратегия останавливается.<br />18:23:23.973 | | MQS | Заканчиваем котирование с неисполненным объемом равный 0.<br />18:23:23.973 | | MQS | Заканчиваем котирование с неисполненным объемом равный 0.<br />18:23:23.975 | | MQS | Стратегия остановлена.<br /><br /></div></div><br /><br />Подобная ошибка появилась впервые. По какой причине стратегия не смогла найти заявку для перестановки? и не совсем понятно по какой причине исполнилось две заявки на покупку. Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13942/ Это зачем? Ну вешайте вы сразу тейк профит без проверки позиций и все хорошо тогда будет. Если чест...2011-11-24T12:57:40Z2011-11-24T12:57:40Zproftshttps://stocksharp.ru/users/6174/info@stocksharp.ru<div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />Это зачем? Ну вешайте вы сразу тейк профит без проверки позиций и все хорошо тогда будет.<br /></div></div><br /><br />Если честно сам сейчас задумался для чего я сделал еще одно условие и так и не понял )))<br /><br />Исправил - все заработало :)))<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />16:48:16.783 | | OS | Стратегия запущена.<br />16:48:50.342 | | OS | pos = 1<br />16:48:51.771 | | OS | Новая Buy сделка 459079937 по цене 140245 на 1 заявки 60489183.<br />16:48:51.784 | | OS | создается тэйк<br />16:48:51.784 | | OS | pos=2<br /></div></div><br /><br />За такую помощь и поллитра не жалко )))<br />Спасибо!Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13941/Дело в том, что position = 2 присваивается только после отправки тэйка: private void Takeprofit1() {...2011-11-24T12:52:34Z2011-11-24T12:52:34Zproftshttps://stocksharp.ru/users/6174/info@stocksharp.ruДело в том, что position = 2 присваивается только после отправки тэйка:<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br /> private void Takeprofit1()<br /> {<br /> <br /> order_takeprofit1 = this.CreateOrder(OrderDirections.Sell, order_buy1.Price + 45, 1);<br /> this.RegisterOrder(order_takeprofit1);<br /> <b>position = 2;</b><br /> <br /> }<br /></div></div><br /><br /><br />Видимо пока position =1 из разных потоков вызывается метод отправки тэйка: <br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />if (position == 1)<br /> {<br /> this<br /> .When(order_buy1.NewTrades())<br /> .Do(Takeprofit1);<br /> }<br /><br /></div></div><br /><br />Если меняю на : <br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />if (position == 1)<br /> {<br /><b>position = 2; </b> <br />this<br /> .When(order_buy1.NewTrades())<br /> .Do(Takeprofit1);<br /> }<br /></div></div><br /><br />Тэйкпрофит выставляется один раз:<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />16:34:56.403 | | OS | Стратегия запущена.<br />16:35:28.929 | | OS | pos = 1<br />16:35:28.950 | | OS | pos = 2<br />16:36:02.496 | | OS | Новая Buy сделка 459071315 по цене 140285 на 1 заявки 59689492.<br />16:36:03.776 | | OS | Новая Sell сделка 459071339 по цене 140330 на 1 заявки 59689493.<br /></div></div><br /><br />Вообще конечно странно...<br /><br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13940/Без пол литра в этом коде точно не разобраться)) f (position == 1) { this .When(order_buy1.NewTrades...2011-11-24T12:52:05Z2011-11-24T12:52:05Zfrontmanhttps://stocksharp.ru/users/28487/info@stocksharp.ruБез пол литра в этом коде точно не разобраться))<br />f (position == 1)<br />{<br />this<br />.When(order_buy1.NewTrades())<br />.Do(Takeprofit1);<br />}<br />Это зачем? Ну вешайте вы сразу тейк профит без проверки позиций и все хорошо тогда будет.<br />Т.е как то так <br />if (position == 0)<br />{<br />if (условие на сделку)<br />{<br />position = 1;<br />order_buy1 = this.CreateOrder(OrderDirections.Buy, base.Security.GetMarketPrice(OrderDirections.Buy), 1);<br />this.RegisterOrder(order_buy1);<br />this<br />.When(order_buy1.NewTrades())<br />.Do(Takeprofit1);<br />};<br />};<br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13939/Тьфу ты... Или у вас order_buy1 - глобальный параметр?2011-11-24T12:48:14Z2011-11-24T12:48:14Zfrontmanhttps://stocksharp.ru/users/28487/info@stocksharp.ruТьфу ты... Или у вас order_buy1 - глобальный параметр?Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13938/Нет я вас так понял. order_buy1 - у вас в разных потоках все равно разный. Это разные заявки. Поэтом...2011-11-24T12:37:40Z2011-11-24T12:37:40Zfrontmanhttps://stocksharp.ru/users/28487/info@stocksharp.ruНет я вас так понял.<br />order_buy1 - у вас в разных потоках все равно разный. Это разные заявки. Поэтому и сделка на них приходят разные.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13937/ В смысле одновременно в разных потоках? Оно генерируется столько раз сколько вы на него подписались...2011-11-24T12:34:11Z2011-11-24T12:34:11Zproftshttps://stocksharp.ru/users/6174/info@stocksharp.ru<div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />В смысле одновременно в разных потоках?<br />Оно генерируется столько раз сколько вы на него подписались.<br /></div></div><br /><br />Немного не так меня поняли... <br />появились две сделки по ризу, в двух разных потоках вызывается метод raschet, в каждом из которых генерируется .When(order_buy1.NewTrades())<br />.Do(Takeprofit1);<br /><br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13936/Внутри метода raschet делайте все в блоке блокировки, например lock(this) Почитайте MSDN по поводу э...2011-11-24T12:29:04Z2011-11-24T12:29:04Zfrontmanhttps://stocksharp.ru/users/28487/info@stocksharp.ru<div class="quote"><span class="quotetitle">kenota <a href="https://stocksharp.ru/posts/m/13933/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">Внутри метода raschet делайте все в блоке блокировки, например lock(this)</div></div><br />Почитайте MSDN по поводу этого оператора. <br />lock(this) - вообще не самый хороший вариант.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13934/base.Security.Changed() - вообще какое то странное правило. Вам что нужно ловить новые сделки по инс...2011-11-24T12:25:12Z2011-11-24T12:25:12Zfrontmanhttps://stocksharp.ru/users/28487/info@stocksharp.rubase.Security.Changed() - вообще какое то странное правило. <br />Вам что нужно ловить новые сделки по инструменту?Тогда исп Security.SecurityNewTrades()<br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13933/Внутри метода raschet делайте все в блоке блокировки, например lock(this)2011-11-24T12:23:30Z2011-11-24T12:23:30Zkenotahttps://stocksharp.ru/users/28502/info@stocksharp.ruВнутри метода raschet делайте все в блоке блокировки, например lock(this)Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13932/В смысле одновременно в разных потоках? Оно генерируется столько раз сколько вы на него подписались....2011-11-24T12:23:25Z2011-11-24T12:23:25Zfrontmanhttps://stocksharp.ru/users/28487/info@stocksharp.ruВ смысле одновременно в разных потоках?<br />Оно генерируется столько раз сколько вы на него подписались.<br />Если я напишу вот так<br /><br />his<br />.When(order_buy1.NewTrades())<br />.Do(Takeprofit1);<br />his<br />.When(order_buy1.NewTrades())<br />.Do(Takeprofit1);<br /><br />То конечно оно несколько раз вызовется. <br />То же будет и в случае с потоками.<br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13930/ Может быть в этом проблема, два потока могут одновременно зайти и оба прочитать что position = 0 и ...2011-11-24T12:14:37Z2011-11-24T12:14:37Zproftshttps://stocksharp.ru/users/6174/info@stocksharp.ru<div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />Может быть в этом проблема, два потока могут одновременно зайти и оба прочитать что position = 0 и поставить ордер.<br /></div></div><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />Это говорит о том что событие не генерируются несколько раз...<br /></div></div><br /><br />Видимо так и есть... NewTrades генерируется один раз, но одновременно в разных потоках. )<br /><br />Странно только то, что заявка на покупку выставляется только один раз, хотя следуя этой логике она также должна выставляться несколько раз из разных потоков. <br /><br />Тогда встает вопрос как это можно обойти, если расчет у меня происходит с частотой появления новых сделок и на основе него появляется условие на совершение сделки. Мне казалось, что .When(base.Security.Changed()) .Do(raschet); выполняется следующий раз только после того, как заканчивается предыдущий расчет, а не одновременно в нескольких потоках. Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13929/Сделал... 15:27:53.484 | | OS | Стратегия запущена. 15:27:53.493 | | OS | Создаю 15:27:53.501 | | OS...2011-11-24T12:03:17Z2011-11-24T12:03:17Zfrontmanhttps://stocksharp.ru/users/28487/info@stocksharp.ru<div class="quote"><span class="quotetitle">profts <a href="https://stocksharp.ru/posts/m/13921/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">Сделал... <br /><br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />15:27:53.484 | | OS | Стратегия запущена.<br />15:27:53.493 | | OS | Создаю<br />15:27:53.501 | | OS | Регистрирую<br />15:27:54.061 | | OS | Новая Buy сделка 459004723 по цене 140345 на 1 заявки 55665883.<br />15:27:54.074 | | OS | Новая сделка<br /></div></div></div></div><br />Это говорит о том что событие не генерируются несколько раз...Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13928/Может быть в этом проблема, два потока могут одновременно зайти и оба прочитать что position = 0 и п...2011-11-24T12:02:16Z2011-11-24T12:02:37Zkenotahttps://stocksharp.ru/users/28502/info@stocksharp.ruМожет быть в этом проблема, два потока могут одновременно зайти и оба прочитать что position = 0 и поставить ордер.<br /><br />Что же касается вызовов метода NewTrades несколько раз, попробуйте вместо него использовать событие ордера Matched. Т.е. this.When(order_buy1.Matched()).Do(TakeProfit1);Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/13927/ Ваш метод raschet() откуда вызывается? :) protected override void OnStarting() { this .When(base.Se...2011-11-24T11:56:12Z2011-11-24T11:56:12Zproftshttps://stocksharp.ru/users/6174/info@stocksharp.ru<div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />Ваш метод raschet() откуда вызывается? :)<br /></div></div><br /><br />protected override void OnStarting()<br /> {<br /> this<br /> .When(base.Security.Changed())<br /> .Do(raschet);<br /> base.OnStarting();<br /> }Copyright @ StockSharp Platform LLC 2010 - 2024