Stock# 2.0.1
Atom
6/3/2010
Mikhail Sukhov


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

Tags:


Thanks:


< 1 2 3  >
Mikhail Sukhov

Avatar
Date: 6/7/2010
Reply


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

Thanks:

Alexander

Avatar
Date: 6/7/2010
Reply


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.Action`3.Invoke(T1 arg1, T2 arg2, T3 arg3)
at Ecng.Common.DelegateHelper.SafeInvoke[T1,T2,T3](Action`3
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:

Thanks:

Mikhail Sukhov

Avatar
Date: 6/7/2010
Reply


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

Thanks:

Alexander

Avatar
Date: 6/7/2010
Reply


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

Есть методы:
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))

Thanks:

Mikhail Sukhov

Avatar
Date: 6/7/2010
Reply


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

Thanks:

Alexander

Avatar
Date: 6/7/2010
Reply


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

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

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

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

Thanks:

artemox

Avatar
Date: 6/8/2010
Reply


Такой ошибки по-моему не было "[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 остановлена.

Thanks:

Mikhail Sukhov

Avatar
Date: 6/8/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 6/8/2010
Reply


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

Thanks:

artemox

Avatar
Date: 6/8/2010
Reply


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

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

Thanks:
< 1 2 3  >

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

loading
clippy