public void AddOrder(int botId, string instrument, EnmOrderDir dir, decimal amount, decimal price)
        {
            try
            {
                decimal amountUse = (dir == EnmOrderDir.Buy) ?  amount :   -amount;

                RequestNewOrder newOrd = new RequestNewOrder(gid: botId,
                                                             cid: GenUniqueId(botId),
                                                             symbol: instrument,
                                                             type: EnmBfxOrderType.Limit,
                                                             amount: amountUse,
                                                             price:  price);

                //var serNewOrd = JsonConvert.SerializeObject(newOrd, Formatting.Indented, new RequestNewOrderConverterter());
                var serNewOrd = JsonConvert.SerializeObject(newOrd, CBitfinexJsonSerializer.Settings);
                //var serNewOrd = CBitfinexJsonSerializer.SerializeObject(newOrd);


                SendMessage(serNewOrd);

                Log(String.Format("[ADD ORDER] ==> botId={0} instrument={1} dir={2} amount={3} price={4}",
                                  botId,
                                  instrument,
                                  dir,
                                  amount,
                                  price));
            }
            catch (Exception e)
            {
                Error("CBitfenixWebScokConnector.AddOrder", e);
            }
        }
        public void AddMarketOrder(int botId, string instrument, EnmOrderDir dir, decimal amount, decimal price)
        {
            decimal amountUse = (dir == EnmOrderDir.Buy) ? amount : -amount;

            RequestNewOrder newOrd = new RequestNewOrder(gid: botId,
                                                         cid: GenUniqueId(botId),
                                                         symbol: instrument,
                                                         type: EnmBfxOrderType.Market,
                                                         amount: amountUse,
                                                         price: price);


            newOrd.Close = 1;

            var serNewOrd = JsonConvert.SerializeObject(newOrd, CBitfinexJsonSerializer.Settings);


            SendMessage(serNewOrd);

            Log(String.Format("[ADD ORDER] ==> {0} dir={1} amount={2} price={3}", instrument, dir, amount, price));
        }
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            if (!(value is RequestNewOrder))
            {
                throw new ApplicationException("Can't serialize order");
            }


            RequestNewOrder order = (RequestNewOrder)value;

            writer.WriteStartArray();
            writer.WriteValue(0);
            writer.WriteValue("on");
            writer.WriteValue((object)null);

            writer.WriteStartObject();

            if (order.Gid.HasValue)
            {
                writer.WritePropertyName("gid");
                writer.WriteValue(order.Gid.Value);
            }

            writer.WritePropertyName("cid");
            writer.WriteValue(order.Cid);

            writer.WritePropertyName("type");
            //TODO remove from OrderConverter !
            writer.WriteValue(CBfxUtils.GetOrderTypeString(order.Type));

            writer.WritePropertyName("symbol");
            writer.WriteValue(order.Symbol);

            writer.WritePropertyName("amount");
            writer.WriteValue(order.Amount.ToString(CultureInfo.InvariantCulture));


            writer.WritePropertyName("price");
            writer.WriteValue(order.Price.ToString(CultureInfo.InvariantCulture));


            if (order.PriceTrailing.HasValue)
            {
                writer.WritePropertyName("price_trailing");
                writer.WriteValue(order.PriceTrailing.Value.ToString(CultureInfo.InvariantCulture));
            }

            if (order.PriceAuxLimit.HasValue)
            {
                writer.WritePropertyName("price_aux_limit");
                writer.WriteValue(order.PriceAuxLimit.Value.ToString(CultureInfo.InvariantCulture));
            }

            writer.WritePropertyName("hidden");
            writer.WriteValue(order.Hidden);

            if (order.Postonly.HasValue)
            {
                writer.WritePropertyName("postonly");
                writer.WriteValue(order.Postonly.Value.ToString(CultureInfo.InvariantCulture));
            }

            if (order.Close.HasValue)
            {
                writer.WritePropertyName("Close");
                writer.WriteValue(order.Close.Value);
            }


            writer.WriteEndObject();
            writer.WriteEndArray();
        }