Alexander
|
Дата: 28.11.2011
frontman:
Тяжело мне что то разбираться в логике плазы...
Если не трудно можете объяснить для чего нужен
PlazaOrderBuilder.
Вот не пойму..
Для построения ордеров по ордер_логу
Комментов вроде хватает, непонятные и неоднозначные моменты все с комментариями
|
|
|
|
Спасибо:
|
|
|
|
|
|
frontman
|
Дата: 29.11.2011
Александр по пункту 8 я так понял если, например заявка была выставлена до вечернего клиринга, то после него у данной заявки, если она активна остается, биржа меняет id? Т.е. таким образом если заявки были выставлены до клиринга мы не можем ее отменить например(это сейчас так).
Я правильно понял?
|
|
|
|
Спасибо:
|
|
|
|
|
|
Alexander
|
Дата: 29.11.2011
frontman:
Александр по пункту 8 я так понял если, например заявка была выставлена до вечернего клиринга, то после него у данной заявки, если она активна остается, биржа меняет id? Т.е. таким образом если заявки были выставлены до клиринга мы не можем ее отменить например(это сейчас так).
Я правильно понял?
Если робот работает 24 часа в сутки - то как я понимаю, в вечерний клиринг у данной заявки (не today) сменится id. И да, мы не сможем её отменить в этом случае.
|
|
|
|
Спасибо:
|
|
|
|
|
|
frontman
|
Дата: 29.11.2011
А на дневной клиринг это правило не распространяется?
|
|
|
|
Спасибо:
|
|
|
|
|
|
Alexander
|
Дата: 29.11.2011
frontman:
А на дневной клиринг это правило не распространяется?
Да вроде нет. Лучше протестить.
Ну на фикс это точто не должно влиять.
|
|
|
|
Спасибо:
|
|
|
|
|
|
frontman
|
Дата: 29.11.2011
|
|
|
|
Спасибо:
|
|
|
|
|
|
frontman
|
Дата: 07.12.2011
|
|
|
|
|
Хотел бы поднять следующий вопрос связанный со стилем написания кода.
<mark>Используйте анонимные методы с умом
Большинство опытных разработчиков знает, что не нужно бросаться с руками и ногами на каждую новомодную фишку языка программирования и использовать ее где попало. То же самое относится и к анонимным методам. Анонимные методы – это очень полезная возможность, которая может как существенно упростить понимание кода, так и усложнить его. Не существует формальных правил, которые бы определяли, когда следует применять анонимные методы, а когда лучше создать обыкновенный именованный метод (хотя Джеффри Рихтер придерживается правила, что любой анонимный метод длиннее 3-х строк должен быть преобразован в именованный). Анонимный метод есть смысл использовать в том случае, когда он является логической частью какого-то другого метода и не имеет особого смысла без этого контекста. Если же метод является самостоятельным, полностью выполняет некоторую задачу и может вызываться в различных условиях, то стоит подумать о создании именованного метода.</mark>
Это замечание я вычитал вот тут http://rsdn.ru/article/csharp/Closure_in_Csharp.xml и по моему оно очень справедливо...
Из за на мой взгляд не совсем корректного использования анонимных методов понимание кода ОЧЕНЬ усложнено...
|
|
|
|
Спасибо:
|
|
|
|
|
|
Alexander
|
Дата: 07.12.2011
метод является самостоятельным, полностью выполняет некоторую задачу <mark>и может вызываться в различных условиях</mark>, то стоит подумать о создании именованного метода.
можно пример где у нас есть такое и не выделено в полноценный метод?
|
|
|
|
Спасибо:
|
|
|
|
|
|
frontman
|
Дата: 07.12.2011
В PazaTrader много такого...
private void OnSessionContentsDerivativeStreamInserted(PlazaRecord record, PlazaSessionContentsDerivativeColumns metadata, Action<Security> handler)
{
ProcessEvents(() =>
{
var secCode = record.Get<string>(metadata.ShortIsin);
var isinId = record.Get<int>(metadata.IsinId);
if (_isinIds.Add(isinId))
{
GetSecurity(CreateSecurityId(secCode, "RTS"), security =>
{
InitSecurityInfo(security, record, metadata);
security.Code = secCode;
handler(security);
}, isinId.ToString());
}
});
}
|
|
|
|
Спасибо:
|
|
|
|
|
|
frontman
|
Дата: 07.12.2011
|
|
|
|
|
А вот мое любимое место:))
private void OnOrdersLogStreamEnd(PlazaStream stream)
{
ProcessEvents(() => _orderBuilder.FlushChanges(stream, (security, metadata, firstRecord, lastRecord) => GetOrder(security, firstRecord.Get<long>(metadata.OrderId), orderId =>
{
var transactionId = firstRecord.Get<int>(metadata.ExtId);
//http://forum.rts.ru/viewtopic.asp?p=115933
//10. Изменен порядок прихода записей по итогам торговой транзакции в логе заявок.
//Ранее при постановке заявки первой шла запись о постановке заявки инициатора транзакции,
//вслед за которой шли записи о сделках.
//В версии 3.8 запись о постановке заявки добавляется последней, после записей о сделках.
var order = GetOrderByTransactionId(transactionId);
if (order != null)
order.Id = orderId;
else
order = EntityFactory.CreateOrder(orderId);
order.Security = security;
var restVolume = firstRecord.Get<decimal>(metadata.AmountRest);
var initVolume = firstRecord.Get<decimal>(metadata.AmountOperation);
order.Price = firstRecord.Get<decimal>(metadata.Price);
order.Volume = initVolume;
order.Balance = restVolume;
order.Direction = firstRecord.Get<int>(metadata.Direction) == 1 ? OrderDirections.Buy : OrderDirections.Sell;
order.Portfolio = GetPortfolio(firstRecord.Get<string>(metadata.ClientCode));
order.Comment = firstRecord.Get<string>(metadata.Comment);
order.TransactionId = transactionId;
order.Time = firstRecord.Get<DateTime>(metadata.Moment);
order.State = restVolume == 0 ? OrderStates.Done : OrderStates.Active;
var status = firstRecord.Get<int>(metadata.Status);
if ((status & 0x01) == 0x01)
order.ExecutionCondition = OrderExecutionConditions.PutInQueue;
else if ((status & 0x02) == 0x02)
order.ExecutionCondition = OrderExecutionConditions.CancelBalance;
return order;
},
order =>
{
var action = lastRecord.Get<int>(metadata.Action);
switch (action)
{
case 0: // удалена
order.CancelTime = lastRecord.Get<DateTime>(metadata.Moment);
order.Balance = lastRecord.Get<int>(metadata.AmountOperation);
order.State = OrderStates.Done;
break;
case 1: // добавлена
break;
case 2: // исполнена
order.Balance = lastRecord.Get<decimal>(metadata.AmountRest);
if (order.Balance == 0)
order.State = OrderStates.Done;
break;
default:
throw new InvalidOperationException("Неизвестное действие заявки {0}.".Put(action));
}
FillExtensionInfo(order, lastRecord);
})));
}
|
|
|
|
Спасибо:
|
|
|
|
|