×

Sign up and get MultiCharts free

Use its powerful simulation mode with data included out of the box. Just fill out the form and start honing your trading skills with a few clicks.

Changes - MultiCharts

Changes

Jump to navigation Jump to search

4.6.3 Strategy Performance

8,327 bytes added, 11:48, 30 April 2013
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..."

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.
<br>
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.

<div style="background-color: #E5F6FF;">'''Example:'''

Initially, CurrentPosition.Value = 0
<syntaxhighlight>
CurrentPosition.Side = EMarketPositionSide.Flat
CurrentPosition.OpenLots = 0
CurrentPosition.ClosedTrades[] – empty
CurrentPosition.OpenTrades[]
</syntaxhighlight>
The strategy has generated and executed a Buy order for 100 contracts.
Now our position is the following:
<syntaxhighlight>
CurrentPosition.Value = 100
CurrentPosition.Side = EMarketPositionSide.Long
CurrentPosition.OpenLots = 100
CurrentPosition.ClosedTrades[] – empty
CurrentPosition.OpenTrades[] – one element (EntryOrder = Buy for 100, ExitOrder = null)
</syntaxhighlight>
The strategy has generated and executed a Sell total order for 10 contracts.
Now our position is the following:
<syntaxhighlight>
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)
</syntaxhighlight>
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:
<syntaxhighlight>
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
</syntaxhighlight>
</div>

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):
<syntaxhighlight>
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.
}
</syntaxhighlight>
Trade order information ITradeOrder:
<syntaxhighlight>
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
}

</syntaxhighlight>

[[Category:.NET Programming Giude]]

Navigation menu