Stock# 2.0.1
Atom
03.06.2010
Mikhail Sukhov


Только что залил. Описание в блог добавлю позднее. Практически один багофикс. У кого были проблемы с 2.0 - качайте. Исправил все, о чем писали.


Теги:


Спасибо:


< 1 2 3  >
Mikhail Sukhov

Фотография
Дата: 07.06.2010
Ответить


Да нет никаких принципиальных соображений. Просто не сделал.

Спасибо:

Alexander

Фотография
Дата: 07.06.2010
Ответить


System.IO.IOException was unhandled Message=The process cannot access the file 'C:\Users\Alexander \Documents\Visual Studio 2010\Projects\Robots\Robots\bin\Debug \2010_06_07_strong_days.txt' because it is being used by another process. Source=mscorlib StackTrace: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) at System.IO.StreamWriter.CreateFile(String path, Boolean append) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize) at System.IO.StreamWriter..ctor(String path, Boolean append) at System.IO.File.AppendText(String path) at Robots.MainWindow.Log(String message) in C:\Users\Alexander \Documents\Visual Studio 2010\Projects\Robots\Robots \MainWindow.xaml.cs:line 334 at Robots.MainWindow.OnLog(Strategy strategy, StrategyErrorStates errorState, String message) in C:\Users\Alexander \Documents\Visual Studio 2010\Projects\Robots\Robots \MainWindow.xaml.cs:line 328 at System.Action3.Invoke(T1 arg1, T2 arg2, T3 arg3) at Ecng.Common.DelegateHelper.SafeInvoke[T1,T2,T3](Action3 handler, T1 arg1, T2 arg2, T3 arg3) at Ecng.Trading.Algo.Strategy.AddLog(StrategyErrorStates errorState, String message, Object[] args) at Robots.StrongDaysStrategy.OnRunning() in C:\Users\Alexander \Documents\Visual Studio 2010\Projects\Robots\Robots \StrongDaysStrategy.cs:line 48 at Ecng.Trading.Algo.Strategy. (StrategyProcessStates ) at Ecng.Trading.Algo.Strategy.Start() at Robots.MainWindow.<>c__DisplayClass14.<>c__DisplayClass1c.<ConnectBtn_Clic>b__b() in C:\Users\Alexander\Documents\Visual Studio 2010\Projects\Robots \Robots\MainWindow.xaml.cs:line 209 at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.DispatcherOperation.InvokeImpl() at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state) at System.Threading.ExecutionContext.runTryCode(Object userData) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedClanup(TryCode code, CleanupCode backoutCode, Object userData) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.ProcessQueue() at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame) at System.Windows.Threading.Dispatcher.Run() at System.Windows.Application.RunDispatcher(Object ignore) at System.Windows.Application.RunInternal(Window window) at System.Windows.Application.Run(Window window) at System.Windows.Application.Run() at Robots.App.Main() in C:\Users\Alexander\Documents\Visual Studio 2010\Projects\Robots\Robots\obj\x86\Debug\App.g.cs:line 0 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:

Спасибо:

Mikhail Sukhov

Фотография
Дата: 07.06.2010
Ответить


А где тут ошибка в StrategyLogger? Судя по логу ошибки, его вообще нет в цепочке вызовов.

Спасибо:

Alexander

Фотография
Дата: 07.06.2010
Ответить


Тогда немного не понимаю как должно быть устроено.

Есть методы: private void OnLog(Strategy strategy, StrategyErrorStates errorState, string message) { // если стратегия вывела не просто сообщение, то вывести на экран. if (errorState != StrategyErrorStates.None) this.GuiAsync(() => MessageBox.Show(message));

       Log(" [" + strategy.Id + "] " + errorState + " => " +

message); }

   public void Log(string message)
    {
        using (StreamWriter sw = File.AppendText(logger.FileName))
        {
            sw.WriteLine(DateTime.Now.ToString("o") + " " +

message); } }

Есть инициализация private StrategyLogger logger; и подписка: logger = new StrategyLogger("{0}{1:00}{2:00} _strong_days.txt".Put(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day)); logger.Strategies.Add(_strategy);

Из стратегии вызывается AddLog, к примеру: AddLog(StrategyErrorStates.None, "Останавливаем стратегию...", new object());

Исключение выкидывается тут: using (StreamWriter sw = File.AppendText(logger.FileName))

Спасибо:

Mikhail Sukhov

Фотография
Дата: 07.06.2010
Ответить


StrategyLogger слушает событие Log и пишет в файл. У Вас есть параллельный код, который так же пишет в файл. Судя по ошибке, именно он и падает.

Спасибо:

Alexander

Фотография
Дата: 07.06.2010
Ответить


Т.е. руками писать, как я это делаю из метода Log:

не нужно? у меня просто нигде больше нет записи в файл.

P.S. Посмотрел без вызова этого метода - обработчик события вызывается, сообщение приходит, но в файл ничего не пишется.

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

Спасибо:

artemox

Фотография
Дата: 08.06.2010
Ответить


Такой ошибки по-моему не было "[FORTS] Не найдена заявка для перестановки" И еще - у меня MyOrdersChanged по два раза вызывается для одной сделки (но это и до версии 201) Протокол:

07.06.2010 19:21:02 [0] MQS_RIM0 => Цена текущей 133205 и лучшей 133205. 07.06.2010 19:21:03 [0] MQS_RIM0 => Цена текущей 133205 и лучшей 133205. 07.06.2010 19:21:04 [0] MQS_RIM0 => Цена текущей 133205 и лучшей 133205. 07.06.2010 19:21:06 [0] MQS_RIM0 => Цена текущей 133205 и лучшей 133280. 07.06.2010 19:21:06 [0] MQS_RIM0 => Регистрация новой заявки Sell с ценой 133280 и объемом 1. 07.06.2010 19:21:06 [0] SS_RIM0_01:00:00 => Transaction: ACCOUNT=SPBFUT005La; CLIENT_CODE=XXX; TYPE=L; TRANS_ID=69666064; CLASSCODE=SPBFUT; SECCODE=RIM0; ACTION=NEW_ORDER; OPERATION=S; QUANTITY=1; PRICE=133280; COMMENT=[303]SL; 07.06.2010 19:21:06 [0] SS_RIM0_01:00:00 => Quiting Заявка 15354886 по цене 133280 по бумаге RIM0 по объему 1 в 01.01.0001 0:00:00, состояние=Active, статус=Done 07.06.2010 19:21:06 [0] MQS_RIM0 => Заявка зарегистрирована Sell под номером 15354886 с ценой 133280 объемом 1 ID транзакции 69666064. 07.06.2010 19:21:07 [0] SS_RIM0_01:00:00 => Заявка 15354886 по цене 133280 по бумаге RIM0 по объему 1 в 07.06.2010 19:21:08, состояние=Active, статус=Done 07.06.2010 19:21:07 [0] SS_RIM0_01:00:00 => Заявка 15354886 по цене 133280 по бумаге RIM0 по объему 1 в 07.06.2010 19:21:08, состояние=Active, статус=Done 07.06.2010 19:21:08 [0] MQS_RIM0 => Цена текущей 133280 и лучшей 133280. 07.06.2010 19:21:09 [0] MQS_RIM0 => Цена текущей 133280 и лучшей 133280. 07.06.2010 19:21:10 [0] MQS_RIM0 => Цена текущей 133280 и лучшей 133265. 07.06.2010 19:21:10 [0] MQS_RIM0 => Котирование заявки Sell под номером 15354886 с ценой 133280 объемом 1 ID транзакции 69666064. 07.06.2010 19:21:10 [0] SS_RIM0_01:00:00 => Transaction: ACTION=MOVE_ORDERS; TRANS_ID=69670380; CLASSCODE=SPBFUT; SECCODE=RIM0; MODE=0; FIRST_ORDER_NUMBER=15354886; FIRST_ORDER_NEW_PRICE=133265; FIRST_ORDER_NEW_QUANTITY=1; 07.06.2010 19:21:10 [0] SS_RIM0_01:00:00 => Заявка 15354886 по цене 133280 по бумаге RIM0 по объему 1 в 07.06.2010 19:21:08, состояние=Cancelled, статус=Done 07.06.2010 19:21:10 [0] SS_RIM0_01:00:00 => Заявка 15354886 по цене 133280 по бумаге RIM0 по объему 1 в 07.06.2010 19:21:08, состояние=Cancelled, статус=Done 07.06.2010 19:21:10 [0] SS_RIM0_01:00:00 => Заявка 15355011 по цене 133265 по бумаге RIM0 по объему 1 в 07.06.2010 19:21:12, состояние=Active, статус=Done 07.06.2010 19:21:10 [0] SS_RIM0_01:00:00 => Отмена заявки 15354886, Position=Buy 07.06.2010 19:21:10 [0] MQS_RIM0 => Перекотирование прошло успешно для заявки Sell под номером 15355011 с ценой 133265 объемом 1 ID транзакции 69670380. 07.06.2010 19:21:10 [0] SS_RIM0_01:00:00 => Quiting Заявка 15355011 по цене 133265 по бумаге RIM0 по объему 1 в 07.06.2010 19:21:12, состояние=Active, статус=Done 07.06.2010 19:21:11 [0] MQS_RIM0 => Цена текущей 133265 и лучшей 133265. 07.06.2010 19:21:13 [0] MQS_RIM0 => Цена текущей 133265 и лучшей 133265. 07.06.2010 19:21:14 [0] MQS_RIM0 => Цена текущей 133265 и лучшей 133375. 07.06.2010 19:21:14 [0] MQS_RIM0 => Котирование заявки Sell под номером 15355011 с ценой 133265 объемом 1 ID транзакции 69670380. 07.06.2010 19:21:14 [0] SS_RIM0_01:00:00 => Transaction: ACTION=MOVE_ORDERS; TRANS_ID=69674197; CLASSCODE=SPBFUT; SECCODE=RIM0; MODE=0; FIRST_ORDER_NUMBER=15355011; FIRST_ORDER_NEW_PRICE=133375; FIRST_ORDER_NEW_QUANTITY=1; 07.06.2010 19:21:14 [0] MQS_RIM0 => System.ArgumentException: Транзакции 'ACTION=MOVE_ORDERS; TRANS_ID=69674197; CLASSCODE=SPBFUT; SECCODE=RIM0; MODE=0; FIRST_ORDER_NUMBER=15355011; FIRST_ORDER_NEW_PRICE=133375; FIRST_ORDER_NEW_QUANTITY=1;' не была зарегистрирована. Причина '[FORTS] Не найдена заявка для перестановки.. New Order1 ID: 0, new Order2 ID: 0'. Имя параметра: transactionTxt в . (String , OrderStatus& , UInt32& , Double& , String& ) в Ecng.Trading.Quik.QuikTrader. (Order , TransactionBuilder , Boolean , Boolean ) в Ecng.Trading.Quik.QuikTrader.ReRegisterOrder(Order oldOrder, Order newOrder) в Ecng.Trading.BusinessEntities.BaseTrader.ReRegisterOrder(Order oldOrder, Double price, Int32 volume) в Ecng.Trading.Algo.TraderHelper.ReRegisterOrder(ITrader trader, Order oldOrder, Func`1 getNewPrice, Boolean isForts) в Ecng.Trading.Algo.QuotingStrategy.OnProcess() в Ecng.Trading.Algo.Strategy. () 07.06.2010 19:21:14 [0] SS_RIM0_01:00:00 => Сделка 533951 по цене 133265 по бумаге RIM0 по объему 1 в 07.06.2010 19:21:14 07.06.2010 19:21:14 [0] MQS_RIM0 => MQS_RIM0 останавливается. 07.06.2010 19:21:15 [0] MQS_RIM0 => Котирование заканчивается на заявке 15355011. 07.06.2010 19:21:15 [0] MQS_RIM0 => MQS_RIM0 остановлена.

Спасибо:

Mikhail Sukhov

Фотография
Дата: 08.06.2010
Ответить


  1. Это значит заявка уже исполнена.
  2. "MyOrdersChanged по два раза вызывается для одной сделки" такого события нет.
Спасибо:

Mikhail Sukhov

Фотография
Дата: 08.06.2010
Ответить


StrategyLogger сам пишет в файл. Пишет в тот файл, который указали в конструкторе. Пример есть в документации.

Спасибо:

artemox

Фотография
Дата: 08.06.2010
Ответить


  1. Т.е. это допустимая ошибка для MQS? (считается что стратегия завершилась успешно?)
  2. Сорри, я имел ввиду Trader.OrdersChanged. Сообщение дублируется для состояния Active (та заявка, которую выставляю на котирование): 08.06.2010 13:42:01 [0] SS_RIM0 => Заявка 16003537 по цене 132210 по бумаге RIM0 по объему 1 в 08.06.2010 13:42:03, комент:'[309]SL', состояние=Active, статус=Done 08.06.2010 13:42:01 [0] SS_RIM0 => Заявка 16003537 по цене 132210 по бумаге RIM0 по объему 1 в 08.06.2010 13:42:03, комент:'[309]SL', состояние=Active, статус=Done

Мне не мешает это задвоение, но вдруг какой глючок найдется...

Спасибо:
< 1 2 3  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy