Stock# 2.0.1
Atom Ответить
03.06.2010


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

Теги:


Спасибо:




26 Ответов
1 2  >
Tauler

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


Михаил, вы хоть вкратце опишите, в чем заключается фикс.

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 04.06.2010
Ответить


Описание -http://stockmarketdotnet.blogspot.com/2010/06/stock-201.html


Фикс? Это не один фикс. Все, о чем писали, то и фиксил.

Автор топика
Спасибо:

artemox

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


Спасибо, за проделанную работу :)

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 04.06.2010
Ответить


Это значит баги пофикшены? Или просто спасибо? =)

Автор топика
Спасибо:

artemox

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


Для меня основным багом была ошибка при котировании, а это я не успел
проверить. В ПН отчитаюсь :)
Михаил, правильно ли я понимаю, что отсутствует доступ к членам
amCharts через ChartControl?
Хотел отключить IsDataGroupingEnabled, но не нашел как :(

Спасибо:

Alexander

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


Спасибо, всё о чём я отписывался - пофикшено.

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 06.06.2010
Ответить


Да, не сделал... Как вариант, через reflection.

Автор топика
Спасибо:

Alexander

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


Не получается вывести сообщение в лог - добавляю в StrategyLogger
стратегию, создаю обработчик события Log, с помощью OnLog вывожу
сообщения из стратегии.
Но при попытки записать в файл внутри OnLog возникает ошибка,
связанная с тем, что к этому файлу уже кто-то имеет доступ из другого
потока (я никак к нему не обращаюсь):

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);
}
}

Как с этим можно бороться?
Спасибо:

artemox

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


А может в версии 2.0.2 расшарить эти переменные? Или они приватные из
принципиальных соображений?

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 07.06.2010
Ответить


А текст исключения?

Автор топика
Спасибо:

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.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:

Спасибо:

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

Фотография
Дата: 07.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

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

Спасибо:

Константин

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


у меня тоже самое Trader.OrdersChanged срабатывает два раза с
одинаковыми параметрами
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 15.06.2010
Ответить


Интересно. А режим синхронный?

Автор топика
Спасибо:

Константин

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


режим асинхронный

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 15.06.2010
Ответить


http://stockmarketdotnet.blogspot.com/2010/03/stock-18.htmlПункт 1
начиная со слов о котировании.

Автор топика
Спасибо:

Константин

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


Михаил, ну зачем так. Исходников библиотеки нет, в документации про
это ни слова, а еще мне нужно выискивать где-то, что там работает, а
что нет.
Подумал - А зачем мне это нужно? Сел за выходные нарисовал привод с
преферансом и гейшами. Свои глюки как-то ближе и понятнее. А главное
их всегда можно исправить. За сим откланиваюсь и тестирование
прекращаю

Спасибо:
1 2  >

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

loading
clippy