Example #1
0
        protected override void DrawLegend(int barNumber, ChartProperty property)
        {
            int       iDecimals    = this.AxisY.Decimals;
            Rectangle cRectY       = this.AxisY.AxisRectangle;
            IntPtr    cOldFont     = __cGDI.SelectFont(__cLegendFont);
            Size      cFontMetrics = __cGDI.MeasureString("0");

            __cGDI.BeginRopDraw();

            List <ITrade> cTrades = __cTrades.GetTradeObject(barNumber);
            int           iRow = 0, iCount = cTrades.Count;

            for (int i = 0; i < iCount; i++)
            {
                ITrade      cTrade      = cTrades[i];
                ITradeOrder cEntry      = cTrade.EntryOrder;
                string      sEntryOrder = string.Format("#{0} {1,-10} {2} at {3} {4}", cEntry.Ticket, cEntry.Action, cEntry.Contracts, Math.Round(cEntry.Price, iDecimals), cEntry.Time.ToString("yyyy-MM-dd HH:mm:ss"));
                __cGDI.DrawRopString(sEntryOrder, this.ChartSetting.LegendColor, cRectY.X - (sEntryOrder.Length * cFontMetrics.Width) - 4, cRectY.Top + ((iRow++ *cFontMetrics.Height) + 2));

                ITradeOrder cExit = cTrade.ExitOrder;
                if (cExit != null)
                {
                    string sExitOrder = string.Format("#{0} {1,-10} {2} at {3} {4}", cExit.Ticket, cExit.Action, cExit.Contracts, Math.Round(cExit.Price, iDecimals), cExit.Time.ToString("yyyy-MM-dd HH:mm:ss"));
                    __cGDI.DrawRopString(sExitOrder, this.ChartSetting.LegendColor, cRectY.X - (sExitOrder.Length * cFontMetrics.Width) - 4, cRectY.Top + ((iRow++ *cFontMetrics.Height) + 2));
                }
            }
            __cGDI.EndRopDraw();
            __cGDI.RemoveObject(__cGDI.SelectFont(cOldFont));
        }
Example #2
0
		/// <summary>
		///   建構子
		/// </summary>
		/// <param name="tradeOrder">訂單資訊</param>
		/// <param name="symbolId">商品代號</param>
		/// <param name="type">回報類型</param>
		/// <param name="openTrades">開倉交易單列表</param>
		/// <param name="closeTrades">已平倉交易單列表</param>
		public ResponseEvent(ITradeOrder tradeOrder, string symbolId, ResponseType type, TradeList<ITrade> openTrades, List<ITrade> closeTrades) {
			__cTradeOrder = tradeOrder;
			__sSymbolId = symbolId;
			__cType = type;
			__cOpenTrades = openTrades;
			__cCloseTrades = closeTrades;
		}
Example #3
0
        /// <summary>
        ///   建構子
        /// </summary>
        /// <param name="tradeOrder">訂單資訊</param>
        /// <param name="symbolId">商品代號</param>
        /// <param name="type">回報類型</param>
        /// <param name="openTrades">開倉交易單列表</param>
        /// <param name="closeTrades">已平倉交易單列表</param>
        /// <param name="latestHistoryCount">最近新增的歷史交易紀錄個數</param>
        public ResponseEvent(ITradeOrder tradeOrder, string symbolId, ResponseType type, TradeList <ITrade> openTrades, List <ITrade> closeTrades, int latestHistoryCount)
        {
            __cTradeOrder  = tradeOrder;
            __sSymbolId    = symbolId;
            __cType        = type;
            __cOpenTrades  = openTrades;
            __cCloseTrades = closeTrades;

            __iLatestHistoryCount = latestHistoryCount;
            __iLatestHistoryIndex = (__iLatestHistoryCount == 0) ? -1 : closeTrades.Count - latestHistoryCount;
        }
Example #4
0
		/// <summary>
		///   計算所有傭金規則
		/// </summary>
		/// <param name="order">ITradeOrder 介面</param>
		/// <returns>返回值: double[](0=佣金, 1=手續費)</returns>
		protected double[] CalculateCommissions(ITradeOrder order) {
			double[] dValues = new double[2]; 
			if (__cCommissions != null) {
				int iCount = __cCommissions.Count;
				for (int i = 0; i < iCount; i++) {
					ICommission cCommission = __cCommissions[i];
					int iIndex = ((int) cCommission.RuleType) - 128;  //佣金起始為 128(減去 128 可得到陣列的索引值)
					
					dValues[iIndex] += cCommission.Calculate(order);
				}
			}
			return dValues;
		}
Example #5
0
        private void DrawTradeInfo(ITrade trade, AxisX axisX, ChartProperty property, IntPtr font, Rectangle4 layerRect, int top)
        {
            ITradeOrder cEntry  = trade.EntryOrder;
            Point       cPoint1 = new Point(axisX.ConvertBarNumberToWidth(cEntry.BarNumber).CenterPoint, top + this.AxisY.ConvertValueToHeight(cEntry.Price));

            __cGDI.DrawString("▸", property.TradeSymbolColor, cPoint1.X - 7, cPoint1.Y - 7);
            DrawTradeName(cEntry.Name, font, property.ForeColor, cPoint1, true);

            ITradeOrder cExit = trade.ExitOrder;

            if (cExit != null)
            {
                Point cPoint2 = new Point(axisX.ConvertBarNumberToWidth(cExit.BarNumber).CenterPoint, top + this.AxisY.ConvertValueToHeight(cExit.Price));
                __cGDI.DrawString("◂", property.TradeSymbolColor, cPoint2.X + 1, cPoint2.Y - 7);
                DrawTradeName(cExit.Name, font, property.ForeColor, cPoint2, false);

                if (Boundary.BoundFix(ref cPoint1, ref cPoint2, layerRect))
                {
                    __cGDI.DrawLine(cPoint1.X, cPoint1.Y, cPoint2.X, cPoint2.Y);
                }
            }
        }
Example #6
0
        private void SignalObject_onTradeResponse(object sender, ResponseEvent e)
        {
            __cTradeService.AddResponse(e);

            if (__bShowTradeView)
            {
                if (GlobalSettings.Testing.AutoSwitchTradePage)
                {
                    ITradeOrder cOrder = e.TradeOrder;
                    switch (e.ResponseType)
                    {
                    case Zeghs.Orders.ResponseType.Trust:                              //委託回報
                        tabControl.BeginInvoke((MethodInvoker) delegate {
                            tabControl.SelectedIndex = 0;
                        });
                        break;

                    case Zeghs.Orders.ResponseType.Deal:                              //成交回報
                        EOrderAction cAction = cOrder.Action;
                        if (cAction == EOrderAction.Buy || cAction == EOrderAction.SellShort)
                        {
                            tabControl.BeginInvoke((MethodInvoker) delegate {
                                tabControl.SelectedIndex = 1;
                            });
                        }
                        else
                        {
                            tabControl.BeginInvoke((MethodInvoker) delegate {
                                tabControl.SelectedIndex = 2;
                            });
                        }
                        break;
                    }
                }
            }
        }
Example #7
0
		internal _TradeInfo(ITradeOrder order, string symbolId, double profit = 0) {
			__cOrder = order;
			__sSymbolId = symbolId;
			__dProfit = Math.Round(profit, 2);
		}
Example #8
0
		internal _TradeInfo(ITrade trade, string symbolId) {
			__cTrade = trade;
			__cOrder = trade.EntryOrder;
			__sSymbolId = symbolId;
		}
Example #9
0
		/// <summary>
		///   發送回報事件
		/// </summary>
		/// <param name="order">下單資訊</param>
		/// <param name="symbolId">商品代號</param>
		/// <param name="type">回報類型</param>
		/// <param name="openTrades">開倉交易單列表</param>
		/// <param name="closeTrades">已平倉交易單列表</param>
		/// <param name="latestHistoryCount">最近新增的歷史交易紀錄個數</param>
		protected void OnResponse(ITradeOrder order, string symbolId, ResponseType type, TradeList<ITrade> openTrades = null, List<ITrade> closeTrades = null, int latestHistoryCount = 0) {
			if (onResponse != null) {
				onResponse(this, new ResponseEvent(order, symbolId, type, openTrades, closeTrades, latestHistoryCount));
			}
		}
Example #10
0
 /// <summary>
 ///   計算佣金
 /// </summary>
 /// <param name="order">交易訂單</param>
 /// <returns>返回值: 佣金</returns>
 public double Calculate(ITradeOrder order)
 {
     return(__dFee);
 }
Example #11
0
        private void TradeTimer_onElapsed(object sender, ElapsedEventArgs e)
        {
            bool bBusy = false;

            lock (__oLock) {
                bBusy = __bTradeBusy;
                if (!bBusy)
                {
                    __bTradeBusy = true;
                }
            }

            if (!bBusy)
            {
                bool bUpdate = __cQueue.Count > 0;
                while (__cQueue.Count > 0)
                {
                    ResponseEvent cResponse = null;
                    lock (__cQueue) {
                        cResponse = __cQueue.Dequeue();
                    }

                    ResponseType cType = cResponse.ResponseType;
                    if (cType == ResponseType.Update)
                    {
                        continue;
                    }

                    string      sSymbolId = cResponse.SymbolId;
                    ITradeOrder cOrder    = cResponse.TradeOrder;
                    string      sTicket   = cOrder.Ticket;
                    switch (cType)
                    {
                    case ResponseType.Cancel:                             //取消委託
                    case ResponseType.Trust:                              //委託回報
                        if (cType == ResponseType.Cancel)
                        {
                            __cTrusts.Remove(sTicket);
                        }
                        else
                        {
                            if (cOrder.Contracts == 0)
                            {
                                __cTrusts.Remove(sTicket);
                            }
                            else
                            {
                                __cTrusts.Add(new _TradeInfo(cOrder, sSymbolId));
                            }
                        }
                        break;

                    case ResponseType.Deal:                              //成交回報
                        EOrderAction cAction = cOrder.Action;
                        if (cAction == EOrderAction.Buy || cAction == EOrderAction.SellShort)
                        {
                            TradeList <ITrade> cOpenTrades = cResponse.OpenTrades;
                            if (cOpenTrades != null && cOpenTrades.Count > 0)
                            {
                                ITrade cTrade = cOpenTrades.GetTrade(sTicket);
                                if (cTrade != null)
                                {
                                    __cOpens.Add(new _TradeInfo(cTrade, sSymbolId));
                                }
                            }
                        }
                        else
                        {
                            List <ITrade> cCloseTrades  = cResponse.CloseTrades;
                            int           iHistoryCount = cResponse.LatestHistoryCount;
                            if (iHistoryCount > 0)
                            {
                                int iHistoryIndex = cResponse.LatestHistoryIndex;
                                if (iHistoryIndex > -1)
                                {
                                    for (int i = 0; i < iHistoryCount; i++)
                                    {
                                        ITrade cTrade = cCloseTrades[iHistoryIndex + i];
                                        __cCloses.Add(new _TradeInfo(cTrade.EntryOrder, sSymbolId, 0));
                                        __cCloses.Add(new _TradeInfo(cTrade.ExitOrder, sSymbolId, cTrade.Profit));

                                        if (cTrade.IsTradeClosed)
                                        {
                                            __cOpens.Remove(cTrade.Ticket);
                                        }
                                    }
                                }
                            }
                        }
                        break;
                    }
                }

                if (bUpdate)
                {
                    __cUpdateTimer.Start();
                    onUpdate(this, EventArgs.Empty);
                }

                lock (__oLock) {
                    __bTradeBusy = false;
                }
            }
        }
Example #12
0
		/// <summary>
		///   發送回報事件
		/// </summary>
		/// <param name="order">下單資訊</param>
		/// <param name="symbolId">商品代號</param>
		/// <param name="type">回報類型</param>
		/// <param name="openTrades">開倉交易單列表</param>
		/// <param name="closeTrades">已平倉交易單列表</param>
		protected void OnResponse(ITradeOrder order, string symbolId, ResponseType type, TradeList<ITrade> openTrades = null, List<ITrade> closeTrades = null) {
			if (onResponse != null) {
				onResponse(this, new ResponseEvent(order, symbolId, type, openTrades, closeTrades));
			}
		}
Example #13
0
		/// <summary>
		///   計算所有傭金規則
		/// </summary>
		/// <param name="order">ITradeOrder 介面</param>
		/// <returns>返回值: double[](0=佣金, 1=手續費)</returns>
		protected double[] CalculateCommissions(ITradeOrder order) {
			double[] dValues = new double[2]; 
			if (__cCommissions != null) {
				int iCount = __cCommissions.Count;
				for (int i = 0; i < iCount; i++) {
					ICommission cCommission = __cCommissions[i];
					int iIndex = ((int) cCommission.RuleType) - 128;  //佣金起始為 128(減去 128 可得到陣列的索引值)
					dValues[iIndex] += cCommission.Calculate(order.Price, order.Contracts);
				}
			}
			return dValues;
		}
Example #14
0
 internal _TradeInfo(ITradeOrder order, string symbolId, double profit = 0)
 {
     __cOrder    = order;
     __sSymbolId = symbolId;
     __dProfit   = Math.Round(profit, 2);
 }
Example #15
0
 internal _TradeInfo(ITrade trade, string symbolId)
 {
     __cTrade    = trade;
     __cOrder    = trade.EntryOrder;
     __sSymbolId = symbolId;
 }