Добрый день, извините за беспокойство.
Задача следующая есть своя история full ордерлога в формате:
#SYMBOL,SYSTEM,TYPE,ID,ACTION,PRICE,VOLUME,ID_DEAL,PRICE_DEAL
сделки со шлюза поступают в формате:
RIH3,F,B,20130111190000261,9746301221,1,164960.00000,1,0,0
RIH3,F,B,20130111190000261,9746301221,2,164960.00000,1,682802371,157370.00000
RIH3,F,S,20130111190000261,9746300660,2,157370.00000,1,682802371,157370.00000
соответственно я хочу их добавить к той историии что пишет гидра.
вопрос1. RIM1@RTS.  RIM1@RTS - security.id, а security.UnderlyingSecurityId это что?
вопрос2. для строчек с action = 0 || 1 trade=null и вся информация пишется в ордер в частности:
id,time,direction,state,security,price,volume. можно ли остальные поля оставлять непроинициализированные. на какие поля могут выбрасываться исключения при тестировании. например order.status?
вопрос3. несмотря на то, что security.decimal=0
Code
 order.Price = Decimal.Parse(Split[6], CultureInfo.InvariantCulture);
  естественно пишет в это поле цену со всеми нулями. как этого избежать (если не хочется в ручную сплитить цену)?
вопрос4. самый важный для меня.
что делать с order в orderlogitem когда проходит сделка? если его заполнять не будет ли дубляжа прихода заявок?
я имею в виду что у нас уже есть заявка которая проинициализировала сделку от строчки
RIH3,F,B,20130111190000261,9746301221,1,164960.00000,1,0,0плюс заявка которая когда-то выставилась.
и две строчки (в случае если больше одной заявки мы не снесли)
RIH3,F,B,20130111190000261,9746301221,2,164960.00000,1,682802371,157370.00000
RIH3,F,S,20130111190000261,9746300660,2,157370.00000,1,682802371,157370.00000
и что писать в trade.status. спасибо.
как мне кажется вид обработки одной строчки будет выглядеть примерно так:
Code
string[] Split = CurrentLine.Split(',');
                   if (Split[0] == security.Id)
                   {
                       var orderlogItem = new OrderLogItem();
                       var order = new Order();
                       var trade = new Trade();
                       if (Split[5] == "2")
                       {
                           order=null;
                           trade.Time=DateTime.ParseExact(Split[3], "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture, DateTimeStyles.None);
                           trade.OrderDirection=(Split[2] == "B" ? OrderDirections.Buy : OrderDirections.Sell);
                           trade.Security=security;
                           trade.Id=Int64.Parse(Split[8]);
                           trade.Price=Decimal.Parse(Split[9], CultureInfo.InvariantCulture);
                           trade.Volume=int.Parse(Split[7]);
                           
                       }
                       else
                       {
                           trade=null;
                           order.Time=DateTime.ParseExact(Split[3], "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture, DateTimeStyles.None);
                           order.Direction=(Split[2] == "B" ? OrderDirections.Buy : OrderDirections.Sell);
                           order.Security=security;
                           order.Id=Int64.Parse(Split[4]);
                           order.Price=Decimal.Parse(Split[6], CultureInfo.InvariantCulture);
                           order.Volume=int.Parse(Split[7]);
                           order.State = (Split[5] == "1") ? OrderStates.Active : OrderStates.Done;
                      
                       }
                      
                       orderlogItem.Order = order;
                       orderlogItem.Trade = trade;
                       orderlogItems.Add(orderlogItem);
                   }