← Назад

Одновременно выставление заявок

Попытался выставить 3 заявки одновременно. Выставляется, то одна, то две в систему. С чем это связано?

Комментарии (31)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

VassilSanych
VassilSanych

Карма 😎

VassilSanych
VassilSanych

А если серьёзно, ставьте try/catch, подписывайтесь на события об ошибках и смотрите сами, с чем связано.

qpile
qpile Автор

Ошибок не приходит. Но что интересно- если ставить паузу между выставлением заявки в 1 секунду, то все заявки выставляются верно. Так что думаю, что проблема не в коде

VassilSanych
VassilSanych

qpile: Ошибок не приходит. Но что интересно- если ставить паузу между выставлением заявки в 1 секунду, то все заявки выставляются верно. Так что думаю, что проблема не в коде В StockSharp ошибки ходят самыми разными путями:

  • обычно
  • в фоновых потоках
  • событиями Возможно вы какой-то пропустили.
qpile
qpile Автор

Вообще обычно и в событиях не приходит почему то. А как в фоновых потоках посмотреть? Может следует сначала проверять зарегестирован ли ордер, прежде чем посылать следующий?

VassilSanych
VassilSanych

qpile: Вообще обычно и в событиях не приходит почему то. А как в фоновых потоках посмотреть? Может следует сначала проверять зарегестирован ли ордер, прежде чем посылать следующий? Не обязательно. Попробуйте сначала просто lock на секцию выставления заявки. Может она у вас в слишком глобальной переменной хранится и теряется при параллельных запусках?

esper
esper

Здесь искали?

VassilSanych
VassilSanych

esper: Здесь искали? И что, это у них молчком происходит? Я когда на квике пытался тестировать скорость параллельного выставления заявок, меня честно тыкали носом в SQL FLOOD :)

esper
esper

VassilSanych: И что, это у них молчком происходит? Сложно сказать, т.к. сам через альфу не торгую, но о такой проблеме слышал и раньше. Надо смотреть как реализован коннектор.

qpile
qpile Автор

Да уж...Придется просто тупо задержку между ордерами вводить что ли...

ra81
ra81

Альфа не дает ставить больше 1 заявки в полсекунды гдето. Это проверено. После 120 заявок подряд без задержек она отрубает от сервера.

Ваша проблема решается просто, ставите заявку, ловите событие Error, если оно было выдерживаете чуток времени и посылаете снова. Или посылаете сразу же. Но надо быть осторожным иначе при массовых заявках просто отрубит от сервера :)

qpile
qpile Автор

Самый проблема в том, что в событие ничего не приходит. Хотя обработчик есть // подписываемся на событие о неудачной регистрации заявок Trader.OrdersRegisterFailed += OrdersFailed;

ra81
ra81

qpile: Самый проблема в том, что в событие ничего не приходит. Хотя обработчик есть // подписываемся на событие о неудачной регистрации заявок Trader.OrdersRegisterFailed += OrdersFailed;

Ну это проблема "официального" коннектора. Не поддерживаю его. Тот кто поддерживал уже не в команде врядли чего скажет. В неофициальном, том что я делал все ок в этом плане. Но он под старую версию шарпа. Планирую переделать но не раньше апреля, ближе к концу похоже.

Mikhail Sukhov
Mikhail Sukhov

ra81: Ну это проблема "официального" коннектора. Не поддерживаю его. Тот кто поддерживал уже не в команде врядли чего скажет.

Э-э-э о чем речь идет? Если вы нашли ошибку, пишите про ее. Будем править. Только небылицы давайте не писать. S# поддерживает все коннекторы, которые создал. Кто там ушел и куда ушел - не понятно. Все программисты, кто работает над S# и всегда работал - все остались.

ra81
ra81

Mikhail Sukhov:

ra81: Ну это проблема "официального" коннектора. Не поддерживаю его. Тот кто поддерживал уже не в команде врядли чего скажет.

Э-э-э о чем речь идет? Если вы нашли ошибку, пишите про ее. Будем править. Только небылицы давайте не писать. S# поддерживает все коннекторы, которые создал. Кто там ушел и куда ушел - не понятно. Все программисты, кто работает над S# и всегда работал - все остались.

Михаил, я всего лишь сказал что разработчик коннектора врядли сможет ответить. А остальные члены если и ответят то не факт что сразу. Ибо разобораться все же надо. ХОтябы в том как альфа работает и ее нюансах.

Ошибку написали выше. Не стреляет событие по ошибке регистрации ордера. Детали выясняй у топикстартера, если они необходимы.

Mikhail Sukhov
Mikhail Sukhov

ra81: Михаил, я всего лишь сказал что разработчик коннектора врядли сможет ответить.

Еще как сможет. Еще раз, разработчиком коннекторов для S# является только S#. Сторонние коннекторы мы выделяем особым образом, как твой. Он есть, любой может его взять, но в официальные дистрибутивы он не попадает.

ra81: Ошибку написали выше. Не стреляет событие по ошибке регистрации ордера. Детали выясняй у топикстартера, если они необходимы.

Собственно, вопрос к нему тогда. Мини код, воспроизводящий проблему.

qpile
qpile Автор

А где же взять не официальную версию?

ra81
ra81

qpile: А где же взять не официальную версию?

с кодеплекс. AlfaPlus. http://stocksharp.codeplex.com/SourceControl/changeset/view/23281 Вообще вроде в офисияльной версии все было ок с этим тоже. почему не работает странно даже. Помню с Сергеем мы котирование завели на обоих версиях.

qpile
qpile Автор

А можно как то в Альфе заявки посылать в синхронном режиме?что бы ответ сразу получить?

ra81
ra81

qpile: А можно как то в Альфе заявки посылать в синхронном режиме?что бы ответ сразу получить? В текущих версиях коннекторов нет.

qpile
qpile Автор

Собственно вот,

 
if (StartLevel > FinishLevel)
                {
                    double level = StartLevel;
                    while (level > FinishLevel)
                    {
                        
                        long id = buyAtLimit(level, LotToTrade, "");
                        level = level - StepSize;

                    }

                }
..............


    private long buyAtLimit(double price, int lot, string signal)
        {
           
            var order = new Order
            {
                Portfolio = Account,
                Volume = Math.Abs(lot),
                Price = (decimal)price,
                Security = security,
                Direction = OrderDirections.Buy,
            };
             System.Threading.Thread.Sleep(2000);
            MainWindow.Instance.Trader.RegisterOrder(order);
          
         
            return order.TransactionId;
          
        }


qpile
qpile Автор
// подписываемся на событие о неудачной регистрации заявок
						Trader.OrdersRegisterFailed += OrdersFailed;
                        
						// подписываемся на событие о неудачном снятии заявок
						Trader.OrdersCancelFailed += OrdersFailed;
                      
						// подписываемся на событие о неудачной регистрации стоп-заявок
						Trader.StopOrdersRegisterFailed += OrdersFailed;
						// подписываемся на событие о неудачном снятии стоп-заявок
						Trader.StopOrdersCancelFailed += OrdersFailed;
..............




		private void OrdersFailed(IEnumerable<OrderFail> fails)
		{
			this.GuiAsync(() =>
			{
				foreach (var fail in fails)
					Log.Instance.Add( fail.Error.ToString());
			});
		}


Mikhail Sukhov
Mikhail Sukhov

Я так понимаю, проверить это можно через быстрое выставление заявок? Тоесть выставляем 100 сразу, выставляется 10, по 90 вообще никаких событий, так?

qpile
qpile Автор

Я пробовал выставлять 6. Выставлялась только одна. В OrderFailed пусто :(

Mikhail Sukhov
Mikhail Sukhov

qpile: Я пробовал выставлять 6. Выставлялась только одна

Понял. Поставил в план (или завтра или в начала след недели). Пропишите в свой профиль скайп, чтобы можно было в случае вопросов/тестирования/проверки с вами связаться.

qpile
qpile Автор

И что самое интересное-походу отваливается библиотека сама, поскольку потом при выключении робота и при перезагрузке терминала пишет, что библиотека уже присоединена. Как с этим бороться? Пробую все это на ММВБ. Может на ФОРТС такого нет

esper
esper

Напишите как с вами связаться.

qpile
qpile Автор

Сейчас пользуюсь временно адресом жены: didenckoolya собака yandex.ru

qpile
qpile Автор

Странно. Сегодня снимает и ставит нормально. Мистика какая то

qpile
qpile Автор

Теперь опять глючит. Мистика какая то

Mikhail Sukhov
Mikhail Sukhov

qpile: Теперь опять глючит. Мистика какая то

Добавьтесь в скайп, я думаю проще будет. Если вы кбробот, то вроде бы я когда-то вас добавлял.