示例#1
0
        private static void Client_OwnTradesReceived(object sender, Events.KrakenPrivateEventArgs<OwnTradesMessage> e)
        {

            List<TradeObject> trades = e.PrivateMessage.Trades;

            for (int i = 0; i < trades.Count; i++)
            {
                TradeObject t = trades[i];

                OsEngine.Entity.MyTrade trade = new OsEngine.Entity.MyTrade();
                trade.NumberOrderParent = t.OrderTxId;
                trade.Price = t.Price;
                trade.NumberTrade = t.TradeId;
                string pair = t.Pair.ToString();

                Sec security = Securities.Find(sec => sec.NameInSocket == pair);

                if (security == null)
                {
                    return;
                }

                trade.SecurityNameCode = security.NameInRest;
                trade.Volume = t.Volume;
                DateTime time = new DateTime(1970, 1, 1).AddSeconds(Convert.ToDouble(t.Time));
                trade.Time = time;

                if (t.Type == "sell")
                {
                    trade.Side = OsEngine.Entity.Side.Sell;
                }
                else
                {
                    trade.Side = OsEngine.Entity.Side.Sell;
                }

                if (MyTradeUpdateEvent != null)
                {
                    MyTradeUpdateEvent(trade);
                }
            }


            //
            // = (sender, e) => Console.WriteLine($"OwnTrades received");
        }
示例#2
0
        /// <summary>
        /// check incoming trade for this trade
        /// проверить входящий трейд, на принадлежность этой сделке
        /// </summary>
        public void SetTrade(MyTrade trade)
        {
            _myTrades = null;
            if (_openOrders != null)
            {
                for (int i = 0; i < _openOrders.Count; i++)
                {
                    if (_openOrders[i].NumberMarket == trade.NumberOrderParent ||
                        _openOrders[i].NumberUser.ToString() == trade.NumberOrderParent)
                    {
                        trade.NumberPosition = Number.ToString();
                        _openOrders[i].SetTrade(trade);
                        if (OpenVolume != 0)
                        {
                            State = PositionStateType.Open;
                        }
                        else if (OpenVolume == 0)
                        {
                            _openOrders[i].TimeDone = trade.Time;
                            State = PositionStateType.Done;
                        }
                    }
                }
            }

            if (CloseOrders != null)
            {
                for (int i = 0; i < CloseOrders.Count; i++)
                {
                    if (CloseOrders[i].NumberMarket == trade.NumberOrderParent ||
                        CloseOrders[i].NumberUser.ToString() == trade.NumberOrderParent)
                    {
                        trade.NumberPosition = Number.ToString();
                        CloseOrders[i].SetTrade(trade);
                        if (OpenVolume == 0)
                        {
                            State = PositionStateType.Done;
                            CloseOrders[i].TimeDone = trade.Time;
                        }
                        else if (OpenVolume < 0)
                        {
                            State = PositionStateType.ClosingSurplus;
                        }
                    }
                }
            }


            if (State == PositionStateType.Done && CloseOrders != null && EntryPrice != 0 && ClosePrice != 0)
            {
                if (Direction == Side.Buy)
                {
                    ProfitOperationPersent = ClosePrice / EntryPrice * 100 - 100;
                    ProfitOperationPunkt   = ClosePrice - EntryPrice;
                }
                else
                {
                    ProfitOperationPunkt   = EntryPrice - ClosePrice;
                    ProfitOperationPersent = -(ClosePrice / EntryPrice * 100 - 100);
                }
            }
        }
示例#3
0
        /// <summary>
        /// проверить входящий трейд, на принадлежность этой сделке
        /// </summary>
        public void SetTrade(MyTrade trade)
        {
            if (_openOrders != null)
            {
                for (int i = 0; i < _openOrders.Count; i++)
                {
                    if (_openOrders[i].NumberMarket == trade.NumberOrderParent ||
                        _openOrders[i].NumberUser.ToString() == trade.NumberOrderParent)
                    {
                        _openOrders[i].SetTrade(trade);
                        if (OpenVolume != 0)
                        {
                            State = PositionStateType.Open;
                        }
                        else if (OpenVolume == 0)
                        {
                            State = PositionStateType.Done;
                        }
                    }
                }
            }

            if (CloseOrders != null)
            {
                for (int i = 0; i < CloseOrders.Count; i++)
                {
                    if (CloseOrders[i].NumberMarket == trade.NumberOrderParent ||
                        CloseOrders[i].NumberUser.ToString() == trade.NumberOrderParent)
                    {
                        CloseOrders[i].SetTrade(trade);
                        if (OpenVolume == 0)
                        {
                            State = PositionStateType.Done;
                        }
                        else if (OpenVolume < 0)
                        {
                            State = PositionStateType.ClosingSurplus;
                        }
                    }
                }
            }


            if (State == PositionStateType.Done && CloseOrders != null && EntryPrice != 0)
            {
                decimal medianPriceClose = 0;
                decimal countValue       = 0;

                for (int i = 0; i < CloseOrders.Count; i++)
                {
                    if (CloseOrders[i].VolumeExecute != 0)
                    {
                        medianPriceClose += CloseOrders[i].PriceReal * CloseOrders[i].VolumeExecute;
                        countValue       += CloseOrders[i].VolumeExecute;
                    }
                }

                if (countValue != 0)
                {
                    medianPriceClose = medianPriceClose / countValue;
                }

                if (medianPriceClose == 0)
                {
                    return;
                }
                if (Direction == Side.Buy)
                {
                    ProfitOperationPersent = medianPriceClose / EntryPrice * 100 - 100;
                    ProfitOperationPunkt   = medianPriceClose - EntryPrice;
                }
                else
                {
                    ProfitOperationPunkt   = EntryPrice - medianPriceClose;
                    ProfitOperationPersent = -(medianPriceClose / EntryPrice * 100 - 100);
                }

                ProfitOperationPersent = Math.Round(ProfitOperationPersent, 3);
            }
        }
示例#4
0
        void MyTradeDelete_Click(object sender, EventArgs e)
        {
            if (_position.OpenOrders == null)
            {
                return;
            }
            if (_openOrdersGrid.Rows.Count == 0)
            {
                return;
            }

            int number;

            try
            {
                number = _openOrdersGrid.CurrentCell.RowIndex;
            }
            catch (Exception)
            {
                return;
            }

            if (ActionDeleteIsAccepted() == false)
            {
                return;
            }

            string strNum = _tradesGrid.Rows[number].Cells[0].Value.ToString();

            List <Order> openOrders  = _position.OpenOrders;
            List <Order> closeOrders = _position.CloseOrders;

            bool isInArray = false;

            for (int i = 0; openOrders != null && i < openOrders.Count; i++)
            {
                if (isInArray == true)
                {
                    break;
                }

                Order curOrd = openOrders[i];

                for (int i2 = 0; i2 < curOrd.MyTrades.Count; i2++)
                {
                    MyTrade curTrade = curOrd.MyTrades[i2];

                    if (curTrade.NumberTrade == strNum)
                    {
                        curOrd.MyTrades.RemoveAt(i2);
                        isInArray = true;
                        break;
                    }
                }
            }

            for (int i = 0; closeOrders != null && i < closeOrders.Count; i++)
            {
                if (isInArray == true)
                {
                    break;
                }

                Order curOrd = closeOrders[i];

                for (int i2 = 0; i2 < curOrd.MyTrades.Count; i2++)
                {
                    MyTrade curTrade = curOrd.MyTrades[i2];

                    if (curTrade.NumberTrade == strNum)
                    {
                        curOrd.MyTrades.RemoveAt(i2);
                        isInArray = true;
                        break;
                    }
                }
            }

            RePaint();
        }
示例#5
0
 private void Serv_NewMyTradeEvent(MyTrade obj)
 {
     NewMyTradeEvent(Type, obj);
 }