示例#1
0
        internal bool CheckPosition(TradeOrder deal)
        {
            bool         bClosed = false;
            EOrderAction cAction = deal.Action;
            int          iSide   = (int)this.Side;
            int          iBSFlag = (cAction == EOrderAction.Buy || cAction == EOrderAction.BuyToCover) ? -1 : 1;

            Trade cTrade = new Trade();

            cTrade._EntryOrder = deal.Clone();

            if (iSide == iBSFlag)
            {
                Queue <Trade> cQueue = null;
                lock (__cPositions) {
                    __cPositions.TryGetValue(iBSFlag, out cQueue);
                }

                int iPrevCount = __cHistorys.Count;                     //保存目前歷史明細個數
                CalculatePosition(cQueue, cTrade);
                __iLatestHistoryCount = __cHistorys.Count - iPrevCount; //計算出新增的歷史明細個數

                if (this.OpenLots == 0)
                {
                    bClosed = true;
                }
            }
            else
            {
                AddPosition(cTrade);
            }
            return(bClosed);
        }
示例#2
0
        private TradeOrder SplitOrder(TradeOrder source, int splitContracts)
        {
            TradeOrder cTradeOrder = source.Clone();             //將原始下單資訊 Clone 一份

            cTradeOrder.Contracts = splitContracts;              //修改成要分拆的數量

            int iContracts = source.Contracts;

            if (iContracts > 1)                //如果原始的量超過 1 就計算手續費跟交易稅的平均值(有可能成交數量 > 1, 手續費與交易稅會合併計算)
            {
                cTradeOrder.Fee = source.Fee / iContracts * splitContracts;
                cTradeOrder.Tax = source.Tax / iContracts * splitContracts;
                source.Fee     -= cTradeOrder.Fee;
                source.Tax     -= cTradeOrder.Tax;
            }

            source.Contracts -= splitContracts; //分拆後的數量要從原始的下單資訊內扣除
            return(cTradeOrder);                //回傳分拆後的下單資訊
        }
示例#3
0
		private void OrderDeal(TradeOrder trust, double dealPrice = 0) {
			trust.IsDealed = true;

			TradeOrder cDeal = trust.Clone();
			cDeal.Price = (dealPrice == 0) ? Bars.Close[0] : dealPrice;
			cDeal.Time = Bars.Time[0];
			SetTax(cDeal);
			
			double[] dValues = CalculateCommissions(cDeal);  //計算交易佣金與手續費用(由策略使用者自行決定的佣金與手續費設定所計算出來的價格)
			cDeal.OtherFees = dValues[0];
			cDeal.Fee = dValues[1];

			__cDeals.Enqueue(cDeal);
		}