4.6.3 Strategy Performance

From MultiCharts
Jump to navigation Jump to search

Signals as well as functions and indicators can get key information upon the current strategy state during their calculation through StrategyInfo:

  • StrategyInfo.AvgEntryPrice is the average open price of the position on the chart. If the position is not opened, then 0 is returned;
  • StrategyInfo.MarketPosition is the current market position. For example, we are at the short position for 100 contracts, then StrategyInfo.MarketPosition will return “-100”. For example, if we have a long position for 50 contracts, the StrategyInfo.MarketPosition will return the value “50”.
  • StrategyInfo.ClosedEquity – is the current NetProfit of the strategy on this bar.
  • StrategyInfo.OpenEquity = current NetProfit + current OpenPL of the strategy on this bar.

Following keywords can be used only in signals.

More detailed information upon current strategy parameters can be obtained through CurrentPosition(IMarketPosition):

  • CurrentPosition.Value – the same as StrategyInfo.MarketPosition.
  • CurrentPosition.Side – EMarketPositionSide.Flat – there is no open position, EMarketPositionSide.Long – long position is opened,
  • EMarketPositionSide.Short – short position is opened.
  • CurrentPosition.Profit = }}CurrentPosition.OpenProfit – current OpenPL upon the open position or 0, if the position is closed.
  • CurrentPosition.ProfitPerContract – current OpenPL upon the open position per contract or 0, if the position is closed.
  • CurrentPosition.OpenLots – the amount of not closed contracts in the position.
  • CurrentPosition.MaxDrawDown – minimum OpenPL for the current position, for the whole period of time, while the position was opened.
  • CurrentPosition.MaxRunUp – maximum OpenPL for the current position, for the whole period of time, while the position was opened.
  • CurrentPosition.ClosedTrades[] – the list of closed trades (ITrade) in the current position.
  • CurrentPosition.OpenTrades[] – the list of open trades (ITrade) in the current position.


CurSpecOrdersMode – current mode of special orders (ESpecOrdersMode.PerContract, ESpecOrdersMode.PerPosition)

PositionSide – current position:

  • EMarketPositionSide.Flat – position is not opened,
  • EMarketPositionSide.Long – long position,
  • EMarketPositionSide.Short – short position.


In signals, the history of positions is available (IMarketPosition), either opened or closed by the strategy through Positions[](IMarketPosition).

  • Position[0] – current position (the same as CurrentPosition),
  • Position[1] – the previous opened position, etc.


Closed positions information is available through the IMarketPosition interface:

  • IMarketPosition.Value – 0, as there are no open trades in the close position.
  • IMarketPosition.Side – EMarketPositionSide.Long – long position.
  • EMarketPositionSide.Short – short position.
  • IMarketPosition.Profit - total profit upon all the position trades.
  • IMarketPosition.ProfitPerContract – profits upon all the position trades per contract.
  • IMarketPosition.OpenLots = 0 for the closed positions, as by default, all the contracts were closed.
  • IMarketPosition.MaxDrawDown – maximum potential loss for the position, for the whole period, while the position was opened.
  • IMarketPosition.MaxRunUp – maximum OpenPL for the position, for the whole period, while the position was opened.
  • IMarketPosition.ClosedTrades[] – list of trades (ITrade) in the position.
  • IMarketPosition.OpenTrades[] – list of opened trades for the closed position, that is empty.
Example:

Initially, CurrentPosition.Value = 0

CurrentPosition.Side = EMarketPositionSide.Flat
CurrentPosition.OpenLots = 0
CurrentPosition.ClosedTrades[]   empty
CurrentPosition.OpenTrades[]

The strategy has generated and executed a Buy order for 100 contracts. Now our position is the following:

CurrentPosition.Value = 100
CurrentPosition.Side = EMarketPositionSide.Long
CurrentPosition.OpenLots = 100
CurrentPosition.ClosedTrades[]   empty
CurrentPosition.OpenTrades[]  one element (EntryOrder = Buy for 100, ExitOrder = null)

The strategy has generated and executed a Sell total order for 10 contracts. Now our position is the following:

CurrentPosition.Value = 50
CurrentPosition.Side = EMarketPositionSide.Long
CurrentPosition.OpenLots = 50
CurrentPosition.ClosedTrades[]  one element (EntryOrder = Buy for 10, ExitOrder =Sell for 10)
CurrentPosition.OpenTrades[]  one element (EntryOrder = Buy for 90, ExitOrder = null)

The strategy has generated and executed aSellShort order for 50 contracts. Now our position is the following: The strategy has generated and executed aSellShort order for 50 contracts. Now our position is the following:

CurrentPosition.Value = -50
CurrentPosition.Side = EMarketPositionSide.Short
CurrentPosition.OpenLots = 50
CurrentPosition.ClosedTrades[]  empty
CurrentPosition.OpenTrades[]  one element (EntryOrder = SellShort for 50, ExitOrder = null)

Position[1].Value = 0
Position[1].Side = EMarketPositionSide.Long
Position[1].OpenLots = 0
Position[1].ClosedTrades[]  two elements:
1)	Entry = Buy for 10 Exit = Sell for 10
2)	Entry = Buy for 90 Exit = SellShort for 90
Position[1].OpenTrades[]  empty

The following main settings of the strategy are available:

  • GrossLoss – Profit amount upon losing trades
  • GrossProfit – Profit amount upon profitable trades
  • NetProfit – net profit upon the strategy (GrossProfit+ GrossLoss)
  • NumEvenTrades – amount of zero trades with Profit = $0.00.
  • NumLosTrades – amount of losing trades with Profit < $0.00.
  • NumWinTrades – amount of profitable trades with Profit > 0.00$.
  • TotalBarsEvenTrades – amount of bars in zero trades.
  • TotalBarsLosTrades – amount of bars in losing trades.
  • TotalBarsWinTrades – amount of bars in profitable trades.
  • AvgBarsEvenTrade – average number of bars in zero trades.
  • AvgBarsLosTrade – average number of bars in losing trades.
  • AvgBarsWinTrade – average number of bars in profitable trades.
  • LargestLosTrade – Profit of the most losing strategy trade.
  • LargestWinTrade – Profit of the most profitable strategy trade.
  • MaxConsecLosers – maximum number of losing trades in a row (Profit < 0).
  • MaxConsecWinners – maximum number of profitable trades in a row (Profit > 0)
  • MaxDrawDown – maximum draw down StrategyInfo.OpenEquity for all previous trade period.
  • MaxLotsHeld – maximum number of possessing contracts for all previous trade period.
  • TotalTrades – total number of trades for the whole trade period.
  • PercentProfit – number of profitable trades with respect to the total number of trades in percent.


Trade information(ITrade) (entry + closing exit):

public interface ITrade

  • double CommissionValue { get; } – commission of the trade
  • ITradeOrder EntryOrder { get; } – the order, that opened the trade - entry
  • ITradeOrder ExitOrder { get; }– the order, that closed the trade - exit
  • bool IsLong { get; } – Means, that the entry was Buy (true) or SellShort (false)
  • bool IsOpen { get; } – Means, that the entry was not closed yet
  • double Profit { get; } – OpenPL, if the trade is opend or TradeProfit – if closed.


Trade order information ITradeOrder:

public interface ITradeOrder

  • EOrderAction Action { get; } – EOrderAction.Buy, EOrderAction.Sell, EOrderAction.SellShort, EOrderAction.BuyToCover.
  • int BarNumber { get; } – number of the bar, on which the order occured (Bars.CurrentBar, on which the order occured)
  • OrderCategory Category { get; } – OrderCategory.Market, OrderCategory.Limit, OrderCategory.Stop, OrderCategory.StopLimit
  • int Contracts { get; } – number of contracts in the filled order
  • string Name { get; } – order name
  • double Price { get; } – execution price
  • DateTime Time { get; } – time of the bar where the order was executed