Cобытия по изменению состояния ордеров приходят только в режиме эмуляции

Cобытия по изменению состояния ордеров приходят только в режиме эмуляции
Atom
2/21/2013
kahuna


S# 4.1.6 Работа с Quik. Брокер Уралсиб. В режиме RealTimeEmlationTrader ордера выставляются, и информация о их выполнении поступает в лог, strategy.PositionManager.Position показывает позицию.

Когда переключаюсь с эмулятора на реальный QuikTrader. Ордер выставляется, но похоже события изменения состояния не вызываются, соответственно strategy.PositionManager.Position показывает 0. Может кто подать идею, в какой стороне мне копать?

И при работе через эмулятор похоже часть событий не активируется по крайней мере NewMyTrade, но так как strategy.PositionManager.Position обновляется работать можно.


Tags:


Thanks:


< 1 2 
kahuna

Avatar
Date: 2/26/2013
Reply


Может это как то проясняет дело. Простейший код в котором просто соединение с Quik выдает страную ошибку про какой-то инструмент[blink]



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Windows;
using System.Windows.Controls;
using System.Diagnostics;
using MessageBox = System.Windows.MessageBox;
using System.Threading;
using System.Linq;
using System.Xml;
using Ecng.Common;
using Ecng.Collections;
using Ecng.Xaml;
using Ecng.ComponentModel;

using StockSharp.BusinessEntities;
using StockSharp.Algo.Reporting;
using StockSharp.Quik;
using StockSharp.Algo;
using StockSharp.Xaml;
using StockSharp.Logging;
using StockSharp.Algo.Testing;

namespace test
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>

    public partial class MainWindow : Window
   {
        private QuikTrader _trader;
        private LogManager _logManager;

        public MainWindow()
        {
            InitializeComponent();

            _logManager = new LogManager();
            var fileListener = new FileLogListener("{0}_{1:00}_{2:00}.txt".Put(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day));
            _logManager.Listeners.Add(fileListener);

            _trader = new QuikTrader(QuikTerminal.GetDefaultPath()){ IsAsyncMode = true, SupportManualOrders = false };

            _trader.LogLevel = LogLevels.Debug;
            _logManager.Sources.Add(_trader);

                    _trader.Connected += () =>
                     {
                         _trader.AddDebugLog("Соединились");
                     };

                    _trader.Connect();
                    

                    while (!_trader.IsConnected) { }
                    _trader.StartExport();
  
        }
    }
}

Ошибка в лог валится такая:2013/02/26 14:43:51.544|Debug |QuikTrader|Соединились 2013/02/26 14:43:53.367|Error |QuikTrader|System.InvalidOperationException: Инструмент с кодом RU000A0JPWC3 для бумажной позиции не найден. в StockSharp.Quik.QuikTrader.#=qjrOBFov$lIae$ZMCQLx7P1fQAe2X2s16$DxZRnv$aqU=.#=qjGe1xZF5fvarq_$jrR3XCQ==(IList1 #=qKG6nGjj9uhl1Ndb5IDukAw==, Func2 #=qdrbWxV4uORvFCQd5d$c6og==) в #=qU8C8kAMUmJ0kPIeEJrF68f3NMymXDukMNgL4Dc7ffmr7PRgVzknJ3atY_n0PucT4.#=qB09_IBYvsxLb_dLzMi2NWQ==(DdeTable #=qOgXoydWCvsq2gXlddKoo0w==, IList1 #=qMeYWUEb44NrXcAvbPuNfiQ==, Action2 #=qolGBgTssErk3vXo538xxsQ==, Action`1 #=qIfmNdbFGgLtG9ybpXuosbQ==, Boolean #=qe3W9$GyIKMHUi59wvLuQeA==) 2013/02/26 14:43:53.441| |QuikTrader|Экспорт запущен. Мистика. [cursing]

Thanks:

kahuna

Avatar
Date: 2/26/2013
Reply


Понял, сам дурак. Просто давно завис в облигациях РБК. Валяются в портфеле. А в таблицах (сделок, заявок и т.п) облигации отфильтрованы.

Thanks:

kahuna

Avatar
Date: 2/26/2013
Reply


Включил фильтр на таблицу позиции по бумагам. Оставил одни фьючи. Ура. Все заработало. События на которые жаловался стали прилетать.

Thanks:

VassilSanych

Avatar
Date: 2/26/2013
Reply


Похоже у вас не логируются исключения фоновых потоков. Это можно делать например так:

<Application x:Class="Robot.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml" Startup="Application_Startup_1"
						 DispatcherUnhandledException="Application_DispatcherUnhandledException" Exit="Application_Exit_1" >
    <Application.Resources>
         
    </Application.Resources>
</Application>
using System;
using System.Globalization;
using System.Security.Principal;
using System.Threading;
using System.Windows;
using System.Windows.Threading;
using Ecng.Collections;
using StockSharp.Logging;
using StockSharp.Xaml;

namespace Robot
{
	/// <summary>
	/// Interaction logic for App.xaml
	/// </summary>
	public partial class App : ILogReceiver
	{
		private void CurrentDomain_UnhandledException
			(object sender, UnhandledExceptionEventArgs e)
		{
			var ex = (Exception) e.ExceptionObject;
			this.AddErrorLog(ex.ToString());

			if (Current == null) return;
			if (
				Current.Dispatcher.Invoke(() => MessageBox.Show(
					ex.ToString(), "Ошибка",
					MessageBoxButton.OKCancel, MessageBoxImage.Error) == MessageBoxResult.Cancel)
				)
				Current.Shutdown();
		}

		private void Application_Startup_1(object sender, StartupEventArgs e)
		{
			AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

			LogManager = new LogManager();
			LogManager.Sources.Add(this);

			var fileListener = new FileLogListener(
				string.Format(CultureInfo.InvariantCulture, "{0:yyyyMMdd}.txt", DateTime.Today));
			fileListener.Append = true;
			LogManager.Listeners.Add(fileListener);

			this.AddInfoLog("Запуск UI робота");

			//if (!string.IsNullOrEmpty(Settings.GoogleLogin))
			//{
			//		var smsListener = new SmsLogListener(Settings.GoogleLogin, Settings.GooglePassword);
			//		smsListener.Filters.Add(LogListener.AllErrorFilter);
			//		LogManager.Listeners.Add(smsListener);
			//}


			//Monitor = new MonitorWindow();
			//Monitor.Show();
			//LogManager.Listeners.Add(new GuiLogListener(Monitor));

			CheckAdministrator();

		}

		public static LogManager LogManager { get; private set; }
		public static MonitorWindow Monitor { get; private set; }


		private void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
		{
			var ex = e.Exception;
			this.AddErrorLog(ex.ToString());
			e.Handled = true;

			if (Current == null) return;
			if (
				Current.Dispatcher.Invoke(() => MessageBox.Show(
					ex.ToString(), "Ошибка",
					MessageBoxButton.OKCancel, MessageBoxImage.Error) == MessageBoxResult.Cancel)
				)
				Current.Shutdown();
		}

		#region ILogReceiver

		public DateTime CurrentTime
		{
			get { return LoggingHelper.Now; }
		}

		public INotifyList<ILogSource> Childs
		{
			get { return null; }
		}

		private readonly Guid _id = Guid.NewGuid();

		public Guid Id
		{
			get { return _id; }
		}

		public event Action<LogMessage> Log;

		public string Name
		{
			get { return ToString(); }
		}

		public ILogSource Parent
		{
			get { return null; }
		}

		public LogLevels LogLevel
		{
			get { return LogLevels.Debug; }
			set { }
		}

		public void Dispose()
		{
		}

		private void RaiseLog(LogMessage logMessage)
		{
			if (Log != null)
				Log(logMessage);
		}

		public void AddLog(LogMessage logMessage)
		{
			RaiseLog(logMessage);
		}

		#endregion

		private void CheckAdministrator()
		{
			var identity = WindowsIdentity.GetCurrent();
			if (identity == null) throw new InvalidOperationException("Couldn't get the current user identity");
			var principal = new WindowsPrincipal(identity);

			// Check if this user has the Administrator role. If they do, return immediately.
			// If UAC is on, and the process is not elevated, then this will actually return false.
			var isBuiltInAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);

			if (!isBuiltInAdmin)
			{
				var exMessage = "Робот запущен не под Администратором";
				this.AddErrorLog(exMessage);
				MessageBox.Show(
					exMessage, "Ошибка",
					MessageBoxButton.OK, MessageBoxImage.Error);
				Shutdown();
			}
		}

		private void Application_Exit_1(object sender, ExitEventArgs e)
		{
			this.AddInfoLog("Выключение UI робота");
			Thread.Sleep(500);
		}
	}
Thanks: kahuna
< 1 2 

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy