← 返回

Дочерняя стратегия вызывает метод родительской

У меня одна стратегия содержит в себе дочернию(другую) стратегию. У меня есть лог, который я не могу понять. AR Buy CancelOrder StopAggPutOrder 76797701 AR - дочерняя стартегия, она имеет метод CancelOrder, но не имеет метода StopAggPutOrder. Метод StopAggPutOrder принадлежит родительской стратегии. при этом, судя по логу, метод CancelOrder, был вызва из метода StopAggPutOrder. т.к. Метод CancelOrder принимет как аргуметнт имя вызвавшего его метода. И после этого вся программа закрылась, не выдав никакого сообщения об ошибке. Да, метод CancelOrder попятался отменить исполненную заявку, но почему небыло никакого сообщения?


public virtual void Do_CancelOrder(string callingMethod)
		{

			MarkOrderCanceledId("CancelOrder " + callingMethod);
			if(_order != null){
				try{
					this.Trader.CancelOrder(_order);
				}
				catch(Exception ex){
					string sessionStopped = "Сейчас эта сессия не идет";
					if(ex.Message.Contains(sessionStopped)){
						
					}
					else{
						throw ex;
					}
				}
			}
		}

на событие OnLog я подписан - там пусто.

本主题对您有帮助吗?

分享主题

评论 (14)

登录创建账户, 登录或注册以发表评论

Alexander
Alexander

OnError

vader
vader 作者

OnError тоже молчит

Alexander
Alexander

Как вы понимаете что программа закрылась? В чём это выражается? Посмотрите на событие Strategy.Error

vader
vader 作者

"Как вы понимаете что программа закрылась? В чём это выражается?" Окно программы открыто и в какой-то момент она просто исчезает и её нет.

На Error подпишусь, ещё не успел новую версию скачать.

Ещё одна проблема, сделка не попала в стратегию. На Strategy.NewMyTrades подписан, он не получил последнюю сделку. При этом trader.NewMyTrades эу сделку получил

Alexander
Alexander

Вы кидаете exception из throw. Зачем? Где-то выше вы его перехватываете?

vader
vader 作者

"Вы кидаете exception из throw. Зачем? Где-то выше вы его перехватываете?" пока не перехватываю, но потом буду. Кидаю я его, потому-что при невозможности снять заявки, робот должен остановится.

Alexander
Alexander

Так и останавливайте его работу. Или перехватывайте exception выше.

Иначе ничего удивительно в таком завершении работы нет. :)

frontman
frontman

А приложение вы как запускаете? Просто если не из студии и у вас эксепшн не перехватывается, то приложение закроется конечно..

frontman
frontman

Я опоздал))

vader
vader 作者

Я запускаю из SharpDevelop в Debug. я надеюсь, что он мне что-нибудь скажет, есди произошла ошибка.

"А приложение вы как запускаете? Просто если не из студии и у вас эксепшн не перехватывается, то приложение закроется конечно.. " проблема не стольько в том, что оно закрывается, а вот, что оно ничего не говорит при этом. Даже не предлгает исвать решения проблемы в интернете.

Alexander
Alexander

Совет перехватывать Exception или вместо того чтоб его кидать - что-либо выводить, остаётся в силе.

vader
vader 作者

"Совет перехватывать Exception или вместо того чтоб его кидать - что-либо выводить, остаётся в силе." Уже сделал - WriteDiagnostics(ex.Message);.

Alexander
Alexander

Помогло?

frontman
frontman

На студию надейся, а сам не плошай)))