[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [amibroker] Re: System Performance Indicators [was: Can someone fix this OLE code?]



PureBytes Links

Trading Reference Links

This does not effectively produce the same results …

 

As far as keeping it simple is concerned, it really couldn’t be much simpler then the 3 line script I showed to run ones AFL in backtest.

 


From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of peterjldyke
Sent: Sunday, May 18, 2008 9:54 PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: [amibroker] Re: System Performance Indicators [was: Can someone fix this OLE code?]

 

Fred,
Using the following code it is possible to "set date ranges" in AFL
(similar to AA) and have single stock Equity results incorporated in
the Title as Herman required.
Buy=......//your rules
Sell=.....//your rules
Eq = Equity(0,3,1070702,1080515);// Start July 2, 2007 Finish May 15,
2008
Plot(Eq,"Eq",colorblack,styleline|styleownscale);
Tile=....... +"Eq"+eq;

Herman started this thread about Traders trying to make money. No one
challenged his comment about 90% of Traders not being programmers.
The other 10% might have the motivation to go through the steps
neccesary to complete a single stock backtest etc but most traders
seem satified to visualise the price action through their charts.
Portfolio backtesting is just too complex for the majority of Traders.

For those Traders struggling with the merits or otherwise of
backtesting maybe adding some basic results to the chart Title, such
as Equity, might be a positive step. Keeping it very simple was, I
believe, Herman's aim.
Peter


--- In amibroker@xxxxxxxxxps.com, Fred Tonetti <ftonetti@xx.> wrote:
>
> Brian,
>
>
>
> See the post I put up that has a small system, indicator and
script .
>
>
>
> What I'm saying is that you can NOT run AA from an AFL per se .
>
>
>
> As a result you can not set AA specific things in an AFL i.e. date
ranges
> etc nor "push" AA buttons .
>
>
>
> The way around ( the circumference isn't that big ) this is to
write a
> script to CONTROL AA and to manipulate the resulting data in this
case the
> equity curve and/or trade list data in the script if that's what
you want to
> do.
>
>
>
> There is no reason why the script itself can't generate one or more
data
> streams in .CSV files that are then imported to AB by the same
script and
> have that data be used by one or more AFL's.
>
>
>
> _____
>
> From: amibroker@xxxxxxxxxps.com [mailto:amibroker@xxxxxxxxxps.com]
On Behalf
> Of brian_z111
> Sent: Sunday, May 18, 2008 6:34 PM
> To: amibroker@xxxxxxxxxps.com
> Subject: [amibroker] Re: System Performance Indicators [was: Can
someone fix
> this OLE code?]
>
>
>
> Fred,
>
> Thanks for your tips.
>
> > These are all functions of the equity curve and/or the trade
> >list
> > resulting from an AA backtest or from a script that has run an AA
> >backtest
> >
>
> Yes, I am using a mirror on a stick to peer out of my bunker but if
I
> am showing my ignorance and just need to go and learn a bit more I
> would actually appreciate being spun around and pointed in the
right
> direction.
>
> Yes, I am flagging to people that we are painting the equity curve,
> and the system metrics, with a mystique that isn't warranted.
>
> If we can array reference the trade series ( as % and time in trade
> on a symbol by symbol basis), after running a backtest, then we
could
> do anything we want with metrics and moneymanagement, right there
in
> our indicators or explorations.
>
> I don't think we can do that right now.
> Am I wrong?
>
> I guess you are confirming that I can do it using script, or
> other 'advanced' programming techniques and that I could return it
as
> a text file (from there it is over to another program for analysis)?
>
> Thanks,
>
> brian_z
>
> --- In amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
ps.com, Fred
> Tonetti <ftonetti@> wrote:
> >
> > . I'm sure I'll get in over my head and state things that are not
> exactly or
> > otherwise true and TJ will have to step on it ...
> >
> >
> >
> > . So I'll get my flame retardant suit on first .
> >
> >
> >
> > I believe the way to think about an AFL's relationship to AA is
> that an AFL
> > runs INSIDE AA, it does not CONTROL AA .
> >
> >
> >
> > Thus in response to your list .
> >
> >
> >
> > a) backtest a watchlist
> >
> >
> >
> > You backtest with AA or a script running an AA Function . NOT
with
> an AFL
> > i.e. you backtest an AFL in AA, you DON'T call AA from your AFL.
> >
> >
> >
> > b) set the bar range to backtest (no. bars or date range) etc
> >
> >
> >
> > The bar range is set in AA or can be set in a script running AA .
> Again for
> > the same reason
> >
> >
> > c) get all trades irrespective of available equity
> >
> >
> >
> > This is a function of which flavor of backtester you use
> >
> >
> > d) turn off money managment (optional to turn back on if needed)
> >
> >
> > e) for each symbol as an array return - all trades (as%) - time
in
> trade
> >
> >
> > f) reference the trade series for each symbol so that I can calc
> stdev, ave,
> > W/L, PayOff ratios etc.
> >
> >
> >
> > These are all functions of the equity curve and/or the trade
> list
> > resulting from an AA backtest or from a script that has run an AA
> backtest
> >
> >
> >
> >
> >
> > _____
> >
> > From: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
ps.com
> [mailto:amibroker@yahoogrou <mailto:amibroker%40yahoogroups.com>
ps.com]
> On Behalf
> > Of brian_z111
> > Sent: Sunday, May 18, 2008 5:49 PM
> > To: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
ps.com
> > Subject: [amibroker] Re: System Performance Indicators [was: Can
> someone fix
> > this OLE code?]
> >
> >
> >
> > Tomasz,
> >
> > Thanks to you for your answer, and also the other contributors to
> > this discussion, which I find helpful.
> >
> > First I will get on my hobby horse.
> >
> > We have shot ourselves in the foot with our reluctance to move to
a
> > forum with better tools and support the UKB initiative because
the
> > discussion in this forum is inefficient (no whiteboard, no
> > categorization, no inline images) - it can be hard to understand
> what
> > the cutting edge thinkers are talking about without some pictures.
> >
> > Let's hope some stubborn minded fool comes along, works his
> backside
> > off to offer us an alternative and the majority vote with their
> feet
> > and actually use it.
> >
> > Re the current discussion:
> >
> > - now that I am an AB survivor I want different things than before
> > - I now view it as a backtesting engine fullstop (I can get stats
> > packs and do MoneyManagement elsewhere but I can't replace the BT
> > features)
> > - it is a good thing that AB can do anything, if I am good enough
> > (because it is a complete programming language and because it is
> open
> > to development)so thanks for that Tomasz.
> > If I work hard I can do things way beyond any other program that
I
> > know of.
> > - while some people struggle with the array concept I actually
find
> > it easier for me to think in those terms and it is embedded in my
> > mindview of how AB works SO I personally want more arrays and
less
> > COM/CBT
> > - one problem is that AB survivors have gone beyond the textbooks
> and
> > are cutting edge specialists (we find it hard to even talk to
each
> > other because our perspectives are totally unique). It would be
> very
> > hard for you to code into AB what each one of us wants.
> > - AB is not optimised for backtesting yet (it is not your fault
the
> > fact is that current practise is rooted in the past while your
best
> > students are pusning the boundaries, while not wanting to give
away
> > too much about what they are doing.
> > - 'we' need to push on with backtesting improvements
> > - for now (until I get off my butt and learn some more real
> > programming) I am a hardened array programmer and this is what I
> want
> > to do:
> >
> > a) backtest a watchlist
> > b) set the bar range to backtest (no. bars or date range) etc
> > c) get all trades irrespective of available equity
> > d) turn off money managment (optional to turn back on if needed)
> > e) for each symbol as an array return - all trades (as%)
> > - time in trade
> > f) reference the trade series for each symbol so that I can calc
> > stdev, ave, W/L, PayOff ratios etc.
> >
> > Do all this in AFL/arrays.
> >
> > Perhaps I could even save the results the way we save the
backtest
> > reports at the moment.
> >
> > In summary what I am after is a trade series matrix with a symbol
> > list as the row header and trade no. (time based) as the column
> > heading AND I want this to be persistent, at least for the life
of
> > the BT OR at least to export it to a spreadsheet as a matrix.
> >
> > Can I do this, all from AFL with a click of the BT button, at the
> > moment?
> >
> > Please note: I have tried to talk a little bit about system root
> > analysis in this forum but it gets lost without pictures and a
> > tutorial BUT with trade series% and time in trade, as arrays, we
> can
> > perform any metric/equity analysis we can think of and plot any
> combo
> > we want.
> >
> > The metrics are not actually scalar, they are only reported that
> way
> > in AB. They do have variance so it people are interested in that
> they
> > can get if from the trade series.
> >
> > Thanks,
> >
> > I appreciate you taking the time to consider our views on the BT
> > feature.
> >
> > brian_z
> >
> > --- In amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com,
> > "Tomasz Janeczko" <groups@>
> > wrote:
> > >
> > > Hello,
> > >
> > > You are mixing two things:
> > > a) equity derived metrics (such as drawdown) - that represent
> > ARRAYS and that are available already
> > > b) other metrics (like trade profits, trade duration) that are
> > single SCALARS
> > >
> > > a)
> > > Any EQUITY-based indicator is already possible via Equity chart.
> > > Sample Equity chart contains:
> > > equity
> > > cash,
> > > drawdown (underwater equity)
> > > bars since last equity high.
> > >
> > > If you want to customize equity chart simply modify _Portfolio
> > Equity.afl file.
> > > Fred has done so and he is using for example Log(Equity) in his
> IO
> > together with some other metrics
> > > derived from Equity. It does not require any COM. Just take
> > portfolio equity usign Foreign("~~~EQUITY", "C")
> > >
> > > Below is the code that Fred is using in his IO for the
reference.
> > >
> > > Everybody can modify his/her Portfolio Equity formula to suit
> one's
> > need.
> > > The code is open and you are free to modify it.
> > >
> > > b)
> > >
> > > As to
> > > > That SYSTEM PERFORMANCE INDICATORS are not offered as
standard
> > (build in) indicators is simply a lack of imagination.
> > > > To plot the UPI, number of winning trades, trade profits,
trade
> > duration, or other system performance statistic
> > > > on a time scale simply makes a lot common sense. btw,
> > > > Applying these functions to price arrays can also give very
> > interesting results. Price and equity arrays are not that
different.
> > >
> > > These metrics are NUMBERS. Just single SCALARS. They do NOT
> change
> > over time. They are constant for single backtest.
> > > If you plot them you will get FLAT LINE.
> > >
> > > > Saying "If you really have to plot them" is like saying "if
you
> > really have to make money".
> > >
> > > > The lack of System Performance Indicators is simply a void in
> > technical analysis ready (LONG OVERDUE!) to
> > >
> > > > be filled. To have to use the CBT, export the data, import
the
> > data, etc. to create
> > >
> > > > System Performance Indicators is simply too much work; no one
> > will do it.
> > >
> > >
> > >
> > > The system performance metrics are single NUMBERS (scalars).
Just
> > like 23.4. This is a number that does not change. When plotted -
it
> > is FLAT LINE.
> > >
> > >
> > >
> > > They are not "overdue" because they simply are reported in
> BACKTEST
> > REPORT, as numbers.
> > >
> > > The same as in Tradestation, Wealth Lab, Trading Recipes, or
> > whatever.
> > >
> > >
> > >
> > > > Most of us are here to trade and not to > learn new
programming
> > languages;
> > >
> > > > OLE and CBT are advanced tools for programmers. imo, System
> > Performance Indicators should be as readily available as the RSI
()
> > and CMO().
> > >
> > >
> > > Again, you are missing the point. Backtest metrics are scalars,
> not
> > arrays like RSI/CMO.
> > > The metrics are available as single numbers AFTER backtest.
> > > If some metric is say 23.4 plotting it would result in flat
line
> > like
> > > Plot( 23.4, "Sample metric plot", colorRed );
> > >
> > > Best regards,
> > > Tomasz Janeczko
> > > amibroker.com
> > >
> > > /**** BELOW CODE IS A PART OF IO.zip (Intelligent Optimizer by
> Fred
> > Tonetti) archive from the AmiBroker Mailing List File section ***/
> > > /*** http://finance.
> > <http://finance.
> <http://finance.groups.yahoo.com/group/amibroker/files/IO.zip>
> groups.yahoo.com/group/amibroker/files/IO.zip>
> > groups.yahoo.com/group/amibroker/files/IO.zip
> > ****/
> > > /*** It shows example customization of built-in portfolio
equity
> > chart */
> > >
> > > #pragma nocache
> > >
> > > MaxGraph = 10;
> > > GraphZOrder = 1;
> > > GraphYSpace = 5;
> > >
> > > Arrows = ParamToggle("Arrows", "No|Yes", 1);
> > >
> > > BIR = IIf(Status("BarInRange") > 0, 1, 0);
> > >
> > > ISeq = Foreign("~~~EQUITY", "C", 1);
> > >
> > > CurEq = Foreign("~~IO~Equity", "C", 1);
> > > CurIOS = Foreign("~~IO~Equity", "V", 1);
> > > CurSig = Foreign("~~IO~Equity", "I", 1);
> > >
> > > CS128 = IIf(CurSig >= 128, 1, 0);
> > > CurSig = IIf(CS128 == 1, CurSig - 128, CurSig);
> > > CS64 = IIf(CurSig >= 64, 1, 0);
> > > CurSig = IIf(CS64 == 1, CurSig - 64, CurSig);
> > > CS32 = IIf(CurSig >= 32, 1, 0);
> > > CurSig = IIf(CS32 == 1, CurSig - 32, CurSig);
> > > CS16 = IIf(CurSig >= 16, 1, 0);
> > > CurSig = IIf(CS16 == 1, CurSig - 16, CurSig);
> > > CS8 = IIf(CurSig >= 8, 1, 0);
> > > CurSig = IIf(CS8 == 1, CurSig - 8, CurSig);
> > > CS4 = IIf(CurSig >= 4, 1, 0);
> > > CurSig = IIf(CS4 == 1, CurSig - 4, CurSig);
> > > CS2 = IIf(CurSig >= 2, 1, 0);
> > > CurSig = IIf(CS2 == 1, CurSig - 2, CurSig);
> > > CS1 = IIf(CurSig >= 1, 1, 0);
> > > CurSig = IIf(CS1 == 1, CurSig - 1, CurSig);
> > >
> > > BarEnt = IIf(CS1 == 1 OR CS4 == 1 OR CS16 == 1 OR CS64 == 1, 1,
> > 0);
> > > CurEnt = IIf(BarEnt != 0, CurEq, 0);
> > >
> > > LastIS = CurIOS == 0 AND Ref(CurIOS, 1) != 0;
> > > OtherOOS = CurIOS != Ref(CurIOS, 1);
> > >
> > > MaxEq = Highest(CurEq);
> > > FlatEq = IIf(BIR, BarsSince(MaxEq > Ref(MaxEq,-1)),0);
> > > MaxFlat = Highest(FlatEq);
> > > LMaxFlat = LastValue(MaxFlat) * (1 + GraphYSpace / 100);
> > > LogEq = log10(CurEq);
> > >
> > > CurDD = IIf(CurEq < MaxEq, 100 * (MaxEq - CurEq) / MaxEq, 0);
> > > RCurDD = round(CurDD * 100) / 100;
> > > MaxDD = Highest(CurDD);
> > > RMaxDD = round(MaxDD * 100) / 100;
> > > LMaxDD = LastValue(MaxDD) * (1 + GraphYSpace / 100);
> > > SqrDD = CurDD ^ 2;
> > > CumDD = Cum(SqrDD);
> > >
> > > MaxEnt = Highest(CurEnt);
> > > CurDDE = IIf(CurEq < MaxEnt, 100 * (MaxEnt - CurEq) / MaxEnt,
0);
> > > RCurDDE = round(CurDDE * 100) / 100;
> > > MaxDDE = Highest(CurDDE);
> > > RMaxDDE = round(MaxDDE * 100) / 100;
> > >
> > > FirstBar = LastValue(ValueWhen(Status("FirstBarInRange") > 0,
Cum
> > (1)));
> > > LastBar = LastValue(ValueWhen(Status("LastBarInRange") > 0, Cum
> > (1)));
> > > TotBars = LastValue(Cum(1));
> > > BarNo = ValueWhen(BIR > 0, Cum(1) - FirstBar + 1);
> > > NoBars = LastValue(BarNo);
> > >
> > > Dates = DateNum();
> > > Days = ValueWhen(BIR > 0, IIf(Dates != Ref(Dates,-1), 1, 0));
> > > TotDays = Cum(Days);
> > > BPD = round(BarNo / TotDays);
> > >
> > > BAHEq = ValueWhen(BIR > 0, Ref(CurEq, -(BarNo - 1)) * (C / Ref
> > (C, -(BarNo - 1))));
> > > BAHMaxEq = Highest(BAHEq);
> > > BAHFlatEq = IIf(BIR, BarsSince(BAHMaxEq > Ref(BAHMaxEq,-1)),0);
> > > BAHMaxFlat = Highest(BAHFlatEq);
> > > BAHLMaxFlat = LastValue(BAHMaxFlat) * (1 + GraphYSpace / 100);
> > >
> > > BAHCurDD = IIf(BAHEq < BAHMaxEq, 100 * (BAHMaxEq - BAHEq) /
> > BAHMaxEq, 0);
> > > BAHRCurDD = round(BAHCurDD * 100) / 100;
> > > BAHMaxDD = Highest(BAHCurDD);
> > > BAHRMaxDD = round(BAHMaxDD * 100) / 100;
> > > BAHLMaxDD = LastValue(BAHMaxDD) * (1 + GraphYSpace / 100);
> > > BAHSqrDD = BAHCurDD ^ 2;
> > > BAHCumDD = Cum(BAHSqrDD);
> > >
> > > LogBAHEq = log10(BAHEq);
> > >
> > > CAR = ValueWhen(BIR > 0, 100 * ((CurEq / Ref(CurEq, -(BarNo -
> > 1))) ^ (1 / (BarNo / BPD / 252)) -1));
> > > Ann = ValueWhen(BIR > 0, 100 * ((CurEq / Ref(CurEq, -(252 *
> > BPD)) - 1)));
> > > MAR = ValueWhen(BIR > 0, CAR / MaxDD);
> > > UI = ValueWhen(BIR > 0, sqrt(CumDD / BarNo));
> > > UPI = (CAR - 5.4) / UI;
> > >
> > > BAHCAR = ValueWhen(BIR > 0, 100 * ((BAHEq / Ref(BAHEq, -(BarNo -

> > 1))) ^ (1 / (BarNo / BPD / 252)) -1));
> > > BAHAnn = ValueWhen(BIR > 0, 100 * ((BAHEq / Ref(BAHEq, -(252 *
> > BPD)) - 1)));
> > > BAHMAR = ValueWhen(BIR > 0, BAHCAR / BAHMaxDD);
> > > BAHUI = ValueWhen(BIR > 0, sqrt(BAHCumDD / BarNo));
> > > BAHUPI = (BAHCAR - 5.4) / BAHUI;
> > >
> > > OSCAR1 = ValueWhen(CurIOS >= 1, 100 * ISEq / Highest(ValueWhen
> > (LastIS == 1, ISEq)));
> > > OSMaxEq1 = ValueWhen(CurIOS >= 1, Highest(ISEq));
> > > OSCurDD1 = IIf(CurIOS >= 1, 100 * (OSMaxEq1 - ISEq) / OSMaxEq1,
> 0);
> > > OSMaxDD1 = Highest(OSCurDD1);
> > > OSMAR1 = OSCAR1 / OSMaxDD1;
> > >
> > > OSCAR2 = ValueWhen(CurIOS >= 1, 100 * CurEq / Highest(ValueWhen
> > (LastIS == 1, CurEq)));
> > > OSMaxEq2 = ValueWhen(CurIOS >= 1, Highest(CurEq));
> > > OSCurDD2 = IIf(CurIOS >= 1, 100 * (OSMaxEq2 - CurEq) /
OSMaxEq2,
> 0);
> > > OSMaxDD2 = Highest(OSCurDD2);
> > > OSMAR2 = OSCAR2 / OSMaxDD2;
> > >
> > > WFEcar = 100 * OSCAR2 / OSCAR1;
> > > WFEmar = 100 * OSMAR2 / OSMAR1;
> > >
> > > b0 = LastValue(LinRegIntercept(Ref(LogEq, -(TotBars -
> > LastBar)), NoBars));
> > > m = LastValue(LinRegSlope(Ref(LogEq, -(TotBars - LastBar)),
> > NoBars));
> > > y = m * BarNo + b0;
> > >
> > > BarsCum = ValueWhen(BIR > 0, Cum(BarNo));
> > > AvgBar = LastValue(BarsCum) / NoBars;
> > > SRDevSQ = ValueWhen(BIR > 0, sqrt(Cum((BarNo - AvgBar) ^ 2)));
> > > ErrEq = LastValue(StdErr(Ref(logEq, -(TotBars - LastBar)),
> > NoBars));
> > > KRatio = ValueWhen(BIR > 0, m * SRDevSQ / ErrEq / sqrt(NoBars));
> > >
> > > Title1 = EncodeColor(ColorRGB(160,160,160)) + "LinReg= " +
> > EncodeColor(ColorRGB(128,128,255)) + WriteVal(10 ^ y, 3.0) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "CurFlat=" +
> > EncodeColor(ColorRGB(255,223, 0)) + WriteVal(FlatEq, 3.0) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "Ann=" +
> > EncodeColor(ColorRGB( 0,255, 0)) + WriteVal(Ann, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "MDDE=" +
> > EncodeColor(ColorRGB(255,128, 0)) + WriteVal(MaxDDE, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "CDD=" +
> > EncodeColor(ColorRGB(255, 0, 0)) + WriteVal(CurDD, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "wfeCAR=" +
> > EncodeColor(ColorRGB(255,255, 0)) + WriteVal(WFECar, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "wfeMAR=" +
> > EncodeColor(ColorRGB(255,255, 0)) + WriteVal(WFEMAR, 3.2) + "% ";
> > >
> > > Title2 = "\n" +
> > > EncodeColor(ColorRGB(160,160,160)) + "Equity = " +
> > EncodeColor(ColorRGB(224,224,224)) + WriteVal(CurEq, 3.0) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "MaxFlat=" +
> > EncodeColor(ColorRGB(255,223, 0)) + WriteVal(MaxFlat, 3.0) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "CAR=" +
> > EncodeColor(ColorRGB( 0,255, 0)) + WriteVal(CAR, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "MDD=" +
> > EncodeColor(ColorRGB(255, 0, 0)) + WriteVal(MaxDD, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "MAR=" +
> > EncodeColor(ColorRGB( 0,255, 0)) + WriteVal(MAR, 3.2) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "UI=" +
> > EncodeColor(ColorRGB(255, 0,255)) + WriteVal(UI, 3.2) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "UPI=" +
> > EncodeColor(ColorRGB( 0,255, 0)) + WriteVal(UPI, 3.2) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "KR=" +
> > EncodeColor(ColorRGB(160,255,160)) + WriteVal(KRatio, 3.2) + " ";
> > >
> > > Title3 = "\n" +
> > > EncodeColor(ColorRGB(160,160,160)) + "B & H = " +
> > EncodeColor(ColorRGB(128,128,128)) + WriteVal(BAHEq, 3.0) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "MaxFlat=" +
> > EncodeColor(ColorRGB(208,176, 0)) + WriteVal(BAHMaxFlat, 3.0)
+ " "
> +
> > > EncodeColor(ColorRGB(160,160,160)) + "CAR=" +
> > EncodeColor(ColorRGB( 0,192, 0)) + WriteVal(BAHCAR, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "MDD=" +
> > EncodeColor(ColorRGB(208, 0, 0)) + WriteVal(BAHMaxDD, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "MAR=" +
> > EncodeColor(ColorRGB( 0,192, 0)) + WriteVal(BAHMAR, 3.2) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "UI=" +
> > EncodeColor(ColorRGB(208, 0,208)) + WriteVal(BAHUI, 3.2) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "UPI=" +
> > EncodeColor(ColorRGB( 0,192, 0)) + WriteVal(BAHUPI, 3.2);
> > >
> > > Title = Title1 + Title2 + Title3;
> > >
> > > Plot(IIf(BarNo > 0 AND BIR > 0, -RCurDD, -1e10), "CDD",
> > colorDarkRed, styleThick | styleOwnScale | styleArea, -LMaxDD,
> > LMaxDD);
> > > Plot(IIf(BarNo > 0 AND BIR == 0, -RCurDD, -1e10), "CDD",
> > colorDarkRed, styleThick | styleOwnScale | styleLine, -LMaxDD,
> > LMaxDD);
> > > Plot(IIf(BarNo > 0, -RMaxDD, -1e10), "MDD",
> > colorDarkRed, styleThick | styleOwnScale, -LMaxDD,
> > LMaxDD);
> > > Plot(IIf(BarNo > 0 AND BIR > 0, -RCurDDE, -1e10), "CDDE",
> > colorOrange, styleThick | styleOwnScale | styleArea, -LMaxDD,
> > LMaxDD);
> > > Plot(IIf(BarNo > 0 AND BIR == 0, -RCurDDE, -1e10), "CDDE",
> > colorOrange, styleThick | styleOwnScale | styleLine, -LMaxDD,
> > LMaxDD);
> > > Plot(IIf(BarNo > 0, -RMaxDDE, -1e10), "MDDE",
> > colorOrange, styleThick | styleOwnScale, -LMaxDD,
> > LMaxDD);
> > > Plot(IIf(BarNo > 0, FlatEq, -1e10), "CF",
> > colorGold, styleThick | styleOwnScale | styleArea, -LMaxFlat,
> > LMaxFlat);
> > > Plot(IIf(BarNo > 0, MaxFlat, -1e10), "MF",
> > colorGold, styleThick | styleOwnScale, -LMaxFlat,
> > LMaxFlat);
> > >
> > > Plot(LastIS, "LastIS", colorLightGrey, styleHistogram |
> > styleThick | styleNoLabel | styleOwnScale);
> > > Plot(OtherOOS, "OtherOOS", colorLightGrey, styleHistogram
> > | styleNoLabel | styleOwnScale);
> > >
> > > Plot(IIf(BIR > 0, Y, -1e10), "L/R Eq", colorBlue,
> > styleThick | styleNoLabel);
> > > Plot(IIf(BIR > 0, LogBAHEq, -1e10), "BAH Eq", colorGrey50,
> > styleThick | styleNoLabel);
> > > Plot(IIf(BIR > 0, LogEq, -1e10), "Sys Eq", colorLightGrey,
> > styleThick | styleNoLabel);
> > >
> > > S1 = (CS1 == 1) * shapeUpArrow;
> > > S2 = (CS2 == 1) * shapeDownArrow;
> > > S4 = (CS4 == 1) * shapeDownArrow;
> > > S8 = (CS8 == 1) * shapeUpArrow;
> > > S16 = (CS16 == 1) * shapeUpArrow;
> > > S32 = (CS32 == 1) * shapeDownArrow;
> > > S64 = (CS64 == 1) * shapeDownArrow;
> > > S128 = (CS128 == 1) * shapeUpArrow;
> > >
> > > if (Arrows == True)
> > > {
> > > PlotShapes(IIf(BIR > 0, S2, -1e10), colorWhite, 0,
> > LogEq, -11);
> > > PlotShapes(IIf(BIR > 0, S8, -1e10), colorWhite, 0,
> > LogEq, -11);
> > >
> > > PlotShapes(IIf(BIR > 0, S1, -1e10), colorBrightGreen, 0,
> > logEq, IIf(CS8, -17, -11));
> > > PlotShapes(IIf(BIR > 0, S4, -1e10), colorRed, 0,
> > logEq, IIf(CS2, -17, -11));
> > >
> > > PlotShapes(IIf(BIR > 0, S32, -1e10), colorGrey50, 0,
> > LogEq, -11);
> > > PlotShapes(IIf(BIR > 0, S128, -1e10), colorGrey50, 0,
> > LogEq, -11);
> > >
> > > PlotShapes(IIf(BIR > 0, S16, -1e10), colorBlue, 0,
> > LogEq, IIf(CS128, -17, -11));
> > > PlotShapes(IIf(BIR > 0, S64, -1e10), 11, 0,
> > LogEq, IIf(CS32, -17, -11));
> > > }
> > > ----- Original Message -----
> > > From: Herman
> > > To: Tomasz Janeczko
> > > Sent: Monday, May 19, 2008 2:12 AM
> > > Subject: [amibroker] System Performance Indicators [was: Can
> > someone fix this OLE code?]
> > >
> > >
> > > Tomasz, I am neither a mathematician nor a professional
> > programmer and I really don't know how to convey this simple and
> > obvious idea any better. If this email doesn't get the idea
across
> > I'll let it be. If others understand what I am talking about they
> can
> > continue the discussion.
> > >
> > >
> > >
> > >
> > > Indicators to display system performance are an effective and
> > essential tool in the design and evaluation of trading systems.
> > Trading the equity is a simple example, plotting DrawDowns is
> > another.
> > >
> > >
> > >
> > >
> > > Traditional Indicators are based on PRICE; System Performance
> > Indicators are based on EQUITY.
> > >
> > >
> > >
> > >
> > > That SYSTEM PERFORMANCE INDICATORS are not offered as standard
> > (build in) indicators is simply a lack of imagination. To plot
the
> > UPI, number of winning trades, trade profits, trade duration, or
> > other system performance statistic on a time scale simply makes a
> lot
> > common sense. btw, Applying these functions to price arrays can
> also
> > give very interesting results. Price and equity arrays are not
that
> > different.
> > >
> > >
> > >
> > >
> > > Saying "If you really have to plot them" is like saying "if you
> > really have to make money". The lack of System Performance
> Indicators
> > is simply a void in technical analysis ready (LONG OVERDUE!) to
be
> > filled. To have to use the CBT, export the data, import the data,
> > etc. to create System Performance Indicators is simply too much
> work;
> > no one will do it. Most of us are here to trade and not to learn
> new
> > programming languages; OLE and CBT are advanced tools for
> > programmers. imo, System Performance Indicators should be as
> readily
> > available as the RSI() and CMO().
> > >
> > >
> > >
> > >
> > > best regards,
> > >
> > > herman
> > >
> > >
> > >
> > >
> > > Sunday, May 18, 2008, 4:17:49 AM, you wrote:
> > >
> > >
> > >
> > >
> > > >
> > > Hello,
> > >
> > >
> > >
> > > 1. Even if it works it is completely not supported and may
> > to problems/crashes etc. It is like driving all the time on
reverse
> > gear.
> > >
> > > Reverse gear is not designed to be used for 10 hours drive.
> > >
> > >
> > >
> > > 2. I see no reason to "plot" single numbers like UPI,
> > number of trades in indicator. That would be just a bunch of flat
> > lines.
> > >
> > > Also indicator should be lightweight. The indicator code
> > should execute very quickly because indicators are refreshed very
> > often.
> > >
> > > You are (ab)using indicators for things not designed for
> > them. Indicator code is for indicators. Automatic analysis is for
> > backtesting. Indicators are not
> > >
> > > and should never be used that way.
> > >
> > >
> > >
> > > 3. If you really need to plot them
> > >
> > > - all stats are accessible from CUSTOM BACKTESTER, if you
> > want to "plot" them, use custom backtester,
> > >
> > > write them to TEXT File (using fopen/fputs/fclose) and from
> > the indicator you will be able to read them (using
> fopen/fgets/fclose)
> > >
> > >
> > >
> > > That's a proper way to do that.
> > >
> > >
> > >
> > > To repeat the same analogy - although you can drive on
> > reverse gear for 100 miles, your cars is not designed to be used
> that
> > way.
> > >
> > >
> > >
> > >
> > > Best regards,
> > >
> > > Tomasz Janeczko
> > >
> > > amibroker.com
> > >
> > > ----- Original Message -----
> > >
> > > From: Herman
> > >
> > > To: Tomasz Janeczko
> > >
> > > Cc: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com
> > >
> > > Sent: Saturday, May 17, 2008 2:28 PM
> > >
> > > Subject: Re: [amibroker] Can someone fix this OLE code?
> > >
> > >
> > >
> > >
> > > OK Tomasz, but the code produces a nice BT report each time
> > i click the Trigger. Seemingly flawless. Seems only a tweak would
> be
> > required to make it work robust.
> > >
> > >
> > >
> > >
> > > I am going through all this trouble just to be able to
> > access the Backtester stats from an indicator (I was going to
> extract
> > the last value from the report on bar-by-bar BTs!).
> > >
> > >
> > >
> > >
> > > System analysis in the time domain is frustrated/impossible
> > because basic AB users (non professional programmer) can't
retrieve
> > and plot the Backtester stats, like UPI, %Winners, Number of
> trades,
> > etc. Thus there is a big void wrt system analysis - see my
> suggestion
> > #1335 and support tag [#49377].
> > >
> > >
> > >
> > >
> > > I wish that formulas for these functions were made public
> > so that they can be used in indicators. This Would open up a
whole
> > new world to evaluate, analyze, and design trading systems. The
> > single numbers in the AA give very limited information. With all
> > respect, please do not mention the CBT... that solution is for
less
> > than 10% of users and I don't have enough days left to learn all
> that
> > stuff.
> > >
> > >
> > >
> > >
> > > best regards,
> > >
> > > herman
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > Saturday, May 17, 2008, 8:10:10 PM, you wrote:
> > >
> > >
> > >
> > >
> > > >
> > > But... the example in help
> > >
> > > a) works
> > >
> > > b) presents OUTSIDE ***JScript*** code
> > >
> > > http://www.amibroke <http://www.amibroke
> <http://www.amibroker.com/guide/objects.html>
r.com/guide/objects.html>
> > r.com/guide/objects.html
> > >
> > > c) does not contain
> > >
> > > AA.Analysis.RangeN (wrong line)
> > >
> > >
> > >
> > > Again I want to stress that out that Analysis COM
> > object must not be used form
> > >
> > > AFL level. The functionality is provided to control
> > Automatic Analysis from OUTSIDE
> > >
> > > of AmiBroker.
> > >
> > >
> > >
> > >
> > > Best regards,
> > >
> > > Tomasz Janeczko
> > >
> > > amibroker.com
> > >
> > > ----- Original Message -----
> > >
> > > From: Herman
> > >
> > > To: dingo
> > >
> > > Sent: Saturday, May 17, 2008 2:02 PM
> > >
> > > Subject: Re: [amibroker] Can someone fix this OLE
> > code?
> > >
> > >
> > >
> > >
> > > won't do. Actually 99% of this code was copied from
> > the AB help.
> > >
> > >
> > >
> > >
> > > h
> > >
> > >
> > >
> > >
> > > For tips on developing Real-Time Auto-Trading systems
> > visit:
> > >
> > > http://www.amibroke <http://www.amibroke
> <http://www.amibroker.org/userkb/> r.org/userkb/>
> r.org/userkb/
> > >
> > >
> > >
> > >
> > > Saturday, May 17, 2008, 7:54:44 PM, you wrote:
> > >
> > >
> > >
> > >
> > > >
> > > ON the clearfilters() take off the () and try it.
> > >
> > >
> > >
> > > d
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > ----------------------------------------------------------
> > >
> > > From: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com
> > [mailto:amibroker@yahoogrou <mailto:amibroker%40yahoogroups.com>
> ps.com] On
> > Behalf Of Herman
> > >
> > > Sent: Saturday, May 17, 2008 7:49 AM
> > >
> > > To: dingo
> > >
> > > Cc: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com
> > >
> > > Subject: Re: [amibroker] Can someone fix this
> > OLE code?
> > >
> > >
> > >
> > >
> > > it runs fine except for the WLN and BRS changes
> > i need.
> > >
> > >
> > >
> > >
> > > h
> > >
> > >
> > >
> > >
> > > For tips on developing Real-Time Auto-Trading
> > systems visit:
> > >
> > > http://www.amibroke <http://www.amibroke
> <http://www.amibroker.org/userkb/> r.org/userkb/>
> r.org/userkb/
> > >
> > >
> > >
> > >
> > > Saturday, May 17, 2008, 7:46:35 PM, you wrote:
> > >
> > >
> > >
> > >
> > > >
> > > Maybe AB won't let you run a backtest
> > within an indicator - time to ask TJ.
> > >
> > >
> > >
> > > d
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > ------------------------------------------------------
> > >
> > > From: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com
> > [mailto:amibroker@yahoogrou <mailto:amibroker%40yahoogroups.com>
> ps.com] On
> > Behalf Of Herman
> > >
> > > Sent: Saturday, May 17, 2008 7:40 AM
> > >
> > > To: dingo
> > >
> > > Cc: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com
> > >
> > > Subject: Re: [amibroker] Can someone fix
> > this OLE code?
> > >
> > >
> > >
> > >
> > > Hi d, I tried that initially but No go.
> > >
> > >
> > >
> > >
> > > thanks,
> > >
> > > herman
> > >
> > >
> > >
> > >
> > > For tips on developing Real-Time Auto-
> > Trading systems visit:
> > >
> > > http://www.amibroke <http://www.amibroke
> <http://www.amibroker.org/userkb/> r.org/userkb/>
> r.org/userkb/
> > >
> > >
> > >
> > >
> > > Saturday, May 17, 2008, 7:35:20 PM, you
> > wrote:
> > >
> > >
> > >
> > >
> > > >
> > > On the lines that give the error
> > substitute a number constant for the variable and see if it
works.
> If
> > it does then it looks to me like it thinks the variables are
arrays.
> > >
> > >
> > >
> > > d
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > ------------------------------------------------
> > >
> > > From: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com
> > [mailto:amibroker@yahoogrou <mailto:amibroker%40yahoogroups.com>
> ps.com] On
> > Behalf Of Herman
> > >
> > > Sent: Saturday, May 17, 2008 7:01 AM
> > >
> > > To: AmiBroker User Group
> > >
> > > Subject: [amibroker] Can someone
> > fix this OLE code?
> > >
> > >
> > >
> > >
> > > Can someone help me fix the code
> > below so that when triggered in an Indicator, it:
> > >
> > >
> > >
> > >
> > > 1) Backtest all tickers in
> > watchlist WLN?
> > >
> > > 2) Use range of BRS bars
> > >
> > > 3) Output ONLY the one line BT
> > Report?
> > >
> > >
> > >
> > >
> > > Many thanks!!!!
> > >
> > > herman
> > >
> > >
> > >
> > >
> > > if ( ParamTrigger( "Run Com
> > BT", "BT" ) )
> > >
> > > {
> > >
> > > WLN = 0; // the watchlist to
> > backtest
> > >
> > > BRS = 100; // Number bars to
> > test
> > >
> > > AB = CreateObject
> > ( "Broker.Application" );
> > >
> > > AA = AB.Analysis;
> > >
> > > AA.LoadFormula( "C:\\Program
> > Files\\AmiBroker\\Formulas\\Systems\\Example.afl" );
> > >
> > > AA.ClearFilters();
> > >
> > > AA.Filter( 0, "watchlist" ) =
> > WLN; // This gives syntax error...
> > >
> > > AA.ApplyTo = 1;
> > >
> > > AA.RangeMode = 1;
> > >
> > > AA.Analysis.RangeN =
> > BRS; // This gives syntax error...
> > >
> > > AA.Backtest();
> > >
> > > AA.Report( "" );
> > >
> > > }
> > >
> > >
> > >
> > >
> > > No virus found in this incoming
> > message.
> > >
> > > Checked by AVG.
> > >
> > > Version: 8.0.100 / Virus Database:
> > 269.23.16/1448 - Release Date: 5/16/2008 7:42 PM
> > >
> > >
> > >
> > >
> > > No virus found in this incoming message.
> > >
> > > Checked by AVG.
> > >
> > > Version: 8.0.100 / Virus Database:
> > 269.23.16/1448 - Release Date: 5/16/2008 7:42 PM
> > >
> > >
> > >
> > >
> > > No virus found in this incoming message.
> > >
> > > Checked by AVG.
> > >
> > > Version: 8.0.100 / Virus Database:
> > 269.23.16/1448 - Release Date: 5/16/2008 7:42 PM
> > >
> >
> >
> >
> >
> > _____
> >
> > I am using the free version of SPAMfighter for private users.
> > It has removed 455 spam emails to date.
> > Paying users do not have this message in their emails.
> > Try SPAMfighter <http://www.spamfigh
<http://www.spamfighter.com/len>
> ter.com/len> for free now!
> >
>
>
>
>
> _____
>
> I am using the free version of SPAMfighter for private users.
> It has removed 455 spam emails to date.
> Paying users do not have this message in their emails.
> Try SPAMfighter <http://www.spamfighter.com/len> for free now!
>



I am using the free version of SPAMfighter for private users.
It has removed 455 spam emails to date.
Paying users do not have this message in their emails.
Try SPAMfighter for free now!
__._,_.___

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html




Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___