4.6.3 Strategy Performance

From MultiCharts
Revision as of 11:48, 30 April 2013 by Roman MultiCharts (talk | contribs) (Created page with " Signals as well as functions and indicators can get key information upon the current strategy state during their calculation through ''StrategyInfo'': ''StrategyInfo.AvgEntr...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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
}