← 戻る

Order.Matched вызывается несколько раз

Здравствуйте, есть проблема с вызовом события на Order.Matched. Версия 4.0.19 Создаю заявку:

 var order = this.CreateOrder(direction, dealPrice, lotSize);
 base.RegisterOrder(order);

потом создаю событие на исполнение заявки:

StrategyRule stopRule = this.When(order.Matched());
            stopRule.Do
                (() =>
                {
...
});

Т.е. если сделка выполнилась, заходим в правило и выставляем стоп, но на деле происходит так. Например я покупаю 50 лотов, но покупка произошла не одной сделкой а допустим 3-мя, в итоге событие order.Matched отрабатывается 3 раза. В документации написано что Matched это событие полного исполнения заявки, вопрос почему оно отрабатывается по ходу несколько раз, а не один раз в конце?

このトピックは参考になりましたか?

トピックを共有

コメント (15)

ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください

russ
russ 著者

Ребята, что у всех работает?

freelancer
freelancer

Стокшарп использует ну очень мало человек. Муханчиков приводит какую-то статистику, но все просто бросают библиотеку, когда с ней повозятся.

Причин много: Matched глючит, например. Это означает, что в документации про этот метод - враньё, и надеяться на метод нельзя. Сохранение данных в хранилище вообще не оттестировано и не работает. Новые методы в новых весиях не работают с самого начала.

И всем пофиг

Alexander
Alexander

freelancer: Стокшарп использует ну очень мало человек. Муханчиков приводит какую-то статистику, но все просто бросают библиотеку, когда с ней повозятся.

Причин много: Matched глючит, например. Это означает, что в документации про этот метод - враньё, и надеяться на метод нельзя. Сохранение данных в хранилище вообще не оттестировано и не работает. Новые методы в новых весиях не работают с самого начала.

И всем пофиг

Над библиотекой работают 2-3 человека. Совершенно безвозмездно.

Хотите помогать - помогайте. Ошибки которые находятся - исправляются. Хотите тестировать - тестируйте.

вызов order.Matched несколько раз ещё не посмотрели. Мы не можем отвечать на найденные ошибки в течение пары часов. Вы раньше писали о том что Matched глючит? Нет.

Вы можете бесплатно весь день посвящать библиотеке, исправлению ошибок да ответам на вопросы на форуме? Если да - мы готовы дать исходники.

Критиковать все горазды. Как речь заходит о помощи - все пасуют, да ждут других.

russ
russ 著者

freelancer: Стокшарп использует ну очень мало человек. Муханчиков приводит какую-то статистику, но все просто бросают библиотеку, когда с ней повозятся.

Причин много: Matched глючит, например. Это означает, что в документации про этот метод - враньё, и надеяться на метод нельзя. Сохранение данных в хранилище вообще не оттестировано и не работает. Новые методы в новых весиях не работают с самого начала.

И всем пофиг Зачем так жестко я в первую очередь спрашивал у тех кто уже юзает библиотеку, люди ж как-то определяют, что заявка исполнилась. Просто сегодня реально залетел на этом, стоп сработал 3 раза вместо одного, в итоге вместо закрытия шорта взялся двойной сайз в лонг :(

freelancer
freelancer

russ: Зачем так жестко Накатило как-то 😭

russ
russ 著者

freelancer:

russ: Зачем так жестко Накатило как-то 😭 Да, тоже иногда бывает, но потом вспоминаю, что это не коммерческий проект и нужно хотя-бы спасибо сказать.

Mikhail Sukhov
Mikhail Sukhov

freelancer:

russ: Зачем так жестко Накатило как-то 😭

Если это было оправданием, то оно явно не катит. Думаете наша команда - это такая урна, в которую можно излить все, что накипело? Ошибаетесь. У нас и своих забот хватает каждодневно. Выслушивать еще и неблагодарную критику нет никакого желания.

Это был ремень. Теперь нравоучение.

Давайте попытаемся понять все вместе, почему все именно так, как оно есть сейчас, а не так, как хотелось бы. Есть проект, который развивает постоянно. Когда я говорю постоянно, я имею ввиду именно не от версии к версии, а от новой идеи к реализации. Идеи идут постоянно. Реализации также. Баги реализаций, естественно, идут вслед. Кто их будет фиксить? Их будем фиксить мы. А кто будет делать новое? Предполагалось, что в проект будут вливаться постоянно новые участники. Но новые как-то не особо появляются. Висят текущие задачи, все проходят мимо. Мол не наши проблемы, это проблемы команды StockSharp. А баги в ваших роботах - это тоже что ли наши проблемы? Может еще и риски на нас? Ваша то тогда где доля? Да, да, лично к вам обращаюсь, freelancer, что вы лично сделали для проекта, что начинаете критиковать? Или суть фразы "некоммерческий проект, развивающийся совместными усилиями" не понятна?

Или никак не доходит, что не помогая с решениями текущих задач, вы тем самым себе же делаете подлянку в перспективе? Что, когда у вас будет лично проблема, ее никто быстро не исправит из-за нехватки рук? Неужели эта взаимосвязь не видна?

По поводу конкретной ошибки. Подозреваю, что тянется из-за той же проблемы, которая наблюдается у котирования. Под Плазу работает, под Квик не пашет (уверен, что именно Квик у автора). Квик шлет изменения как ему угодно. Нормальное АПИ закрыто от использования. Нам что теперь, так же кричать на форумах Квика? Им мозг выносить? Думаете глыба сдвинется и скажет "ребята, конечно, мы все поняли, простите нас, вот вам АПИ нормально"? Ничего подобного. Нам душу изливать некуда. Почему мы тогда должны от вас подобное выслушивать?

Я еще в том году говорил, что робот на Квике - это нестабильное решение и мука до конца дней. Предлагал варианты. Лежит Транзак почти доделанный. Есть новехонький Алор. Есть другие варианты. Где сдвиги то? Кто-нибудь высказался ЗА? Никто. Значит всё всех устраивает. Так а какого тогда, простите, вы тут душу изливаете, если всех всё устраивает?

Serg
Serg

Я бы предложил: если нашел ошибку или непонятки выложи конфиг терминала, проект поминимуму чтоб ошибка проявлялась. Тогда и разобраться проще. Лично я бы такие просьбы рассматривал(может не все но все же). Иногда просто лень создавать кучу строк кода ради того чтобы проверить одну. Это мое предложение всем пользователям библиотеки. Таким образом можно наверно и кодить нормально научиться)) И я лично благодарен ребятам уже только за то что могу нормально данные из квика получить и обработать. Спасибо

Alexander
Alexander

russ: Здравствуйте, есть проблема с вызовом события на Order.Matched. Версия 4.0.19 Создаю заявку:

var order = this.CreateOrder(direction, dealPrice, lotSize); base.RegisterOrder(order);

> 
> потом создаю событие на исполнение заявки:
> ```csharp
StrategyRule stopRule = this.When(order.Matched());
            stopRule.Do
                (() =>
                {
...
});

Т.е. если сделка выполнилась, заходим в правило и выставляем стоп, но на деле происходит так. Например я покупаю 50 лотов, но покупка произошла не одной сделкой а допустим 3-мя, в итоге событие order.Matched отрабатывается 3 раза. В документации написано что Matched это событие полного исполнения заявки, вопрос почему оно отрабатывается по ходу несколько раз, а не один раз в конце?

  1. Сделайте Once, тогда правило выполнится 1 раз
  2. Это происходит по следующей причине:
  • правило Matched подписано на изменение ордера
  • изменение ордера происходит при а) ответе на посланную транзакцию б) при обновлении таблицы своих сделок

Именно поэтому изменение происходит 2 раза и 2 раза срабатывает правило.

russ
russ 著者

Alexander Mukhanchikov:

russ: Здравствуйте, есть проблема с вызовом события на Order.Matched. Версия 4.0.19 Создаю заявку:

var order = this.CreateOrder(direction, dealPrice, lotSize); base.RegisterOrder(order);

> >
> > потом создаю событие на исполнение заявки:
> > ```csharp
StrategyRule stopRule = this.When(order.Matched());
            stopRule.Do
                (() =>
                {
...
});

Т.е. если сделка выполнилась, заходим в правило и выставляем стоп, но на деле происходит так. Например я покупаю 50 лотов, но покупка произошла не одной сделкой а допустим 3-мя, в итоге событие order.Matched отрабатывается 3 раза. В документации написано что Matched это событие полного исполнения заявки, вопрос почему оно отрабатывается по ходу несколько раз, а не один раз в конце?

  1. Сделайте Once, тогда правило выполнится 1 раз
  2. Это происходит по следующей причине:
  • правило Matched подписано на изменение ордера
  • изменение ордера происходит при а) ответе на посланную транзакцию б) при обновлении таблицы своих сделок

Именно поэтому изменение происходит 2 раза и 2 раза срабатывает правило. Да, я как только этот баг увидел сразу сделал. Спасибо большое за помощь.

freelancer
freelancer

Я имел ввиду то, что новичок читает сообщения типа этого, офигивает от счастья и качает библиотеку. Допустим у него что-то не получается и оказывается, что дела обстоят так, как сказал Михаил.

На главной странице надо написать:

  • Некоммерческий проект, развивающийся совместными усилиями
  • Некоторые функции могут работать не так, как написано в документации (какие это функции - никто не знает)
  • Некоторые доступные функции просто не работают (какие это функции - никто не знает)
Mikhail Sukhov
Mikhail Sukhov

freelancer: На главной странице надо написать:

Без сопливых разберемся, что и как написать. Создавайте свой сайт, и пишите на его страницах что захотите. Нас поучать не нужно.

Alexander
Alexander

Возвращаясь к разговору. Пометка Once говорит лишь о том, что правило будет активировано 1 раз. Но проблема может возникнуть если одновременно правило дёргается из нескольких потоков.

Если хотите это избежать - создайте правило с Sync.

           this
               .When(order.Matched())
               .Do(() => {...})
               .Once()
               .Sync(new object());
vader
vader

А каким образом данное правило(order.Matched) может дернутся из разных потоков?

Alexander
Alexander

vader: А каким образом данное правило(order.Matched) может дернутся из разных потоков?

Оно подписывается на события NewOrder и OrderChanged. А они могут придти из разных потоков.