public override void GetData(ref Dictionary <string, string> DataLParams) { base.GetData(ref DataLParams); DataLParams.Add("PosDirection", PosDirection.ToString()); DataLParams.Add("EnterLongPrice", EnterLongPrice.ToString()); DataLParams.Add("EnterShortPrice", EnterShortPrice.ToString()); DataLParams.Add("ClosePositionPrice", ClosePositionPrice.ToString()); DataLParams.Add("ClosePositionSum", ClosePositionSum.ToString()); DataLParams.Add("StopPositionPrice", StopPositionPrice.ToString()); }
public override void GetData(ref Dictionary <string, string> DataLParams) { base.GetData(ref DataLParams); DataLParams.Add("ExecuteCandleTime", ExecuteCandleTime.ToString()); DataLParams.Add("LastMALong", LastMALong.ToString()); DataLParams.Add("LastMAShort", LastMAShort.ToString()); DataLParams.Add("PrevMALong", PrevMALong.ToString()); DataLParams.Add("PrevMAShort", PrevMAShort.ToString()); DataLParams.Add("PrevCross", PrevCross.ToString()); DataLParams.Add("PosDirection", PosDirection.ToString()); DataLParams.Add("FuturePos", FuturePos.ToString()); DataLParams.Add("FutureStop", FutureStop.ToString()); }
/// <summary> /// represents the position. /// </summary> /// <returns></returns> public override string ToString() { string pos = ""; string NL = Environment.NewLine; string AC = Configs.AccountCurrency; pos += "Pos Numb " + (posNumb + 1).ToString() + NL; pos += "Transaction " + transaction.ToString() + NL; pos += "Direction " + posDirection.ToString() + NL; pos += "Opening Bar " + (openingBar + 1).ToString() + NL; pos += "Order Number " + (ordNumb + 1).ToString() + NL; pos += "Order Price " + ordPrice.ToString() + NL; pos += "Position Lots " + posLots.ToString() + NL; pos += "Position Price " + posPrice.ToString() + NL; pos += "Req. Margin [" + AC + "] " + requiredMargin.ToString() + NL; pos += "---------------------------------" + NL; pos += "Abs Permanent SL " + absoluteSL.ToString() + NL; pos += "Abs Permanent TP " + absoluteTP.ToString() + NL; pos += "Break Even " + breakEven.ToString() + NL; pos += "---------------------------------" + NL; pos += "Spread [pips] " + chargedSpread.ToString() + NL; pos += "Rollover [pips] " + chargedRollover.ToString() + NL; pos += "Commission [pips] " + chargedCommission.ToString() + NL; pos += "Slippage [pips] " + chargedSlippage.ToString() + NL; pos += "Floating PL [pips] " + floatingPL.ToString() + NL; pos += "Profit Loss [pips] " + profitLoss.ToString() + NL; pos += "Balance [pips] " + balance.ToString() + NL; pos += "Equity [pips] " + equity.ToString() + NL; pos += "---------------------------------" + NL; pos += "Spread [" + AC + "] " + moneySpread.ToString() + NL; pos += "Rollover [" + AC + "] " + moneyRollover.ToString() + NL; pos += "Commission [" + AC + "] " + moneyCommission.ToString() + NL; pos += "Slippage [" + AC + "] " + moneySlippage.ToString() + NL; pos += "Floating PL [" + AC + "] " + moneyFloatingPL.ToString() + NL; pos += "Profit Loss [" + AC + "] " + moneyProfitLoss.ToString() + NL; pos += "Balance [" + AC + "] " + moneyBalance.ToString() + NL; pos += "Equity [" + AC + "] " + moneyEquity.ToString() + NL; return(pos); }
/// <summary> /// Paints panel pnlInfo /// </summary> void PnlInfo_Paint(object sender, PaintEventArgs e) { // ---------------------------------------------------------------------+ // | Way points description | // |--------------------------------------------------------------------+ // | Number | Description | Price | Direction | Lots | Position | Order | // |--------------------------------------------------------------------+ //xp0 xp1 xp2 xp3 xp4 xp5 xp6 xp7 Graphics g = e.Graphics; g.Clear(LayoutColors.ColorControlBack); if (!Data.IsData || !Data.IsResult) { return; } Panel pnl = (Panel)sender; Brush brush = Brushes.White; string FF = Data.FF; // Format modifier to print the floats Size size = new Size(aiX[columns] - aiX[0], infoRowHeight); StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Near; // Caption background PointF pntStart = new PointF(0, 0); SizeF szfCaption = new Size(pnl.ClientSize.Width, 2 * infoRowHeight); RectangleF rectfCaption = new RectangleF(pntStart, szfCaption); Data.GradientPaint(g, rectfCaption, LayoutColors.ColorCaptionBack, LayoutColors.DepthCaption); // Caption Text StringFormat stringFormatCaption = new StringFormat(); stringFormatCaption.LineAlignment = StringAlignment.Center; stringFormatCaption.Trimming = StringTrimming.EllipsisCharacter; stringFormatCaption.FormatFlags = StringFormatFlags.NoWrap; stringFormatCaption.Alignment = StringAlignment.Near; string stringCaptionText = Language.T("Way Points Description"); float fCaptionWidth = (float)Math.Min(pnlInfo.ClientSize.Width, aiX[columns] - aiX[0]); float fCaptionTextWidth = g.MeasureString(stringCaptionText, fontInfo).Width; float fCaptionTextX = (float)Math.Max((fCaptionWidth - fCaptionTextWidth) / 2f, 0); PointF pfCaptionText = new PointF(fCaptionTextX, 0); SizeF sfCaptionText = new SizeF(fCaptionWidth - fCaptionTextX, infoRowHeight); rectfCaption = new RectangleF(pfCaptionText, sfCaptionText); // First caption raw g.DrawString(stringCaptionText, fontInfo, brushCaptionText, rectfCaption, stringFormatCaption); // Second caption raw for (int i = 0; i < columns; i++) { g.DrawString(asTitles[i], fontInfo, brushCaptionText, (aiX[i] + aiX[i + 1]) / 2, infoRowHeight, sf); } brush = new SolidBrush(LayoutColors.ColorControlText); for (int pnt = 0; pnt < Backtester.WayPoints(bar); pnt++) { int y = (pnt + 2) * infoRowHeight; Point point = new Point(aiX[0], y); // Even row if (pnt % 2f != 0) { g.FillRectangle(brushEvenRow, new Rectangle(point, size)); } int positionNumber = Backtester.WayPoint(bar, pnt).PosNumb; WayPointType wpType = Backtester.WayPoint(bar, pnt).WPType; PosDirection posDirection = Backtester.PosFromNumb(positionNumber).PosDir; double posLots = Backtester.PosFromNumb(positionNumber).PosLots; int ordNumber = Backtester.WayPoint(bar, pnt).OrdNumb; g.DrawString((pnt + 1).ToString(), fontInfo, brush, (aiX[0] + aiX[1]) / 2, y, sf); g.DrawString(Language.T(Way_Point.WPTypeToString(wpType)), fontInfo, brush, aiX[1] + 2, y); g.DrawString(Backtester.WayPoint(bar, pnt).Price.ToString(FF), fontInfo, brush, (aiX[3] + aiX[2]) / 2, y, sf); if (positionNumber > -1) { g.DrawString(Language.T(posDirection.ToString()), fontInfo, brush, (aiX[4] + aiX[3]) / 2, y, sf); g.DrawString(posLots.ToString(), fontInfo, brush, (aiX[5] + aiX[4]) / 2, y, sf); g.DrawString((positionNumber + 1).ToString(), fontInfo, brush, (aiX[6] + aiX[5]) / 2, y, sf); } if (ordNumber > -1) { g.DrawString((ordNumber + 1).ToString(), fontInfo, brush, (aiX[7] + aiX[6]) / 2, y, sf); } } // Vertical lines Pen penLine = new Pen(LayoutColors.ColorJournalLines); for (int i = 1; i < columns; i++) { g.DrawLine(penLine, aiX[i], 2 * infoRowHeight, aiX[i], ClientSize.Height - border); } // Border Pen penBorder = new Pen(Data.GetGradientColor(LayoutColors.ColorCaptionBack, -LayoutColors.DepthCaption), border); g.DrawLine(penBorder, 1, 2 * infoRowHeight, 1, pnl.ClientSize.Height); g.DrawLine(penBorder, pnl.ClientSize.Width - border + 1, 2 * infoRowHeight, pnl.ClientSize.Width - border + 1, pnl.ClientSize.Height); g.DrawLine(penBorder, 0, pnl.ClientSize.Height - border + 1, pnl.ClientSize.Width, pnl.ClientSize.Height - border + 1); return; }
/// <summary> /// Paints panel pnlInfo /// </summary> private void PnlInfoPaint(object sender, PaintEventArgs e) { // ---------------------------------------------------------------------+ // | Way points description | // |--------------------------------------------------------------------+ // | Number | Description | Price | Direction | Lots | Position | Order | // |--------------------------------------------------------------------+ //xp0 xp1 xp2 xp3 xp4 xp5 xp6 xp7 Graphics g = e.Graphics; g.Clear(LayoutColors.ColorControlBack); if (!Data.IsData || !Data.IsResult) { return; } var pnl = (Panel)sender; string ff = Data.FF; // Format modifier to print the floats var size = new Size(_aiX[_columns] - _aiX[0], _infoRowHeight); var sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Near }; // Caption background var pntStart = new PointF(0, 0); SizeF szfCaption = new Size(pnl.ClientSize.Width, 2 * _infoRowHeight); var rectfCaption = new RectangleF(pntStart, szfCaption); Data.GradientPaint(g, rectfCaption, LayoutColors.ColorCaptionBack, LayoutColors.DepthCaption); // Caption Text var stringFormat = new StringFormat { LineAlignment = StringAlignment.Center, Trimming = StringTrimming.EllipsisCharacter, FormatFlags = StringFormatFlags.NoWrap, Alignment = StringAlignment.Near }; string stringCaptionText = Language.T("Way Points Description"); float captionWidth = Math.Min(_pnlInfo.ClientSize.Width, _aiX[_columns] - _aiX[0]); float fCaptionTextWidth = g.MeasureString(stringCaptionText, _fontInfo).Width; float fCaptionTextX = Math.Max((captionWidth - fCaptionTextWidth) / 2f, 0); var pfCaptionText = new PointF(fCaptionTextX, 0); var sfCaptionText = new SizeF(captionWidth - fCaptionTextX, _infoRowHeight); rectfCaption = new RectangleF(pfCaptionText, sfCaptionText); // First caption raw g.DrawString(stringCaptionText, _fontInfo, _brushCaptionText, rectfCaption, stringFormat); // Second caption raw for (int i = 0; i < _columns; i++) { g.DrawString(_asTitles[i], _fontInfo, _brushCaptionText, (_aiX[i] + _aiX[i + 1]) / 2f, _infoRowHeight, sf); } Brush brush = new SolidBrush(LayoutColors.ColorControlText); for (int pnt = 0; pnt < Backtester.WayPoints(_barCurrent); pnt++) { int y = (pnt + 2) * _infoRowHeight; var point = new Point(_aiX[0], y); // Even row if (Math.Abs(pnt % 2f - 0) > 0.00001) { g.FillRectangle(_brushEvenRow, new Rectangle(point, size)); } int positionNumber = Backtester.WayPoint(_barCurrent, pnt).PosNumb; WayPointType wpType = Backtester.WayPoint(_barCurrent, pnt).WPType; PosDirection posDirection = Backtester.PosFromNumb(positionNumber).PosDir; double posLots = Backtester.PosFromNumb(positionNumber).PosLots; int ordNumber = Backtester.WayPoint(_barCurrent, pnt).OrdNumb; g.DrawString((pnt + 1).ToString(CultureInfo.InvariantCulture), _fontInfo, brush, (_aiX[0] + _aiX[1]) / 2f, y, sf); g.DrawString(Language.T(WayPoint.WPTypeToString(wpType)), _fontInfo, brush, _aiX[1] + 2, y); g.DrawString(Backtester.WayPoint(_barCurrent, pnt).Price.ToString(ff), _fontInfo, brush, (_aiX[3] + _aiX[2]) / 2f, y, sf); if (positionNumber > -1) { g.DrawString(Language.T(posDirection.ToString()), _fontInfo, brush, (_aiX[4] + _aiX[3]) / 2f, y, sf); g.DrawString(posLots.ToString(CultureInfo.InvariantCulture), _fontInfo, brush, (_aiX[5] + _aiX[4]) / 2f, y, sf); g.DrawString((positionNumber + 1).ToString(CultureInfo.InvariantCulture), _fontInfo, brush, (_aiX[6] + _aiX[5]) / 2f, y, sf); } if (ordNumber > -1) { g.DrawString((ordNumber + 1).ToString(CultureInfo.InvariantCulture), _fontInfo, brush, (_aiX[7] + _aiX[6]) / 2f, y, sf); } } // Vertical lines var penLine = new Pen(LayoutColors.ColorJournalLines); for (int i = 1; i < _columns; i++) { g.DrawLine(penLine, _aiX[i], 2 * _infoRowHeight, _aiX[i], ClientSize.Height - Border); } // Border var penBorder = new Pen(Data.GetGradientColor(LayoutColors.ColorCaptionBack, -LayoutColors.DepthCaption), Border); g.DrawLine(penBorder, 1, 2 * _infoRowHeight, 1, pnl.ClientSize.Height); g.DrawLine(penBorder, pnl.ClientSize.Width - Border + 1, 2 * _infoRowHeight, pnl.ClientSize.Width - Border + 1, pnl.ClientSize.Height); g.DrawLine(penBorder, 0, pnl.ClientSize.Height - Border + 1, pnl.ClientSize.Width, pnl.ClientSize.Height - Border + 1); }