Stock Portfolio Organizer
The ultimate porfolio management solution.
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
Detailed Equity Curve for Amibroker (AFL)
While equity curve line and equity curve area graphs are on a trade by trade basis the detailed equity graphs is on a bar-by-bar basis. You see the original equity curve and the accumulated MAE, MFE as a low or high of a new equity curve. So you see that drawdowns intraday could be much higher.
Author: Dubi
Similar Indicators / Formulas
Indicator / Formula
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | SetCustomBacktestProc ( "" ); /* While equity curve line and equity curve area graphs are on a trade by trade basis the detailed equity graphs is on a bar-by-bar basis. */ if ( Status ( "action" ) == actionPortfolio ) { bo = GetBacktesterObject (); NumTrades = AccumMAE = AccumMFE = 0; bo.PreProcess(); for (bar = 0; bar < BarCount ; bar++) // Loop through all bars { bo.ProcessTradeSignals(bar); for ( sig=bo.GetFirstSignal(bar); sig; sig=bo.GetNextSignal(bar) ) { if (sig.isEntry()) { NumTrades++; VarSet ( "Bar" + NumTrades, bar); //_TRACE("Symbol " + sig.Symbol + " TradeEQ: " + VarGet("Bar" + NumTrades)); } } } NumTrades = 0; for ( trade = bo.GetFirstTrade(); trade; trade = bo.GetNextTrade() ) { NumTrades++; TradeBar = VarGet ( "Bar" + NumTrades); if ( TradeBar != 0 ) { AccumMAE = AccumMFE = 0; AccumMAE = VarGet ( "AccumMAE" + TradeBar); AccumMFE = VarGet ( "AccumMFE" + TradeBar); if ( AccumMAE != 0 ) AccumMAE = AccumMAE + (trade.GetMAE() * trade.EntryPrice * trade.Shares * trade.PointValue / 100); else AccumMAE = trade.GetMAE() * trade.EntryPrice * trade.Shares * trade.PointValue / 100; if ( AccumMFE != 0 ) AccumMFE = AccumMFE + (trade.GetMFE() * trade.EntryPrice * trade.Shares * trade.PointValue / 100); else AccumMFE = trade.GetMFE() * trade.EntryPrice * trade.Shares * trade.PointValue / 100; VarSet ( "AccumMAE" + TradeBar, AccumMAE); VarSet ( "AccumMFE" + TradeBar, AccumMFE); } } bo.PostProcess(); Eq = Foreign ( "~~~EQUITY" , "C" ); EqO = Ref (Eq,-1); EQLow = EQHigh = 0; for (bar = 0; bar < BarCount ; bar++) // Loop through all bars { //_TRACE("Eq " + Eq[bar]); iMAE = VarGet ( "AccumMAE" + bar); iMFE = VarGet ( "AccumMFE" + bar); if (iMAE != 0) EQLow[bar] = Eq[bar] + iMAE; else EQLow[bar] = Eq[bar]; if (iMFE != 0) EQHigh[bar] = Eq[bar] + iMFE; else EQHigh[bar] = Eq[bar]; } AddToComposite ( Eq, "~~~EQUITY NEW" , "C" , atcFlagDefaults | atcFlagEnableInPortfolio ); AddToComposite ( EqO, "~~~EQUITY NEW" , "O" , atcFlagDefaults | atcFlagEnableInPortfolio ); AddToComposite ( EQLow, "~~~EQUITY NEW" , "L" , atcFlagDefaults | atcFlagEnableInPortfolio ); AddToComposite ( EQHigh, "~~~EQUITY NEW" , "H" , atcFlagDefaults | atcFlagEnableInPortfolio ); } |
1 comments
Leave Comment
Please login here to leave a comment.
Back
Worked perfectly.